Algo Recall
Overview
AlgoRecall is a spaced repetition web app designed to help software engineers study for LeetCode-style interview questions. While many have suggested maintaining a spreadsheet or list of previously solved problems for review, I could not find an existing solution that would schedule said problems. This led to the creation of AlgoRecall.
Notable Features
Spaced Repetition Scheduling
The core of AlgoRecall is a review scheduling system. After attempting a problem, users will flag their experience with the problem as “Easy,” “Medium,” “Hard,” or “Unsolved.” These flags then determine when the problem will surface in the user’s problem queue. The intervals range from 1 day for problems that need immediate reinforcement to 14 days for generally well-understood concepts. If a user feels fully confident with a problem, they can mark it as "Complete,” which removes it from the review cycle.

Figure 1: Problem review scheduling based on user feedback
Problems are then queried by comparing their scheduled review date against the current date. When a problem’s review date is at or exceeds the current date, the problem is placed into the review queue in the user’s dashboard.
Polymorphic Storage Architecture
To support both authenticated and anonymous users, AlgoRecall implements a polymorphic storage layer. A base Storage class defines the interface, with FirebaseStorage and LocalStorage implementations. The active storage backend is determined at runtime based on authentication state, allowing seamless transitions between local-only practice and cloud-synced progress.
This implementation ensures that users can start practicing immediately without creating an account, then optionally sign in to have persistent progress across multiple devices.
Integrated Problem Notes
Each problem card includes an expandable notes section with debounced auto-save. This allows users to document notes, time and space complexities, and relevant patterns directly alongside the problem. Notes persist across sessions and sync automatically when authenticated.

Figure 2: Auto-saving notes section for each problem
Retrospective
AlgoRecall started as a personal tool to track my own LeetCode practice, but evolved into a more robust application. While the current implementation covers my core use cases well, there are several enhancements I'd like to explore:
- SM-2 Algorithm: Replace fixed intervals with the SuperMemo-2 algorithm for truly adaptive spacing based on historical performance.
- Custom Problems: Allow users to add any LeetCode problem by URL rather than limiting to the NeetCode 150 list.
- Progress Analytics: Add visualizations for completion rates, problem difficulty distribution, and review streaks.