A comprehensive hackathon management platform designed by and for the ABES ACM Student Chapter and ABES ACM-W Student Chapter to streamline the entire hackathon lifecycle.
Power Panel is a centralized platform that brings together organizers, judges, mentors, and participants to create a seamless hackathon experience. It provides robust tools for participant management, real-time communication, submission handling, and evaluation workflows—all from a single dashboard.
- Centralized team and participant registry
- Role-based access control (Participants, Mentors, Judges, Admins)
- Team formation and management
- Submission tracking and analytics
- AWS SES Integration for sending emails via custom domain
- Resend Support via adapter pattern for flexibility
- Batch email campaigns
- Customizable email templates
- Queue-based email processing with BullMQ
- File uploads (PowerPoint, Documents, etc.)
- AWS S3 Integration for secure storage
- Submission versioning and tracking
- Attachment management with preview capabilities
- Real-time hackathon analytics and metrics
- Judge assignment and panel management
- Evaluation criteria management
- Performance tracking and leaderboards
- Mentor feedback system
- Dashboard for comprehensive event oversight
- Judge recruitment and scheduling
- Problem statement management
- Participant statistics and insights
- Availability management for judges/mentors
- Next.js 16 - React framework with SSR
- TypeScript - Type-safe development
- Tailwind CSS - Utility-first styling
- React Query - State management
- Recharts - Analytics visualization
- dnd-kit - Drag and drop functionality
- Shadcn/ui - Component library
- Lucide Icons - Icon set
- Node.js/Bun - Runtime
- Prisma - ORM with PostgreSQL
- PostgreSQL - Primary database
- Redis - Caching and job queue
- BullMQ - Job/task queue
- Better-auth - Authentication
- AWS S3 - File storage
- AWS SES - Email delivery (with Resend fallback)
- ESLint - Code linting
- Monorepo with Bun workspaces
The project is organized as a monorepo with clear separation of concerns:
apps/web- Main Next.js application (UI, dashboards, API routes)apps/worker- Background job processor for email and file operations
packages/db- Prisma schema and database utilitiespackages/allocation- Judge and panel assignment algorithmspackages/job-runtime- Job queue management and enqueuingpackages/jobs- Job handlers (email, file deletion, uploads)packages/mails- Email templating and provider abstractionpackages/storage- Storage abstraction layer (S3, etc.)
power-panel/
├── apps/
│ ├── web/ # Main Next.js application
│ │ ├── src/
│ │ │ ├── app/ # Route handlers & pages
│ │ │ ├── components/ # Reusable React components
│ │ │ ├── actions/ # Server actions
│ │ │ ├── hooks/ # Custom React hooks
│ │ │ └── lib/ # Utilities
│ │ └── docs/ # Documentation
│ └── worker/ # Background job processor
├── packages/
│ ├── db/ # Database layer
│ │ ├── prisma/ # Schema & migrations
│ │ └── scripts/ # Seeding scripts
│ ├── allocation/ # Judge allocation engines
│ ├── job-runtime/ # Queue management
│ ├── jobs/ # Job handlers
│ ├── mails/ # Email system
│ └── storage/ # Storage abstraction
└── package.json # Root workspace config
- Node.js 18+ or Bun runtime
- PostgreSQL 13+
- Redis (for job queue)
- AWS account (for S3 and SES) or Resend account
-
Clone the repository
git clone <repository-url> cd power-panel
-
Install dependencies
bun install # or npm install -
Set up environment variables Create
.envfile in the root and configure:# Database DATABASE_URL="postgresql://user:password@localhost:5432/power_panel" # Redis REDIS_URL="redis://localhost:6379" # AWS S3 AWS_ACCESS_KEY_ID=your_access_key AWS_SECRET_ACCESS_KEY=your_secret_key AWS_REGION=us-east-1 AWS_S3_BUCKET=your_bucket_name # AWS SES AWS_SES_REGION=us-east-1 # Email Configuration EMAIL_FROM="noreply@yourdomain.com" # Resend (Optional fallback) RESEND_API_KEY=your_resend_key
-
Generate Prisma client
bun run db:generate
-
Run database migrations
bun run db:migrate
-
Seed initial data (optional)
bun run seed:judges
Start the web application:
bun run webRuns on http://localhost:3000
Start the worker:
bun run workerProcesses background jobs from the queue
Build for production:
bun run web:buildRun web application:
bun run web:prodRun worker:
bun run worker:prod- Admin: Full platform access, event management
- Organizer: Event oversight, judge management, analytics
- Judge: Team evaluations, feedback submission
- Mentor: Team guidance, feedback
- Participant: View submissions, team management
The email system uses an adapter pattern for flexibility:
- AWS SES - Primary provider for custom domain emails
- Resend - Fallback/alternative provider
- Queue-based processing for reliability
- Template management system
Built on BullMQ and Redis:
- Email sending
- File uploads to S3
- File deletion
- Submission processing
- Prisma ORM with PostgreSQL
- Type-safe database operations
- Automated migrations
- Comprehensive schema with relationships
The email system follows a modular architecture:
- Provider Abstraction: Support for multiple providers (AWS SES, Resend)
- Template System: Reusable email templates
- Queue Processing: Asynchronous email delivery
- Configuration Management: Environment-based provider selection
File management with S3 integration:
- Direct file uploads
- Secure URL generation
- File metadata tracking
- Support for multiple file types
Comprehensive evaluation framework:
- Evaluation Criteria: Customizable scoring rubrics
- Judge Assignments: Intelligent panel allocation
- Performance Metrics: Real-time evaluation analytics
- Feedback System: Mentor and judge feedback tracking
Useful commands available in the root package.json:
bun run web # Start dev server
bun run web:build # Build for production
bun run web:start # Start production server
bun run worker # Start background worker
bun run db:generate # Generate Prisma client
bun run seed:judges # Seed judge data
bun run install:all # Install all dependenciesDATABASE_URL- PostgreSQL connectionREDIS_URL- Redis connectionAWS_*- AWS credentials and regionsRESEND_API_KEY- Resend API keyEMAIL_FROM- Default sender email
REDIS_URL- Job queue connectionDATABASE_URL- Database connectionRESEND_API_KEY/ AWS credentials - Email provider
- Use TypeScript for type safety
- Follow the monorepo structure
- Write tests for critical features
- Use server actions for mutations
- Implement proper error handling
- Never commit
.envfiles - Use environment variables for secrets
- Validate user input on both client and server
- Implement proper RBAC checks
- Use HTTPS in production
- Leverage Prisma relationships efficiently
- Use React Query for data fetching
- Implement pagination for large datasets
- Cache frequently accessed data with Redis
- Optimize image and file uploads
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
Detailed documentation available in:
For questions or support regarding the platform:
- ABES ACM Student Chapter - acm@abes.ac.in
- ABES ACM-W Student Chapter - acmw@abes.ac.in
This project is maintained by ABES ACM Student Chapter and ABES ACM-W Student Chapter.
Built with ❤️ by Kunal Rana, Web Master ABES ACM Student Chapter