Ship/Now

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

LayerChoiceWhy
FrameworkNext.js 16, App RouterServer Components, one deploy target, no separate API
LanguageTypeScript, strictThe schema types flow from the database to the form
StylingTailwind CSS v4Tokens in globals.css, no config file to keep in sync
DatabaseSupabase PostgresRow Level Security means the database enforces access, not your code
AuthSupabase AuthMagic link and OAuth, sessions in cookies the server can read
PaymentsStripe CheckoutHosted, PCI on their side, tax handled
EmailResendTransactional mail that lands, and an SMTP path for Supabase
i18ninlang and ParaglideCompiled messages, no runtime dictionary, no missing-key crashes
MotionMotionSmall, 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.