Every module, every data shape, every safety layer, every design decision, and an honest audit of what's still off. This is the technical truth of Study OS as it exists today.
The system separates concerns so each layer has one job. When one fails, the others hold.
Single-page web app. 13 modules, hash-routed. Origin v2 design language with warm paper cards on cool canvas. Installable as PWA on iPhone.
File: index.html
9 JSON files in School/StudyOS/data/. localStorage is a cache, vault is the source of truth. File System Access API writes every change.
Persistence: IndexedDB for directory handle, vault for data.
Two paths: web paste-round-trip (universal) and Cowork study-intake skill (desktop fast-path). Strict JSON schemas for every prompt.
Flows: Intake · Weekly · Layla · Flashcard gen · Exam plan · Annotation.
Three layers prevent data loss: auto-sync to vault, backup nudge when sync is off, version history with undo stack for every destructive action.
New in v2.
The app loads PDF.js and Tesseract.js lazily on-demand (only when needed for Intake). Fonts via Google Fonts CDN. Otherwise 100% vanilla.
Every state mutation triggers two writes: immediate to localStorage (cache), debounced 1.2s to the vault JSON files (truth). Vault survives browser wipes, travels via Obsidian Sync / iCloud Drive, and is readable by any tool that speaks JSON.
Not in vault: Version history (stored inside the state object itself for portability). Interruption buffer items (cleared at session end). Tesseract language models (cached in browser).
.md / .txt. Or paste text directly.study-intake skill for one-click execution.Deadlines — assignments + writing due next 14 days, sorted by proximity, with urgency tags.
Reading queue — top 15 active readings with hours estimate.
Writing projects — active with status + due date.
Weekly intention — current text.
Focus pattern — aggregated Pomodoro minutes per day-of-week from last 80 sessions. Surfaces your peak focus days.
Blocks per day with date, time, duration, task, program, rationale.
Rules baked in: max 4h focus/day · no 3-in-a-row without break · Sunday light · demanding work on peak days · 25m standard / 45m deep.
Overflow warnings for anything that couldn't fit.
Strategy note — 1-2 sentences of overall approach.
The preview shows the full schedule grouped by day, with program-colored left borders and rationale lines. Accept writes to S.schedule (auto-snapshot first). This Week view populates with target-icon click-to-focus buttons. Calendar cells update with colored block chips.
File System Access API. Grant once, writes every change within 1.2s debounce.
Chrome · Edge · Opera. HTTPS or localhost required.
Directory handle persisted via IndexedDB, auto-resumes across sessions.
For Safari / Firefox or when sync is off: escalating banner on Dashboard.
7d: gentle gray · 14d: amber caution · 30d: urgent red pulsing.
One-click Export All when ready.
Auto-snapshots before every destructive action (reset · weekly accept · intake apply · import · vault import · course delete).
Rolling last 20. Restore any with one click. ⌘Z undoes the most recent.
Every Pomodoro you run, every item you complete, every thought you capture becomes data that feeds back into the system. Over weeks, the system knows your patterns.
After every focus session, 3-button rating. Feeds Weekly Generator (demanding work on high-quality hours), Overwhelm Protocol (burnout detection), Friday Review (trend bar).
Rolling sum of focus minutes per day-of-week from last 80 sessions. Reveals whether you're a Tuesday-morning person or a Friday-night crammer. Weekly Generator places demanding work on high-density days.
During Pomodoro, a floating field captures distractions without breaking focus. At session end, thoughts route to Intake as pending items.
Answering "what carries into next week" saves to next week's Intention and feeds the next Weekly Generator run. Creates a compounding reflection loop.
Typography is strictly Origin v2 (Space Grotesk + Space Mono). Background is cool off-white (#FBFAF7). Card surfaces are warm cream paper (#F4ECD9) for contrast. Program coding is red / indigo / green inherited from IIT Course Guide lineage.
Pomodoro instrument panel uses a dark (#0A0A0A) inset with ticks, orbit dot, crosshair reticle, blinking colon, block-char progress bar, terminal status line with cursor. Explicit inspiration: mission-control panels + oscilloscopes + mechanical clock faces.
--ease-out · cubic-bezier(.22,.61,.36,1) for exits and resolutions. --ease-spring · cubic-bezier(.16,1,.3,1) for entries and actions. Durations: --dur-fast (150ms) for hovers, --dur-med (350ms) for state changes, --dur-slow (550ms) for view transitions. Respects prefers-reduced-motion.
Opens anywhere. Indexes every view, every action, every assignment / reading / writing / course. Fuzzy-scored, keyboard-first (↑↓ / enter / esc).
Gmail-style two-stroke jumps. Tap g, see hint banner with valid second keys, tap letter to jump: d · i · p · r · a · w · l · f · e · c · m · s.
Start/pause Pomodoro from anywhere · Undo last big change · Set Focus · Show shortcuts help.
Space / F to flip · → / G for "got it" · ← / R for "needs review." Only active on Flashcards view.
name · short_name · icons (180 · 192 · 512) · start_url · scope · display:standalone · theme_color #0A0A0A. Shortcuts: Set Focus · Intake · Overwhelm (long-press iPhone icon to use).
Precaches app shell on install. Navigation requests: network-first + cached fallback. Same-origin assets: cache-first. Google Fonts / cdnjs: stale-while-revalidate.
SVG master (512×512) + PNG 180 / 192 / 512 generated via cairosvg. iPhone uses 180×180 apple-touch-icon.
This system has been built iteratively over one session. It's structurally complete, but honesty matters — here's the real state.
file:// disables them. Mitigation: deploy to study.nabilrouissi.com.courseId linking and doesn't know about the latest intake writing vs. assignment rules. Mitigation: update the skill file.