- Post-login (OAuth + dev-login) now redirects to the next upcoming
service's edit page instead of /dashboard, mirroring the GET / route.
- NameTagResolver now reads the real ChurchTools `responsible` shape
(persons[].person.title) and resolves moderator/preacher/worship-leader
by responsible ROLE ([Moderation]/[Predigt]/[Lobpreis]). This fixes
missing name slides and makes the worship-leader arrangement trigger
(e.g. service 12 → "Benedikt Hardt" / "Jennifer Schneider").
- NameTagSlideBuilder no longer silently drops the name slide when the
configured macro id points to a missing macro; it emits the slide
without a macro instead.
- Song export: the "first slide" / "last slide" macro now applies only to
the song's very first/last slide (global slide index across all
sections), not the first slide of every section.
- Export "headlines" for content-less agenda items are now emitted as
proper ProPresenter playlist HEADER items instead of text presentations.
- Prefix/postfix export files now also accept .probundle (unzipped: inner
.pro + media embedded) in addition to .pro, both for upload validation
and export injection.
Full suite green (587 passed).
Resolves a batch of bugs and feature requests across songs, services,
settings and export:
Songs & sections
- Every song now carries permanent, empty, locked PREFIX (COPYRIGHT) and
POSTFIX (BLANK) sections, deduplicated on import; locked sections cannot
be edited or deleted via UI or API.
- Song edit modal: explicit Speichern/Schließen with dirty-tracking,
editable section headline (combobox + custom values), and a fix for the
419 CSRF errors after CCLI "Importieren & Bearbeiten" (token read fresh
per request).
- CCLI bookmarklet "Importieren & Bearbeiten" now opens the edit dialog.
Service schedule & arrangements
- Fixed assigned songs showing no sections (slides loaded for all
arrangements, not just the default).
- Added "Song entfernen / neu zuordnen" to reassign an assigned song.
- Worship-leader arrangement is created/selected lazily when the
arrangement dialog opens (only when not user-overridden); the leader is
resolved from the "Lobpreis" agenda item, and manual create/clone names
are prefixed with the leader name.
Navigation
- "/" redirects to the next upcoming service's edit page (or the list).
- Service titles link to the edit page.
Settings
- Renamed "Makro-Import"/"Label-Import" menu items; fixed drag-and-drop
imports (were downloading the dropped file); added label-import hint;
made the panel scrollable.
- Nametag now uses a single MacroPicker; added song prefix/postfix label
defaults (COPYRIGHT #24B34C / BLANK #000000); new "Export-Dateien" menu
to upload prefix/postfix .pro files added to every export.
Export
- Filenames/playlist names are date-first ("YYYY-MM-DD <Title>").
- Keyvisual slide only for the first content-less item after real content;
all other content-less items render as headlines.
- New "Vorschau herunterladen" for non-finalized services (filename and
import name prefixed "Vorschau" with export timestamp).
- Uploaded prefix/postfix .pro files wrap every export.
Tests updated to the new behavior; full suite green (569 passed).
- CCLI import: group lyrics into 2-line slides (no blank line per line)
- Add-section: searchable label combobox with create-new option
- Service edit: show current global key-visual/background default live
- Assign dialog: prefill+open search, SongSelect link by CCLI nr/name
- "Auf SongSelect suchen" now also opens the CCLI import dialog
- SongDB: mark empty songs "Ohne Inhalt", default-on content filter
- Translation paste: strip section-mark lines so line mapping holds
Record the verification output and task notes for the service image column work.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Enable storage-backed key visuals and background images plus service-specific moderator and preacher name overrides.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
- Remove Node.js from production image (was violating Must NOT Have constraint)
- Add 'RUN cp -r /app/public /app/public-build' in build stage after npm run build
- Replace 'npm run build' in boot-container.sh with 'cp -r /app/public-build/*'
- Add chown www-data for SQLite DB file in init-app.sh
- Remove git from production stage package list (not in plan spec)
- Update ENTRYPOINT comment to reflect new asset sync approach