Skip the first two weeks

Auth, i18n, rate limits, payments and type-safe RPC, already wired and tested.

$npx create-ertilink my-app

One command. Postgres, API and web app.

Search projects
Checkout rewriteDesign systemBilling migrationSearch indexingAuth hardeningRate limit tuningDocs refresh
First deploy
8 minclone to production
Uptime
99.98%over the last 90 days
Client bundle
94 kBgzipped, first load
Built on
next@16.2react@19.2fastify@5.10@orpc/server@1.14prisma@7.9postgres@17ioredis@5.11better-auth@1.6@inlang/paraglide-js@2.23@tanstack/react-query@5.101@polar-sh/better-auth@1.8zod@4.4next@16.2react@19.2fastify@5.10@orpc/server@1.14prisma@7.9postgres@17ioredis@5.11better-auth@1.6@inlang/paraglide-js@2.23@tanstack/react-query@5.101@polar-sh/better-auth@1.8zod@4.4
01What you get

The boring parts are done

Four things that usually take a fortnight of plumbing. They are wired, typed and covered by tests before you write a line.

  • oRPCType safety end to endRename a field, the compiler finds every caller.
  • ParaglideTwo languages, no reloadSwitch language anywhere. No reload, no lost scroll.
  • Next.jsNavigation without the waitEvery route prerendered and prefetched.
  • FastifyGuardrails that holdRedis limits, CSRF checks, human error copy.
app/todos/todo-list.tsx
const { data } = useQuery(
  orpc.todo.list.queryOptions(),
);

data.map((todo) => todo.titel)
Property 'titel' does not exist on type 'Todo'. Did you mean 'title'?

The handler's return type reaches the component. A typo fails the build, not production.

Three steps to production

  1. 01

    Clone the stack

  2. 02

    Point it at your database

  3. 03

    Ship it

02Request path

One request, end to end

Nothing here is a black box. Every hop is code in the repo — locale resolved in the proxy, origin and rate checks before the handler, typed rows out of Postgres.

  1. browser

    Static route, already prefetched

  2. proxy.ts

    Locale cookie, prefix rewrite

  3. orpc/link

    Typed call, locale header attached

  4. fastify

    Origin guard, then the Redis limit

  5. prisma

    Rows typed at the source

429
Rate limited per procedure, per user and per IP. Redis-backed, and covered by tests.
403
Cookie-carrying cross-origin writes are rejected before a handler runs.
0
Untyped boundaries between the component you edit and the database it reads.
03Pricing

Free until a second person joins

Pay when your team grows.

Save 20%

Hobby

For prototypes and weekend projects.

Freefor as long as you like

  • One project
  • English and Georgian
  • Community support

Team

Most popular

For teams shipping to real users.

$29per month

  • Unlimited projects
  • Redis rate limiting
  • Priority support

Scale

For products with traffic worth protecting.

$99per month

  • SSO and audit logs
  • 99.99% uptime SLA
  • A named engineer
04Feedback

Three teams who cloned it and shipped the same week.

Replaced four half-finished internal templates. Shipped a real feature on day two.
Nino K. · Engineering lead
The locale switch alone saved us a sprint.
Luka B. · Founder
Rate limiting and CSRF were already there.
Ana T. · CTO
05Questions

Questions

Can I bring my own design system?
Yes. Themes are plain CSS variables, so your palette drops in.
How much of this needs JavaScript?
Layout, type and colour are CSS. Only interactive parts ship JavaScript.
What happens when a translation is missing?
Messages compile to typed functions, so a missing key fails the build.
What does it cost to start?
Nothing, until a second person joins your project.

Clone it and start

One command sets up the database, API and web app.

No credit card required.