A customized version of Fulco's JustShip SvelteKit marketing + app boilerplate.
- added Svelte Preprocess + Pug
- converted markup to Pug syntax
- added Inter font
- added Tailwind Forms
- removed DaisyUI
- removed Embla Carousel
- created separate routes for 'marketing' and 'app' content, with auth control
- removed original marketing components
- updated sign-up & sign-in to use email & password
- added password reset flow
- added new Tailwind marketing components
- (pending) added new Tailwind app components
========================
A batteries included Svelte 5 SaaS Boilerplate - https://github.com/ocluf/justship
- Run
npm install --legacy-peer-deps
orpnpm install
- Rename the
.env.example
file to.env
- add a value to
.env
forFROM_EMAIL
(e.g. '[email protected]')
- add a value to
- Run
npm run generate && npm run migrate
to create a local database - Install mailpit to receive emails locally
- start mailpit running in background (e.g.
brew services start mailpit
) - note: can stop background mailpit process after dev (e.g.
brew services stop mailpit
)
- start mailpit running in background (e.g.
- run
npm run dev
- create a new account at sign in page using any email address
- check for sign-up email at Mailpit localhost:8025
- click email activation link to create account and sign in
- Get a domain name
- Create a Postmark account and get Server API key
- Set up account and database in Turso
- Create OAuth credential in Google Cloud
- Add project from repo to Vercel
- Point main domain name to project on Vercel
- Fill out environment variables in
.env
- Add environment variables to project in Vercel
========================
† Added, Removed
- Frontend
- Svelte 5
- TailwindCSS
- TailwindUI †
- Tailwind Typography
DaisyUIEmbla Carousel- Lucide (icons)
- Svelte Preprocess †
- Pug †
- Inter, Lexend fonts †
- App Framework & APIs
- SvelteKit 2
- TypeScript
- Forms
- SvelteKit Superforms
- Tailwind Forms †
- Zod
- Auth
- Arctic
- Lucia
- Olso
- Database (SQLite/ORM)
- Drizzle
- Turso
- Email
- EmailJS
- Postmark
- Mailpit (local)
- Payments
- Stripe
- Linting
- Prettier
- Testing
- Vitest
- Playwright
- Analytics
- PostHog
- Hosting
- Vercel (frontend / serverless)
- Turso (database)
-
Why Turso?
- The simplicity of SQLite, and Turso extends that simplicity by allowing it not to run on the same server as your application. This offers the best of both worlds: an excellent local development story and worry-free scalability and backups in production.
-
Why Vercel?
- Offers remarkable developer experience with features like branch previews and automatic deployments based on GitHub pushes. While it can be costlier with high traffic volumes, this boilerplate is meant for quick product experiments. If a product gains traction, migrating to another service is straightforward.
-
Why Stripe?
- Stripe provides an excellent developer experience. While I'm not particularly concerned that they aren't the merchant of record—a key selling point for Paddle or LemonSqueezy — I am open to other payment providers. Feel free to submit a pull request to add alternative payment options.
-
Why PostHog?
- PostHog offers a generous free tier, an extensive feature set, and comprehensive documentation. Although I haven’t tested many other analytics providers, my positive experience with PostHog has persuaded me to stick with it.