When the renderer isn't enough, write React.
Scaffold a Vite + React + TypeScript app, or bring any framework that builds to static output. It ships through a seven-phase pipeline: develop → staging → production, owner/editor/viewer, an append-only deployment log. Platform apps publish on their own, simpler path; the environments page keeps the two apart.
Custom frontends are where your agent writes ordinary code. Platform apps are assembled from primitives instead.
Desktop builds are being finalized for launch — the download page has the access list and the installer link.
An ordinary project. Take it anywhere.
The default scaffold is Vite + React + TypeScript. It is a normal project with a normal package.json; open it in any editor, run it locally, commit it wherever you commit things. Any framework that builds to static output works the same way — the pipeline cares about the output directory, not the framework.
The toolchain is configurable per app: install command, build command, output directory. Node version pins in .nvmrc or .node-version are honored, so the Node that builds here is the Node you pinned.
Frontends can call the platform API directly for public object reads, so a dashboard or a client-facing widget sits on the same real tables as the rest of your app. It is ordinary React — no wrapper, no proprietary component layer, no opinion about your state library.
- install, build and output dir configurable per app
.nvmrc/.node-versionpins honored- Static output only —
dist/with anindex.html - Direct platform API access for public object reads
- Immutable version snapshots on every deploy
Fetch, install, build, verify, upload, promote, invalidate.
A deploy versions your working copy, runs the pipeline, and streams status back phase by phase. Nobody writes this pipeline. Nobody maintains it either.
- 01 fetch
The build worker pulls the immutable version snapshot with credentials of its own — read-only, scoped to build artifacts, nothing else on the platform.
- 02 install
Your install command runs; .nvmrc and .node-version pins are honored.
- 03 build
Your build command runs with the target environment's variable bundle applied.
- 04 verify
Output is checked: an index.html must exist and the build must fit the size cap.
- 05 upload
Artifacts land in closed storage. Output already present from another environment is reused, not re-uploaded.
- 06 promote
The environment's origin flips to the new version in one atomic step; the deployment log records it.
- 07 invalidate
The edge cache is invalidated once, so the fresh index.html is what the next visitor sees.
The build worker runs with least privilege, and never holds the platform API's own credentials. Security
Same chain, same roles, same log.
Custom frontends move develop → staging → production, strictly one way. Deploy lands in develop; staging and production are reached only by promotion. Owners and editors deploy and promote to staging; only owners promote to production or roll it back. Viewers read.
Each environment has its own URL and its own variable bundle, applied at build — promotion rebuilds for the target environment rather than copying bytes between buckets. Rollback is non-destructive: a new deployment pointing at the previous successful version, with the audit trail intact.
Every deploy, promotion and rollback is a row in an append-only deployment log: version, environment, who, when, status, error, URL.
↩ rollback · owner / editor / viewer · production is owner-only
- Dedup. Output already built for another environment is reused, not re-uploaded; identical output in the same environment skips promotion entirely.
- Fresh HTML, cached assets.
index.htmlis served no-cache; hashed JS and CSS are immutable for a year, with one edge invalidation per deploy. - HTTPS on every environment URL.
- Atomic switch. Old versions stay in storage, so rollback is a pointer move, not a re-upload.
- Static builds only. No servers, no SSR, no backend hosting for a custom frontend. Server-side functions are on the roadmap below.
- Size cap. Build output is verified at 500 MB with an
index.htmlrequired. - URLs are on our domain. Every environment gets an HTTPS URL we issue; bringing your own domain is not offered yet.
- Apps run on managed cloud infrastructure we operate, built primarily on AWS; the backend is not self-hostable.
Leaving is a build command.
A custom frontend is a standard Vite/React project, not a proprietary format — normal package.json, normal build command. Any team can clone it, build it, and host it somewhere else.
Every deploy keeps an immutable snapshot of exactly those files, and we will export any version for you on request — ask us to walk it end to end in a demo before you sign anything.
The data behind it stays yours through the platform's documented API. A platform app is the other half of the bargain: it is built from primitives that only run here.
The rest of the machine.
The whole machine
Desktop app, your agent, the MCP control surface, primitives, environments.
See the machineThe control surface
Your model, your keys, and the named operations the platform exposes.
See the operationsFor the person who has to say yes
Who may deploy, who may promote, where the data sits, and what we will not claim.
Read the IT briefOne organization license. Every builder included.
Custom frontends, environments and production traffic are covered. You bring the AI subscription you already pay for — that is the only bill that moves with usage, and it is not ours.
See pricingBring us something you want built.
CodeMonster is invite only while we work directly with early adopters. Request an invite and we will meet, scope what you want to build, and get you productive. You bring the AI subscription you already pay for.