Start here · 3 min
Introduction
What ShipNow is, what it deliberately is not, and how to decide in five minutes whether it fits.
ShipNow is a Next.js codebase with the first two weeks already written. Auth, payments, transactional email, two languages, SEO and a working buyer dashboard are wired to each other and tested against real accounts, not stubbed.
You clone it, run one script, change one config file, and you have a product that can take money on your own domain the same day.
What you get
A real app, not a template
Every feature is connected to the next one. A completed payment writes an order, issues what the plan entitles the buyer to, and sends the email, in one idempotent webhook. Nothing is a placeholder waiting for you to finish it.
The traps already hit
Magic links that never sign anyone in, session cookies dropped on redirect, Stripe tax on digital goods, a locale cookie the server cannot see. Each of those cost a day the first time. They are fixed here, with a comment saying why, so the fix survives the next person who tidies the code.
Your own infrastructure
Supabase, Stripe and Resend accounts in your name. No platform fee, no lock-in, no service in the middle that can change its pricing on you.
What it is not
It is not a no-code builder and it is not a UI library. There is no admin panel that generates CRUD screens, and there is no component kit with three hundred variants you will never use. It is the boring, connected middle: the part that takes a week and teaches you nothing.
It also does not pretend to be your product. The landing page is a starting point that you should replace. The thing only you can build is the reason anyone pays you, and no boilerplate can write that.
The stack
| Layer | Choice | Why |
|---|---|---|
| Framework | Next.js 16, App Router | Server Components, one deploy target, no separate API |
| Language | TypeScript, strict | The schema types flow from the database to the form |
| Styling | Tailwind CSS v4 | Tokens in globals.css, no config file to keep in sync |
| Database | Supabase Postgres | Row Level Security means the database enforces access, not your code |
| Auth | Supabase Auth | Magic link and OAuth, sessions in cookies the server can read |
| Payments | Stripe Checkout | Hosted, PCI on their side, tax handled |
| Resend | Transactional mail that lands, and an SMTP path for Supabase | |
| i18n | inlang and Paraglide | Compiled messages, no runtime dictionary, no missing-key crashes |
| Motion | Motion | Small, declarative, respects reduced motion |
Every one of these is replaceable. They are behind a thin file in src/lib, so
swapping Resend for Postmark is one file, not a migration.
How to read these docs
If you bought the kit, go straight to Install. It is four commands.
If you are deciding whether to buy, read What is wired and judge the code by the parts we chose to document rather than by the landing page.
Every page here describes code that exists. If something is missing, it is missing, and the page says so.
Something wrong or missing on this page? Tell us.