| name | seeksaas-development |
| description | Complete SeekSaaS development guide covering project setup, workflows, conventions, and best practices |
SeekSaaS Development Guide
Project Overview
SeekSaaS is a production-ready full-stack SaaS starter template built with:
- Frontend: React 19 + React Router v7 + Vite 7
- Backend: Hono + Drizzle ORM + PostgreSQL
- Deployment: Cloudflare Workers + Pages
- Styling: Tailwind CSS v4 + Shadcn UI
- Type Safety: Full-stack TypeScript
Monorepo Architecture
SeekSaaS uses a monorepo with pnpm workspaces and Turbo for efficient development:
seeksaas-www-react-router-v7/
├── apps/ # Deployable applications (web)
├── packages/ # Reusable libraries (30+ packages)
├── features/ # Feature modules (ai, auth, cms, mkt, panel, shared)
├── apis/ # API layer (api, api-client, api-services, etc.)
├── auths/ # Authentication (auth, auth-shared, session)
├── database/ # Database (db, dal)
├── mails/ # Email services (mail, mail-templates)
├── payments/ # Payment services (payment, plans)
├── newsletters/ # Newsletter (newsletter, mail-newsletter)
├── configs/ # Configuration (config, env)
├── tools/ # Dev tools (seed, typescript-config)
└── pnpm-workspace.yaml
Development Workflow
Getting Started
- Clone and Install
git clone <repository-url>
cd seeksaas-www-react-router-v7
pnpm install
- Environment Setup
cp apps/web/.env.example apps/web/.env
- Database Setup
pnpm db:generate
pnpm db:migrate
pnpm db:studio
- Start Development
pnpm dev
pnpm dev:web
Common Commands
pnpm dev
pnpm dev:web
pnpm build
pnpm check-types
pnpm lint
pnpm format
pnpm check
pnpm db:generate
pnpm db:migrate
pnpm db:push
pnpm db:studio
pnpm seed
pnpm cf:preview:web
pnpm cf:deploy:web
pnpm mail:preview
pnpm mail:preview
Code Conventions
TypeScript
- Use strict mode TypeScript
- Prefer explicit types over
any
- Use interfaces for object shapes, types for unions/primitives
- Export types with
export type when possible
React
- Use functional components with hooks
- Prefer named exports over default exports
- Use TypeScript for component props
- Follow the composition pattern
File Naming
- Components:
PascalCase.tsx (e.g., UserProfile.tsx)
- Utilities:
camelCase.ts (e.g., formatDate.ts)
- Constants:
UPPER_SNAKE_CASE.ts (e.g., API_ROUTES.ts)
- Types:
PascalCase.ts or *.types.ts
- Tests:
*.test.ts or *.spec.ts
Package Dependencies
- Use workspace protocol:
"@workspace/package-name": "workspace:*"
- Use catalog protocol for shared dependencies:
"package-name": "catalog:"
- Follow unidirectional dependencies to avoid cycles
Architecture Layers
┌─────────────────────────────────────┐
│ Application Layer (apps/web) │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ UI Component Layer │
│ (packages/ui, features/*) │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ API Layer │
│ (apis/api, apis/api-client) │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Service Layer │
│ (apis/api-services) │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Data Layer │
│ (database/db) │
└─────────────────────────────────────┘
Key Technologies
Frontend Stack
- React 19 - Latest React with concurrent features
- React Router v7 - File-system routing with data loading
- Vite 7 - Fast build tool with HMR
- Tailwind CSS v4 - Utility-first CSS
- Shadcn UI - Accessible component primitives
Backend Stack
- Hono - Lightweight web framework for edge computing
- Cloudflare Workers - Serverless deployment
- Drizzle ORM - Type-safe database ORM
- PostgreSQL - Relational database (Neon)
- Better Auth - Authentication solution
Developer Tools
- TypeScript - Type safety
- Biome - Linting and formatting (replaces ESLint + Prettier)
- Turbo - Monorepo build system
- pnpm - Package manager with workspace support
- Husky - Git hooks
- lint-staged - Pre-commit checks
Feature Modules
Core Features
- Authentication (
features/auth) - Login, signup, password reset
- CMS (
features/cms) - Content management system
- Marketing (
features/mkt) - Landing pages, about, contact
- Panel (
features/panel) - User dashboard and admin panel
- AI (
features/ai) - AI features (chat, image generation)
- Shared (
features/shared) - Shared components (Logo, background, 404)
Integration Modules
- Payments (
payments/*) - Stripe integration, plan management
- Email (
mails/*) - Email service with Resend
- Newsletter (
newsletters/*) - Newsletter subscription
- Storage (
packages/storage) - S3/R2 storage
Environment Variables
Required Variables
DATABASE_URL=postgresql://user:password@host:port/db
BETTER_AUTH_SECRET=your-secret-key
BETTER_AUTH_URL=http://localhost:5173
OPENAI_API_KEY=sk-xxx
RESEND_API_KEY=re_xxx
STRIPE_PK=pk_test_xxx
STRIPE_SK=sk_test_xxx
Environment Files
- Development:
apps/web/.env
- Production: Set in Cloudflare Pages/Workers
Testing
Unit Tests
pnpm test --filter <package-name>
E2E Tests
pnpm e2e
Best Practices
Component Development
- Keep components small and focused
- Use composition over inheritance
- Implement proper error boundaries
- Add loading states for async operations
- Use React Query for server state
API Development
- Use Hono for API routes
- Implement proper validation with Zod
- Add OpenAPI documentation
- Use API client on frontend (Hono RPC)
- Handle errors gracefully
Database
- Define clear schema with Drizzle
- Use migrations for schema changes
- Add indexes for performance
- Use prepared statements
- Handle transactions properly
Troubleshooting
Common Issues
-
Database connection fails
- Check
DATABASE_URL is correct
- Verify PostgreSQL service is running
- Check network/firewall settings
-
Build fails with type errors
- Run
pnpm check-types to see details
- Ensure all packages are built
- Check
tsconfig.json settings
-
Port already in use
- Check which process is using port 5173/3000
- Kill the process or use different port
-
Environment variables not loading
- Verify
.env file exists in apps/web/
- Check variable names are correct
- Restart development server
Resources
- Documentation:
/packages/cms/content/docs/
- AGENTS.md: Project-specific guidelines
- Package READMEs: Each package has its own README
- External Docs: