build · Sep 2026
Loopnote
Solo build: API, client, and study scheduling
- TypeScript
- Expo
- Express
- SQLite
- SM-2
Summary
Loopnote turns photos of notes, whiteboards and journal pages into searchable summaries and flashcards. A photo is imported from a phone, the server runs it through a pipeline, and the result is organised into topics with spaced repetition scheduling on top.
Problem
Notes photographed on a phone are easy to capture and almost impossible to use again. They sit in the camera roll in the order they were taken, unsearchable, and turning them into something studyable is the step that never happens.
Approach
A monorepo with an Expo client and an Express API. An upload runs through a pipeline of resize, detect and a summarisation gate, then lands as topics, notes and flashcards. Scheduling is a pure SM-2 implementation and grouping across notes is a tag-similarity match, both written as plain functions with their own tests, so the study logic does not depend on the framework. Invites, a waitlist and feedback collection are part of the same build.
Outcome
An in-app import flow with a queue, visible upload progress and retry, automatic categorisation across notes, SM-2 scheduling with a due queue, a review step to keep, merge or discard what came in, a beta invite flow, and a framework-free review interface.
Honest limitations
Both model calls are still mocked, so summaries and flashcards come from a stub rather than a real model. The native share sheet, the share to Loopnote action inside the photo library, is stubbed and needs a real Xcode or Android Studio project. Nothing is deployed, so the repository is the whole of it.
Detail
- Study logic as plain functions
- The SM-2 scheduler and the topic matcher take plain inputs and return plain outputs, with no framework in the way, so both are tested on their own rather than through the app.
- The upload path
- A picker with multi-select feeds a queue that uploads with visible progress and retries failures, and the queue reducer is framework-agnostic and tested.
- Where it stops
- Phase 0 is complete and three Phase 1 issues are done. The model calls and the native share sheet are the known gaps, both recorded in the repository.
Gallery

Next project
Ayo Sudoku