seeksaas-development
Complete SeekSaaS development guide covering project setup, workflows, conventions, and best practices
SKILL.md
Full skill instructions
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
# Edit apps/web/.env with your configuration
- Database Setup
pnpm db:generate # Generate migrations
pnpm db:migrate # Run migrations
pnpm db:studio # Open Drizzle Studio (optional)
- Start Development
pnpm dev # Start all services
pnpm dev:web # Start web app only
Common Commands
# Development
pnpm dev # Start development server
pnpm dev:web # Start web app only
# Building
pnpm build # Build all packages
pnpm check-types # Type checking
# Code Quality
pnpm lint # Run linter
pnpm format # Format code
pnpm check # Check code quality
# Database
pnpm db:generate # Generate migrations from schema
pnpm db:migrate # Apply migrations
pnpm db:push # Push schema changes (dev only)
pnpm db:studio # Open database studio
pnpm seed # Seed database
# Deployment
pnpm cf:preview:web # Preview on Cloudflare
pnpm cf:deploy:web # Deploy to Cloudflare
pnpm mail:preview # Preview email templates
# Email
pnpm mail:preview # Preview email templates in browser
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 typewhen 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.tsor*.types.ts - Tests:
*.test.tsor*.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
DATABASE_URL=postgresql://user:password@host:port/db
# Authentication
BETTER_AUTH_SECRET=your-secret-key
BETTER_AUTH_URL=http://localhost:5173
# Optional Services
OPENAI_API_KEY=sk-xxx # AI features
RESEND_API_KEY=re_xxx # Email
STRIPE_PK=pk_test_xxx # Payments
STRIPE_SK=sk_test_xxx
Environment Files
- Development:
apps/web/.env - Production: Set in Cloudflare Pages/Workers
Testing
Unit Tests
# Run tests in a specific package
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_URLis correct - Verify PostgreSQL service is running
- Check network/firewall settings
- Check
-
Build fails with type errors
- Run
pnpm check-typesto see details - Ensure all packages are built
- Check
tsconfig.jsonsettings
- Run
-
Port already in use
- Check which process is using port 5173/3000
- Kill the process or use different port
-
Environment variables not loading
- Verify
.envfile exists inapps/web/ - Check variable names are correct
- Restart development server
- Verify
Resources
- Documentation:
/packages/cms/content/docs/ - AGENTS.md: Project-specific guidelines
- Package READMEs: Each package has its own README
- External Docs:
