Genera
A flashcard web app with ~4,500 trivia questions, 5-box Leitner spaced repetition, local IndexedDB storage, and cross-device sync with conflict resolution.
About
Genera is a flashcard web app built to make learning general knowledge trivia structured and consistent. It comes pre-loaded with about 4,500 trivia questions across 24 categories sourced from Open Trivia DB, alongside tools to create custom cards or import decks from CSV and JSON files. The core study engine uses a 5-box Leitner spaced repetition system with expanding intervals (1, 2, 4, 8, and 16 days). Answering correctly advances a card toward graduation, while a miss resets it to Box 1 for review the next day. All scheduling runs on pure UTC date strings to prevent timezone shifts when traveling or reviewing late at night, and new official trivia cards are paced with configurable daily limits.
Architecture-wise, Genera prioritizes a Local Mode First workflow: users can study immediately with zero account registration, storing decks, progress, settings, and metadata locally in browser IndexedDB across five object stores. A service worker caches the complete app shell for instant loading offline. When the app detects an internet connection, it checks a catalog manifest to download and update trivia decks in IndexedDB in the background without interrupting progress.
For cross-device study, Genera syncs to a Flask and SQLite backend deployed on Render. Offline mutations are tracked with dirty flags and pushed in batches. Conflicts are resolved via Last-Write-Wins based on ISO UTC timestamps, accompanied by an amber banner notifying the user if an edit was superseded. If someone starts in Local Mode and later creates an account, an intelligent merging pipeline reconciles cards and repoints local progress to canonical server records without duplicates.
Both the frontend and backend are written in a modular MVC pattern without external frontend frameworks. The backend features modular controllers and models, session auth with token versioning, CSRF validation, rate limiting, and email OTP verification powered by the Resend API.
Screenshots
Mobile views