May 2026 – Present
UBC Okanagan DEGE — Platform Developer
Sole developer of the platform replacing Colabora, the editing tool behind a UBC Okanagan digital edition of Alfonso X's General Estoria: corpus migration, an editorial workflow in four languages, permissions and a public reader.
Sole developer of the Colabora DEGE Platform, built for A Digital Edition of the General e Grand Estoria (DEGE), the digital-edition arm of an SSHRC-funded research project on medieval historiography at UBC Okanagan. It replaces Colabora, the team's legacy PHP and jQuery tool for collaboratively editing Alfonso X's thirteenth-century General Estoria.
The platform
Built a TypeScript monorepo from scratch: a NestJS 11 API in 14 domain modules, a React 19 web app, a background worker and shared Zod contracts, on PostgreSQL and MinIO
Designed a folio-based edit, annotate, translate and publish workflow with versioned revisions, optimistic saves, live editing presence and auditable publication snapshots
Supported translation into English, Spanish, French and right-to-left Arabic, with an English and Spanish interface and 25 bilingual user guides
Added a public chapter reader with split panes and full-text search over published text, a task board with mentions, email notifications and Zotero bibliography sync
Moving the corpus
Parsed the legacy database's marker grammar to import 986 sections of the first part of the work with its 684 facsimile scans, 2,050 notes and 1,897 comments
Recovered translations that lived outside the database from 986 ODT files in about 10 GiB of shared files: every file parsed, restoring 151 footnotes
Wrote staged, repeatable import batches, plus an importer that brings in four further manuscripts from a single bundle
Archived the project's Drupal 11 public site and crawled its 47 pages for the move to UBC's WordPress CMS
Access, quality and delivery
Put every action behind accounts, two global roles and language-scoped permission grants, checked by an endpoint authorization inventory and matrix tests
Worked test-first and migration-first: 501 tests passing at the August audit across contracts, API and web, and the API trimmed from 91 routes to 78
Packaged the stack with Docker Compose and Caddy for a UBC server, with a corpus seeder that can check, dry-run and verify, and checksum-verified backup and restore