Skip to content
Terrero Labs

HeartWire OS

HeartWire’s study app: a structured catalog of courses, resources, and levelled project ideas across engineering domains.

Active developmentCatalog integrity audit pending
Division
HeartWire
Role
Founder · design and development

Built for long-horizon learning, not task throughput: it models what a topic depends on, what has been covered, and which resource is worth starting — none of which are tasks.

  • Next.js
  • TypeScript
  • Prisma
  • PostgreSQL
  • Vercel

01Problem / user need

Self-directed study across many domains piles up links, textbooks, playlists, and project ideas faster than they are used. The failure isn’t access — it’s sequencing and retrieval: no way to see what a topic depends on, what has been covered, or which of six saved playlists to start.

02Requirements

#RequirementAcceptance criterionStatus
R1Catalog integrityEvery resource has a human title, a valid track, a resolvable or explicitly null course, and a well-formed URLFailing — known defects in the deployed export
R2Link validityDead links are detected and flagged, not silently servedNot implemented
R3Canonical sourceExactly one implementation is authoritativeOpen — two data layers exist

03Architecture

Same project, two data layers of opposite quality. The live URL serves (B).

04Design decisions

Relational schema instead of a flat notes system

Chosen
Tracks → courses → typed resources in Postgres via Prisma.
Alternative
Markdown in Obsidian, which I also run.
Tradeoff
Every resource attaches to a course and carries a declared type, so coverage gaps are queryable. Cost: rigidity — a resource that doesn’t fit the taxonomy has nowhere to go, and changes need migrations.

Bulk-scraping existing notes into the catalog

Chosen
Import hundreds of curated links in minutes rather than entering them by hand.
Tradeoff
The catalog reached useful density immediately. Cost, realised: with no validation at the boundary, scraper errors went live silently.

4.5Scope & role

Built by me under HeartWire. It started as my own study system, and I’m still its main user.

05Implementation

  • Prisma schema over PostgreSQL with versioned migrations, including a migration that locks down PostgREST access and enables RLS.
  • Content: curriculum tracks across BME, chemistry, mathematics, CS, AI/ML, computational science, neuroscience, embedded systems, mechanics, and physics, plus levelled project ideas per subject (for example, an Ohm’s-law calculator → simulating RC/RL circuits in Python → a SPICE-like mini-simulator).

06Verification

PendingNext: a scripted integrity audit of every deployed record (title, track, course, URL, type), reported as a failure rate by class; re-ingestion through the typed schema; then the same audit again. The before → after rate is the result. Until then, no catalog size or coverage figure is claimed.

07Failures / iterations

  • Scraped ingestion with no validation gate. Visible defects in the deployed export include neuroscience resources filed under electrical engineering, hundreds of rows titled “Resource”, and titles containing raw markdown table syntax.
  • The same root cause as SkinTrack+ shipping without verified persistence: no gate before deploy. Two projects, one failure mode — which is why validation at the boundary is now the rule.

08Limitations

  • Built first for my own study. No user count is claimed.
  • The deployed catalog is known to be partially corrupted until it is re-ingested.
  • It catalogues links, not content: it doesn’t control or version external material, and it doesn’t check for link rot.
  • It tracks resources, not learning. It can’t tell whether anything was understood.