The central hub for our institution's largest open-source event.
- Google Forms-like interface
- Support for multiple field types:
- Short Text
- Paragraph
- Radio (Single Choice)
- Checkbox (Multiple Choice)
- Dropdown (Select)
- Drag-and-drop question management
- Real-time preview
- Custom slug generation
- Google Sign-in authentication gate
- Duplicate submission prevention
- Progress bar tracking
- Responsive design
- Validation with error messages
- View all form responses
- CSV export
- XLSX export with formatting
- Response statistics
- Admin whitelist protection
- Firebase Authentication integration
- Admin email whitelist
- Firestore security rules
- Brand Kit: Dedicated page for colors, typography, and logos
- Theme: Retro-futuristic Risograph aesthetic
- Assets: Downloadable logo variations and style guidelines
- Framework: Next.js 15+ (App Router)
- Styling: Tailwind CSS v4
- Database: Firebase Firestore
- Authentication: Firebase Auth
- Forms: react-hook-form
- Animations: Framer Motion
- Icons: Lucide React
- Export: xlsx library
-
Install Dependencies
npm install
-
Configure Environment Variables
Copy
.env.exampleto.env.local:cp .env.example .env.local
Update
.env.localwith your Firebase configuration:# Firebase Configuration (Production credentials) NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id # Firebase Emulator Configuration (Development) NEXT_PUBLIC_USE_FIREBASE_EMULATOR="true" NEXT_PUBLIC_FIRESTORE_EMULATOR_HOST="localhost" NEXT_PUBLIC_FIRESTORE_EMULATOR_PORT="4000" NEXT_PUBLIC_AUTH_EMULATOR_HOST="localhost" NEXT_PUBLIC_AUTH_EMULATOR_PORT="9099" NEXT_PUBLIC_ADMIN_EMAILS=admin1@example.com,admin2@example.com
-
Start Firebase Emulators (Development)
For local development, start the Firebase emulators:
firebase emulators:start
The emulators will run on:
- Firestore: http://localhost:4000
- Auth: http://localhost:9099
- Emulator UI: http://localhost:8090
-
Run Development Server
npm run dev
The app will automatically connect to Firebase emulators when
NEXT_PUBLIC_USE_FIREBASE_EMULATOR="true". -
Build for Production
For production builds, ensure
.env.productionhas emulators disabled:NEXT_PUBLIC_USE_FIREBASE_EMULATOR="false"
Then build:
npm run build
- Uses Firebase Emulators for Auth and Firestore
- No real data is affected
- Fast iteration and testing
- Set
NEXT_PUBLIC_USE_FIREBASE_EMULATOR="true"in.env.local
- Uses actual Firebase services
- Real user data
- Set
NEXT_PUBLIC_USE_FIREBASE_EMULATOR="false"in.env.production - Deploy Firestore rules before going live:
firebase deploy --only firestore:rules
/- Landing page/forms/[slug]- Public form access/admin- Admin dashboard/admin/builder- Create/edit forms/admin/responses- View all forms/admin/responses/[slug]- View form responses
Admin access is controlled via the NEXT_PUBLIC_ADMIN_EMAILS environment variable. Only users with whitelisted emails can access the admin dashboard.
MIT License - See LICENSE file for details
This platform is built for Atria Summer of Code. Contributions are welcome!