Skip to content
Merged
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
43 changes: 29 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,47 @@
<p align="center">
<img src="./docs/assets/profitctl-mark.svg" alt="ProfitCtl mark" width="88">
<img src="./website/public/favicon.svg" alt="ProfitCtl calculator mark" width="64">
</p>

# ProfitCtl
<h1 align="center">ProfitCtl</h1>

<p align="center">
<strong>Unit economics as code for AI-native teams.</strong><br>
Compare pricing, infrastructure, and AI spend before it ships.
<strong>Know your AI costs. Protect your margin.</strong><br>
Cost modeling for teams building AI products.
</p>

<p align="center">
A new feature changes more than the product. ProfitCtl helps you model the spend,<br>
compare your options, and decide what to ship.<br><br>
MIT licensed. Runs locally. No sign-up.
</p>

<p align="center">
<a href="https://profitctl.com">Website</a> ·
<a href="./docs/INSTALL.md">Install</a> ·
<a href="#quick-start">Run an example</a> ·
<a href="./docs/DOCS_INDEX.md">Documentation</a> ·
<a href="./benchmark_scenarios/README.md">Benchmark scenarios</a> ·
<a href="./CONTRIBUTING.md">Contribute</a>
</p>

![ProfitCtl compares the committed hybrid fixtures: the steady-state scenario leads on operating margin and cost per user while the pilot scenario has higher revenue.](./docs/assets/profitctl-decision-board.svg)
![ProfitCtl: Know your AI costs. Protect your margin. Model a change. Compare your options. Decide before you ship.](./website/public/images/profitctl-social-calculator.jpg)

## From an assumption to a decision you can defend

## What ProfitCtl does
1. **Start with what changes.** Describe usage, pricing, model calls, and infrastructure. Keep each cost tied to its source and assumptions.
2. **Put the options side by side.** Compare a feature, model, deployment, or pricing plan. See the effect on revenue, recurring margin, and cost per user.
3. **Set the limits before you ship.** Test margin and cost targets, including growth and tail risk. Keep the decision evidence in your review.

- **Compare decisions before commitment.** Evaluate pricing, infrastructure, model, API, and contract choices side by side.
- **Model recurring-margin risk.** Simulate growth and stress, then test explicit profitability covenants.
- **Make cost assumptions inspectable.** Track fixed and variable costs, payment fees, calibration inputs, and source provenance.
## Inspect the assumptions behind the answer

A cost estimate is useful when you can explain it. ProfitCtl keeps sources, confidence, and profitability targets alongside the result.

- **Use your own costs.** Save pricing, fixed and variable costs, usage, and targets in a YAML scenario.
- **Check growth and risk.** Use simulations and growth scenarios to test margin and cost limits.
- **Give agents grounded inputs.** Use `assess` and the bundled cost-aware skill when a codebase needs a starter cost model.

## Quick start
## Bring one real decision

Run the committed hybrid comparison locally:
Start with a saved comparison. Then replace the assumptions with your own costs and usage. This source-based example requires Git and Go:

```bash
git clone https://github.com/IntelIP/ProfitCtl.git
Expand All @@ -38,7 +51,7 @@ go run . compare examples/hybrid_steady_profit.yml examples/hybrid_profit.yml

You will see revenue, recurring revenue, fees, booked and operating margins, cost per user, covenant results, and the leaders for each metric. For the signed release binary and Bun package, see the [Install Guide](./docs/INSTALL.md). Pin the evaluator prerelease `v0.4.0-rc.1`; GitHub's latest-release endpoint selects stable releases.

## Use it where decisions happen
## Use it where your team makes decisions

| Surface | Start here |
| --- | --- |
Expand All @@ -47,6 +60,8 @@ You will see revenue, recurring revenue, fees, booked and operating margins, cos
| CI checks | [Cost model standards](./docs/cost-model-standards.md) |
| Scenario examples | [Benchmark scenarios](./benchmark_scenarios/README.md) |

The open-source local CLI, Codex skill, and CI output are available today. Hosted workspaces, saved team history, and approvals are planned. Website examples use fictional scenarios and sample costs; real decisions need your own rates, usage, and evidence.

## Production economics planning

Inspect service evidence, identify missing measurements, and compare explicitly modeled downstream effects with the new local `system` commands. Start with the [Condere walkthrough](./examples/system/README.md) and [system design](./docs/design/system-economics-v1.md). Synthetic examples are not production cost forecasts.
Expand All @@ -64,4 +79,4 @@ Inspect service evidence, identify missing measurements, and compare explicitly

## Trust and participation

ProfitCtl is MIT licensed. See [LICENSE](./LICENSE), [NOTICE](./NOTICE), [Trademark Guidelines](./TRADEMARKS.md), [Security](./SECURITY.md), and [Contributing](./CONTRIBUTING.md).
Developed by IntelIP and Hudson Aikins. ProfitCtl is MIT licensed. See [LICENSE](./LICENSE), [NOTICE](./NOTICE), [Trademark Guidelines](./TRADEMARKS.md), [Security](./SECURITY.md), and [Contributing](./CONTRIBUTING.md).
15 changes: 4 additions & 11 deletions website/src/layouts/ProductLayout.astro
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,6 @@ const schema = pageType === "docs" ? {
<header class="site-header">
<div class="site-shell site-header-inner">
<a href="/" class="brand" aria-label="ProfitCTL home"><img src="/favicon.svg?v=calculator" width="32" height="32" alt="" />ProfitCTL</a>
<nav class="site-nav" aria-label="Main navigation"><a href="/#demo">Demo</a><a href="/#how-it-works">How it works</a></nav>
<a class="header-action" href="/#get-started">Get started <span aria-hidden="true">↗</span></a>
</div>
</header>
<main id="content"><slot /></main>
Expand Down Expand Up @@ -147,14 +145,11 @@ const schema = pageType === "docs" ? {
.site-shell { width: min(1120px, calc(100% - 48px)); margin-inline: auto; }
section[id], article[id] { scroll-margin-top: 120px; }
.site-header { position: sticky; top: 0; z-index: 20; background: light-dark(#f5f5eef0, #080e0cf0); backdrop-filter: blur(16px); border-bottom: 1px solid var(--line); }
.site-header-inner { min-height: 76px; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 28px; }
.site-header-inner { min-height: 76px; display: flex; align-items: center; }
.brand { display: inline-flex; align-items: center; gap: 10px; min-height: 44px; width: fit-content; text-decoration: none; font-weight: 650; font-size: 20px; letter-spacing: -.03em; }
.brand img { flex: none; }
.site-nav { display: flex; align-items: center; gap: 26px; }
.site-nav a, .site-footer nav a { display: inline-flex; align-items: center; min-height: 44px; font-size: 13px; text-decoration: none; color: var(--muted); }
.site-nav a:hover, .site-footer nav a:hover { color: var(--ink); }
.header-action { justify-self: end; display: inline-flex; align-items: center; justify-content: center; gap: 14px; min-height: 42px; padding: 0 17px; border-radius: 999px; background: var(--ink); color: var(--on-ink); font-size: 13px; text-decoration: none; transition: transform .2s; }
.header-action:hover { transform: translateY(-2px); }
.site-footer nav a { display: inline-flex; align-items: center; min-height: 44px; font-size: 13px; text-decoration: none; color: var(--muted); }
.site-footer nav a:hover { color: var(--ink); }
.site-footer { margin-top: 88px; padding: 36px 0; border-top: 1px solid var(--line); }
.footer-inner { display: grid; grid-template-columns: 1fr auto; gap: 24px; align-items: start; }
.footer-inner p { margin-top: 12px; color: var(--muted); font-size: 12px; line-height: 1.5; }
Expand All @@ -165,9 +160,7 @@ const schema = pageType === "docs" ? {
.visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
@media (max-width: 640px) {
.site-shell { width: calc(100% - 32px); }
.site-header-inner { padding-block: 10px; grid-template-columns: 1fr auto; gap: 5px 12px; }
.site-nav { grid-row: 2; grid-column: 1 / -1; gap: 24px; }
.site-nav a { min-height: 30px; }
.site-header-inner { padding-block: 10px; }
.footer-inner { grid-template-columns: 1fr; }
.site-footer { margin-top: 56px; }
}
Expand Down
Loading