Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(features): add a pricing page & calculator #92

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
177 changes: 177 additions & 0 deletions apps/docs/content/features/pricing.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
---
title: Pricing Plans & Usage
description: Detailed pricing description for deployment on zerops.
---

import PricingCalculator from "@site/src/components/PricingCalculator"
import { CheckCircleSolid } from "@medusajs/icons";

:::tip Calculate Your Costs
Use our basic [pricing calculator](#pricing-calculator) below to estimate your monthly costs based on your specific needs.
:::

Zerops offers a usage based pricing model which can accommodate any **small-scale** or **high-availability** applications. The total price of hosting a application is equal to the project's **core package cost** + the **cost of the resources** of the services inside a project **(+ extra costs if any)**.

## Project Plans

Every deployment on Zerops requires a project, which provides essential infrastructure and functionality. Projects are the foundation of your application, handling core services like load balancing, routing, and container orchestration.

### Lightweight Plan
- **Cost:** Free
- **Best for:** Development, testing, and small-scale applications
- **Infrastructure:** Single container setup
- **Limitations:** Shared IPv4 address, no high availability

### Serious Plan
- **Cost:** $10 / 30 days
- **Best for:** Production and high-availability applications
- **Infrastructure:** Multi-container, highly available setup
- **Benefits:** Ready for production workloads with automatic failover

:::info Billing
Project costs are calculated based on actual usage. You're only charged for the time your project is active, calculated down to the minute.
:::

### Plan Comparison

<table className="w-full rounded-lg">
<thead>
<tr>
<th><strong>Features</strong></th>
<th><strong>Lightweight (Free)</strong></th>
<th><strong>Serious ($10/30d)</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Core Services</td>
<td>Single container</td>
<td>Highly available</td>
</tr>
<tr>
<td>HTTP Routing & Load Balancer</td>
<td>Single container</td>
<td>Highly available</td>
</tr>
<tr>
<td>Proxy / Load Balancer</td>
<td><CheckCircleSolid /></td>
<td><CheckCircleSolid /></td>
</tr>
<tr>
<td>IPv6 Address</td>
<td><CheckCircleSolid /></td>
<td><CheckCircleSolid /></td>
</tr>
<tr>
<td>Build Time</td>
<td>15 hours</td>
<td>150 hours</td>
</tr>
<tr>
<td>Backup Space</td>
<td>5 GB</td>
<td>25 GB</td>
</tr>
<tr>
<td>Egress</td>
<td>100 GB</td>
<td>3 TB</td>
</tr>
</tbody>
</table>

### Additional Costs

The following costs apply when you exceed the plan limits of a project:

<table className="w-full rounded-lg">
<thead>
<tr>
<th className="w-fit whitespace-nowrap"><strong>Resource</strong></th>
<th><strong>Cost</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td className="w-fit whitespace-nowrap"><strong>Backup Space</strong></td>
<td><strong>$0.50</strong> per 5 GB</td>
</tr>
<tr>
<td className="w-fit whitespace-nowrap"><strong>Build Time</strong></td>
<td><strong>$0.50</strong> per 15 hours</td>
</tr>
<tr>
<td className="w-fit whitespace-nowrap"><strong>Egress Traffic</strong></td>
<td><strong>$0.10</strong> per 1 GB</td>
</tr>
</tbody>
</table>


## Service Resources

Resources are allocated per service and billed by the minute, though credit is deducted hourly based on actual usage.

### Resource Pricing

<table className="w-full rounded-lg">
<thead>
<tr>
<th className="w-fit whitespace-nowrap"><strong>Resource</strong></th>
<th><strong>Cost</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td className="w-fit whitespace-nowrap"><strong>Shared CPU</strong></td>
<td><strong>$0.60</strong> per CPU / 30 days</td>
</tr>
<tr>
<td className="w-fit whitespace-nowrap"><strong>Dedicated CPU</strong></td>
<td><strong>$6.00</strong> per CPU / 30 days</td>
</tr>
<tr>
<td className="w-fit whitespace-nowrap"><strong>RAM</strong></td>
<td><strong>$0.75</strong> per 0.25 GB / 30 days</td>
</tr>
<tr>
<td className="w-fit whitespace-nowrap"><strong>Disk space</strong></td>
<td><strong>$0.05</strong> per 0.5 GB / 30 days</td>
</tr>
</tbody>
</table>

### Additional Features

<table className="w-full rounded-lg">
<thead>
<tr>
<th className="w-fit whitespace-nowrap"><strong>Feature</strong></th>
<th><strong>Cost</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td className="w-fit whitespace-nowrap"><strong>Unique IPv4 address</strong></td>
<td><strong>$3.00</strong> / 30 days</td>
</tr>
<tr>
<td className="w-fit whitespace-nowrap"><strong>Object Storage</strong></td>
<td><strong>$0.01</strong> / GB per 30 days</td>
</tr>
</tbody>
</table>

:::info IPv4 and Cloudflare
By default, projects start with a shared IPv4 address. If you plan to use Cloudflare's proxy features, you'll need to purchase a unique IPv4 address for your project.
:::

:::info Object Storage
External storage solution ideal for storing files, backups, and static assets outside your main storage. Perfect for scalable content delivery and backup strategies.
:::

## Pricing Calculator

<PricingCalculator />

9 changes: 9 additions & 0 deletions apps/docs/sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,15 @@ module.exports = {
},
className: 'homepage-sidebar-item',
},
{
type: 'doc',
id: 'features/pricing',
label: 'Pricing Plans & Usage',
customProps: {
sidebar_icon: 'currency-dollar',
},
className: 'homepage-sidebar-item',
},
// {
// type: 'doc',
// id: 'features/remote-dev',
Expand Down
86 changes: 86 additions & 0 deletions apps/docs/src/components/PricingCalculator/calculator.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
.calculator {
border: 1px solid #e2e8f0;
}

.calculator-select {
appearance: none;
background-color: #ffffff;
border: 1px solid #e2e8f0;
border-radius: 0.5rem;
padding: 0.5rem 2rem 0.5rem 1rem;
width: 100%;
font-size: 1rem;
line-height: 1.5;
background-image: url("data:image/svg+xml,...");
/* Add dropdown arrow icon */
background-repeat: no-repeat;
background-position: right 0.75rem center;
background-size: 1rem;
}

.calculator-select:focus {
outline: none;
border-color: #3182ce;
box-shadow: 0 0 0 3px rgba(49, 130, 206, 0.1);
}


.number-input {
/* Remove spinner arrows for all browsers */
-moz-appearance: textfield;
/* Firefox */
appearance: textfield;
}

.number-input::-webkit-outer-spin-button,
.number-input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}

/* Rest of input styling */
.number-input {
width: 100%;
padding: 0.5rem 1rem;
border: 1px solid #e2e8f0;
border-radius: 0.5rem;
font-size: 1rem;
line-height: 1.5;
background-color: #ffffff;
}

.number-input:focus {
outline: none;
border-color: #3182ce;
box-shadow: 0 0 0 3px rgba(49, 130, 206, 0.1);
}

input[type="checkbox"] {
width: 1.5rem;
height: 1.5rem;
border: 1px solid #e2e8f0;
border-radius: 0.5rem;
background-color: #ffffff;
cursor: pointer;
}

input[type="checkbox"]:checked {
background-color: #3182ce;
border-color: #3182ce;
padding: 0.25rem;
background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
background-size: 1.25rem;
}

input[type="checkbox"]:focus {
outline: none;
border-color: #3182ce;
box-shadow: 0 0 0 3px rgba(49, 130, 206, 0.1);
}

.calculator-label {
padding-bottom: 1rem;
display: block;
font-weight: 500;
color: #4A5568;
}
Loading
Loading