vulgate.org has the whole Latin Bible on it and a © 2005 in the footer to match. No viewport tag, eight tables with four more nested inside them, sixteen <font> elements. On a 375px phone the page overflows by 74, so you read it sideways.
So I built Vulgate. 73 books, 1,334 chapters, 35,809 verses, all static.
Three layers
Every verse shows up to three texts and you can switch any of them off. The Clementine Vulgate (1592) is the spine; its books and verse numbers define every page.
The English is the Douay-Rheims, translated out of the Vulgate rather than out of the Hebrew and Greek, so it lines up verse for verse and the join is a lookup. I tried the World English Bible first, which comes from different originals and doesn’t share the numbering. After a psalm-mapping table and a shape-matching heuristic a sixth of it still wouldn’t pair, so I dropped it.
Latino sine flexione
Peano proposed in 1903 that Latin becomes readable to any educated European if you throw the inflections away and let prepositions and word order do their work. Nouns take the ablative singular, verbs the infinitive minus -re, genitive becomes de, dative ad, plural -s. I got the idea from Devine Lu Linvega’s sin flexion devlog on the XXIIVV wiki.
A program does the rendering, and running it again gives the same bytes. Nothing was translated by hand or by a language model.
It barely needs a dictionary, which is the part I like. Peano’s rule says a noun’s invariable form is its ablative singular, and 35,809 verses of inflected Latin already contain one for most of the words they use, so almost a quarter of the forms are harvested straight out of the Vulgate.
Matthew 6:9 comes out Patre nostro, qui es in caelos, matching the received LSF Pater Noster. That is the only gold standard there is. As far as I can tell no Bible has been rendered in LSF before.
Search
An index of all 35,809 verses would be about 3 MB, too much to hand a reader who may never search. So nothing loads until the first query, and then only the shards that query needs. Spelling is folded, so caelum finds cælum and Jesus finds Iesu.
The phone
Below 34rem the reading surface changes shape instead of shrinking. The verse number normally hangs in a 2.75rem margin, which on a 390px screen spends 11% of the width on two digits, so the gutter collapses and the number moves into the first line, the way a printed Bible sets it.
The masthead keeps the wordmark and one strip, and everything else is behind it in a sheet. Type gen 3 and it jumps to the chapter, gen filters the book list, anything else goes to search. Tap a verse and a drawer offers the card, the link, the Latin and the English. Getting that to not eat your text selection took four separate guards.
Verses have real addresses too, and their own social cards, because a #v3 fragment never leaves the browser and every shared verse link was unfurling as the whole chapter. At 35,809 of them the cards live in R2 and a Pages Function assembles the page around them.
It installs, and with a download it keeps the whole Bible on the device: 12 MB of text, with chapters rebuilt from it offline.
Links
Live at vulgate.pages.dev, code on Github.