A modern React template with Firebase authentication, live design tokens, Vite, TypeScript, and comprehensive testing setup.
- ⚡️ Vite for super fast development
- 🔐 Firebase Authentication with Google SSO
- 🎨 Live Design Tokens system with Firebase Remote Config
- 💅 Emotion CSS-in-JS styling
- 📝 TypeScript support with path aliases
- ✅ Testing setup with Vitest and Testing Library
- 🔍 ESLint + Prettier configuration with pre-commit hooks
- 📦 PNPM package management
- 📚 Storybook for component development
- Clone this template
- Install dependencies:
pnpm i
- Start the development server:
make emulator
make emulator- Start development server (runs on port 3000)make build- Build for productionmake clean- Remove build artifacts and node_modules
make lint- Run ESLint with auto-fixmake format- Format all files with Prettiermake checkFormat- Check formatting (used in CI)make preCommit- Run pre-commit checks manually
make test- Run tests in watch modemake testRun- Run tests once (for CI)
make beStaging- Switch to staging environmentmake beProduction- Switch to production environment
make tokensSync- Download tokens from Firebase and generate TypeScript constantsmake tokensUpload- Upload local tokens.json to Firebase Remote Config
src/
├── App.tsx # Root application component
├── components/ # Reusable components & their tests
├── context/ # React contexts (Auth, Design Tokens)
├── hooks/ # Custom React hooks
├── lib/ # Utility libraries (Firebase, Design Tokens)
├── gen/ # Generated files (tokens.json, tokenConstants.ts)
├── test/ # Test configuration
└── main.tsx # Application entry point
- Firebase Authentication with Google SSO
AuthContextprovides auth state throughout the app- Unauthenticated users see login page, authenticated users see profile
- Live design tokens loaded from Firebase Remote Config
- Local fallback from
src/gen/tokens.json - Type-safe constants generated in
src/gen/tokenConstants.ts - Components use
getValue()andgetClasses()methods
- Firebase config via
VITE_PUBLIC_FIREBASE_CLIENT_CONFIG(base64 encoded) - Environment switching with
.envsymlinks - Path aliases configured for clean imports
Feel free to submit issues and enhancement requests!