From 0b48289277efc2200445563d714e62ce8e11cf11 Mon Sep 17 00:00:00 2001 From: Thorsten Bus Date: Sun, 1 Mar 2026 16:26:45 +0100 Subject: [PATCH] add AGENTS and ref --- .env.example | 1 + .gitignore | 1 + AGENTS.md | 97 +++++++++++++++++++++++++++++ ref/form-song-arangment-config.png | Bin 0 -> 31948 bytes 4 files changed, 99 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 AGENTS.md create mode 100644 ref/form-song-arangment-config.png diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..89ff7f3 --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +CTS_API_TOKEN=XXXXXX diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..ace3ed3 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,97 @@ +ChurchService presenter software show creator + +## Description + +There is tool (churchtools - called cts from now on) to plan a church service, that contains all parts of the service (information, songs, sermon, prayer, etc.). + +Use CTS API for services: . + +All the wording in the frontend and communication has to be in German with Du, not Sie. + +## TechStack + +- Laravel (Vue+Inertia) App, with Sqlite (switchable to MySQL) +- use DB for caching the API data and just "Update" the DB from the API +- use CTS API with existing env `CTS_API_TOKEN` for auth - ONLY DO READS, NO WRITES OR CHANGES ARE ALLOWED + +## General + +- Login should be done via OAUTH for all churchtools users () and linked to an automatically created local user. +- There should be Button in the Top Bar, to refresh the Data from the CTS API and a timestamp with the latest refresh. +- LoggedIn User should be visible in the Top Bar +- every action should be immediately persistent, no separate "save" button required, unless explicitly described. +- parser and generator of song files (.pro) are added later, to just add simple placeholder and wait for the detailed spec to implement + +## The Plan + +We use the data from the API, to create a form to finalize the service setup and to create a file for the presenter software at the end. + +1. Show all today or future services in a list, with details (Title, Preacher, 'beamer technican', qty of songs, last changed, finalized_at) and state of the setup (No or Yes at...): + - x/y songs found and mapped + - x/y songs verified arrangement + - sermon slides uploaded + - X info slides uploaded + - finalized at + +2. for every service, show Action Buttons: + - if finalized: ReOpen and Download + - if NOT finalized: Edit and Finalize + +3. - ReOpen and Finalize just change the status of the service + - Edit shows a form, with these Blocks to edit (details of these blocks are below) + - information + - moderation + - sermon + - songs + +## Form Blocks + +### Block: Information + +- show list of thumbnails for all uploaded slides with a muted upload date field with uploader name, and a prominent Expiredate field +- each thumbnail could be delete (softdelete) or can inline change the date with a datepicker +- add big plus icon/area for drag'n'drop or click for fileupload new files with a datepicker for a date, that was added to all files as expire date +- automatically show these files to all future services, till the expire date is after the service date + +### Block: Moderation + +Same features as `Block Information` but without the datepicker and only relevant for this service. + +### Block: Sermon + +Same features as `Block Moderation`. + +### Block: Songs + +- Show all songs (Name, CCLI ID, has Translation ..) from the service in the right order. +- on every update from the CTS API, try to match the song with the CCLI-ID to an existing song from the DB + - if NOT matched + - show a button "request creation", which causes an EMAIL to a configured mail address, with the song and the CCLI Id and the ask for create the song + - and show a searchable select field of all songs in the DB (CCLI ID included and searchable) to manually assign a song from the DB to this service song + - if song found: + - if song is translated, show checkbox (default:true) for use the version with translation + - every song has a body for the arrangement selection/configuration + - select field with all existing arrangements + - "add" Button to create a new arangmengt (clone from master order) and ask for a name + - "clone" Button to clone the selected arragenement and ask for a name + - show the groups of the arrangement and make possible to rearange or add a group to the arrangement via drag'n'drop, like `rev/form-song-arangment-config.jpg` +- every song with a selected arrangement ("normal" should selected always as default) should have two buttons: + - preview: show the text of the song in the order of the arrangement configuration, prominent highlighted which textpart was with group + - download: download the preview as a nice pdf with header/footer and copyright footer from the Song DB. + +## File Upload + +- could be a zip file, contained multiple other files of types below, handle as mass upload +- could me multiple files, so handle each one as a single file for types below +- could be an image file (png, jpg, jpeg) -> always convert to jpg 1920x1080 (dont cut parts of an image, keep orientation and ratio) +- could be a ppt or pptx (powerpoint) -> convert to multiple JPG with 1920x1080 (see jpg convert) + +## SongDB Import + +There should be a menu item for songDB in the Top. + +- it shows all songs from the DB, with created, last update, ccliID, last_used_in_service every song has a delete (soft_delete), download, translate and an edit button +- edit: shows a popup with Name, CCLI and copyright text (all that is available from song metadata) and the arrangement configurator from the service->song block +- download: download generated .pro file from the songDB for this song +- translate: allow add a full text or an URL to the Full text, and then start an editor, that shows two columns for every slide of every group. Left the original text, right a texteditor, with the imported text - always the same line qty of text from the original is used from the given translated text. Save this as translation for this song, and mark it as `with translation`. +- UploadArea for drag'n'drop and click for upload, to upload a .pro file, a zip file with multiple .pro files, or a bunch of .pro files, which should be parsed (this module was integrated later, so show an Exception here till this was finalized) and added into the song DB. diff --git a/ref/form-song-arangment-config.png b/ref/form-song-arangment-config.png new file mode 100644 index 0000000000000000000000000000000000000000..32c7fd707c802af303e56d9610731c7cd5b27e95 GIT binary patch literal 31948 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 literal 0 HcmV?d00001