Empowering organizers and participants to create amazing hackathon experiences
Features β’ Quick Start β’ Documentation β’ Tech Stack β’ Contributing
- Overview
- Features
- Tech Stack
- Architecture
- Quick Start
- Installation
- Configuration
- Database Setup
- Development
- Testing
- Deployment
- API Documentation
- Contributing
- License
TechAssassin is a modern, full-stack web application designed to streamline hackathon management. It provides a comprehensive platform for organizers to create and manage events, and for participants to discover, register, and compete in hackathons.
- π Full-Stack Solution: Complete backend API and responsive frontend
- π Secure Authentication: Supabase Auth with JWT tokens
- π Real-time Updates: Live participant counts and leaderboards
- πΎ Robust Database: PostgreSQL with Row Level Security (RLS)
- π File Management: Integrated storage for avatars, images, and logos
- π§ Email Notifications: Automated emails via Resend
- π¨ Modern UI: Built with React, TypeScript, and Tailwind CSS
- π§ͺ Well-Tested: Comprehensive test coverage with Vitest
-
β User Registration & Authentication
- Email/password authentication
- Profile management with avatar uploads
- Skills and social links (GitHub, LinkedIn, Portfolio)
-
β Event Discovery
- Browse upcoming, live, and past hackathons
- Filter events by status and themes
- View detailed event information
-
β Event Registration
- Register for events with team details
- Automatic waitlist management for full events
- Registration status tracking (confirmed/waitlist/cancelled)
-
β Dashboard
- View registered events
- Track registration status
- Access announcements and resources
-
β Event Management
- Create and edit hackathon events
- Set capacity limits and registration periods
- Upload event images and define themes
- Manage prizes and rules
-
β Participant Management
- View all registrations
- Approve or reject participants
- Manage waitlists
-
β Content Management
- Post announcements
- Share resources and learning materials
- Showcase sponsors with logos
-
β Leaderboard
- Track participant scores
- Real-time ranking updates
- Export results
- β RESTful API: Complete backend with 30+ endpoints
- β Type Safety: Full TypeScript implementation
- β Data Validation: Zod schemas for request/response validation
- β Error Handling: Consistent error responses with proper status codes
- β Rate Limiting: Protection against abuse
- β Caching: Optimized performance with caching strategies
- β Real-time: Supabase real-time subscriptions
- β File Uploads: Secure file storage with type and size validation
- β Database Migrations: Version-controlled schema changes
- β Row Level Security: Fine-grained access control
| Technology | Version | Purpose |
|---|---|---|
| React | 18.x | UI library |
| TypeScript | 5.x | Type safety |
| Vite | 5.x | Build tool |
| React Router | 6.x | Client-side routing |
| Tailwind CSS | 3.x | Styling |
| shadcn/ui | Latest | UI components |
| Tanstack Query | 5.x | Data fetching |
| Axios | 1.x | HTTP client |
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 14.x | Full-stack framework |
| TypeScript | 5.x | Type safety |
| PostgreSQL | 15.x | Database |
| Supabase | Latest | Auth & Database |
| Zod | 4.x | Schema validation |
| Resend | Latest | Email service |
| Vitest | 4.x | Testing framework |
| fast-check | 4.x | Property-based testing |
- Git - Version control
- npm - Package management
- Vercel - Deployment platform
- pgAdmin 4 - Database management
- ESLint - Code linting
- Prettier - Code formatting
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend (React) β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Pages β β Components β β Services β β
β β - Events β β - Navbar β β - API Clientβ β
β β - Dashboard β β - Cards β β - Auth β β
β β - Profile β β - Forms β β - Events β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β HTTP/REST API
ββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββ
β Backend (Next.js API) β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β API Routes β β Middleware β β Validation β β
β β - Auth β β - CORS β β - Zod β β
β β - Events β β - Auth β β - Schemas β β
β β - Profile β β - Error β β β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββΌβββββββββββββββββ
β β β
βββββββββ΄βββββββββ ββββββ΄ββββββ ββββββββββ΄βββββββββ
β PostgreSQL β β Supabase β β Resend Email β
β Database β β Auth β β Service β
ββββββββββββββββββ ββββββββββββ βββββββββββββββββββ
auth.users (Supabase Auth)
β
public.profiles (User profiles)
β
public.events (Hackathon events)
β
public.registrations (Event sign-ups)
β
public.leaderboard (Competition scores)
Additional Tables:
- public.announcements
- public.resources
- public.sponsors
- public.skills
- public.user_skills
- storage.buckets
- storage.objects
Get the application running in under 5 minutes!
- Node.js 18.x or higher (Download)
- npm 9.x or higher (comes with Node.js)
- PostgreSQL 15.x or higher (Download)
- Git (Download)
# 1. Clone the repository
git clone https://github.com/yourusername/techassassin.git
cd techassassin
# 2. Install backend dependencies
cd backend
npm install
# 3. Install frontend dependencies
cd ../Client
npm install- Create
backend/.env.local:
# Supabase Configuration (for authentication)
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key
# Local PostgreSQL Database
DATABASE_URL=postgresql://postgres:password@localhost:5432/techassassin
# JWT Configuration
JWT_SECRET=your-super-secret-jwt-key-min-32-characters
JWT_EXPIRES_IN=7d
# Email Service (Resend)
RESEND_API_KEY=your_resend_api_key
RESEND_FROM_EMAIL=noreply@techassassin.com
RESEND_FROM_NAME=TechAssassin
# Server Configuration
PORT=3001- Create
Client/.env.local:
# Backend API
VITE_API_URL=http://localhost:3001/api
# Supabase (same as backend)
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
# Application
VITE_APP_NAME=TechAssassin
VITE_APP_URL=http://localhost:3000- Open pgAdmin 4
- Create database:
techassassin - Open Query Tool
- Run
COMPLETE_DATABASE_SETUP.sqlfrom project root - Verify with
VERIFY_DATABASE.sql
# Connect to PostgreSQL
psql -U postgres
# Create database
CREATE DATABASE techassassin;
# Exit psql
\q
# Run setup script
psql -U postgres -d techassassin -f COMPLETE_DATABASE_SETUP.sql# Terminal 1: Start backend (port 3001)
cd backend
npm run dev
# Terminal 2: Start frontend (port 3000)
cd Client
npm run dev- Frontend: http://localhost:3000
- Backend API: http://localhost:3001
- API Health Check: http://localhost:3001/api/health
techassassin/
βββ backend/ # Backend application
β βββ app/
β β βββ api/ # API routes
β β βββ auth/ # Authentication endpoints
β β βββ events/ # Event management
β β βββ profile/ # User profiles
β β βββ registrations/ # Event registrations
β β βββ ...
β βββ lib/
β β βββ db/ # Database utilities
β β βββ middleware/ # Express middleware
β β βββ services/ # Business logic
β β βββ supabase/ # Supabase clients
β β βββ utils/ # Helper functions
β β βββ validations/ # Zod schemas
β βββ supabase/
β β βββ migrations/ # Database migrations
β βββ scripts/ # Utility scripts
β βββ .env.local # Environment variables
β βββ package.json
β
βββ Client/ # Frontend application
β βββ src/
β β βββ components/ # React components
β β β βββ ui/ # shadcn/ui components
β β βββ pages/ # Page components
β β β βββ Dashboard.tsx
β β β βββ Events.tsx
β β β βββ EventDetails.tsx
β β β βββ EditProfile.tsx
β β β βββ ...
β β βββ services/ # API service layer
β β β βββ auth.service.ts
β β β βββ events.service.ts
β β β βββ profile.service.ts
β β β βββ ...
β β βββ lib/ # Utilities
β β β βββ api-client.ts # HTTP client
β β βββ types/ # TypeScript types
β β βββ hooks/ # Custom React hooks
β β βββ App.tsx # Main app component
β βββ .env.local # Environment variables
β βββ package.json
β
βββ .gitignore
βββ README.md
βββ LICENSE
βββ vercel.json # Deployment config
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/signup |
Register new user |
| POST | /api/auth/signin |
Sign in user |
| POST | /api/auth/signout |
Sign out user |
| POST | /api/auth/reset-password |
Reset password |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/profile |
Get current user profile |
| GET | /api/profile/:id |
Get user profile by ID |
| PATCH | /api/profile |
Update current user profile |
| POST | /api/profile/avatar |
Upload avatar image |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/events |
List all events |
| GET | /api/events/:id |
Get event by ID |
| POST | /api/events |
Create event (admin) |
| PATCH | /api/events/:id |
Update event (admin) |
| DELETE | /api/events/:id |
Delete event (admin) |
| POST | /api/events/:id/images |
Upload event images |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/registrations |
Get user's registrations |
| GET | /api/registrations/event/:eventId |
Get event registrations (admin) |
| POST | /api/registrations |
Register for event |
| PATCH | /api/registrations/:id |
Update registration status (admin) |
- Announcements:
/api/announcements - Resources:
/api/resources - Sponsors:
/api/sponsors - Leaderboard:
/api/leaderboard
For complete API documentation, see the API Reference.
cd backend
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverage
# Run specific test file
npm test -- auth.test.tsCurrent test coverage:
- β Database schema validation
- β Authentication middleware
- β Registration service
- β Leaderboard service
- β Validation schemas
Tests are located in backend/lib/**/*.test.ts files.
Example test:
import { describe, it, expect } from 'vitest';
import { validateEmail } from './utils';
describe('Email Validation', () => {
it('should validate correct email', () => {
expect(validateEmail('test@example.com')).toBe(true);
});
it('should reject invalid email', () => {
expect(validateEmail('invalid-email')).toBe(false);
});
});- Push code to GitHub
- Import project in Vercel
- Set root directory to
backend - Add environment variables
- Deploy
- Import project in Vercel
- Set root directory to
Client - Add environment variables
- Deploy
Ensure all environment variables are set in Vercel dashboard:
Backend:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYDATABASE_URLJWT_SECRETRESEND_API_KEY
Frontend:
VITE_API_URL(your backend URL)VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
For production database:
# Connect to production database
psql -h your-db-host -U your-user -d your-database
# Run migrations
\i backend/supabase/migrations/00000000000000_init_local_postgres.sql
# ... run other migrations in orderWe welcome contributions from the community! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow TypeScript best practices
- Write tests for new features
- Update documentation
- Follow existing code style
- Use meaningful commit messages
- Use TypeScript for all new code
- Follow ESLint rules
- Use Prettier for formatting
- Write descriptive variable names
- Add comments for complex logic
Found a bug? Have a feature request?
- Check existing issues
- Create a new issue with:
- Clear title
- Detailed description
- Steps to reproduce (for bugs)
- Expected vs actual behavior
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2026 TechAssassin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
- Next.js - The React framework
- Supabase - Backend as a Service
- Vercel - Deployment platform
- shadcn/ui - UI components
- Tailwind CSS - CSS framework
- Resend - Email service
- β Core authentication
- β Event management
- β Registration system
- β Profile management
- β Basic dashboard
- π Team management
- π Project submissions
- π Judging system
- π Advanced leaderboard
- π Email notifications
- π Calendar integration
- π Analytics dashboard
- π₯ Video submissions
- π¬ Chat system
- π Achievements & badges
Made with β€οΈ by the TechAssassin Team