Skip to content
ub3r.io

Project document

Background Schema

Where learner data lives and what shape it takes.

Principles

No accounts, no tracking, no network. Everything a reader does stays in their browser.

Keys

ts
// ubr:progress — completion timestamps by "series/chapter"
type Progress = Record<string, string>; // ISO date

// ubr:comments — per chapter; absent key means "show seeded comments"
type Comments = Record<string, Comment[]>;
interface Comment {
  id: string; name: string; text: string;
  likes: number; liked: boolean; at: string;
  replies?: Comment[]; // one level only
}

// ubr:theme — "light" | "dim"

Seeding

Each chapter derives two or three editorial comments deterministically from its key. The first time a reader posts, likes or replies, the seeded list is copied into storage and edited from then on.

Content

Series, chapters, playgrounds and diffs are static modules in the bundle and versioned with the code.

Clearing data

Clearing site data in the browser resets progress, comments and theme.