Smart team formation made simple.
TeamMaker is a Next.js application for creating balanced teams, saving them as workspaces, and coordinating team activities. It uses Firebase Authentication, Cloud Firestore, and Cloud Storage for accounts and persistent workspace data.
This repository is not production-ready and has not been security audited. It contains the Firebase web configuration for a shared test project in client-side code. Anyone who loads the application or reads the repository can obtain and reuse that configuration. Do not store production data in the included Firebase project or deploy this application as-is.
Firebase web API keys are identifiers intended to be present in browser code; moving the key to a frontend environment variable does not make it secret. Security must instead be enforced with restrictive Firestore and Storage rules, Firebase Authentication, API-key restrictions, authorized domains, App Check, least-privilege access, and usage/billing monitoring. Create and secure your own Firebase project before deployment, and keep genuine secrets and privileged operations on a trusted backend.
- Randomized team formation with configurable group sizes
- Fixed member pairs and locked teams
- Saved workspaces with owner, leader, member, and viewer access
- Public and private workspace support
- Assignments, submissions, evaluations, and team scores
- Lecture notes, attachments, and task submissions
- Workspace chat and notifications
- Responsive layout and dark mode
- Node.js 18.18 or newer
- Yarn 1.x or npm 8 or newer
- Access to the configured Firebase project, or your own Firebase web project
git clone https://github.com/rhcproc/teammaker.git
cd teammaker
yarn install
yarn devOpen http://localhost:3000.
If port 3000 is already occupied, use another port:
yarn dev -p 3001Important: The exposed Firebase API key and configuration committed to this repository are for testing only. Before running or deploying your own copy, replace them with the configuration for a Firebase project that you control. Update both
src/services/firebase/config.tsandpublic/google-auth.html; do not use the included test project for your own application or production data.
Firebase is initialized in src/services/firebase/config.ts. The current
configuration points to the existing shufflemates-ce09a Firebase project.
That legacy project ID is intentional: renaming this Git repository does not
rename Firebase resources, and changing the ID without creating and configuring
a replacement project will disconnect authentication, Firestore, and Storage.
To use a different Firebase project:
- Create a Firebase web application.
- Enable the required Authentication providers.
- Create a Cloud Firestore database and a Cloud Storage bucket.
- Replace the Firebase web configuration in
src/services/firebase/config.ts. - Add your local and deployed domains to Firebase Authentication's authorized domains.
- Review and deploy appropriate Firestore and Storage security rules. The
repository's
firebase-storage-rules.txtis a starting reference and should be reviewed before production use.
Firebase web configuration values identify the client application; access must be protected with Authentication and restrictive Firestore and Storage rules.
| Command | Purpose |
|---|---|
yarn dev |
Start the development server |
yarn build |
Create an optimized production build |
yarn start |
Serve the production build |
yarn test |
Display the current test-runner status |
./node_modules/.bin/tsc --noEmit |
Run TypeScript validation |
Stop the development server before running yarn build. Development and
production builds both use .next; running them at the same time can create
inconsistent manifests and MODULE_NOT_FOUND or /_app errors.
| Route | Description |
|---|---|
/ |
Landing page and account overview |
/app |
Team formation tool |
/results |
Generated team results |
/workspaces |
Workspaces available to the signed-in user |
/workspace/[workspaceId] |
Direct and preferred workspace route |
/workspaces/[teamName] |
Legacy name-based workspace route |
/workspace/[workspaceId]/team/[teamId]/chat |
Team chat |
/notifications |
User notifications |
/contact |
Contact page |
New workspace navigation uses the Firestore document ID route. If an old name-based link cannot be resolved, open My Workspaces and select the workspace again to generate the direct URL.
src/
├── app/ Next.js routes and root layout
├── components/ Shared UI and feature components
├── contexts/ Authentication and application settings
├── services/ Firebase-backed domain services
├── styles/ Application stylesheets
├── utils/ URL, access-control, and helper utilities
└── views/ Main application screens
yarn build
yarn startThe production server uses port 3000 by default. Set a different port through
your hosting platform or pass -p <port> to the Next.js command when needed.