MoveFast ships as 18 pre-built variants. Each variant is a specific combination of database, email provider, and payment provider. You pick the one that matches your stack.
Variant Naming
Variants follow this pattern:
<database>-<email>-<payment>For example:
mongodb-resend-stripe= MongoDB + Resend + Stripesupabase-postmark-polar= Supabase/PostgreSQL + Postmark + Polarmongodb-nodemailer-dodo= MongoDB + Nodemailer + Dodo Payments
Available options:
- Database:
mongodborsupabase(PostgreSQL) - Email:
resend,postmark, ornodemailer - Payment:
stripe,dodo, orpolar
1. Clone Your Variant
Each variant lives on its own Git branch:
git clone -b mongodb-resend-stripe git@github.com:movefa-st/code.git my-saas
cd my-saasReplace mongodb-resend-stripe with whichever variant you chose.
2. Install Dependencies
npm installIf you chose a Supabase variant, also generate the Prisma client:
npx prisma generate3. Configure Environment Variables
Copy the example env file:
cp .env.example .envOpen .env and fill in your credentials. Every variant includes only the variables it needs. At minimum you need:
# App URLs
NEXT_PUBLIC_WEBSITE_URL=http://localhost:3000
NEXTAUTH_URL=http://localhost:3000
# Auth
AUTH_SECRET=generate-with-openssl-rand-base64-32
AUTH_TRUST_HOST=true
# Your database credentials (depends on variant)
# Your email provider credentials (depends on variant)
# Your payment provider credentials (depends on variant)Generate a secure AUTH_SECRET:
openssl rand -base64 32See the provider-specific docs (Database, Email, Payments) for the exact variables each provider needs.
4. Configure Pricing
Open src/config/pricing.config.ts and:
- Set your payment model (
ONE_TIMEorSUBSCRIPTION) - Set your currency code and symbol
- Replace the placeholder product IDs with real ones from your payment provider dashboard
- Customize plan names, prices, and features
5. Run the Dev Server
npm run devOpen http://localhost:3000 in your browser. You should see the landing page with pricing, features, and a sign-in option.
6. Create Your First Admin User
- Sign in using Google OAuth or a magic link
- Connect to your database and manually update your user's
rolesfield to includeADMIN
For MongoDB:
db.users.updateOne({ email: "you@example.com" }, { $set: { roles: ["USER", "ADMIN"] } })For Supabase/PostgreSQL:
UPDATE "User" SET roles = ARRAY['USER', 'ADMIN'] WHERE email = 'you@example.com';Now you can access the admin dashboard at /admin/dashboard.
Available Scripts
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run typecheck # TypeScript type checking
npm run email:dev # Preview email templates at localhost:3001Next Steps
- Project Architecture to understand the codebase layout
- Authentication to set up Google OAuth and magic links
- Database to configure your database
- Payments to set up checkout and webhooks
- Email to configure transactional emails
