Skip to content

The Scriptorium — Contributing

The Scriptorium is the contribution engine of Torch & Lily. Any authenticated user can submit new content or corrections to the archive. Submissions enter a review queue and, once approved, are ingested into the live API.

The monks did not simply copy texts — they preserved civilization. In this scriptorium, you join their work.


  1. Sign in via Google or GitHub OAuth.
  2. Choose your mode — add new content (Nova) or suggest a correction (Emendatio).
  3. Pick a genus — the type of content you wish to contribute.
  4. Fill the template and submit. Your contribution enters the review queue.
  5. Track progress from your dashboard. Submissions move through Pending → Approved → Ingested (or Rejected with reviewer notes).

The Scriptorium accepts six types of content, each mapped to a specific engine and database table.

GenusEnglishEngineNovaEmendatio
SanctusSaintDevotio
PrecatioPrayerDevotio
OpusBook / TreatiseVeritas
CatechismusCatechismVeritas
SummaSumma TheologiaeVeritas
CommentariumCommentaryVeritas

Some genera only accept corrections (Emendatio) — the Catechism and Summa are fixed texts, so only transcription errors can be corrected.


Submit something that does not yet exist in the archive.

  • Sanctus / Precatio: Download a CSV template, fill it in your spreadsheet editor, and upload.
  • Opus: Enter metadata (title, author, language) and paste the full Markdown text. See the formatting guide below.
  • Commentarium: Provide the Bible verse ID, commentary author, and paste the commentary body.

Fix an error in an existing record.

  • Search for the record you want to correct.
  • For text-based genera (Opus, Catechismus, Summa, Commentarium): paste the corrected text.
  • For structured genera (Sanctus, Precatio): submit corrected field values via CSV.

When submitting a new book (Opus), your Markdown is automatically parsed into chapters. Each heading becomes a separate chapter in the archive.

# Part Title → Top-level chapter
## Chapter Title → Sub-chapter (nested under #)
### Section Title → Sub-section (nested under ##)
Body text follows each heading and belongs to that chapter.
# Book One
## Chapter I — On the Existence of God
That God exists can be proved in five ways.
The first and most manifest way is the argument
from motion...
## Chapter II — On the Simplicity of God
Having recognized that a certain thing exists,
we must inquire into its mode of existence...
  • Every heading starts a new chapter — the heading text becomes the chapter title.
  • Sub-headings (##, ###) are nested under their parent heading.
  • Standard Markdown is supported — paragraphs, block quotes, emphasis, lists.
  • Do not use raw HTML — only Markdown syntax.
  • The first heading should be # (top level).

Each genus has its own detailed style guide with field conventions, formatting rules, and examples. Read the guide for your genus before submitting.


All submissions are reviewed before they enter the live API.

StatusMeaning
PendingAwaiting review by an editor
ApprovedAccepted — ready for ingestion into the live corpus
RejectedDeclined with reviewer notes explaining why
IngestedSuccessfully written into the production database

All submissions are reviewed directly by human editors.


RolePermissions
ContributorSubmit new content and corrections
ReviewerReview, approve, reject, and ingest submissions
AdminAll reviewer permissions + manage contributor roles

Every user starts as a Contributor. Trusted contributors may be elevated to Reviewer status by an Admin.


The Scriptorium exposes its own REST API for programmatic access. All endpoints require JWT authentication (sign in via the portal).

GET /v1/scriptorium/templates/{genus}

Returns the submission template for a genus — field definitions, allowed modes, and formatting hints.

POST /v1/scriptorium/submissiones

Create a new submission. Body includes modus, genus, payload (structured fields), and optionally raw_text, scopus_id, scopus_slug, scopus_titulus.

GET /v1/scriptorium/submissiones

List your own submissions. Filterable by status and genus.

GET /v1/scriptorium/scrutinium/submissiones

List all submissions in the review queue. Filterable by status.

PATCH /v1/scriptorium/scrutinium/submissiones/{id}

Approve or reject a submission. Body: { "status": "APPROVED" | "REJECTED", "nota_examinatoris": "optional notes" }.

POST /v1/scriptorium/scrutinium/submissiones/{id}/ingest

Ingest an approved submission into the live corpus. This is a one-way operation.