A production-ready SaaS starter kit built with Next.js, TypeScript, and modern tooling.
Website · Documentation · Live Demo · Changelog
Fastly is a comprehensive SaaS foundation that ships authentication, user management, file uploads, email workflows, and a polished marketing surface out of the box. It's designed for engineering teams who need to launch quickly without compromising on quality or security.
The project is structured as a monorepo with two independent Next.js applications:
| App | Description | Port | URL |
|---|---|---|---|
| main-app | SaaS starter kit with auth, dashboard, and API | 3000 | create-fastly-app.nabinkhair.com.np |
| marketing | Marketing site, documentation, and changelog | 4000 | fastly.nabinkhair.com.np |
- Email/password authentication with verification codes
- GitHub and Google OAuth providers
- JWT access + refresh token rotation
- Cross-device session management with revocation
- Password reset and forgot password flows
- Mutex-based token refresh to prevent race conditions
- User profiles with avatar upload and cropping
- Username claiming (one-time change)
- Location, social accounts, and bio fields
- Theme and font preferences
- Account deletion with confirmation
- Full TypeScript coverage with strict mode
- Biome for linting and formatting
- Husky + lint-staged for pre-commit hooks
- Turbopack for fast development builds
- TanStack Query for data fetching and caching
- Zod schemas for runtime validation
- React Hook Form for type-safe forms
- Prebuilt landing page with hero, features, tech stack, and FAQ sections
- Fumadocs-powered documentation site with search and syntax highlighting
- JSON-driven changelog with tracing beam timeline
- SEO-optimized with OpenGraph and Twitter Card metadata
- LLM-friendly text endpoints (
/llms.txt)
- MongoDB with Mongoose for data persistence
- UploadThing for file handling
- Nodemailer + React Email for transactional emails
- Vercel-optimized with
after()for non-blocking post-response work - Parallelized API routes with
Promise.allfor reduced latency
| Category | Technologies |
|---|---|
| Framework | Next.js 16, React 19, TypeScript 5.9 |
| Styling | Tailwind CSS 4, tw-animate-css |
| UI | shadcn/ui, Radix UI, cmdk, Lucide Icons |
| Forms | React Hook Form, Zod, @hookform/resolvers |
| Database | MongoDB, Mongoose |
| Auth | JWT (jsonwebtoken), bcrypt, GitHub OAuth, Google OAuth |
| Nodemailer, React Email | |
| Uploads | UploadThing |
| Data Fetching | TanStack React Query, Axios |
| Animation | Motion (Framer Motion), Lenis |
| Docs | Fumadocs, Shiki, Mermaid |
| Tooling | Biome, Husky, lint-staged, Turbopack |
Comprehensive documentation is available at fastly.nabinkhair.com.np/docs covering:
Both apps are deployed on Vercel as separate projects.
- Import
main-appdirectory as a new Vercel project - Set root directory to
main-app - Add all environment variables from
.env.local - Deploy
- Import
marketingdirectory as a new Vercel project - Set root directory to
marketing - Deploy
| Script | Description |
|---|---|
pnpm dev |
Start development server with Turbopack |
pnpm build |
Build for production |
pnpm lint |
Run Biome linter |
pnpm format |
Format code with Biome |
pnpm type-check |
Run TypeScript type checking |
pnpm clean |
Remove .next build directory |
| Script | Description |
|---|---|
pnpm dev |
Start development server with Turbopack |
pnpm build |
Build for production |
pnpm lint |
Run Biome linter |
pnpm format |
Format code with Biome |
Issues and pull requests are welcome. Please ensure linting and formatting checks pass before submitting changes:
pnpm lint
pnpm format:check
pnpm type-check- Website: fastly.nabinkhair.com.np
- Live Demo: create-fastly-app.nabinkhair.com.np
- Documentation: fastly.nabinkhair.com.np/docs
- Changelog: fastly.nabinkhair.com.np/changelog
- Repository: github.com/nabinkhair42/fastly
- Author: Nabin Khair
This project is open source. See the repository for license details.