A modern, full-stack web platform for university Computer Science Club management and public engagement. Built with Next.js, Django REST Framework, and PostgreSQL.
This is a monorepo containing three main applications:
apps/public-website/- Public-facing Next.js websiteapps/officers-hub/- Officer management dashboard (Clerk-authenticated)apps/backend/- Django REST API backendpackages/ui/- Shared UI components library
- Frontend: Next.js 15, React 19, TypeScript, Tailwind CSS
- Backend: Django 5.x, Django REST Framework, PostgreSQL
- Authentication: Clerk (officers-hub), Public API (web)
- UI Components: shadcn/ui, Aceternity UI
- Build System: Turbo (monorepo), pnpm
- Deployment: TBD (GitHub Actions planned)
- Docker Desktop (includes Docker and Docker Compose)
- Node.js >= 20 (for local development outside Docker)
- pnpm (package manager)
git clone <repository-url>
cd club-website
# Install dependencies and setup database
pnpm setup
# Optional: Create .env file only if you need to override defaults
# cp env.example .env# Start all services (frontend, backend, database)
pnpm dev
# Or run in detached mode
pnpm dev:detached
# View logs
pnpm logs# Stop all services
pnpm cleanup
# Stop and remove volumes (deletes database data)
pnpm cleanup:volumesOnce running, access the applications at:
- Public Website: http://localhost:3000
- Officers Hub: http://localhost:3001 (requires Clerk authentication)
- Django API: http://localhost:8000/api
# Database operations
pnpm db:migrate # Run database migrations
pnpm db:makemigrations # Create new migrations
pnpm db:shell # Access PostgreSQL shell
# Django operations
pnpm api:shell # Access Django shell
# Development
pnpm logs # View all service logs
pnpm logs api # View specific service logscs-club-website/
βββ apps/
β βββ public-website/ # Public Next.js website
β β βββ app/ # App router pages
β β βββ components/ # React components
β β βββ hooks/ # Custom React hooks
β β βββ lib/ # Utilities & API client
β βββ officers-hub/ # Officer dashboard
β β βββ app/ # Protected dashboard pages
β β βββ components/ # Dashboard components
β β βββ hooks/ # Officer-specific hooks
β β βββ middleware.ts # Clerk authentication
β βββ backend/ # Django REST API
β βββ api/ # Main API app
β β βββ models/ # Database models
β β βββ services/ # Business logic
β β βββ views/ # API endpoints
β β βββ serializers/ # Data transformation
β β βββ permissions/ # Access control
β βββ backend/ # Django settings
βββ packages/
β βββ ui/ # Shared component library
β βββ eslint-config/ # Shared ESLint config
β βββ typescript-config/ # Shared TypeScript config
βββ db/
βββ schema.sql # Database schema reference
No configuration required! The project includes sensible defaults for all environment variables in docker-compose.yml, including test Clerk authentication keys.
Only create a .env file if you need to override the defaults (e.g., using your own Clerk keys):
# Copy the example file
cp env.example .env
# Edit with your custom values
# Most commonly changed: Clerk authentication keysSee env.example for all available configuration options. The most common customization is adding your own Clerk keys from https://dashboard.clerk.com.
- β Events: Browse upcoming CS Club events
- β Announcements: Latest club news and updates
- β Officers: Meet the current leadership team
- β About: Club information and mission
- β RSVP System: Public event registration
- β Responsive Design: Mobile-first approach
- β Dark/Light Mode: System-aware theming
- β Authentication: Clerk-based officer login
- β Dashboard: Overview of club metrics
- β Event Management: Create, edit, delete events
- β Announcement Management: Publish club updates
- β Officer Management: Manage team profiles
- β RSVP Tracking: View event registrations
- β Protected Routes: Officer-only access
- β REST API: Clean, documented endpoints
- β Authentication: Clerk JWT verification
- β Public Endpoints: Events, announcements, officers
- β Officer Endpoints: CRUD operations
- β Database: PostgreSQL with proper schema
- β Clean Architecture: Services, models, views separation
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Follow the existing code style and architecture
- Test your changes thoroughly
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Separation of Concerns: Keep business logic in services, UI logic in components
- Type Safety: Use TypeScript throughout, avoid
anytypes - Responsive Design: Mobile-first approach with Tailwind CSS
- Accessibility: Follow WCAG guidelines
- Performance: Optimize images, lazy load components, minimize bundle size
We welcome contributions from everyone! Whether you're fixing bugs, adding features, or improving documentation, your help is appreciated.
Please read our Contributing Guide for detailed instructions on how to get started.
# Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/club-website.git
cd club-website
# Set up the development environment
pnpm setup
# Start developing
pnpm devCheck out our open issues, especially those tagged with:
good first issue- Perfect for beginnershelp wanted- We need your help!documentation- Help improve our docs
Thanks to all our amazing contributors! π
Made with contrib.rocks.
This project is licensed under the MIT License - see the LICENSE file for details.
- CS Club members and officers for their continuous support
- Our university for providing resources and guidance
- The open-source community for amazing tools and libraries