The template combines a server-rendered web app, an Expo mobile app and shared domain packages. One Cloudflare Worker handles web rendering, authenticated APIs, files, agent tools and scheduled work. Postgres stores application state; R2 stores private objects.
Quickstart
git clone https://github.com/CarlosZiegler/doro.git
cd doro
pnpm install
pnpm setup
pnpm devSetup configures project identity and local environments, and guides database and provider configuration. The web defaults to http://localhost:3005; Expo starts separately through the workspace dev task. See local setup before connecting a shared database. Apply reviewed migrations; never push the schema.
Stack at a glance
| Layer | Choice |
|---|---|
| Web | TanStack Start 1.0, React, Vite, Tailwind CSS and shadcn/Base UI |
| Native | Expo, Expo Router and React Native |
| API and contracts | oRPC, Zod and TanStack Query |
| Identity | Better Auth with Organizations, passkeys and two-factor |
| Data | Drizzle, Postgres/Neon and Cloudflare Hyperdrive |
| Background work | Stable Effect APIs and durable Drizzle leases |
| Agents | Shared tool catalog, TanStack AI and MCP OAuth |
| Documentation | Headless Fumadocs MDX/core, static highlighting and server-rendered articles |
The library reference records pinned versions and upgrade policy.
What is included
Authentication and account security, Organization-scoped Todos and files, saved views, JSON imports, admin management, audit and activity records, feature flags, three-language app chrome, transactional email, provider-gated payments, AI approvals, MCP tools, OG images and agent-readable pages. Native purchases, widgets and ads have explicit activation paths; installed code does not imply configured providers.
Repository map
Docs articles are written in English. Navigation controls follow the app language (English, German or French). Architectural decisions are rendered from their original files, so there is one source of truth.