Iris social card

About

Apprenticeship funding submissions demand a strict XML format, and learner data rarely arrives in it. A single TypeScript core handles the conversion and drives three interfaces from one codebase: an OpenTUI terminal UI, direct CLI commands, and a Tauri 2 native desktop app written in Rust. Validation goes beyond structural XML checks by parsing the real ESFA XSD into a registry that resolves types and enforces cardinality and constraints, while header-tolerant CSV parsing and cross-submission consistency checks guard against column reordering and data drift. Close to 1:1 source-to-test mapping with full round-trip coverage of the CSV-to-XML cycle. Built during my time as a staff developer at Founders and Coders, where it processed real apprenticeship data in production.

Highlights

  • Single TypeScript core drives three interfaces: OpenTUI terminal UI, direct CLI commands, and a Tauri 2 (Rust) native desktop app.
  • Schema-driven validation: parses the real ESFA XSD to build a validation registry with type resolution, cardinality and constraint checking. Semantic validation beyond structural XML.
  • Header-tolerant CSV parsing handles column reordering; cross-submission consistency checks guard against data drift between submissions.
  • Close to 1:1 source-to-test mapping with Vitest and Bun test; round-trip tests cover the full CSV → XML → re-parse cycle.
  • Documented like a product: full ADRs, technical specs, dev-log work records, and per-workflow roadmaps.

By the numbers

Commits
857
Lines added
+143,335
Lines removed
−44,154
Source files
30,538