Terrible Cards — Compact SolidStart + Firebase multiplayer card game with GSAP animations.
- Framework: SolidStart (SolidJS)
- Runtime: Bun
- Styling: Tailwind CSS
- Animations: GSAP + CSS 3D
- Backend/Auth: Firebase (Firestore, Auth)
- Testing: Vitest + Solid Testing Library
- Start dev server:
bun dev - Build:
bun run build - Start (prod):
bun start - Run tests:
bun run test
src/— SolidStart app (routes, components, lib)src/components/— UI + game componentssrc/lib/firebase/— Firebase setup and helperssrc/lib/animations/— GSAP helperssrc/game/— game rules/state/actions
data/— static card decksfirebase.json,firestore.rules,firestore.indexes.json— Firebase config.sisyphus/— planning notes and migration docs
- Client config is read from Vite env vars (prefixed
VITE_). Example keys used in code:VITE_FIREBASE_API_KEY,VITE_FIREBASE_PROJECT_ID, etc. - Do NOT commit
.envfiles..gitignoreincludes.env*by default. - Keep any Firebase Admin/service-account secrets out of the repo and in a secure secret manager. If admin secrets were ever committed, rotate them immediately and purge history.
- Ensure no
.envor credential files are tracked:git ls-files | grep -E "\.env" - Scan git history for secrets with
gitleaks detect --source .orgitleaks detect --source . --report-path=gitleaks-report.json - If secrets are found, remove using
git filter-repoor BFG and rotate keys in provider consoles.
- Firebase emulators configured in
firebase.json(auth on9099, firestore on8080). - Use
VITE_USE_EMULATOR=truelocally to connect to emulators.
- Follow SolidJS reactivity: use Signals/Resources/Effects and avoid props destructuring that breaks reactivity.
- Keep Firebase client config in
VITE_*env vars; server-only Admin secrets must never be committed. - Register GSAP plugins in
src/lib/animations/gsap.tsand initialize/cleanup animations using lifecycle hooks. - Write tests next to implementations and mock Firebase/GSAP in unit tests.
- Create a branch per feature:
git checkout -b feat/your-feature - Run tests locally before opening PR:
bun run test - Keep sensitive values out of commits; add
.env.examplewith placeholders.
For repo-level questions, check the .sisyphus notes or reach out to the maintainers via the project GitHub.