Start here · 2 min
Install
From a fresh clone to a running app on your machine. Four commands, about ten minutes, most of it waiting for Supabase.
Clone it
Use your own repository name. The kit is yours to rename, and you should: every reference to ShipNow in your git history is a reference to somebody else's product.
git clone git@github.com:Seifbejaoui/shipnow-kit.git my-product
cd my-product
rm -rf .git && git init
npm installName it
npm run setupIt asks for a product name and a domain, writes both into src/config.ts, and
copies .env.example to .env if you do not have one. It does not touch
anything else. Read the diff.
Create the database
Make a Supabase project first, then put its URL and keys in .env. You need
three values from Project settings, API:
NEXT_PUBLIC_SUPABASE_URL=https://<ref>.supabase.co
NEXT_PUBLIC_SUPABASE_KEY=sb_publishable_...
SUPABASE_SECRET_KEY=sb_secret_...Then apply the schema. This needs a personal access token from supabase.com/dashboard/account/tokens, which is a different thing from the project keys above:
SUPABASE_ACCESS_TOKEN=sbp_... npm run db:pushThat creates every table, policy and trigger in supabase/schema.sql, then
reads them back to check. The schema is written to be run twice: every create
is if not exists and every policy is dropped before it is created, so re-run
it whenever you add a table.
Run it
npm run devhttp://localhost:3000. Sign in with your own email. The magic link is
printed in the Supabase dashboard under Authentication, Logs until you wire
Resend, so you do not need working email to test the flow.
What just happened
| Command | What it touched |
|---|---|
npm run setup | src/config.ts, .env |
npm run db:push | Your Supabase project's schema |
npm run dev | Nothing. Compiles messages first, then serves |
npm run dev runs npm run paraglide before it starts. If you edit
messages/en.json, the compiled messages regenerate on the next start, not on
save. That surprises people once.
Next
Configuration is the one file you change to make this your product.
Something wrong or missing on this page? Tell us.