Skip to content

Computer-Science-Club-SCSU-University/club-website

Repository files navigation

CS Club Website

A modern, full-stack web platform for university Computer Science Club management and public engagement. Built with Next.js, Django REST Framework, and PostgreSQL.

πŸ—οΈ Architecture

This is a monorepo containing three main applications:

  • apps/public-website/ - Public-facing Next.js website
  • apps/officers-hub/ - Officer management dashboard (Clerk-authenticated)
  • apps/backend/ - Django REST API backend
  • packages/ui/ - Shared UI components library

Tech Stack

  • 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)

πŸš€ Quick Start

Prerequisites

  • Docker Desktop (includes Docker and Docker Compose)
  • Node.js >= 20 (for local development outside Docker)
  • pnpm (package manager)

1. Clone & Setup

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

2. Run the Application

# Start all services (frontend, backend, database)
pnpm dev

# Or run in detached mode
pnpm dev:detached

# View logs
pnpm logs

3. Stop Services

# Stop all services
pnpm cleanup

# Stop and remove volumes (deletes database data)
pnpm cleanup:volumes

🌐 Access Points

Once running, access the applications at:

πŸ› οΈ Useful Commands

# 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 logs

πŸ“ Project Structure

cs-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

πŸ”§ Environment Configuration

No configuration required! The project includes sensible defaults for all environment variables in docker-compose.yml, including test Clerk authentication keys.

Optional: Custom Configuration

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 keys

See env.example for all available configuration options. The most common customization is adding your own Clerk keys from https://dashboard.clerk.com.

🎯 Features

Public Website (apps/public-website)

  • βœ… 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

Officers Hub (apps/officers-hub)

  • βœ… 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

Backend API (apps/backend)

  • βœ… 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

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Follow the existing code style and architecture
  4. Test your changes thoroughly
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

Development Guidelines

  • Separation of Concerns: Keep business logic in services, UI logic in components
  • Type Safety: Use TypeScript throughout, avoid any types
  • Responsive Design: Mobile-first approach with Tailwind CSS
  • Accessibility: Follow WCAG guidelines
  • Performance: Optimize images, lazy load components, minimize bundle size

🀝 Contributing

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.

Quick Start for Contributors

# 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 dev

Looking for something to work on?

Check out our open issues, especially those tagged with:

  • good first issue - Perfect for beginners
  • help wanted - We need your help!
  • documentation - Help improve our docs

✨ Contributors

Thanks to all our amazing contributors! πŸŽ‰

Made with contrib.rocks.

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

  • 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

About

The official website of the Computer Science Club at St. Cloud State University.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors