Everything your AI product needs. Except the AI.

A Next.js framework for AI SaaS: sign-up, teams, plans, credits, usage and an admin console — a complete SaaS around your agent. The pages land in your repo as your code. The engine under them is npm packages you upgrade. Open source, nothing rented.

$pnpm dlx @intelligo-dev/cli create my-app

Built on Next.js 16 · PostgreSQL · Drizzle · Better-Auth · Stripe · Vercel AI SDK

watch it build
the film · 60 seconds · silent

From a working agent to a running product.
One minute.

Everything on screen is the registry's own pages and the real execution boundary, not a mock-up. Jump to the act you care about.

read it instead
  1. 0:00 — Your agent works. It isn't a product yet.
  2. 0:07 — Intelligo ships that half. One command.
  3. 0:13 — Every page lands as your own source.
  4. 0:25 — A running product. Day one.
  5. 0:30 — Your agent runs unmodified.
  6. 0:42 — Every run, accounted for.
  7. 0:48 — Make it yours — config, not forks.
  8. 0:54 — You build the agent. Intelligo is everything around it.
or drive it yourself

A whole product,
on the first run.

Sign-in, workspaces, billing, usage and a streaming chat are already pages in your app. Each tab is one of the 28 registry blocks itself, running on fixture data — the source the shadcn CLI installs, not a screenshot.

Loading preview…
how it divides

Every AI product is two halves.
You should only write one.

The interesting half is your agent. The other half — who is signed in, what their plan allows, what a run cost, who to bill, what to tell an auditor — is the same in every AI SaaS, and it is where the time goes.

yours · in your AI framework
  • Promptsthe voice, the guardrails, the domain
  • Toolswhat the agent can actually do
  • Domain datathe knowledge nobody else has
  • Evalshow you know it's getting better
intelligo · 29 services and surfaces, shipped
  • authsign-in, verification and reset; workspaces, roles, invitations, ownership transfer
  • billingplans as data, gates and quotas; credits with reservations; trials; Stripe behind an idempotent ledger
  • executionsevery run admitted, settled and recorded, against a model registry with per-token pricing
  • coreconversations, versioned documents, notifications; data export and per-fact deletion
  • auditappend-only audit events
  • jobsa Postgres job queue, no Redis
  • adminan operator's console with audited impersonation
your AI framework stays native

Two lines of route.
The rest is your agent.

  • Auth, limits, gates, persistence, billinghappen inside createChatHandler — every turn admitted, streamed and settled exactly once.
  • Prompts, tools and modelsstay in your framework's own idiom, in a config file the install hands you.
  • Outside chatbracket any run with begin → complete or fail. No wrapper, no agent abstraction to adopt.
the boundary, in the docs →
// app/api/chat/route.ts — installed by the chat block
import { createChatHandler } from "@intelligo-dev/chat";
import { chatServerConfig } from "@/lib/chat-server-config";

export const { POST, DELETE } = createChatHandler(chatServerConfig);
// lib/chat-server-config.ts — yours to edit
agent: {
  systemPrompt: "You answer from the workspace's documents.",
  tools: ({ workspaceId }) => ({
    searchDocs: tool({
      description: "Search the workspace's documents",
      inputSchema: z.object({ query: z.string() }),
      execute: ({ query }) => search(workspaceId, query),
    }),
  }),
},
// anywhere else: Mastra, the AI SDK, your own loop
const run = await executions.begin({ workspaceId, userId, capability: "support.reply" });
if (!run.allowed) return refuse(run.reason);
try {
  const result = await supportAgent.generate(messages); // native
  await run.complete({ usage: result.usage, model: result.model });
} catch (error) {
  await run.fail({ error });
}
quickstart

Three commands.
Running before you touch a model key.

Node 22.14 or newer, pnpm 9 and PostgreSQL with pgvector. The chat page streams against a built-in stub model, so the whole app runs before you configure a provider.

my-app — zsh
$
◆ Which pages should be installed? (space to toggle)
● Also installing what they build on: route-error
◆ Scaffolded 31 files in my-app
◇ pnpm install
◇ pnpm exec shadcn add @intelligo/intelligo --yes --overwrite
◇ pnpm exec shadcn add @intelligo/route-error @intelligo/app-shell @intelligo/auth-login @intelligo/auth-signup @intelligo/dashboard --yes --overwrite
Next
cd my-app
cp .env.example .env.local # then fill it in
pnpm dev
5 page(s) installed.

Spend your time on the half that is yours.

Everything else is already here — versioned on npm, installed as source you own, Apache-2.0.

Environment, AI providers, deployment and every other block are in the docs.

before you ask

Frequently asked
questions

Something else? Open an issue on GitHub.

Does Intelligo replace my AI framework?
No. Mastra, the Vercel AI SDK or anything else stays native. Intelligo only brackets each run — admit, settle, fail — and has no agent or tool abstraction to adopt. The chat block is the one place with a wire format: it streams the AI SDK's UI messages, and another runtime plugs in by emitting them.
Is anything real running on it?
The reference app in the repository is the thing you can run and read: a whole workspace AI SaaS — sign-up, workspaces, the shell, chat, billing, usage, artifacts — built only from these npm packages and blocks, with no private fork underneath it. It is generated by the CLI rather than written, and CI fails if a single file drifts from what create and shadcn add would give you, so it is the same app you get.
Is it ready for production?
It is a 1.0 beta. Everything on this site exists and runs today, but APIs are still settling: a beta can break one, and every break is listed in the changelog with what to change. The database schema is one baseline that only moves forward through migrations.
Is Intelligo a starter kit?
No. A starter kit is cloned once and diverges. Here the services stay versioned packages on npm, and the pages arrive as source you own — rendered by your own shadcn primitives, with a manifest that tells upgrade --check which generated files you changed.
Can I use it without Next.js?
Not today. The services are plain TypeScript — ports, a Drizzle schema, Web Request and Response — and only the admin views and email templates are React. But the blocks and the create scaffold target Next.js 16.
What about payments outside Stripe?
Stripe is the one provider that ships. billing/payment is the contract you implement for another, the checkout and payment-poll blocks are the pages for QR and invoice flows that wait for confirmation, and every amount carries its currency.
Why trust a small open-source project with auth and billing?
Because the risky parts are not hand-rolled: sessions and organizations are Better-Auth, payments are Stripe behind an idempotent finance ledger. Around them are unit tests, suites that run against a real database, and architecture rules that fail the build. Every release scaffolds an app from the packed CLI, builds it and boots it before npm sees it.
What if the maintainer disappears?
Nothing is rented. Apache-2.0, no open-core split, no hosted dependency; the packages are on npm and the pages are already in your repository.