607 Commits

Author SHA1 Message Date
eafa2caa27 pwa: fix offline caching for prayer/faith routes
All checks were successful
CI / update (push) Successful in 1m53s
The glob in sync.ts targeted a nonexistent /src/routes/glaube/ directory
instead of the actual [faithLang=faithLang] parameterized route. This meant
zero prayer pages were ever precached for offline use.

- Fix glob to match [faithLang=faithLang] and expand param segments to
  both language variants (glaube/faith, gebete/prayers, rosenkranz/rosary)
- Extract validPrayerSlugs to shared module for build-time route enumeration
- Add faith to service worker cacheable route regex
2026-03-09 17:49:32 +01:00
75401784ba rosary: fix mystery image timing and SVG container clipping
All checks were successful
CI / update (push) Successful in 1m51s
Show first mystery image at the Pater Noster instead of the Gloria Patri
by removing the early lbead2 trigger. Fix IntersectionObserver to prefer
the topmost intersecting entry so short _pater sections aren't skipped.
Use full viewport height (100dvh) for the SVG container to prevent
clipping at edges.
2026-03-08 20:46:07 +01:00
f76b647918 searxng: add Nord theme and deploy script
All checks were successful
CI / update (push) Successful in 3m25s
Override SearXNG's native CSS variables with Nord palette (cream white
light mode, true black dark mode). Replace SearXNG logo with Bocken
logo. Custom base.html template injects the CSS. Deploy script supports
reset to restore original state.
2026-03-08 20:33:26 +01:00
42754204b2 gitea: directly link to OIDC login via Header link 2026-03-05 08:06:31 +01:00
cb52897d50 prayers: remove redundant "in" typo
All checks were successful
CI / update (push) Successful in 1m52s
2026-03-04 21:31:07 +01:00
7751c84c89 gitea: make all avatars fully round circles
Some checks failed
CI / update (push) Failing after 1s
2026-03-04 19:12:41 +01:00
754c4216ab gitea: theme toggle improvements and header height increase
- Move theme toggle to right side of header (before notifications)
- Remove border from toggle, style consistently with other nav icons
- Fix dark mode hover background on toggle button
- Use exact Lucide SunMoon icon for system theme
- Dark logo filter in light mode
- Increase header height to 3.5rem
- Light mode with homepage warm beige palette (no pure white)
2026-03-04 19:12:19 +01:00
914b204b88 gitea: use homepage dark grey scale for backgrounds
All checks were successful
CI / update (push) Successful in 1m50s
Match the homepage dark mode surface colors (#000/#111/#1a1a1a/#222)
for boxes, code, inputs, cards, and menus instead of Nord greys.
Keeps Nord only for accent colors and text.
2026-03-03 19:04:20 +01:00
6f15faee8f gitea: apply Nord color scheme to theme
All checks were successful
CI / update (push) Successful in 1m51s
Remap all accent, status, badge, diff, text, and background colors
to the Nord palette matching the homepage and jellyfin themes.
2026-03-03 19:00:14 +01:00
2df6595520 gitea: floating glass pill header, black background, custom navbar
- Floating glass pill navbar matching homepage/jellyfin header style
- Full black page background
- Custom head_navbar template: logo links to bocken.org, home button
  for logged-in users, icons on all nav items, remove Help/Explore
- Icon-only nav on mobile, hide dropdown triangles, round avatar
- Deploy script to rsync theme + template to server
2026-03-03 18:55:28 +01:00
28d840636c jellyfin: copy logo link to clipboard on mobile app with toast
Some checks failed
CI / update (push) Failing after 0s
WebView doesn't allow opening external browser, so on mobile app
the logo link copies URL to clipboard and shows a toast notification.
2026-03-03 18:02:15 +01:00
b035abb061 jellyfin: link Bocken logo to bocken.org with Nord lightblue hover
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 17:46:08 +01:00
74c43b1181 jellyfin: floating glass pill header, nav icons, click-to-play cards
All checks were successful
CI / update (push) Successful in 1m50s
- Restyle header as floating glassmorphism pill matching bocken.org
- Replace Home/Favorites tab bar with icon buttons (house + heart) in header right
- Add play triangle overlay on card thumbnails with click-to-play
- Black backgrounds for detail page containers
- Always show detail logo regardless of screen width
- Mobile adjustments for pill header
2026-03-02 20:59:57 +01:00
92460486de fix: replace any types with proper types across codebase
Replace ~100 `any` usages with proper types: use existing interfaces
(RecipeModelType, BriefRecipeType, IPayment, etc.), Record<string, unknown>
for dynamic objects, unknown for catch clauses with proper narrowing,
and inline types for callbacks. Remaining `any` types are in Svelte
components and cases where mongoose document mutation requires casts.
2026-03-02 20:15:08 +01:00
66ce624cd5 jellyfin: blackout mode
All checks were successful
CI / update (push) Successful in 1m51s
2026-03-02 17:48:03 +01:00
e1b76b947c fix: language switching now works on all pages, not just root
All checks were successful
CI / update (push) Successful in 1m48s
LanguageSelector and language store previously only dispatched
languagechange events on '/'. Now any page that isn't a recipe or
faith route gets inline language switching via the custom event.
2026-03-02 13:37:31 +01:00
9cf7913f13 fix: disable default view transition crossfade on page content
Only named elements (header, logo, etc.) should animate during
navigation; the root crossfade caused a flash on every page change.
2026-03-02 13:37:10 +01:00
4a931c7e30 fix: resolve all 1008 svelte-check type errors across codebase
All checks were successful
CI / update (push) Successful in 1m54s
Add type annotations, JSDoc types, null checks, and proper generics
to eliminate all svelte-check errors. Key changes include:
- Type $state(null) variables to avoid 'never' inference
- Add JSDoc typedefs for plain <script> components
- Fix mongoose model typing with Model<any> to avoid union complexity
- Add App.Error/App.PageState interfaces in app.d.ts
- Fix tuple types to array types in types.ts
- Type catch block errors and API handler params
- Add null safety for DOM queries and optional chaining
- Add standard line-clamp property alongside -webkit- prefix
2026-03-02 08:40:18 +01:00
9e5fef1463 fix: type errors in UserHeader querySelector calls 2026-03-01 21:12:47 +01:00
a4f48ec322 fix: silence state_referenced_locally warning in theme store 2026-03-01 21:07:26 +01:00
87cf51fcda deps: add lucide-svelte
All checks were successful
CI / update (push) Successful in 1m52s
2026-03-01 21:02:50 +01:00
96fe5e96be header: unify dropdown menus, nav text colors, minor fixes
All checks were successful
CI / update (push) Successful in 13s
Rework UserHeader and LanguageSelector dropdowns to use wrapper +
triangle pattern with theme-aware backgrounds. Use solid grey for
inactive nav text instead of semi-transparent. Reduce instruction
info box shadow. Add emoji font to CompactCard favorites.
2026-03-01 21:00:21 +01:00
d9ab4ee151 header: add colored icon fills for active nav links, cospend icons
All checks were successful
CI / update (push) Successful in 1m32s
Active nav icons now fill with per-link colors (recipes, faith, cospend).
Cospend gets Lucide icons with background shape fills for Wallet and
RefreshCw. Shrink profile picture and use solid grey for inactive nav text.
2026-03-01 20:41:38 +01:00
955f893b13 feat: add light/dark mode toggle with header view transitions
All checks were successful
CI / update (push) Successful in 25s
Add theme cycling (system/light/dark) with localStorage persistence
and FOUC prevention. Restructure CSS color tokens to respond to
data-theme attribute across all components. Redesign header as a
floating glass pill bar with smooth view transitions including
clip-reveal logo animation.
2026-03-01 16:15:49 +01:00
486bb69b23 fix: show positive amount for "gets" in recurring payment splits
All checks were successful
CI / update (push) Successful in 1m33s
2026-02-28 21:11:08 +01:00
5eb37fd351 fix: correct formatCurrency calls defaulting to EUR on payments page
Fix misplaced parenthesis in Math.abs() call that caused formatCurrency
to receive no currency arg (defaulting to EUR), and remove extra arg
in foreign currency formatting.
2026-02-28 21:09:28 +01:00
dccd01ec01 header: thinner active page underline, closer to text
All checks were successful
CI / update (push) Successful in 1m35s
2026-02-27 20:14:43 +01:00
01ba7066fb recipes: add defaultForm cake pan selector to add page 2026-02-27 20:11:45 +01:00
7a1321279d recipes: add cake form size scaling for ingredient multiplier
Allow recipes to specify a default pan shape (round, rectangular, gugelhupf)
with dimensions. On the recipe page, users can enter their own pan size to
auto-calculate an ingredient multiplier based on the 2D area ratio.
2026-02-27 20:10:21 +01:00
aa07ebc3b0 recipes: preload hero images with high priority
All checks were successful
CI / update (push) Successful in 3m1s
Add fetchpriority="high" and <link rel="preload"> hints to hero images
on both the recipe listing and detail pages. Also prefetch the full-size
hero image on card hover via new Image() to warm the cache before navigation.
2026-02-26 19:49:17 +01:00
2f4c3ac1ae auth: smart login/logout redirect back to original page
Some checks failed
CI / update (push) Failing after 0s
Login link now includes callbackUrl for the current page. Logout
redirects intelligently: stays on public pages, falls back to the
recipe detail for /edit/[name], to the recipe root for auth-only
sub-routes (add, favorites, to-try, admin), and to / for cospend.
2026-02-26 19:25:47 +01:00
dd4680e946 recipes: restrict to-try page to editors, remove addedBy
- Gate page and API on rezepte_users group instead of any logged-in user
- Remove addedBy field from schema, API POST, and ToTryCard display
2026-02-26 19:18:58 +01:00
9ab7342a61 rosary: move mystery title to pater noster as a separate card
Each mystery now starts with its own title + Pater Noster card, before
the Ave Maria decade card. Transition cards (Gloria Patri + Fatima Prayer)
no longer contain the Pater Noster.

Mystery image column stays on the current mystery during transition prayers
(including the final Gloria/Fatima after decade 5) and only advances to the
next mystery at the Pater Noster card.

The new secret{N}_pater section IDs are tracked and mapped to their
corresponding large bead via svgActiveSection, so both transition and
pater sections highlight the correct large bead. CSS :has rules updated
for no-JS fallback.
2026-02-26 19:18:26 +01:00
ea1b145aaf rosary: reset expired streak on client to prevent SSR microflash
When the client hydrates and finds the merged streak is still expired
(localStorage couldn't rescue it), reset to zero and push to the server.
This ensures subsequent SSR loads render the correct value from the start.
2026-02-22 21:30:46 +01:00
dab7234c13 build: use pnpm exec instead of npx for vite-node in prebuild
All checks were successful
CI / update (push) Successful in 1m32s
Fixes build failure on server where system npm has a broken
lru-cache/Yallist dependency. Also adds vite-node as an explicit
dev dependency so it's always available via pnpm.
2026-02-22 21:24:12 +01:00
9cc8374310 rosary: recommend Glorious mysteries on Lenten Sundays
All checks were successful
CI / update (push) Successful in 1m40s
Sundays during Lent are "little Easters", so treat them like ordinary
Sundays (Glorious mysteries, no Fastenzeit badge) rather than Lent.
2026-02-22 20:54:56 +01:00
694444aa0f rosary: apply liturgical colors to season badge
Lent badge uses --purple (nord15) with white text; Eastertide badge
uses --nord6 (white) with --nord0 dark text.
2026-02-21 16:50:50 +01:00
b255fc01e9 recipes: use emoji font for favorites button
Some checks failed
CI / update (push) Failing after 20s
2026-02-18 21:06:51 +01:00
b90a42b1aa recipes: add shared "to try" list for external recipes
Some checks failed
CI / update (push) Failing after 20s
Household-shared list of external recipes to try, with name, multiple
links, and optional notes. Includes add/edit/delete with confirmation.
Linked from the favorites page via a styled pill button.
2026-02-18 21:01:24 +01:00
7ba0995bf8 recipes: hide image-wrap background color during view transition morph
Some checks failed
CI / update (push) Failing after 21s
2026-02-18 20:37:22 +01:00
9177164ddf recipes: hero image view transition, skip transitions for recipe-to-recipe
Some checks failed
CI / update (push) Failing after 20s
2026-02-18 10:07:42 +01:00
207efcc38e recipes: view transitions for recipe detail navigation
All checks were successful
CI / update (push) Successful in 1m31s
Image morphs between CompactCard thumbnail and hero, title block
slides up from bottom, header persists across transitions. Only
activates for recipe detail navigations, not between list pages.
2026-02-17 18:59:24 +01:00
f074c0af08 recipes: drop opacity transition from TitleImgParallax hero image
All checks were successful
CI / update (push) Successful in 1m30s
Remove the opacity 0→1 fade-in transition — it's annoying when the
image is already cached. The dominant color background handles the
loading state, so no transition needed.
2026-02-17 18:34:58 +01:00
d0a01a75e7 recipes: sharpen Gaussian kernel for dominant color extraction
All checks were successful
CI / update (push) Successful in 1m36s
Reduce sigma from 0.3 to 0.15 * dimension so edge pixels contribute
under 1% weight, heavily biasing the color toward the image center.
2026-02-17 18:25:24 +01:00
53da9ad26d recipes: replace placeholder images with OKLAB dominant color backgrounds
Instead of generating/serving 20px placeholder images with blur CSS, extract
a perceptually accurate dominant color (Gaussian-weighted OKLAB average) and
use it as a solid background-color while the full image loads. Removes
placeholder image generation, blur CSS/JS, and placeholder directory references
across upload flows, API routes, service worker, and all card/hero components.
Adds admin bulk tool to backfill colors for existing recipes.
2026-02-17 18:25:17 +01:00
0ea09e424e recipes: two-column card grid on mobile, compact card sizing
All checks were successful
CI / update (push) Successful in 1m29s
2026-02-17 16:11:57 +01:00
716c6cc6e6 fix: use python3 for emoji codepoint extraction in font subsetting
All checks were successful
CI / update (push) Successful in 1m39s
grep -oP '.' splits multi-byte emoji into individual bytes when the
locale is not UTF-8 (e.g. CI runners with LANG=C), causing pyftsubset
to fail on invalid codepoints.
2026-02-17 16:05:55 +01:00
eeb3030186 fix: emoji font on recipe hero link, orange OR toggle for better contrast
All checks were successful
CI / update (push) Successful in 8s
2026-02-17 16:02:22 +01:00
16d891fc2f fix: render desktop nav at all widths when no links, fix profile menu positioning
All checks were successful
CI / update (push) Successful in 8s
Skip mobile sidebar/hamburger entirely when no links snippet is provided.
The nav with .no-links class stays in desktop layout at all screen widths.
Override UserHeader mobile styles from .no-links context to keep dropdown
opening downward with tail centered below the profile picture.
2026-02-17 15:59:13 +01:00
cf73e6b62f fix: language selector speech bubble, profile menu on mobile, hide redundant hamburger
All checks were successful
CI / update (push) Successful in 8s
- LanguageSelector: add speech bubble tail, replace green active with
  nord8 blue + dark text, remove floating gap
- Header: hide hamburger menu on mobile when no links, show profile
  picture directly in top bar instead
- UserHeader: center mobile dropdown, fix tail color/position, add
  profile picture overlay to tuck tail behind, add drop shadow
- Main layout: stop passing empty links snippet
2026-02-17 13:22:20 +01:00