Scans the void for "TODO: fix later" and other developer tears. An AI-powered exploration of broken code and deadline panic. π
Digital Archaeology Division
"We didn't write the code. We just catalogued its confessions."
Readme.txt Rouletter is an interactive exhibition dedicated to the uncelebrated literature of software engineering β the code comment.
Every line of code is a decision. Every comment is a confession.
Deep within abandoned repos and forgotten forks, developers leave behind traces of their humanity: frustrated rants, confused TODOs, desperate FIXMEs, and cryptic explanations that no longer make sense. This tool acts as a digital archaeologist, scrolling through these hidden messages so you don't have to.
All displayed "artifacts" are AI-generated simulations of real developer confessions β inspired by patterns observed in open-source codebases. No actual repositories were harmed, inspected, or judged during the making of this app. It's fiction, but the pain is real.
- Node.js 18+
# 1. Clone the repo
git clone https://github.com/JithendraNara/readme-roulette.git
cd readme-roulette
# 2. Install dependencies
npm install
# 3. (Optional) Set up Firebase for live backend
# Copy and fill in your Firebase config in services/firebase.ts
# See "Backend" section below.
# 4. Start the dev server
npm run devThe app opens at http://localhost:3000.
npm run build
npm run previewStatic output goes to dist/. Deploy dist/ to any static host (Vercel, Netlify, Cloudflare Pages, etc.).
| Layer | Technology |
|---|---|
| UI Framework | React 19 |
| Build Tool | Vite 6 |
| Styling | Tailwind CSS (PostCSS) |
| Backend | Firebase Functions (Cloud) |
| AI | Google Gemini (AI Studio) |
| Fonts | Georgia / Courier New (system serif/mono) |
src/
βββ App.tsx # Root β state, history, scan logic
βββ components/
β βββ ArtifactDisplay # The "display case" β main quote card
β βββ Controls # [Find Another Discovery] button
β βββ Header # Branding + Archives/About nav
β βββ AboutModal # About the collection modal
β βββ HistoryModal # Slide-in archives drawer
βββ services/
β βββ gemini.ts # Fetches artifact from Firebase backend
β βββ firebase.ts # Firebase Functions init
βββ utils/
β βββ regex.ts # Comment extraction from raw code
βββ types.ts # CodeArtifact, GeminiArtifactResponse
βββ constants.ts # Loading messages, fallback artifacts
.env.local
βββ VITE_FIREBASE_API_KEY
βββ VITE_FIREBASE_AUTH_DOMAIN
βββ VITE_FIREBASE_PROJECT_ID
βββ VITE_FIREBASE_APP_ID
The app uses a Firebase Cloud Function (assistant) as its server-side backend. This protects API keys and keeps Gemini calls server-side.
The backend is optional β if Firebase is unreachable, the app falls back to a static set of 15 pre-written artifacts.
- Set up a Firebase project with Functions enabled
- Deploy the
functions/directory from the AI Studio project - Update
services/firebase.tswith your Firebase config - Add your config values to
.env.local(see.env.local.example)
The UI is designed as a museum archive β stark, dark, reverent.
- Colors:
#0a0a0amuseum black,#f2eecbaged paper,#2d2d2dmuseum ink - Typography: Georgia serif for artifact quotes, Courier New monospace for metadata
- Animation: Slow scan-line sweep, gentle fade-ins, mouse-tracking spotlight
- Mood tones: Artifacts are tagged with one of:
frustrated,confused,angry,funny,defeated
"Every line of code is a decision, but every comment is a confession."
- NousResearch/Hermes-Agent β AI agent that powers Atlas
- MiniMax-AI/skills β Skills library for Claude, Cursor, Codex, OpenCode
Est. 2025 Β· Digital Archaeology Division
Curated by Jithsss
