Commit graph

284 commits

Author SHA1 Message Date
isUnknown
82e69c7259 fix: redirects 301 not firing — three bugs
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 26s
- toPages()->first() instead of toPage() (pages field stores YAML array)
- Force read from default language content to avoid empty rules on FR requests
- Add error.php template so Kirby uses the error controller (without it,
  Kirby fell back to default template and ignored site/controllers/error.php)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 10:01:49 +02:00
isUnknown
dbeca5e095 feat: add editable 301 redirects via dedicated panel page
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 21s
- New "Redirections" page in panel (blueprint + content) with a structure
  field: old URL (text) → target page (pages field, auto-resolves URL)
- error.php controller intercepts 404s, checks redirect map, fires go() 301
- Cache (file driver) invalidated on redirections page update or slug change
- Removed catch-all route that was breaking Kirby multilingual routing

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 09:47:59 +02:00
isUnknown
91ac702f3c fix: strip trailing slash in normalizePath so /policy/ resolves correctly
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 49s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 09:22:17 +02:00
isUnknown
ac807c0a4f update tobimori seo config
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 28s
2026-05-26 07:08:31 +02:00
isUnknown
4d9509dec2 feat: add film grain effect and purple base to preloader
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 23s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 18:25:04 +02:00
isUnknown
a33e2467d8 perf : replace bg image in preloader with CSS gradient
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 20s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 18:17:31 +02:00
isUnknown
7ba18dcd9d perf : replace loading flash with background preloader, parallel sub-page fetch
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 25s
- Add #preloader div with scrollable-page-background.png as CSS background,
  matching the Svelte bg-fixed image so the transition is imperceptible
  (image is cached by the time Svelte requests it)
- Revert #ssr-content to visually-hidden (clip) for Google Wave 1 crawl
- Prevent scrollbar flash by adding overflow:hidden to html,body inline
  before main.css loads
- Parallel-fetch sub-page data (/blog/slug.json) alongside parent in initRouter
  so Blog/WhitePapers components receive prefetched data on mount — eliminates
  the list→article flash on direct navigation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 18:05:06 +02:00
isUnknown
56e4e55791 analytics : add Google Analytics (gtag.js) snippet
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 26s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 15:08:07 +02:00
isUnknown
459fadf0a4 seo : inject semantic html in kirby templates for bot indexing
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 28s
Each page template now renders its content in a visually-hidden #ssr-content
div (sr-only technique) so search engine crawlers see real HTML without
impacting the Svelte app layout. Shared snippets handle nav, footer contact
info, and article cards.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 15:24:40 +02:00
isUnknown
4d4832beda blog > cards > chapo : parse html
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 22s
closes #73
2026-05-14 08:36:59 +02:00
isUnknown
952375e6f5 white paper > intro : keep html formating. closes #76
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 23s
2026-05-14 08:34:56 +02:00
isUnknown
35f160f9d1 white paper : fix form-area height. closes #78
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 27s
2026-05-14 08:28:02 +02:00
isUnknown
bf041f4f7a policy : add privacy policy page
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 28s
Blueprint, PHP templates, Svelte view (static title + body blocks), i18n key and App routing. Page is unlisted, excluded from frontend navigation, and all panel change options are disabled.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 18:10:54 +02:00
isUnknown
12227dc50c seo : fix sitemap empty in prod, set canonical base to world.game
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 28s
- Add config.world.game.php with debug=false so robots.index=true in prod
- Fix canonical.base to https://world.game

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 13:56:36 +02:00
isUnknown
a27b9a3989 seo : configure sitemap with priorities and canonical base
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 35s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 13:54:00 +02:00
isUnknown
56ac349cc7 white paper : remove max length
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 31s
2026-05-05 16:35:53 +02:00
isUnknown
9aed12e61f ci : split deploy workflow into prod and preprod
All checks were successful
Deploy Production / Deploy to Production (push) Successful in 33s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 07:32:46 +02:00
isUnknown
b5a3dde43b hide footer on footer hidden page on mobile
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
2026-04-22 15:46:42 +02:00
isUnknown
4698f683ed white-paper : cover mobile positioning - refs #69
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 15:44:29 +02:00
isUnknown
c476ed0761 white-paper : cover responsive positioning - refs #69
All checks were successful
Deploy / Deploy to Production (push) Successful in 20s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 15:39:37 +02:00
isUnknown
34bc05066f app : scroll to top on slide change - closes #72
All checks were successful
Deploy / Deploy to Production (push) Successful in 22s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 14:22:01 +02:00
isUnknown
0ca55bed5d white-paper : track downloaded page per contact - refs #70
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 13:29:44 +02:00
isUnknown
77c4a06b30 white-paper : image size - linked to #69
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
2026-04-22 13:22:54 +02:00
isUnknown
a7e2a9b886 article > video block : set responsive height - closes #67
All checks were successful
Deploy / Deploy to Production (push) Successful in 22s
2026-04-22 13:18:41 +02:00
isUnknown
5ca0b1f610 article > video block : full width
All checks were successful
Deploy / Deploy to Production (push) Successful in 22s
2026-04-22 13:11:48 +02:00
isUnknown
0c74d82089 portfolio : fix left mockup grid column start
All checks were successful
Deploy / Deploy to Production (push) Successful in 26s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 15:10:41 +02:00
isUnknown
a3806811a9 blueprints : make structure fields consistently translatable or not
All checks were successful
Deploy / Deploy to Production (push) Successful in 23s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 15:08:48 +02:00
isUnknown
6caa69a30a blueprints : add translate: false to all non-translatable fields
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 15:01:22 +02:00
isUnknown
a933745dd4 header : move fixed positioning to header tag for correct offsetHeight closes #65
All checks were successful
Deploy / Deploy to Production (push) Successful in 22s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 14:45:05 +02:00
isUnknown
e73d8de1f3 cursor : hide on active game iframe, restore otherwise closes #64
All checks were successful
Deploy / Deploy to Production (push) Successful in 22s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 14:40:45 +02:00
isUnknown
f9dacf0eb8 article : center game block on click, capped below menu closes #62
All checks were successful
Deploy / Deploy to Production (push) Successful in 25s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 14:34:06 +02:00
isUnknown
58e77f9181 blocks : rename jeu → game (snippet, blueprint, CSS, content)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 14:25:54 +02:00
isUnknown
618c8d79c4 menu : prevent navigation flash when clicking current page closes #61
All checks were successful
Deploy / Deploy to Production (push) Successful in 5m25s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 14:22:50 +02:00
isUnknown
012aada73b panel > blog > add page : block template article - close #68
All checks were successful
Deploy / Deploy to Production (push) Successful in 24s
2026-04-21 14:19:41 +02:00
isUnknown
d00b47ec3d article : add margin bottom footer
All checks were successful
Deploy / Deploy to Production (push) Successful in 25s
2026-04-16 14:55:45 +02:00
isUnknown
31f74fbecd about : navigate team carousel 4 slides at a time on desktop refs #58
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 08:35:34 +02:00
isUnknown
edc3e3db1d footer : remove immediate onScroll call on slide change refs #59
All checks were successful
Deploy / Deploy to Production (push) Successful in 22s
Calling onScroll() immediately after attaching the listener caused the
footer to appear on page load when content height exceeded clientHeight
by less than the threshold (0 >= smallOverflow - 100 = true at scrollTop=0).
Footer now starts hidden and only reveals on explicit user scroll.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 08:33:08 +02:00
isUnknown
719f6ced53 footer : fix data-template sync and atBottom overflow guard refs #59
- App.svelte: sync body[data-template] on every active template change.
  PHP only sets it on initial load; SPA navigation left it stale (e.g.
  stuck on "home"), breaking CSS selectors like [data-template="white-paper"].
- Footer.svelte: guard atBottom with an overflow check.
  When scrollHeight === clientHeight (no overflow), the old formula
  (0 >= 0 - threshold) was always true, showing the footer immediately
  on pages with no scrollable content (e.g. white-paper detail on load).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 08:25:32 +02:00
isUnknown
689ec3b138 portfolio : fix gallery loading and optimize image sizes refs #59
All checks were successful
Deploy / Deploy to Production (push) Successful in 25s
- Remove GalleryAnimation preloading (was downloading full-size originals
  via new Image(), causing 5MB+ redundant downloads on top of WebP srcset)
- Gallery now shows immediately, images load lazily via DOM
- Force eager loading on mockup img when slide becomes active (fixes
  first-project gallery never showing — lazy img off-screen on bg slide)
- Resize all direct ->url() calls to appropriate display dimensions:
  gallery src 600px, mockup src 960px, backgrounds 1920px,
  play lettering 500px, play preview 1000px, team photos 400px

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 08:12:55 +02:00
isUnknown
3d8d709165 footer : inert when hidden #57
All checks were successful
Deploy / Deploy to Production (push) Successful in 20s
2026-04-14 10:00:10 +02:00
isUnknown
5c2c015850 footer : disable pointer events when hidden #57
All checks were successful
Deploy / Deploy to Production (push) Successful in 28s
2026-04-14 09:58:23 +02:00
isUnknown
4dc937addd portfolio : decouple animation direction from mockup position
All checks were successful
Deploy / Deploy to Production (push) Successful in 27s
refs #44

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 10:00:19 +02:00
isUnknown
fc1fa42e67 footer : hide on white paper page
All checks were successful
Deploy / Deploy to Production (push) Successful in 23s
2026-04-04 10:27:10 +02:00
isUnknown
0148d5a9c3 mobile > expertise : force reverse video preload for mobile playback
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 10:25:16 +02:00
isUnknown
35b3869e97 white paper : hide footer
All checks were successful
Deploy / Deploy to Production (push) Successful in 20s
2026-04-04 10:22:40 +02:00
isUnknown
7241e75023 mobile > footer : disable pointer events
All checks were successful
Deploy / Deploy to Production (push) Successful in 23s
2026-04-04 10:19:32 +02:00
isUnknown
ffeedcdaed mobile : fix home video autoplay + adjust expertise text offset
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 10:18:01 +02:00
isUnknown
342b6322fb desktop > portfolio : improve horizontal mockup layout
All checks were successful
Deploy / Deploy to Production (push) Successful in 27s
2026-04-04 10:12:03 +02:00
isUnknown
cc61a83139 gallery animation : reveal only once all images are loaded. related to #55
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
Preload unique image URLs via new Image(). Container stays at opacity:0
until all are ready, then reveals at once. Cached images show instantly
(no fade transition). Fixes broken progressive reveal in scrolling gallery.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 12:28:31 +02:00
isUnknown
9d7fca4d91 global : preload bg-fixed background image before showing. related to #55
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 12:20:40 +02:00