Why I built this
A single source of truth for my interview prep
During my job search I kept scattering notes across docs, bookmarks, and old repos — and burning time hunting them down right before interviews. I wanted one place I could open and instantly recall what I needed: concepts, patterns, and working code.
So I built QuickRecall to solve my own problem — and used it as an excuse to get hands-on with the things I'd been curious about but hadn't had the chance to ship at work. Every feature here is something I wanted to learn by actually building it, not just reading about it.

Under the Hood
QuickRecall is more than a notes app — it's a playground for browser APIs and RSC-first React engineering techniques. Here's what powers it.
Installable & Offline-First
Install QuickRecall like a native app, then download sections for offline study — pick what you need or grab everything, with live per-section progress. It even detects what is already saved and refreshes after a new release.
built with: PWA · Serwist service worker + Cache Storage API
Deep diveMongoDB Design System
The entire UI follows MongoDB’s LeafyGreen design system — its colors, typography, and components — for a clean, consistent, accessible interface. Real LeafyGreen components are used where they fit, with shadcn/ui + Tailwind for everything else.
built with: @leafygreen-ui + shadcn/ui + Tailwind
Deep diveCache-Once PDF Guides
Interview tip-sheet PDFs open in a browser-style tabbed reader right inside the app. Each one streams once from blob storage, then is served from cache forever — available offline and easy on bandwidth.
built with: EmbedPDF (PDFium/WASM) + Cache Storage API + Vercel Blob
Deep diveSpeak Out Loud
Rehearse interview answers aloud and watch your words transcribe live on screen.
built with: Web Speech API
Deep diveLayered Notification System
Timer and study alerts route through one policy-gated manager — native desktop notifications when granted, toast fallback when not.
built with: Web Notifications + Web Audio + sonner
Deep diveFirebase Push Notifications
A daily motivational quote lands as a real OS-level push notification, even with the PWA fully closed, powered by a Firebase Cloud Messaging pipeline with its own service worker, a GitHub Actions cron, and a round-robin queue that sends every quote once before any repeat.
built with: Firebase Cloud Messaging + MongoDB + GitHub Actions cron
Deep diveOffline-First Job Tracker
Job applications live in an in-browser database that persists across reloads and syncs live across open tabs.
built with: Dexie + IndexedDB
Deep diveSmart Code Display
Lightweight, lazy-loaded syntax highlighting for inline snippets — kept out of the first-load bundle.
built with: @leafygreen-ui/code
Deep diveFuzzy Search
Type into the header search to jump to any problem, custom hook, or page — typo-tolerant, ranked, and keyboard-navigable.
built with: fuse.js
Deep diveShareable Filters
Difficulty, category, and search live in the URL — every filtered view is bookmarkable.
built with: nuqs
Deep diveDistraction-Free Fullscreen
One click expands the whole app to full screen for heads-down study sessions.
built with: Fullscreen API
Deep diveGet in touch
Want a problem added?
QuickRecall grows with what people want to practise. If there's a machine-coding problem you'd like to see here — or any feedback — send it over. The button opens the contact form on my portfolio.