GrowthOS

Autonomous growth agent·retail CRM·built in the open

01/What it does

Your CRM waits for instructions.
This one doesn’t.

GrowthOS reads your customer and order history, finds where revenue is leaking, writes the campaign to recover it, and tracks what actually converted. You approve the decisions — it does the work.

Upload your own CSVs, or start with 500 sample customers

Opportunity · detectedlive

Dormant VIPs

76 customers in your top spending decile have not ordered in 90 days. Their median basket is 2.4× the store average.

Audience
76
Recoverable
₹1.1L
Confidence
0.82
06:00discovered 4 opportunities
06:01drafted campaign · whatsapp
06:01awaiting your approval
02/The inversion

A dashboard is a question. This is an answer.

Traditional CRMs hand you a query builder and assume you already know what to look for. Almost all of the work is in the knowing.

Finding the segment

You guess which one matters this month

Surfaced by the agent, ranked by revenue at risk

Building the audience

You hand-assemble the filter

Already built, sized, and inspectable

Writing the message

You start from an empty box

Drafted per channel, refined in plain language

Reading the result

You open a report and interpret it

The funnel explains itself as events land

03/The pipeline

CSV in, revenue decisions out

Five stages, each one inspectable. Nothing here is a black box you have to take on faith.

  1. 01

    Ingest

    Customers and orders arrive as CSV. The importer validates, de-duplicates on a per-tenant key, and computes RFM scores and behavioural attributes for every customer.

    csv → postgres · re-runnable
  2. 02

    Segment

    A model reads the computed metrics and names the personas that actually exist in the data, rather than sorting customers into a fixed template of segments.

    metrics → persona narrative
  3. 03

    Locate revenue

    Deterministic rules surface seven opportunity types — dormant VIPs, churn risk, cross-sell, reactivation and others. Each one carries a sized audience and a revenue estimate.

    7 rules · audience + estimate
  4. 04

    Draft the campaign

    The agent writes channel-appropriate copy and three message variants for the chosen audience. You refine it in plain language until it sounds like you wrote it.

    opportunity → copy + variants
  5. 05

    Send and measure

    Approved campaigns leave through durable recipient jobs and a provider layer that reports back over signed webhooks. Duplicate and out-of-order events cannot move the funnel backward.

    hmac webhooks → funnel
04/The boundary

What the model is allowed to be wrong about

Money maths, eligibility and delivery state are arithmetic — they belong in code that can be tested. Language is the only thing handed to a model.

Decided by code

RFM scoring and recency windows
Opportunity detection rules
Audience sizing and revenue estimates
Delivery state machine and ordering

Written by the model

Persona names and descriptions
Why an opportunity matters, in prose
Campaign copy and variants
Natural-language refinement
05/How it is built

The interesting part isn’t the prompt

Anything can call a language model. The engineering is deciding what it is allowed to be wrong about, and containing it when it is.

frontendvercel
apirender
postgressupabase
queueupstash
channelrender
Three deployable services
A Next.js frontend, an Express API, and a separate channel service that models a messaging provider over HTTP rather than an in-process function call — so retries, signatures and out-of-order callbacks are real problems the code has to solve.
Typed boundaries around the model
Every call runs prompt → JSON parse → Zod validate → database write, with a retry and a usable fallback. No free-form model output reaches the database or the UI.
Tenancy enforced in the API
Every database transaction carries the authenticated tenant into PostgreSQL. Row-level security and API ownership checks both reject cross-tenant access, including when a caller knows another tenant’s row id.
Built for a free tier that sleeps
The agent loop runs from an authenticated external scheduler, ingestion resumes after interruption, and durable recipient jobs retry provider startup and transient delivery failures.

Next.js 16 · React 19 · TypeScript · Tailwind 4 · Express 5 · PostgreSQL · Prisma 7 · Supabase Auth · BullMQ · Redis · Zod · OpenRouter · Vitest

See it find revenue in data
it has never seen

Create an account, then upload your own history or evaluate the pipeline on 500 sample customers and 3,000 orders — imported into your own workspace, never a shared sandbox.

Create an account→