A full-stack team registration system for Resonate Hackathon with multi-step form validation and Firebase backend.
- Node.js (v14 or higher)
- npm or yarn
- Firebase project setup
-
Navigate to the backend directory:
cd backend -
Install dependencies:
npm install
-
Configure environment variables:
- The
.envfile is already created with default settings - Update if needed (PORT=5000 is default)
- The
-
Verify Firebase configuration:
- Check
firebase.jsfor correct Firebase credentials - Ensure Firebase Storage and Firestore are enabled in your Firebase Console
- Check
-
Start the backend server:
npm start
For development with auto-reload:
npm run dev
Server will run on:
http://localhost:5000
-
Navigate to the frontend directory:
cd frontend -
Install dependencies:
npm install
-
Configure environment variables:
- The
.envfile is already created - Verify
VITE_BACKEND_URL=http://localhost:5000
- The
-
Start the development server:
npm run dev
Frontend will run on:
http://localhost:5173(or the port shown in terminal)
- Step 1: About - Event information display
- Step 2: Team Details - Team name, size, and track selection
- Step 3-6: Member Details - Individual member information (2-4 members)
- Leader (Member 1) requires additional fields: Personal Email & Phone Number
- All members: Name, Register Number, Residential Status
- Final Step: Payment - Upload payment proof
- File upload handling with Multer
- Firebase Storage integration for payment proofs
- Firestore database for registration data
- Duplicate registration prevention (by leader's register number)
- Input validation
- Error handling middleware
- CORS enabled
Submit team registration form
Request:
- Content-Type:
multipart/form-data - Body:
teamName(string)numberOfMembers(string: "2", "3", or "4")trackChoice(string)members(JSON string array)paymentProof(file)
Response:
- Success (201):
{ message: "Registration successful", success: true } - Duplicate (400):
{ message: "Team leader already registered", duplicate: true } - Error (500):
{ message: "Server error: ..." }
Health check endpoint
- express - Web framework
- cors - Cross-origin resource sharing
- multer - File upload handling
- firebase - Firebase SDK
- dotenv - Environment variable management
- React + Vite
- Material-UI (@mui/material)
- Framer Motion - Animations
- Axios - HTTP client
{
teamName: string,
numberOfMembers: number,
trackChoice: string,
members: [
{
name: string,
registerNumber: string,
residentialStatus: string,
personalEmail: string (leader only),
phoneNumber: string (leader only)
}
],
leaderRegisterNumber: string,
leaderEmail: string,
paymentProofUrl: string,
createdAt: number,
submittedAt: string (ISO format)
}payment-proofs/
├── {timestamp}-{filename}.jpg
├── {timestamp}-{filename}.png
└── ...
-
CORS Error:
- Ensure backend is running on port 5000
- Check frontend .env has correct VITE_BACKEND_URL
-
File Upload Fails:
- Check file size (max 5MB)
- Verify only image files are uploaded
- Ensure Firebase Storage rules allow uploads
-
Duplicate Registration Error:
- This is intentional - prevents re-registration with same leader
- Use different register number for testing
-
Form Validation Errors:
- Register number must match format: RA + 13 digits
- Phone number must be exactly 10 digits
- Email must be valid format
- Start both backend and frontend servers
- Open browser to frontend URL
- Navigate through form steps:
- View event information
- Enter team details
- Fill member information
- Upload payment proof
- Submit and verify success message
- Team Name: Required
- Number of Members: Required (2-4)
- Track Choice: Required
- Member Name: Required, alphabets only
- Register Number: Required, format RA{13 digits}
- Personal Email (Leader): Required, valid email
- Phone Number (Leader): Required, exactly 10 digits
- Residential Status: Required (Hosteller/Day Scholar)
- Payment Proof: Required, image files only
- Update Firebase credentials for production
- Set NODE_ENV=production
- Configure proper CORS origins
- Use environment variables for sensitive data
- Update VITE_BACKEND_URL to production URL
- Build for production:
npm run build - Deploy dist folder
For issues or questions, contact the development team.
Built with ❤️ for Resonate Hackathon