A modern platform for managing STEM educational events including workshops, camps, and classes. Built with Next.js 15, Supabase, and Clerk.
- Node.js 18.17 or later
- pnpm 8.x
- PostgreSQL 14 or later (via Supabase)
- Supabase account
- Clerk account
- Twilio account
- Clone the repository:
git clone https://github.com/your-org/stem-education-platform.git
cd stem-education-platform
- Install dependencies:
pnpm install
- Create a
.env.local
file in the root directory:
# App
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Supabase
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
# Clerk
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
CLERK_SECRET_KEY=your_clerk_secret_key
# Twilio
TWILIO_ACCOUNT_SID=your_twilio_account_sid
TWILIO_AUTH_TOKEN=your_twilio_auth_token
TWILIO_PHONE_NUMBER=your_twilio_phone_number
- Initialize the database:
pnpm db:migrate
- Start the development server:
pnpm dev
Visit http://localhost:3000
to see the application.
stem-education-platform/
├── app/ # Next.js 15 app directory
│ ├── (auth)/ # Authentication routes
│ ├── (dashboard)/ # Protected dashboard routes
│ └── api/ # API routes
├── components/ # React components
│ ├── ui/ # ShadCN components
│ └── shared/ # Shared components
├── lib/ # Utility functions and configurations
├── types/ # TypeScript type definitions
├── styles/ # Global styles and Tailwind config
└── public/ # Static assets
- Framework: Remix with App Router
- Database: Supabase (PostgreSQL)
- Authentication: Clerk
- UI Components: shadcn/ui
- Styling: Tailwind CSS
- Communications: Twilio
- State Management: React Query & Zustand
- Forms: React Hook Form & Zod
pnpm dev # Start development server
pnpm build # Build for production
pnpm start # Start production server
pnpm lint # Run ESLint
pnpm test # Run tests
pnpm db:migrate # Run database migrations
pnpm db:seed # Seed database with sample data
- We use ESLint and Prettier for code formatting
- Run
pnpm lint
before committing - Use conventional commits for commit messages
Migrations are managed through Supabase migrations:
pnpm supabase migration new migration_name
pnpm supabase migration up
pnpm supabase migration down
-
User Management
- Multi-tenant authentication
- Role-based access control
- Organization management
-
Registration System
- Program registration
- Waitlist management
- Document management
-
Payment Processing
- Secure payments
- Payment plans
- Refund management
-
Program Management
- Class/workshop management
- Attendance tracking
- Resource allocation
We use Jest and React Testing Library for testing:
pnpm test # Run all tests
pnpm test:watch # Run tests in watch mode
pnpm test:coverage # Generate coverage report
- Build the application:
pnpm build
- Start the production server:
pnpm start
Ensure all required environment variables are set in your deployment environment. See .env.example
for required variables.
- All API routes are protected with Clerk authentication
- Database access is controlled through RLS policies
- Sensitive data is encrypted at rest
- Regular security audits are performed
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'feat: add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.