Expo Next Template
A local-first monorepo template I pulled out of Sailor Plus, so I can start a new cross-platform app with sync, auth and a database already wired up.

Every time I started a new app, I was rebuilding the same foundation: a web client, a mobile client, a shared database, auth, and offline sync. So I pulled that foundation out of Sailor Plus into a template I could start from, and it's now the base for all my new projects.
The decision I'm most pleased with is keeping the core logic independent of any specific provider. The shared "core" package isn't allowed to import platform SDKs like Clerk or Supabase, so a provider can be swapped without rewriting the app around it. The template is also designed to install and boot before any of those services are configured, so you can get it running first and wire up the accounts as you go.
It also ships with the unglamorous parts that usually get skipped: CI that checks the web build, mobile typecheck, linting and dependency health on every change, database schemas shared across Postgres and SQLite, setup docs, and instructions for AI agents working in the repo.
Under the hood
- pnpm monorepo with an Expo (React Native) app and a Next.js web app
- Postgres as the source of truth, SQLite on-device, PowerSync moving data between them
- Clerk for auth, Drizzle for schemas shared across both databases
- A provider-neutral core package with an enforced no-platform-SDK boundary
- CI verification (web build, mobile typecheck, lint, Expo Doctor, peer-dep checks) plus architecture and setup docs
Key features
- One codebase for web (Next.js) and mobile (Expo)
- Offline-first sync out of the box (Postgres ↔ SQLite via PowerSync)
- Providers swappable without rewriting the app
- Installs and boots before external services are configured
- CI checks, shared schemas, and docs included