Moment is a focused countdown app built with React, TypeScript, and Firebase. Sign in with Google, save private countdowns across devices, and give each event its own atmosphere.
- One cinematic countdown at the center of the experience.
- Private Google-authenticated Firestore storage.
- Upcoming and historical countdown library.
- Aurora, Event Horizon, Hyperdrive, and Paper Riot themes.
- Persisted Aurora background mood slider.
- Reduced-motion-aware confetti when the selected timer reaches zero.
- Responsive drawer, editor, and timer layout.
-
Install dependencies:
npm install
-
Copy
.env.exampleto.envand add the Firebase web app values:VITE_FIREBASE_API_KEY= VITE_FIREBASE_AUTH_DOMAIN=countdown-57acd.firebaseapp.com VITE_FIREBASE_PROJECT_ID=countdown-57acd VITE_FIREBASE_STORAGE_BUCKET=countdown-57acd.firebasestorage.app VITE_FIREBASE_MESSAGING_SENDER_ID= VITE_FIREBASE_APP_ID= -
In Firebase Authentication, enable Google as a sign-in provider and add the local or hosted domain to Authorized domains.
-
Publish the included owner-scoped Firestore rules before using the app against the live project:
firebase deploy --only firestore:rules
-
Start the app:
npm run dev
This workspace already has a locally ignored .env populated from the existing countdown-57acd Firebase web app. The committed example remains safe to share.
npm run test:run
npm run typecheck
npm run lint
npm run buildThe production build is written to dist, matching the existing Firebase Hosting configuration. To publish the web app after building:
firebase deploy --only hostingWhen the selected countdown reaches zero, it stays visible at 00 and celebrates once for the current page session. Expired active countdowns move to History only on the next app load, as designed.
Countdowns live at users/{uid}/countdowns/{countdownId}. Firestore rules require the authenticated user id to match the path and validate every stored field.