A modern, franchisable platform for matching students with FIRST Robotics teams. Built by FTC12808 RevAmped to strengthen the FIRST community, this app can be easily deployed for any state or region.
π Need detailed setup instructions? Visit our interactive setup guide for step-by-step instructions with code examples, database setup options, and an interactive checklist.
FIRST TeamMatch is designed to be **franchisable - meaning any FIRST team or organization can set up their own instance for their state or region. Each instance has its own database, configuration, and branding, allowing teams to manage their own matching platform independently.
- Student Registration: Multi-step form with profile creation, skills tracking, and resume upload
- Team Registration: Comprehensive team profiles with needs, requirements, and preferences
- Smart Matching: Algorithm-based matching between students and teams
- Admin Dashboard: Full management interface for viewing and managing registrations
- State-Specific Configuration: Easy customization for your state/region
- Self-Hosted: Deploy anywhere - Vercel, AWS, your own server, etc.
- Node.js 18+ and npm
- A Firebase account (free tier works)
- A GitHub account (for cloning the repository)
git clone https://github.com/HypedFire30/first-teammatch.git
cd first-teammatch
npm install- Copy the environment template:
cp env-template.txt .env.local - Edit
.env.localand set your state/organization information:NEXT_PUBLIC_STATE_NAME- Your state nameNEXT_PUBLIC_ORG_NAME- Your team nameNEXT_PUBLIC_ORG_LOCATION- Your locationNEXT_PUBLIC_ORG_EMAIL- Your contact emailNEXT_PUBLIC_APP_NAME- Your app name- See
env-template.txtfor all options
- Create a Firebase project at Firebase Console
- Enable Email/Password authentication
- Create Firestore Database (production mode)
- Set up Firebase Storage (production mode)
- Copy security rules from
firestore.rulesandstorage.rules - Get your Firebase config from Project Settings β Your apps β Web
- Add Firebase config to
.env.local:NEXT_PUBLIC_FIREBASE_API_KEY=your-api-key NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com NEXT_PUBLIC_FIREBASE_PROJECT_ID=your-project-id NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your-project.appspot.com NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your-sender-id NEXT_PUBLIC_FIREBASE_APP_ID=your-app-id
npm run devVisit http://localhost:3000 to see your customized homepage.
- Register an account through the app
- Run:
npm run manage:admins -- add [email protected] - Or manually: Create document in Firestore
adminscollection with user's UID as document ID
Vercel (Recommended):
- Push code to GitHub
- Import project in Vercel
- Add all environment variables from
.env.local - Deploy
Other Platforms: AWS Amplify, Netlify, Railway, or your own server
π‘ For detailed instructions, visit first-teammatch.vercel.app/setup
| Variable | Description | Example |
|---|---|---|
NEXT_PUBLIC_STATE_NAME |
Full name of your state | California |
NEXT_PUBLIC_STATE_ABBREVIATION |
Two-letter state code | CA |
NEXT_PUBLIC_REGION_NAME |
Region name (can be same as state) | California |
NEXT_PUBLIC_ORG_NAME |
Your team/organization name | FTC12345 YourTeam |
NEXT_PUBLIC_ORG_LOCATION |
Your organization's location | San Francisco, California |
NEXT_PUBLIC_ORG_WEBSITE |
Your organization's website | https://yourteam.org |
NEXT_PUBLIC_ORG_EMAIL |
Your organization's email | [email protected] |
NEXT_PUBLIC_CONTACT_EMAIL |
Contact email for bug reports | [email protected] |
NEXT_PUBLIC_APP_NAME |
Full app name | FIRST TeamMatch California |
NEXT_PUBLIC_APP_DESCRIPTION |
App description | Connecting students with teams in California. |
| Variable | Description | Example |
|---|---|---|
NEXT_PUBLIC_SUPPORT_EMAIL |
Separate support email | [email protected] |
NEXT_PUBLIC_DEPLOYMENT_URL |
Your deployment URL | https://teammatch.yourstate.org |
# Add an admin
npm run manage:admins -- add [email protected]
# Remove an admin
npm run manage:admins -- remove [email protected]
# List all admins
npm run manage:admins -- listOr manually in Firebase Console: Create/edit document in admins collection with user's UID as document ID.
Before going live:
- Firestore security rules published
- Storage security rules published
- Admin accounts set up
- Environment variables set in production
- Firebase Authentication enabled
- Registration flow tested
- Admin dashboard tested
π Interactive checklist available at first-teammatch.vercel.app/setup
first-teammatch/
βββ app/ # Next.js app directory
β βββ admin/ # Admin dashboard
β βββ dashboard/ # User dashboard
β βββ login/ # Authentication
β βββ setup/ # Setup instructions page
β βββ student-registration/ # Student signup
β βββ team-registration/ # Team signup
βββ components/ # React components
β βββ ui/ # Reusable UI components
β βββ navigation-header.tsx # Global navigation
βββ lib/ # Core libraries
β βββ config.ts # App configuration
β βββ firebase.ts # Firebase setup
β βββ auth.ts # Authentication
β βββ utils.ts # Utilities
βββ scripts/ # Utility scripts
β βββ manage-admins.ts # Admin management
β βββ import-auth-accounts.ts # Auth account import
βββ firestore.rules # Firestore security rules
βββ storage.rules # Storage security rules
βββ env-template.txt # Environment variable template
- Framework: Next.js 14 (App Router)
- Database: Firebase Firestore (Supabase also supported)
- Authentication: Firebase Auth
- Storage: Firebase Storage
- UI: Tailwind CSS, Shadcn UI, Radix UI
- Forms: React Hook Form, Zod
- Language: TypeScript
The app uses a configuration system that reads from environment variables. All state-specific text, organization information, and branding can be customized through environment variables - no code changes needed!
See lib/config.ts for the configuration structure and env-template.txt for all available options.
- Firebase not configured: Make sure all
NEXT_PUBLIC_FIREBASE_*variables are set - Type errors: Run
npm installto ensure all dependencies are installed
- "Firestore is not initialized": Check your Firebase environment variables
- Authentication not working: Verify Email/Password is enabled in Firebase Console
- Can't upload files: Check Storage security rules and ensure Storage is enabled
- Environment variables not working: Ensure variables are set in your deployment platform's dashboard
- Build fails: Check that all required environment variables are set
- App shows default values: Verify
NEXT_PUBLIC_*variables are set correctly
For questions or issues:
- Check this README and the troubleshooting section
- Visit the detailed setup guide
- Review Firebase documentation for setup issues
- Open an issue on GitHub
- Contact: [email protected]
This is a franchisable project. If you've set up your own instance and made improvements:
- Consider contributing back to the main repository
- Share your improvements with other state instances
- Help build a stronger FIRST community
Private project - Built by FTC12808 RevAmped
FIRST TeamMatch was created by FTC12808 RevAmped to help strengthen the FIRST robotics community. We're excited to see teams across the country using this platform to connect students with teams.