AuthenticationReady
Email and password, passkeys, two-factor codes, email verification and session management.
A full-stack starter for web and mobile. TanStack Start, Expo and one typed API, running on Cloudflare.




Todos, files, security and agent connections. Actual screens from the template with example data.
Keep what your product needs. Every integration below is included; optional services stay off until you configure them.
Email and password, passkeys, two-factor codes, email verification and session management.
Members, invitations and roles. Todos and files belong to the active organization.
Multipart uploads to R2, previews, share links and a trash.
User management, impersonation, feature flags and an audit log.
Grid, board and calendar views, with leased import queues and drafts proposed by AI agents.
Stripe and Polar on the web, RevenueCat on mobile. Off until providers and billing flags are configured.
Drizzle on Neon Postgres, reached through Hyperdrive.
Transactional email through Cloudflare Email, printed to the console in development.
English, German and French, hreflang, a sitemap and OG images generated with Takumi.
Streaming chat with TanStack AI and shared MCP tools. Off until a provider is configured and the assistant flag is enabled.
Effect at the edges: cron jobs and outbound delivery, with Postgres leases for queued work.
A consent banner that holds back analytics and marketing scripts.
iOS and Android with the same API client, session and passkeys.
Expo push registration and a delivery queue. Off until credentials are set.
Todo widgets for iOS and Android behind a native build option.
AdMob helpers kept as a standalone library, not imported by the app.
One TypeScript monorepo. Each package has one job and an enumerated public surface.
The browser and Expo call the same oRPC router. The Worker checks the session before accessing Postgres or R2.
apps/web/src/routes/index.tsximport { useQuery } from "@tanstack/react-query";import { orpc } from "@/utils/orpc";const { data: apiOk, isLoading: apiLoading } = useQuery(orpc.healthCheck.queryOptions());Excerpt from the landing route. The generated client keeps the query typed.
Share contracts with your clients. Keep database connections, secrets and server code behind three independent checks.
Each pull request gets a preview Worker and a Neon branch. Review the real URL, then merge when it is ready.
.github/workflows/pr-preview.yml
TanStack AI and the MCP server use the same authorized tools. Coding agents get the repo instructions and architecture decisions.
What the agent reads first
AGENTS.mddocs/adr.agents/skills/api/mcp/llms.txtRead AGENTS.md and CONTEXT.md. Follow the setup-envs skill to configure this project, preserving existing credentials. Then run pnpm install, pnpm setup and pnpm run dev. Verify the app with the agent-browser skill.
Tool calls over MCP
todo_listCompleted5 resultstodo_createApproval neededWaits for your approvalApproveDeclineclaude mcp add --transport http my-app https://your-domain.example/api/mcpIn ChatGPT or claude.ai, add the same /api/mcp URL as a custom connector.
Clone your copy of the repository. Install, configure, and run web and mobile together.
Node.js 22+ and pnpm. Setup asks for your project and service configuration.
Read the docsgit clone <your-repo-url> my-appStart from your copy of the template repository.
pnpm installInstalls every workspace in the monorepo.
pnpm setupNames the project and writes env files, Wrangler, database, email and storage settings.
pnpm run devWeb on localhost:3005, plus the Expo dev server for mobile.
Create an account and use the real app: todos, files, organizations, passkeys, two-factor and settings. It runs on the same Worker as this page.
One deploy serves pages, the API, auth and scheduled jobs. Every pull request gets its own Worker, so review happens on a real URL.
Auth, organizations and the job queues rely on Postgres transactions and locks. Hyperdrive pools the connection, and each pull request gets its own Neon branch.
Yes. optional-features.json lists each optional package and its entry points, and docs/optional-features.md explains how to remove them.
Colors, radius and fonts live in one token file. Names and copy live in the locale files. Screens only use tokens, so a palette swap changes every page.
Only to change server jobs. Effect coordinates execution in the Worker; contracts use Zod, requests use oRPC, auth uses Better Auth and queries use Drizzle.
Point any MCP client at /api/mcp. You approve access over OAuth, read and write are separate scopes, and writes only create drafts you confirm in the app.
Yes. The assistant and MCP share one tool catalog, scoped to your organization. Writes require approval. Configure Anthropic, OpenAI or Gemini and enable the assistant flag to show the chat. It is off by default.