← all work
live2026

Study platform — spaced repetition that makes learning a habit

A web app that teaches: SM-2 spaced repetition, adaptive quizzes, and streaks — built to turn a study plan into a daily habit.

PythonFlaskSQLiteSM-2 spaced repetitionAdaptive quizzesCloudflare Access

Architecture

Lessonsstructured curriculum
FlashcardsSM-2 spaced repetition
Quizzesadaptive, mastery-based
Progressstreaks & review queues
Zero TrustCloudflare Access gate

The problem

Learning plans fail for a boring reason: they’re plans, not habits. I was building a study program for myself and kept running into the same wall — a curriculum exists, but nothing makes you actually do it daily. Flashcards live in one app, quizzes in another, and “progress” is a folder of half-finished notes.

What I built

A self-hosted study platform that does what a study partner would: remind, quiz, and keep score. It’s built on learning science, not vibes:

  • SM-2 spaced repetition — the algorithm that decides when each flashcard comes back, so reviews land right as you’re about to forget.
  • Adaptive quizzes — questions get harder or easier based on your answers, and mastery checks gate the next lesson.
  • Streaks and progress tracking — the engagement layer that makes a daily habit stick: see the streak, keep the streak.
  • Lessons mapped to a real plan — content structured in phases, each tied to measurable milestones.

How it’s deployed

Flask + SQLite, running as a systemd service on my homelab, served through a Cloudflare Tunnel — and protected by Cloudflare Access, so it’s public URL, private content. No VPN, no open ports; the auth gate lives at the edge.

Why it matters

This is the “software that teaches” pattern: feedback loops tuned for how people actually learn, not just content delivery. It’s the same design problem as any edtech product — engagement, retention, mastery — solved end to end, from the spaced-repetition math to the deployment.