Skipped classes? I got you. Turn those notes and PDFs into interactive tutoring sessions. Built for myself but you can use too, don't mention... we don't do that here 😉 #studysmart
Dive into the Raw Thoughts & Origin Story (Notes App Idea) that started this project.
Reading through raw class notes without a teacher's walkthrough can leave you struggling to understand the "why" behind the material. Catchup is an AI-powered educational Progressive Web Application (PWA) designed to transform static images and PDFs of handwritten notes into an interactive, logically ordered progression. By processing notes into sequenced "Moments," Catchup acts as a personal tutor, revealing information step-by-step with contextual explanations.
- Intelligent Sequencing: Upload note images or PDFs, and the AI will logically order them into a teaching progression, establishing preamble knowledge before diving into the main material.
- The Moment Architecture: The learning flow is driven by an array of
Momentobjects, each corresponding to a specific conceptual step. - Non-Destructive Focus Polygons: Unrelated or future context on the note image is blocked out using custom SVG obstruction polygons. As you progress, concepts stay revealed.
- Speech-Like Walkthroughs: Each
Momentincludes plain-English, speech-like text to explain the currently observable portion of the notes. - Integrated & Persistent TTS: Optional Text-to-Speech captions featuring an auto-play speaker toggle. The TTS engine gracefully handles skipping, pausing, and rapid navigation without overlapping voices.
- Contextual Deep Dives: For concepts requiring prerequisite knowledge, "learn more" objects provide extra explanation, complete with titles and links for deeper understanding.
- Split-View Distraction-Free UI: A beautiful, dark "Chalkboard Slate" interface that isolates notes on the left and learning controls on the right.
- Smart Q&A: A chat-based question feature maintains past context. If your question is about to be answered in an upcoming
Moment, the AI will prompt you to wait, though a "force answer" option is always available. - Collaborative & Infinite Lessons: Lesson sets are shareable and extendable. You can add new PDFs or images anytime, and the AI will append new
Momentobjects by using the previous context.
Catchup has rapidly evolved from a proof-of-concept into a robust, offline-capable platform.
- ✅ Client-Side Media Handling: Migrated entirely to client-side Cloudinary uploads with unsigned presets, removing server-side file dependencies.
- ✅ Zero-Latency Caching: Integrated IndexedDB to locally cache uploaded PDFs and images, enabling instantaneous loading for heavy files.
- ✅ Native PDF Support: Fully integrated PDF parsing directly into the Google GenAI
Interactions API. - ✅ Modular Modals: A robust, single-source-of-truth global
ModalProviderhandles unified alerts, previews, and upload wizards. - 🚀 Upcoming - Interactive Reader Mode: Converting Catchup into a dual-mode PWA that includes an interactive PDF reader. This mode will feature a "pen tool" for highlighting arbitrary segments of a document to trigger localized AI TTS explanations.
- Framework: Next.js (React 19)
- Language: TypeScript
- Database & ORM: SQLite with Drizzle ORM
- Styling: Tailwind CSS & Framer Motion
- AI Engine: Google Gemini API (
@google/genaiInteractions API) - Storage: Cloudinary (Client-side) & IndexedDB (Local cache)
Catchup operates on a state-driven progression model. The core logic relies on breaking down unstructured image/PDF data into a strictly typed array of Moment objects.
- Ingestion & Processing: Media files are uploaded to Cloudinary, and the URLs are fed to the Gemini API alongside context. Gemini returns a structured JSON payload of
Moments. - State Hydration: Each
Momentcontains the active media URI, the coordinate array for the obstruction polygons, the spoken text, and optional "learn more" metadata. - UI Rendering: The Next.js frontend acts as a viewport into the current state. It renders the base media, applies SVG
clip-pathmasks based on the polygon coordinates to obscure future data, and displays the walkthrough text.
- Node.js 18+
- A Google Gemini API Key
- A Cloudinary Cloud Name & Unsigned Upload Preset
- Clone the repository:
git clone https://github.com/yourusername/Catchup.git- Navigate into the directory and install dependencies:
cd Catchup
npm install- Set up your environment variables by creating a
.env.localfile:
GEMINI_API_KEY=your_gemini_api_key_here
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name
NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET=your_unsigned_preset- Push the database schema:
npm run db:push- Start the development server:
npm run devDavid Uwagbale (Dev_id) 🌐 davidtimi.tech