Accelerate is an open-source AI command center for your business. Bring customer records, conversations, pipeline, tasks and business actions into one workspace, where your team and AI can work with shared context.
Ask what needs attention, inspect the records behind an answer, and review supported changes before they run. Connect existing services, or build an adapter for another data source. Extend the application with your own screens, reports and workflows while reusing its identity, permissions and action services.
You control the deployment, your Supabase database and your provider accounts. The MIT license lets you inspect, modify and build on the source. Connected providers still process the information you send them, and hosting and model usage have their normal costs.
See what you can build: ten plugin examples, from Business Pulse reports and onboarding checklists to Stripe invoicing, Collections and Opportunity Radar. Each guide explains what works today, how to try it and how to adapt the pattern. You can use a coding assistant to develop extensions against those examples and the shared contracts.
Live site · Interactive fictional demo · How it works · Architecture · Self-hosting · Developer start · All docs · Roadmap
Project status: Active and production-derived. The fictional demo works with zero setup and no provider credentials. A connected workspace needs your own Supabase project and, optionally, your own provider accounts. Read the security and tenancy contracts before you put real customer data anywhere near it.
Today is the operator's front door: one ranked queue, per tenant, of replies, approvals, follow-ups, and anything else that needs a decision right now.
Records are canonical. Every contact, company, and opportunity is one entity with one pipeline stage, one owner, and one activity history, so different screens never quietly disagree about the same deal.
The inbox resolves identity on intake, so a new message from an existing contact gets merged into their record instead of spawning a duplicate.
Campaigns, proposals, and bookings run through approval gates and idempotent sends, so a flaky network or a doubled click never means a client gets the same email twice.
Analytics ties revenue back to its source, by channel, campaign, and stage, and shows where attribution data is genuinely missing instead of quietly treating it as zero.
The AI layer is grounded, not generic. Every model call runs against bounded, retrieved context with source citations, and every write it proposes goes through the same approval queue and audit trail as a human action. It doesn't get a side door around the rules everyone else follows.
Tenancy is structural, not bolted on. One shared database, explicit tenant context on every request, isolated records, and a workspace can connect its own OpenRouter key so AI spend is billed to that tenant, not to you. Five fictional demo workspaces let you explore the entire product, including a live drag-and-drop feature-board kanban, with no setup at all.
See Roadmap below for what's shipped, in progress, and planned next.
The rules below are enforced in code, not asked for in a prompt.
Mutating tools propose; they never act. The tool registry checks impact at runtime. A tool registered as a read that stages a write throws, and a tool registered as a write that fails to stage one throws too. Approved proposals then execute through the same domain services the interface uses.
Execution re-reads reality first. A proposal expires rather than firing if the record moved underneath it: a contact who unsubscribed, a conversation that was archived, an opportunity already past the stage the proposal assumed.
Answers cite what they read. A grounded answer is rejected before it reaches you unless it carries receipts from tools that actually executed in that request. A hallucinated citation fails the check.
Every external effect is idempotent and ends in a receipt. Sends, syncs, and webhook deliveries carry idempotency keys, so a retry cannot fire twice and an uncertain outcome is never treated as success.
Health cannot be quietly green. Stalled jobs and unread webhook failures surface as degraded rather than being absent from a dashboard.
Every run is traced in agent_runs and agent_run_events and readable at /admin/ai, and every material write lands in the audit ledger at /admin/activity with actor, origin, and before/after state.
The repository ships a Model Context Protocol server. Claude Desktop, Claude Code, ChatGPT's native Connectors, Cursor, and Antigravity connect to a workspace and get the same registered tools, the same impact tiers, and the same approval queue as the interface. Ask it what's on today's queue, or to mark a task done, snooze it, or move an opportunity's stage: reads return bounded, sourced data, and every write it proposes lands in the same review queue you'd see from a human editing the record by hand.
Setup for each client is in docs/self-hosting/MCP-SETUP.md.
Modules are the unit a workspace turns on and off. A third party registers one from a JSON manifest in extensions/ that declares its navigation, routes, AI tools, and Setup Center checks. The build validates every manifest and compiles it into a typed constant, so nothing in that directory is ever executed.
A registered module inherits the approval queue, the audit ledger, module gating, and MCP exposure without asking for any of them. Disable it and its navigation disappears, its routes fail closed, and its AI tools report unavailable to the agent and to MCP alike.
docs/contributing/EXTENDING.md covers all three extension points: modules, integration adapters, and AI tools. extensions/example-inventory.module.json is a complete working example.
- Next.js 16 and React 19
- TypeScript and Tailwind CSS 4
- Supabase Auth and PostgreSQL
- TanStack Query
- OpenRouter for AI routing
- Model Context Protocol for external assistants
- Resend for email
- Playwright for browser and accessibility coverage
The button deploys with no environment variables required: it boots straight to the public marketing site and the fictional demo, and any admin route redirects to a clearly labeled "connect your Supabase project" screen instead of erroring. Add your own Supabase project's variables in the new Vercel project's settings when you're ready for a real workspace, then follow Self-hosting.
This repository ships with automatic Git deployments off (git.deploymentEnabled: false in vercel.json), which exists to keep the maintainer's own production project on a separate prebuilt release path. It carries over to your fork's Vercel project too, so a git push after the first deploy won't redeploy until you turn Git deployments back on in your new project's Settings → Git.
Or run it locally instead:
Requirements: Node.js 22+, npm 10+, and Git.
git clone https://github.com/JohnConnorCode/accelerate-site.git
cd accelerate-site
npm ci
npm run devOpen http://localhost:3000. The public site and fictional demo are the fastest way to explore the project; neither one touches an external service.
To connect a workspace, use your own hosted Supabase project and PostgreSQL client tools (psql). Follow Self-hosting to configure credentials, create the first owner, and apply the verified migration catalog. External providers can be connected afterward in Setup Center.
Never copy production credentials into a fork.
| Command | Purpose |
|---|---|
npm run dev |
Start the local development server |
npm run build |
Create a production build with an immutable release identity |
npm run lint |
Run ESLint |
npm run typecheck |
Run TypeScript without emitting files |
npm run test:core |
Run the environment-independent contract suite |
npm run verify:oss |
Check open-source repository hygiene and secret patterns |
npm run qa:admin-demo -- --one |
Exercise one complete fictional workspace in Playwright |
Public site / Admin UI / APIs / Cron / Webhooks / AI tools
│
▼
Auth + validation + explicit tenant resolution
│
▼
Revenue OS domain services and action queue
│
▼
Tenant-scoped PostgreSQL + immutable receipts
Route handlers and UI components are thin adapters, nothing more. Every business write lives in src/lib/revenue-os/, tenant resolution lives in src/lib/tenancy/, and every database change is an ordered SQL migration, never a runtime mutation. Read docs/self-hosting/ARCHITECTURE.md before you touch any of those boundaries.
The live Feature Board is the source of truth for current definitions, dependencies, claims and acceptance. scripts/feature-backlog-data.mjs contains historical templates; dated reports are orientation, not dispatch authority. Use the developer handoff to inspect and claim an executable card through the canonical protocol.
For coordinated development, a plain-language request is enough: tell any
coding agent to "pick up work from the backlog and go until it is completed and
committed; follow protocol." The repository entrypoint selects one eligible
card, creates its isolated worktree, supplies the live packet, and continues
through verification and evidence submission. The agent command is an internal
detail (agent:go); see Natural-language agent execution.
/roadmap renders that manifest publicly, with every card's real description and acceptance criteria, no signup required. Each card has a stable shareable /roadmap#roadmap-<seed-key> link. A curated, dependency-satisfied subset — cards ready to pick up without waiting on other work — is also mirrored to GitHub Issues labeled help wanted via npm run mirror:feature-board-issues -- --apply.
You can also explore the same kanban UI the founder uses, populated with representative fictional data, inside any demo workspace under System → Feature Board. The live founder board at /admin/features requires authentication, so it isn't publicly browsable.
For exactly what changed and when, read CHANGELOG.md or the commit history rather than a second, hand-written summary here.
- Server credentials never reach browser bundles, source control, logs, or a database settings row.
- Every operational record carries tenant ownership, enforced by membership checks, request context, and database policy, not by convention.
- External effects (sends, webhooks, provider calls) require deterministic idempotency and end in a terminal receipt, so retries can't double-fire them.
- AI reads run against bounded context only. AI writes and external actions go through the same validated services and approval rules the UI does; there is no separate, looser path for the model.
- Fictional demo workspaces are hard-isolated from production: they can never issue a real, protected request.
Found a vulnerability? Report it privately, as described in SECURITY.md, rather than opening a public issue.
Contributions are welcome. Read CONTRIBUTING.md first, follow CODE_OF_CONDUCT.md, and keep pull requests narrowly scoped to one change. Anything touching authorization, tenancy, migrations, providers, or automation needs the relevant contract tests and threat-boundary evidence, not just a passing build. Repository-level changes are tracked in CHANGELOG.md.
The source code is MIT licensed. The Accelerate name, marks, customer and case-study media, photography, marketing copy, and downloadable resources are not covered by that license. If you're publishing a fork, replace them first. See ASSETS.md for the exact boundary.
Code is available under the MIT License.