Six new prayers from the German prayer book images, with Latin and
English where canonical versions exist:
43 Jungfrau, Mutter Gottes mein — German Marian devotional. No
canonical Latin/English; best-effort EN translation provided so
the EN route renders rather than blanking. bilingue: false.
40 O meine Gebieterin / O Domina Mea / O My Queen — Marian act of
self-dedication with the standard Latin and English forms.
41 Memorare — attributed to St. Bernard. Standard Latin
(Memento O piissima Virgo Maria) and the traditional English
translation.
42 Hilf, Maria, es ist Zeit — German Marian invocation. No
canonical Latin; EN follows the user-provided translation
("Help, Blessed Mother, it is highest time…"). bilingue: false.
37 Tischgebet vor dem Essen — composite of four sub-prayers:
"O Gott von dem wir alles haben" (DE rhyme, EN best-effort),
"Komm Herr Jesus sei unser Gast" (DE rhyme + standard EN
"Come Lord Jesus be our guest"), Psalm 144:15-16 with Gloria
Patri (full Latin/EN), and Benedic Domine (full Latin/EN).
38 Tischgebet nach dem Essen — three sub-prayers: "Dir sei o Gott"
(DE rhyme + best-effort EN), Agimus tibi gratias (full Latin/EN),
and Retribuere (full Latin/EN).
New 'meal' prayer category (Tischgebete / Meal / Mensae) added to the
filter pills on the prayers index. Replaces the long-standing TODO
that gated meal prayers on the existence of a category for them.
Wiring:
- prayerSlugs.ts gets DE+EN slugs for each prayer (validates
/faith/prayers/<slug> URLs and feeds the offline sync precache list
+ sitemap).
- de/en/la i18n files get six new prayer-name keys plus category_meal.
- [prayer]/+page.svelte: imports, prayerDefs entries, render block.
- [prayers]/+page.svelte: imports, labels, categories array (new meal
pill), prayerCategories, prayers list with searchTerms, getPrayerName
map, prayerMeta, render block.
Eastertide seasonal badge on the prayers index (Regina Cæli card)
moved from a bottom inline-block to absolute top-right, matching the
placement of the same badge on the rosary mystery cards. Adds a
position:relative anchor on the gebet_wrapper.
Bump 1.66.0 -> 1.67.0.
Personal Homepage
My own homepage, bocken.org, built with SvelteKit and Svelte 5.
Features
Recipes (/rezepte · /recipes)
Bilingual recipe collection with search, category filtering, and seasonal recommendations. Authenticated users can add recipes and mark favorites. Recipes are browsable offline via service worker caching.
Faith (/glaube · /faith)
Catholic prayer collection in German, English, and Latin. Includes an interactive Rosary with scroll-synced SVG bead visualization, mystery images (sticky column on desktop, draggable PiP on mobile), decade progress tracking, and a daily streak counter. Adapts prayers for liturgical seasons like Eastertide.
Fitness (/fitness)
Workout tracker with template-based training plans, set logging with RPE, rest timers synced across devices via SSE, workout history with statistics, and body measurement tracking. Cardio exercises support native GPS tracking via the Android app with background location recording.
Android app: Download APK — Tauri v2 shell with native GPS foreground service for screen-off tracking, live notification with elapsed time, distance, and pace.
Expense Sharing (/cospend)
Shared expense tracker with balance dashboards, debt breakdowns, monthly bar charts with category filtering, and payment management.
Self-Hosted Services
Landing pages and themed integrations for Gitea, Jellyfin, SearxNG, Photoprism, Jitsi, Webtrees, and more — all behind Authentik SSO.
Technical Highlights
- PWA with offline support — service worker with network-first caching, offline recipe browsing, and intelligent prefetching
- Bilingual routing — language derived from URL (
/rezeptevs/recipes,/glaubevs/faith) with seamless switching - Nord theme — consistent color palette with light/dark mode support
- Auth — Auth.js with OIDC/LDAP via Authentik, role-based access control
- Progressive enhancement — core functionality works without JavaScript
TODO
General
Rezepte
Glaube
- emailwiz setup
- fail2ban
- LDAP?
Dendrite
- setup dendrite
- Connect to LDAP/OIDC (waiting on upstream)
- Serve some web-frontend -> Just element?
Webtrees
- setup Oauth2proxy -> not necessary, authentik has proxy integrated
- connect to OIDC using Oauth2proxy (using authentik)
- consistent theming
- auto-login if not logged in
Jitsi
- consistent theming
- move away from docker
- find a way to improve max video quality without jitsi becoming unreliable
Searx
- investigate SearxNG as more reliable alternative
- consistent theming
Photoprism
- consistent theming
- OIDC integration