Public source
Gavin's Miscellany
Why it’s useful
I wanted one durable home for things I want to understand and remember, with the source material kept simple enough to edit in Git while the app layer turns that Markdown into reading, quiz, review, and learning workflows.
What it does
- Renders a personal encyclopedia from structured Markdown entries.
- Provides category, topic, tag, search, related-entry, and Surprise Me navigation.
- Builds Quiz Me experiences from per-entry question metadata.
- Supports public reveal-only quiz answers without sign-in.
- Enables owner-only typed answers, Due reviews, learning enrollment, and editorial Review through Supabase authentication.
- Sends enrolled learning events to a separate MemoryEngine service for spaced-repetition scheduling.
Current status / Next steps
Current status
- Live app listed at miscellany.gavinnesom.com while DNS is handled separately.
- The source repo is intentionally public at github.com/gavinnesom/Miscellany.
- The current project shape includes Markdown-rendered content, public reveal-only quizzes, owner-only typed answers, Supabase-backed Review, MemoryEngine scheduling, and server-side OpenAI grading.
Next steps
- Keep the architecture and editorial standards current as features mature.
- Expand content while preserving stable slugs, stable question IDs, and schema completeness.
- Keep the live app and public-source link current as deployment details change.
Build / Deployment
TypeScript · React · Next.js / Vinext · Tailwind · Supabase · OpenAI API · Spaced-repetition learning · Custom API service
Gavin's Miscellany is a Markdown-first knowledge and learning app. Structured content drives reading, browsing, quizzes, authenticated Review, typed-answer grading, and a separate spaced-repetition learning service.
Canonical content
Structured Markdown entries are the source of truth for reading pages, navigation, quiz metadata, and durable slugs.
Protected workflows
Supabase authentication gates owner-only Review, Due reviews, enrollment, and typed-answer features.
Architecture / How it works
Canonical content
Markdown files under content are the canonical source of truth. The app renders entries, metadata, quizzes, and navigation from those files.
Application layer
The application layer turns content into category/topic/tag browsing, search, related entries, Surprise Me, reading pages, quizzes, and editorial workflow.
Authentication / Review
Supabase authentication protects owner-only features. Supabase/Postgres stores active editorial Review rows while canonical content remains in Git and Markdown.
Learning boundary
I built MemoryEngine as a separate, reusable API service for spaced-repetition learning. Miscellany owns the knowledge, questions, answers, and grading rules; MemoryEngine keeps the learning state, decides what is due using learning-science-based scheduling, and records review outcomes.
AI grading boundary
For typed-answer grading, the browser sends a question ID and answer. The server resolves the question metadata and rubric before calling OpenAI server-side.
Reliability
Stable slugs, stable question IDs, explicit schemas, regression tests, and the browser outbox protect the learning workflow from accidental breakage.
System Boundaries
Content and app
- Markdown can stay the canonical source while the app adds richer reading, review, and learning behavior around it.
Learning boundary
- Spaced-learning boundaries are cleaner when the scheduler only sees content-blind IDs, ratings, and timestamps.
- AI grading is safer when the browser sends only the typed answer and question ID, and the server resolves rubric context.
Reliability
- Stable identifiers and regression tests matter when content, learning state, and generated app behavior all depend on each other.