How validated people, project, course, and research records move from the data repository to public applications.
Public data
Published records live in a separate Git repository and are served as public JSON. This monorepo owns the schemas, readers, editing UI, API orchestration, and GitHub automation, but not the data repository checkout itself.
Read path
The People, Projects, Portal, and Web applications fetch only the collections
they own. Base URLs come from typed environment configuration. Data is parsed at
the boundary with schemas from @scs/schemas; malformed records should fail
clearly instead of being silently coerced into a misleading UI.
Write path
Portal submissions are validated by the API and sent to the GitHub App. The automation service reads current repository state, checks revisions, writes the canonical record layout, and creates or updates a pull request. Durable operations expose progress without holding a browser request open.
Rules
- Do not add compatibility readers for retired shapes; migrate canonical data when a contract intentionally changes.
- Do not import the separate data repository into this workspace or modify it unless the task explicitly includes that repository.
- Preserve optimistic concurrency and operation idempotency for retried writes.
- Keep collection reads bounded and paginated where the API exposes lists.
- Update Schemas, API contracts, and the owning workspace guide together.