Skip to content
/ cella Public

TypeScript template to build local-first SaaS with hono + pg + drizzle + electric-sql + react + shadcn.

License

Notifications You must be signed in to change notification settings

cellajs/cella

Repository files navigation


Cella

Single stack TypeScript template to build local-first SaaS.

Website · prerelease version · MIT license



Prerelease

❗ Please be aware this is a prerelease. It does not meet production requirements yet and large breaking changes still occur regularly. Want to contribute? Let's connect! ✉️ [email protected]

Contents

Installation

Prerequisites

  • Node: Check node with node -v. Install Node 20.x or 22.x with (recommended) Volta.
  • Docker: Install Orbstack or Docker

Step 1

git clone [email protected]:cellajs/cella.git && cd cella

Create a .env in /env folder. Recommended defaults are in .env.example. Then install:

pnpm install

Make sure docker runs in the background with a postgres db in it.

pnpm run docker

Step 2

Cella adopted a local-first strategy, whereby page-related resources are handled normally by an API, whereas content-related resources are fully handled local-first using ElectricSQL. Therefore, generate and migrate commands will execute both for normal schemas and for electric schemas in /backend.

pnpm run generate
pnpm run migrate 

Generate local-first sync layer in /frontend with ElectricSQL

pnpm run electrify

Check it out at localhost:3000

pnpm run dev

Step 3

The user seed is required to add an ADMIN user. Check /backend/seed to add more data with faker.js.

pnpm run seed:user
pnpm run seed:organizations

Use Drizzle Studio to manage your local db on local.drizzle.studio

pnpm run studio

API documentation

Cella uses Scalar for autogenerated OpenAPI docs. Docs refresh on changes at localhost:4000/docs

More info

  • Please install Biome for code style. Fix with pnpm run check:fix and type check with pnpm run check:types
  • EADDRINUSE errors? Try sudo lsof -i :1080 -i :3000 -i :4000 and then kill -9 *PID* with a space-separated list of PID
  • pnpm cache issues? Try pnpm store prune
  • turbo cache issues? Try adding --force to the command
  • docker cache issues? Try docker builder prune --force


💙💛 Big thank you too drizzle-orm, hono, tanstack-router, electric-sql & shadcn.