| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | feat(a11y): respect prefers-reduced-motion | Fuwn | 25 hours | 1 | -2/+4 |
| | | | | | | | | Add a global reduced-motion media query that collapses animation and transition durations and disables smooth scroll. Skip Lenis init when the same preference is set so the JS-driven smooth scroll falls back to the browser default, which the spec already honours. | ||||
| * | refactor(motion): introduce easing/duration tokens | Fuwn | 8 days | 1 | -4/+4 |
| | | | | | Add --ease-out-quart, --ease-in-out-quart, --duration-fast, --duration-slow in motion.css and migrate the global anchor, header, and theme-switch transitions to use them. Establishes a shared motion vocabulary for future polish. | ||||
| * | style(header): soften hide/show curve with ease-out-quart | Fuwn | 8 days | 1 | -1/+1 |
| | | | | | Replace transform 0.3s ease with 0.4s cubic-bezier(0.22, 1, 0.36, 1) so the header settles instead of snapping, pairing with Lenis-smoothed scroll. | ||||
| * | style(anchor): narrow global anchor transition to color/opacity | Fuwn | 8 days | 1 | -1/+4 |
| | | | | | Replace transition: all with explicit color, opacity, and text-decoration-color so unrelated property changes (transform, background) do not get incidentally tweened. | ||||
| * | fix(scroll): route LandingHero scroll-down through Lenis | Fuwn | 8 days | 1 | -0/+5 |
| | | | | | Lenis disables native CSS smooth scroll, so window.scrollTo({behavior:"smooth"}) jumps instantly. Expose the Lenis instance via a store and scroll through it, falling back to native when unavailable. | ||||
| * | feat(scroll): add global smooth scrolling via Lenis | Fuwn | 8 days | 1 | -0/+7 |
| | | |||||
| * | feat(command-palette): add quick toggles, sync, and auth actions | Fuwn | 2026-04-26 | 1 | -1/+12 |
| | | | | | | | | | Adds 13 reactive quick toggles (24h time, animations, blur adult, cover modes, hover cover, schedule list, reverse sort, data saver, notifications, language, title format cycle, outbound link target cycle), three sync actions (push/pull/disable), and login/logout entries gated on auth state. Names reflect current state so the palette doubles as a status surface. | ||||
| * | Revert "fix(api): drop unused redirect query param from oauth refresh" | Fuwn | 2026-04-18 | 1 | -1/+3 |
| | | | | | This reverts commit 13226aaeb7c4dc1ce01074ef1ba1eeb87b53d5f5. | ||||
| * | fix(api): await setShadowHidden in badges PUT | Fuwn | 2026-04-18 | 1 | -1/+4 |
| | | | | | | | | setShadowHidden is async and hits Supabase. The PUT handler called it without await, so the handler could respond before the database write landed (and any error was silently lost). Add the missing await so the response only goes out after the update settles. | ||||
| * | fix(api): drop unused redirect query param from oauth refresh | Fuwn | 2026-04-18 | 1 | -3/+1 |
| | | | | | | | | | | | | | The refresh endpoint accepted a ?redirect query param and, when present, called redirect(303, "/") instead of returning the refreshed token as JSON. The target was hardcoded to "/" regardless of the param's value, so the feature was dead — and the pattern of reading a "redirect" param invited future open-redirect bugs if someone wired the value through to redirect() directly. The sole in-tree caller (feeds/activity-notifications) reads the JSON response, so always return JSON and drop the redirect import. | ||||
| * | fix(api): gate badge click-count on Origin and fix 401 response reuse | Fuwn | 2026-04-18 | 1 | -9/+11 |
| | | | | | | | | | | | | | | The PUT ?incrementClickCount path ran before any auth guard, letting unauthenticated callers spam-increment arbitrary badges. Require the request Origin to match appOrigin() so legitimate in-browser clicks (authenticated or not) still count while direct scripted calls are rejected. Also convert the shared `unauthorised` Response singleton into a factory. The singleton's body was consumed on first use, so subsequent 401 paths returned a `Response body is locked` error instead of the intended "Unauthorised" body. | ||||
| * | fix(api): encode subsplease timezone to prevent query-param injection | Fuwn | 2026-04-18 | 1 | -5/+6 |
| | | | | | | | | The `tz` query value was interpolated raw into the upstream URL, letting callers append arbitrary query segments (e.g. `tz=foo&f=hax`). Wrap the value in encodeURIComponent and rename the local variable away from the banned `tz` abbreviation. | ||||
| * | fix(ui): balance homepage media panels | Fuwn | 2026-04-12 | 1 | -62/+220 |
| | | |||||
| * | revert(ui): remove april fools executive mode | Fuwn | 2026-04-02 | 3 | -99/+22 |
| | | |||||
| * | fix(ui): tune april fools notification copy | Fuwn | 2026-04-01 | 1 | -1/+1 |
| | | |||||
| * | fix(ui): simplify april fools controls | Fuwn | 2026-04-01 | 1 | -15/+52 |
| | | |||||
| * | feat(ui): add april fools executive mode | Fuwn | 2026-04-01 | 3 | -22/+62 |
| | | |||||
| * | fix(badges): hide outbound link notice | Fuwn | 2026-04-01 | 1 | -1/+1 |
| | | |||||
| * | fix(state): restore persisted list UI state | Fuwn | 2026-03-28 | 2 | -4/+6 |
| | | |||||
| * | fix(cache): preserve hydrated client state | Fuwn | 2026-03-28 | 1 | -1/+2 |
| | | |||||
| * | fix(auth): ignore malformed user cookies | Fuwn | 2026-03-28 | 6 | -24/+54 |
| | | |||||
| * | fix(api): keep preferences publicly readable | Fuwn | 2026-03-27 | 1 | -4/+1 |
| | | |||||
| * | fix(profile): restore owner controls for new accounts | Fuwn | 2026-03-27 | 2 | -21/+41 |
| | | |||||
| * | refactor(supabase): move app access to service role | Fuwn | 2026-03-27 | 2 | -40/+56 |
| | | |||||
| * | fix(actions): resolve quality and trigger deploy drift | Fuwn | 2026-03-22 | 1 | -6/+8 |
| | | |||||
| * | perf: lazy-load authenticated list surfaces | Fuwn | 2026-03-22 | 2 | -25/+145 |
| | | |||||
| * | refactor: centralise site origin usage | Fuwn | 2026-03-22 | 11 | -61/+44 |
| | | |||||
| * | refactor(effect): add request body schema decoders to api routes | Fuwn | 2026-03-03 | 4 | -5/+36 |
| | | |||||
| * | refactor(effect): migrate api auth cookie decoding | Fuwn | 2026-03-03 | 4 | -57/+18 |
| | | |||||
| * | refactor(effect): migrate core auth decode boundaries | Fuwn | 2026-03-03 | 2 | -18/+6 |
| | | |||||
| * | chore(cleanup): remove stale eslint directives | Fuwn | 2026-03-01 | 2 | -3/+0 |
| | | |||||
| * | chore(biome): drop formatter style overrides | Fuwn | 2026-03-01 | 53 | -1463/+1597 |
| | | |||||
| * | chore(biome): re-enable noImplicitAnyLet rule | Fuwn | 2026-03-01 | 11 | -11/+22 |
| | | |||||
| * | chore(biome): enable svelte linting | Fuwn | 2026-03-01 | 2 | -3/+3 |
| | | |||||
| * | chore(biome): enable svelte formatting | Fuwn | 2026-03-01 | 21 | -955/+954 |
| | | |||||
| * | chore(biome): re-enable noDoubleEquals rule | Fuwn | 2026-03-01 | 1 | -1/+1 |
| | | |||||
| * | chore(types): decouple app code from fragile generated route types | Fuwn | 2026-03-01 | 1 | -1/+1 |
| | | |||||
| * | perf: optimise list hot paths and shared timers | Fuwn | 2026-03-01 | 3 | -9/+9 |
| | | |||||
| * | fix: Resolve all ESLint errors and warnings | Fuwn | 2026-01-29 | 8 | -12/+12 |
| | | |||||
| * | feat(Landing): Update to match LandingHero | Fuwn | 2026-01-28 | 1 | -5/+1 |
| | | |||||
| * | feat: Add hero for landing and welcome page | Fuwn | 2026-01-27 | 2 | -0/+11 |
| | | |||||
| * | feat(+layout.svelte): Add Web Analytics | Fuwn | 2026-01-26 | 1 | -0/+3 |
| | | |||||
| * | fix: Add null guards and improve error messaging for user lookups | Fuwn | 2026-01-23 | 4 | -6/+27 |
| | | |||||
| * | fix: Resolve unused imports, dead code, and type definitions | Fuwn | 2026-01-23 | 1 | -1/+0 |
| | | |||||
| * | refactor: Migrate event handlers to new Svelte 5 syntax | Fuwn | 2026-01-23 | 10 | -39/+39 |
| | | |||||
| * | refactor(layout): Replace empty p elements with reusable Spacer component | Fuwn | 2026-01-23 | 12 | -39/+51 |
| | | |||||
| * | fix(html): Replace self-closing non-void HTML elements with proper closing tags | Fuwn | 2026-01-23 | 11 | -38/+38 |
| | | |||||
| * | fix(notifications): Replace svelte-notifications with custom store for Svelte 5 | Fuwn | 2026-01-22 | 1 | -4/+3 |
| | | |||||
| * | format: Apply Prettier formatting | Fuwn | 2026-01-22 | 1 | -7/+21 |
| | | |||||
| * | deps(svelte): Migrate to Svelte 5 with compatibility mode | Fuwn | 2026-01-22 | 1 | -3/+8 |
| | | |||||