| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | fix(easter-event): drop dead resize/scroll listener cleanup | Fuwn | 2026-04-18 | 1 | -3/+0 |
| | | | | | | | | The onMount cleanup removed resize and scroll listeners that were never actually registered — the only live side effect is the updatePosition interval. Drop the two dead removeEventListener calls so the cleanup only matches what the component actually sets up. | ||||
| * | fix(media): guard publicMediaListCollection against missing AniList data | Fuwn | 2026-04-18 | 1 | -17/+18 |
| | | | | | | | | | | | | | The public variant of mediaListCollection chained data.MediaListCollection .lists with no null check, so any AniList error response (rate limit, private list, nonexistent user) threw a TypeError. Mirror the guard used by the authenticated sibling: if any of data, MediaListCollection, or lists is missing, return an empty array. The function currently has no in-tree callers; noting that it may be a candidate for removal in a follow-up. | ||||
| * | fix(user): pass actual description to badge preview alt text | Fuwn | 2026-04-18 | 1 | -1/+1 |
| | | | | | | | | | | | The ParallaxImage alternativeText prop was passed as the literal string "selectedBadge.description" (quoted attribute syntax) instead of the expression, so every badge image rendered with that identifier name as its alt text. Switch to the expression form with a nullish-coalescing fallback so badges without a description render empty alt rather than the literal. | ||||
| * | fix(schedule): stop duplicating first page in season pagination | Fuwn | 2026-04-18 | 1 | -37/+18 |
| | | | | | | | | | | | | | | The seasonal schedule collector pushed page 1 outside the while-loop, then re-pushed the current page on every loop iteration. That meant every multi-page season duplicated its first page's media, and the same bug ran a second time when includeLastSeason was set. Restructure into a shared collectAllSchedulePages helper with a single push-then-check-hasNextPage loop, so each page is pushed exactly once. Verified against AniList for SPRING 2026 with includeLastSeason=true: 210 media, 0 duplicates. | ||||
| * | fix(utility): treat .localhost subdomains as private in appOrigin | Fuwn | 2026-04-18 | 1 | -0/+1 |
| | | |||||
| * | fix(ui): hide list count badge when no media is displayed | Fuwn | 2026-04-17 | 2 | -2/+2 |
| | | | | | | | Showing "0" in the list title next to a "No anime/manga to display" empty-state message duplicates information. Treat an empty media list the same as dummy mode and suppress the count. | ||||
| * | fix(ui): reset media list filter when its custom list disappears | Fuwn | 2026-04-17 | 2 | -0/+20 |
| | | | | | | | | | If a user's persisted filter references a custom list that no longer exists on any media (renamed or deleted on AniList), the select falls back to showing "All" but the underlying state still filters to an empty set. Detect the stale value and reset it, clearing the StateBin entry so the fix survives a reload. | ||||
| * | fix(ui): hide follow-fix toggle link until a username is entered | Fuwn | 2026-04-17 | 1 | -3/+5 |
| | | | | | | | Previously the link rendered "Toggle follow for ..." and was clickable with an empty submission. Only render once the input has content so there is no dead affordance. | ||||
| * | fix(ui): hide media roulette button when only one item is pickable | Fuwn | 2026-04-17 | 2 | -2/+2 |
| | | | | | | | Rouletting a single item is deterministic, so the affordance adds nothing. Require at least two items before showing the button on both anime and manga lists. | ||||
| * | fix(ui): hide media list filter when every list matches "All" | Fuwn | 2026-04-17 | 2 | -2/+10 |
| | | | | | | | If every custom list contains every displayed media item, each option yields the same result, so the picker is noise. Gate the select on a reactive check that any list excludes at least one item. | ||||
| * | feat(cache): instant list revalidation from command palette and debug menu | Fuwn | 2026-04-15 | 9 | -51/+100 |
| | | | | | | | | | | Replaces one-shot boolean revalidateAnime with a counter store so multiple components can subscribe without race conditions. Adds revalidateManga store and reactive refresh blocks to DueAnimeList and MangaListTemplate. Extracts shared invalidateListCaches function used by both the command palette action and the debug settings button. Renames palette item to "Refresh" and debug button to "Invalidate". | ||||
| * | feat(command-palette): add clear anime and manga list caches action | Fuwn | 2026-04-15 | 1 | -0/+23 |
| | | |||||
| * | fix(settings): clarify data saver checkbox | Fuwn | 2026-04-02 | 4 | -0/+6 |
| | | |||||
| * | feat(settings): add checkbox tooltips | Fuwn | 2026-04-02 | 1 | -0/+5 |
| | | |||||
| * | fix(ui): stop roulette at intended duration | Fuwn | 2026-04-02 | 1 | -1/+2 |
| | | |||||
| * | fix(ui): correct manga list tooltip behavior | Fuwn | 2026-04-02 | 2 | -2/+8 |
| | | |||||
| * | fix(ui): polish media list title separators | Fuwn | 2026-04-02 | 1 | -0/+8 |
| | | |||||
| * | fix(ui): align media list title timings | Fuwn | 2026-04-02 | 1 | -2/+3 |
| | | |||||
| * | fix(ui): refine media list title counts | Fuwn | 2026-04-02 | 1 | -4/+17 |
| | | |||||
| * | feat(debug): add media list timing toggle | Fuwn | 2026-04-02 | 5 | -1/+10 |
| | | |||||
| * | revert(ui): remove april fools executive mode | Fuwn | 2026-04-02 | 7 | -114/+30 |
| | | |||||
| * | feat(ui): add april fools executive mode | Fuwn | 2026-04-01 | 7 | -30/+114 |
| | | |||||
| * | fix(manga): show skeleton while list is loading | Fuwn | 2026-03-30 | 1 | -1/+1 |
| | | |||||
| * | perf(manga): progressively hydrate native chapter counts | Fuwn | 2026-03-29 | 3 | -15/+123 |
| | | |||||
| * | fix(anilist): restore completed list query semantics | Fuwn | 2026-03-28 | 3 | -5/+5 |
| | | |||||
| * | fix(state): restore persisted list UI state | Fuwn | 2026-03-28 | 1 | -2/+3 |
| | | |||||
| * | fix(filters): apply list filter changes immediately | Fuwn | 2026-03-28 | 2 | -8/+16 |
| | | |||||
| * | fix(cache): restore instant filters and shared AniList cache | Fuwn | 2026-03-28 | 4 | -12/+30 |
| | | |||||
| * | fix(anilist): restore completed list filters | Fuwn | 2026-03-28 | 5 | -26/+61 |
| | | |||||
| * | fix(anilist): fall back to persisted media list cache | Fuwn | 2026-03-28 | 1 | -0/+56 |
| | | |||||
| * | fix(anilist): avoid leaking settings subscriptions | Fuwn | 2026-03-28 | 1 | -4/+1 |
| | | |||||
| * | fix(manga): avoid poisoning native chapter cache | Fuwn | 2026-03-28 | 1 | -7/+37 |
| | | |||||
| * | fix(notifications): stabilize browser subscription identity | Fuwn | 2026-03-28 | 1 | -15/+10 |
| | | |||||
| * | fix(notifications): support per-device push subscriptions | Fuwn | 2026-03-28 | 2 | -4/+39 |
| | | |||||
| * | fix(cache): preserve hydrated client state | Fuwn | 2026-03-28 | 1 | -1/+5 |
| | | |||||
| * | fix(preferences): preserve partial preference updates | Fuwn | 2026-03-28 | 1 | -44/+26 |
| | | |||||
| * | fix(auth): ignore malformed user cookies | Fuwn | 2026-03-28 | 3 | -3/+43 |
| | | |||||
| * | fix(cache): respect AniList media list recache windows | Fuwn | 2026-03-28 | 7 | -55/+136 |
| | | |||||
| * | feat(manga): allow forcing automatic refresh | Fuwn | 2026-03-28 | 1 | -1/+5 |
| | | |||||
| * | style(ci): format supabase server client | Fuwn | 2026-03-27 | 1 | -1/+2 |
| | | |||||
| * | fix(ci): fall back to anon key during build analysis | Fuwn | 2026-03-27 | 1 | -1/+6 |
| | | |||||
| * | fix(supabase): use dynamic private env for service role | Fuwn | 2026-03-27 | 1 | -2/+2 |
| | | |||||
| * | fix(manga): restore progress-based volume recommendations | Fuwn | 2026-03-27 | 1 | -0/+1 |
| | | |||||
| * | fix(proxy): improve native manga chapter counts | Fuwn | 2026-03-27 | 2 | -38/+101 |
| | | |||||
| * | refactor(supabase): move app access to service role | Fuwn | 2026-03-27 | 9 | -14/+19 |
| | | |||||
| * | refactor(proxy): move manga chapter counts behind indexed cache | Fuwn | 2026-03-27 | 3 | -235/+270 |
| | | |||||
| * | fix(actions): resolve quality and trigger deploy drift | Fuwn | 2026-03-22 | 1 | -5/+7 |
| | | |||||
| * | fix: restore landing visibility without blocking lazy loads | Fuwn | 2026-03-22 | 1 | -16/+29 |
| | | |||||
| * | perf: fetch dummy media outside the app bundle | Fuwn | 2026-03-22 | 2 | -8/+21 |
| | | |||||
| * | perf: lazy-load authenticated list surfaces | Fuwn | 2026-03-22 | 2 | -56767/+0 |
| | | |||||