Commit Graph

489 Commits

Author SHA1 Message Date
660a1b0539 prayers: add search and individual prayer pages
All checks were successful
CI / update (push) Successful in 1m22s
- Add SearchInput component for reusable search UI
- Add search functionality to prayers list with two-tier results:
  - Primary matches (name/searchTerms) shown first
  - Secondary matches (text content) shown after with reduced opacity
- Add individual prayer pages with language-appropriate slugs
  (e.g., /glaube/gebete/ave-maria, /faith/prayers/hail-mary)
- Make prayer cards clickable to navigate to individual pages
- Fix language visibility for prayers without Latin (BruderKlaus, Joseph)
- Add Prayer wrapper to MichaelGebet for consistent styling
- Use CSS columns for masonry layout with dynamic reordering
2026-02-02 22:22:56 +01:00
8699bef209 move glaube higher up in main LinksGrid
All checks were successful
CI / update (push) Successful in 1m21s
2026-02-02 20:47:10 +01:00
95d3be8b82 prayers: bow-emphasis only for main language 2026-02-02 20:39:11 +01:00
82db2c9e50 angelus: cleaner and now in Header
All checks were successful
CI / update (push) Successful in 1m25s
2026-02-02 16:59:25 +01:00
69293c39f9 prayers: add English translations for all prayer components
Add official Catholic English translations to all prayer components
for /faith/* routes. Prayer names on /faith/prayers are now displayed
in English. Remove unused Angelus.svelte component.
2026-02-02 16:39:40 +01:00
1a5117e8d0 faith: add bilingual routes /glaube ↔ /faith
Add language toggle support for faith pages similar to recipes.
Routes now work in both German and English:
- /glaube ↔ /faith
- /glaube/gebete ↔ /faith/prayers
- /glaube/rosenkranz ↔ /faith/rosary
- /glaube/angelus ↔ /faith/angelus
2026-02-02 16:15:51 +01:00
87d5e9cbc0 rosary: clean up unused CSS, fix unclosed tag
All checks were successful
CI / update (push) Successful in 1m24s
- FireEffect now only contains fire-related styles
- StreakAura now only contains aura, number, halo, wing styles
- Fix unclosed <i> tags in JosephGebet.svelte
2026-02-01 14:12:18 +01:00
924ce386d5 rosary: server-side streak fetch, remove aggressive polling
All checks were successful
CI / update (push) Successful in 1m29s
- Fetch streak data in +page.server.ts for logged-in users via API
- Initialize store once with server data, sync only runs once
- Only poll for reconnection in PWA mode when offline with pending changes
- Extract FireEffect to separate component with burst animation
- Convert StreakAura/StreakCounter to Svelte 5 runes ($props, $state, $derived)
- Fix SSR flash by using server data for initial render
2026-02-01 13:50:33 +01:00
01fd067eda rosary: cleaner light mode
All checks were successful
CI / update (push) Successful in 1m20s
2026-01-31 16:12:18 +01:00
ee2bee6ac5 rosary: light/dark mode benedicturs medal 2026-01-31 16:09:21 +01:00
58fd2b89d2 rosary: fade-in shadow removed
All checks were successful
CI / update (push) Successful in 1m21s
2026-01-31 15:53:59 +01:00
d3f0d8a24c glaube: add ⚬ to mary and jesus in prayers
All checks were successful
CI / update (push) Successful in 1m21s
2026-01-31 15:15:49 +01:00
6028373093 glaube: gone woke
All checks were successful
CI / update (push) Successful in 1m27s
2026-01-31 14:59:07 +01:00
1cce6a56ac rosary: glow animation earlier, embers before full fire
All checks were successful
CI / update (push) Successful in 1m22s
2026-01-31 12:20:35 +01:00
71dd5b6285 rosary: stylized StreakCounter dependant on length
All checks were successful
CI / update (push) Successful in 1m31s
2026-01-31 10:56:29 +01:00
17b0fb9275 remove jukit garbage 2026-01-31 10:12:45 +01:00
45b0f5f2a6 rosary: less colourful mystery selector
All checks were successful
CI / update (push) Successful in 1m28s
2026-01-30 15:47:58 +01:00
92963f4451 rosary: StreakCounter singular Tag for length==1 2026-01-30 15:41:20 +01:00
7f4a8eec8b rosary: cleanup
All checks were successful
CI / update (push) Successful in 1m28s
2026-01-30 15:36:13 +01:00
daa801e14a fix logged in state broken on rosary due to prerendering
All checks were successful
CI / update (push) Successful in 1m21s
2026-01-30 12:47:28 +01:00
a58e52c891 feat: add server persistence for rosary streak
All checks were successful
CI / update (push) Successful in 1m21s
- Add RosaryStreak MongoDB model for logged-in users
- Add /api/glaube/rosary-streak GET/POST endpoints
- Sync streak to server when logged in, merge local/server data
- Auto-sync when coming back online (PWA offline support)
- Falls back to localStorage for guests
2026-01-30 12:37:01 +01:00
06477d656a feat: add streak counter to rosary page
Track daily rosary prayer streaks using localStorage. Shows consecutive
days prayed and disables button if already prayed today.
2026-01-30 12:36:55 +01:00
bff86041fd prayers: add Confiteor
All checks were successful
CI / update (push) Successful in 1m24s
2026-01-30 08:40:29 +01:00
53ad393541 refactor: reduce all_brief payload to first image's alt and mediapath
All checks were successful
CI / update (push) Successful in 1m20s
Only include the necessary image fields for Card.svelte instead of
the entire images array to reduce API response size.
2026-01-29 14:22:57 +01:00
408bc42784 ci: clear Redis recipe cache on deploy
All checks were successful
CI / update (push) Successful in 1m23s
Ensures fresh data is fetched after deployments when API projections
or data structures change.
2026-01-29 14:04:36 +01:00
308d9c6dac fix: include images in all_brief API endpoints
All checks were successful
CI / update (push) Successful in 1m23s
Card.svelte uses recipe.images[0].mediapath for the hashed image path,
but the all_brief endpoints weren't fetching the images field, causing
new recipes to fall back to short_name.webp instead of the correct path.
2026-01-29 13:40:33 +01:00
763edb35c3 fix: include images and translations in offline-db brief recipes
All checks were successful
CI / update (push) Successful in 1m26s
The offline sync wasn't caching thumbnails because the images field
was missing from the MongoDB projection. Also add translations for
caching English recipe __data.json URLs.
2026-01-29 10:18:23 +01:00
d9e9ae049e feat: add sync progress tracking with image download status
- Service worker reports image caching progress back to main thread
- Sync progress shows current phase (recipes, pages, data, images)
- Display progress bar for image downloads in sync tooltip
- Use mediapath for thumbnail URLs (with hash for cache busting)
- Serve cached thumbnails as fallback for full/placeholder when offline
2026-01-29 10:18:02 +01:00
86f28fa1b7 feat: auto-sync recipes and show sync button only in PWA mode
- Auto-sync recipes every 30 minutes when online in PWA mode
- Only show offline sync button when running as installed PWA
- Detect standalone mode via display-mode media query and iOS check
- Trigger initial sync on PWA install (appinstalled event)
- Listen for online event to sync when coming back online
- Store last sync time in localStorage to track sync intervals
2026-01-29 09:58:03 +01:00
c86a734da0 feat: extend PWA offline support to all recipe routes and glaube pages
- Add offline support for category, tag, icon list pages
- Add offline support for favorites page (stores locally for offline)
- Add offline support for season list page
- Cache root page and glaube pages for offline access
- Dynamically discover glaube routes at build time using Vite glob
- Add db functions for getAllCategories, getAllTags, getAllIcons
- Pre-cache __data.json for all category, tag, icon, season subroutes
- Update service worker to cache glaube and root page responses
2026-01-29 09:57:58 +01:00
9ff30b28cd feat: add PWA offline support for recipe pages
- Add service worker with caching for build assets, static files, images, and pages
- Add IndexedDB storage for recipes (brief and full data)
- Add offline-db API endpoint for bulk recipe download
- Add offline sync button component in header
- Add offline-shell page for direct navigation fallback
- Pre-cache __data.json for client-side navigation
- Add +page.ts universal load functions with IndexedDB fallback
- Add PWA manifest and icons for installability
- Update recipe page to handle missing data gracefully
2026-01-28 21:38:33 +01:00
9db2009777 fix: update DeepL API to header-based authentication
All checks were successful
CI / update (push) Successful in 1m30s
DeepL deprecated form-body authentication (auth_key in request body).
Now using Authorization header as required by the API.
2026-01-28 15:09:54 +01:00
baee021869 fix latin Fatima to P. Ramm's Ordo Missæ
All checks were successful
CI / update (push) Successful in 1m22s
2026-01-26 21:40:25 +01:00
ee2aff46a1 perf: preload crosses font on glaube pages
All checks were successful
CI / update (push) Successful in 1m29s
Add preload hint to fetch the crosses.woff2 font early,
improving First Contentful Paint on /glaube routes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 10:35:04 +01:00
8398bc9b14 refactor: remove duplicate crosses font-face declaration
The crosses font is already defined in app.css which loads globally,
so the duplicate in rosenkranz.css is unnecessary.
2026-01-26 10:32:33 +01:00
31c9f43114 refactor: replace shadow span with box-shadow on button_wrapper
All checks were successful
CI / update (push) Successful in 1m21s
Remove separate .button_wrapper_shadow element and apply box-shadow
directly to .button_wrapper in mobile view. Reduces DOM by 1 node.
2026-01-25 20:50:43 +01:00
3cc962f454 refactor: reduce DOM nesting and simplify templates
- Remove nested .wrapper div in recipe page using CSS Grid with full-bleed background
- Consolidate multiplier forms in IngredientsPage into single form
- Simplify fermentation conditionals in InstructionsPage with optional chaining
- Use conditional rendering instead of visibility wrapper in Search
- Remove unnecessary dialog wrapper in TitleImgParallax
2026-01-25 20:24:48 +01:00
5824993b18 refactor: simplify Card HTML and extract search filter composable
All checks were successful
CI / update (push) Successful in 1m23s
- Remove unnecessary wrapper divs in Card component (.card_anchor, .div_div_image)
- Flatten Card HTML from 4 levels to 2 levels of nesting
- Create reusable createSearchFilter composable in $lib/js/searchFilter.svelte.ts
- Apply search filter composable to category, tag, and favorites pages
2026-01-25 14:48:55 +01:00
940f9f14a2 fix tag styling on Cards
All checks were successful
CI / update (push) Successful in 1m19s
2026-01-23 16:14:34 +01:00
63e9b3de21 Move more CSS styling to a global css files to reduce bundle size
All checks were successful
CI / update (push) Successful in 2m53s
2026-01-23 15:37:32 +01:00
f3b92e8b1a refactor: clean up recipe routes and reduce bundle size
- Eliminate duplicate API fetch in recipe page by passing item from
  server load to universal load instead of fetching twice
- Replace cheerio with simple regex in stripHtmlTags, removing ~200KB
  dependency
- Refactor multiplier buttons in IngredientsPage to use loop instead
  of 5 repeated form elements
- Move /rezepte/untranslated to /[recipeLang]/admin/untranslated and
  delete legacy /rezepte/ layout files
2026-01-23 15:04:58 +01:00
ab2a6c9158 feat: add page titles to recipe and glaube routes
All checks were successful
CI / update (push) Successful in 1m20s
- Add titles to category, tag, icon, season routes
- Add bilingual support (German/English) for recipe route titles
- Use consistent "Bocken Recipes" / "Bocken Rezepte" branding
- Change English tagline from "Bocken's Recipes" to "Bocken Recipes"
- Add titles to /glaube and /glaube/gebete pages
- Make tips-and-tricks page language-aware
2026-01-20 19:54:33 +01:00
e366b44bba fix: include server load data in universal load for recipe page title
The +page.server.ts fetches recipe data and strips HTML tags server-side
to avoid bundling cheerio in the client. However, the universal load in
+page.ts wasn't including this data in its return value.

Fixed by:
1. Having +page.server.ts fetch the recipe directly (since it runs before
   +page.ts and can't access its data via parent())
2. Adding the `data` parameter to +page.ts and spreading it in the return

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 19:44:52 +01:00
1f5b342d8e cleanup 2026-01-20 19:37:49 +01:00
2b3aae8087 fix: append image to FormData before submission in use:enhance
The image upload broke because formData.append() was being called in the
async callback of use:enhance, which runs AFTER the form submission.
Moved the append call to the outer function which runs BEFORE submission.

Also cleaned up debug console.log statements from CardAdd.svelte.
2026-01-20 19:37:16 +01:00
0459ef26bc fix: use simple event handler for file selection instead of $effect
All checks were successful
CI / update (push) Successful in 1m21s
Replace $effect + bind:files approach with straightforward onchange handler:
- Use event.currentTarget.files[0] to get selected file
- Avoid reactive complexity that caused infinite loops
- Add bind:this reference to file input for clearing
- Clean implementation that works reliably in Svelte 5
2026-01-20 17:29:41 +01:00
3fb0a72014 fix: rewrite CardAdd image upload using Svelte 5 best practices
All checks were successful
CI / update (push) Successful in 1m20s
Replace event handler approach with bind:files and $effect:
- Use bind:files on file input for reactive FileList binding
- Use $effect to react to file selection and handle validation
- Properly clean up blob URLs to prevent memory leaks
- Remove exported functions that aren't used externally
- Add key to each block for tags
- Fix self-assignment warning in tag handling

The previous implementation used onchange with this.files which doesn't
work in Svelte 5. The new approach uses the idiomatic bind:files pattern.
2026-01-20 17:18:25 +01:00
b5fbedd13b fix: use event parameter in CardAdd image selection handler
All checks were successful
CI / update (push) Successful in 1m21s
The show_local_image function was using `this.files[0]` which doesn't work
in Svelte 5's onchange handlers. Changed to use `event.target.files[0]`
to properly access the selected file.

This fixes recipe image uploads not working because the file was never
being captured from the input element.
2026-01-20 17:09:28 +01:00
1bf4f4cbcd debug: add client-side logging for recipe image upload
All checks were successful
CI / update (push) Successful in 1m22s
Add console logging in the browser to track image selection and form
submission:
- Log when user selects an image file in CardAdd component
- Log file validation steps (MIME type, size)
- Log form submission and FormData preparation
- Log whether image is being appended to form

This helps diagnose if the issue is client-side (image not selected/sent)
or server-side (image not received/processed).
2026-01-20 17:04:33 +01:00
a5e8edf5f1 fix: remove unused CSS selectors from payments edit page
Remove .split-details and .personal-amount CSS selectors that were not
being used in the markup, eliminating build warnings.
2026-01-20 12:30:52 +01:00