f3eee9131b
chore: remove stale .sqlx cache, add to gitignore
CI / Check / Test (push) Has been cancelled
2026-06-09 00:09:30 +02:00
9e4370b068
fix: register goal + settings endpoints in OpenAPI spec
CI / Check / Test (push) Has been cancelled
2026-06-09 00:07:29 +02:00
37ab24be74
docs: npm → bun
CI / Check / Test (push) Has been cancelled
2026-06-09 00:06:22 +02:00
307113381f
docs: add CONTRIBUTING.md with setup, architecture, PR guidelines
CI / Check / Test (push) Has been cancelled
2026-06-09 00:04:30 +02:00
6d238b6c3d
docs: mark TUI as deprecated experiment
CI / Check / Test (push) Has been cancelled
2026-06-09 00:02:20 +02:00
a7a11dde08
refactor: split monolithic handlers + testing into domain-grouped modules
...
CI / Check / Test (push) Has been cancelled
handlers/api.rs (1706 LOC) + html.rs (1735 LOC) → 12 domain files:
auth, diary, movies, users, search, watchlist, goals, social,
integrations, helpers + existing import/webhook/wrapup/images/rss.
domain/testing.rs (1309 LOC) → testing/ module:
in_memory, fakes, noops, panics, wrapup.
Update README + architecture.mmd with goals feature.
2026-06-08 23:59:23 +02:00
988e15eac6
fix: add missing common.edit i18n key
CI / Check / Test (push) Successful in 18m44s
2026-06-08 22:38:54 +02:00
fff5f4af2f
feat: goals — "watch N movies in YEAR" with progress bar
...
Domain: Goal entity, UserSettings (federation toggle), RemoteGoalEntry.
Ports: GoalRepository, UserSettingsRepository, RemoteGoalRepository.
Adapters: sqlite + postgres repos, migrations, AP content query extensions.
Application: CRUD use cases (create/update/delete/get/list), settings use cases.
API: 7 endpoints (/goals CRUD, /users/{id}/goals, /settings) with utoipa docs.
Federation: GoalObject (Note + goal discriminator), outbound broadcast with
per-user toggle, inbound GoalObjectHandler in CompositeObjectHandler.
SPA: API client + hooks, GoalCard (shadcn Card+Progress+DropdownMenu),
GoalSheet (Drawer), profile integration (editable own, read-only others),
federation toggle in settings (Switch).
Classic HTML: glassmorphic goal card on profile, Frutiger Aero styling.
Progress computed from existing reviews — backwards compatible.
2026-06-08 22:37:52 +02:00
213f9a2433
Remove backdrop filter from input slot in aero-theme.css for improved performance
CI / Check / Test (push) Successful in 17m46s
2026-06-08 21:05:16 +02:00
4dacbbfded
fix: update poster_url on remote review Update activity
...
CI / Check / Test (push) Successful in 21m35s
on_update was ignoring posterUrl from the AP note, so remote instances
never got the poster even after receiving the Update.
2026-06-04 23:21:19 +02:00
886f26c7dc
fix: broadcast AP Update after poster sync to fix missing posters on remote instances
...
CI / Check / Test (push) Has been cancelled
New movies had no poster at AP broadcast time (race between poster sync
and ReviewLogged handler). PosterSynced event now fires after sync
completes, triggering Update notes so remote apps get the poster URL.
2026-06-04 23:12:27 +02:00
6a10ba15c1
feat(spa): comment field in queue review, date picker in log sheet
CI / Check / Test (push) Successful in 17m20s
2026-06-04 22:35:30 +02:00
237f1e7d32
style: fmt persons test
CI / Check / Test (push) Successful in 16m49s
2026-06-04 17:59:05 +02:00
c647f4c13b
fix: clippy 1.96 lints — map_or, duplicate_mod, needless_borrows, slice_refs
CI / Check / Test (push) Failing after 44s
2026-06-04 17:58:01 +02:00
3bb2dbee19
ci: split workflows — Gitea tests only, GitHub tests + Docker push
CI / Check / Test (push) Failing after 6m24s
2026-06-04 17:48:37 +02:00
b0bfc149e1
ci: build + push Docker image to ghcr.io on master/tags
CI / Build & Push Docker Image (push) Has been cancelled
CI / Check / Test (push) Has been cancelled
2026-06-04 17:47:04 +02:00
7e8a1b8379
feat: batteries-included deployment — compose, .env.example, sane defaults
CI / Check / Test (push) Failing after 6m21s
2026-06-04 17:32:34 +02:00
4bd8dcbf05
feat: wrapup wow — animated counters, scroll-reveal, fun facts, component split, budget formatting
CI / Check / Test (push) Failing after 6m25s
2026-06-04 17:15:35 +02:00
ebf9a9f4a8
feat: replace CSS bar charts with recharts, fix label readability
CI / Check / Test (push) Failing after 6m20s
2026-06-04 17:04:29 +02:00
a76386345f
feat: SPA polish — wrapup sections, shareable card, webhook instructions, blocked merge
CI / Check / Test (push) Failing after 6m35s
2026-06-04 16:56:09 +02:00
49728f8cd7
fix: fall back to converted extensions in object storage get
CI / Check / Test (push) Failing after 6m36s
2026-06-04 16:22:57 +02:00
5334312d64
refactor: extract reindex + enrichment logic from handlers into use cases
CI / Check / Test (push) Failing after 6m45s
2026-06-04 16:09:35 +02:00
81a377cbb2
docs: proper SPA readme
CI / Check / Test (push) Failing after 6m21s
2026-06-04 15:58:03 +02:00
689c8a9ac3
docs: add hexagonal architecture mermaid diagram
CI / Check / Test (push) Has been cancelled
2026-06-04 15:52:38 +02:00
5e6bc93a6a
feat: SPA quick wins — refresh, back nav, watchlist add, dates, haptics, export
...
CI / Check / Test (push) Failing after 7m1s
- feed refresh button with spinning icon
- BackButton component using history.back()
- watchlist bookmark icon on search results
- timeAgo/shortDate date formatting (date-fns)
- haptic feedback on star rating, swipe-to-delete, review log
- global error toasts via QueryClient mutation defaults
- diary CSV export button
2026-06-04 15:45:31 +02:00
4a3a99c6d2
fix: disable vaul repositionInputs to fix iOS keyboard in drawers
CI / Check / Test (push) Failing after 6m35s
2026-06-04 15:35:00 +02:00
dacc057af6
fix: lazy-load wrapup backgrounds, cap sqlite pool to 4 connections
...
CI / Check / Test (push) Failing after 6m32s
backgrounds were decoded to RGBA at startup (~173MB for 9 images).
now only store paths, decode on demand during video generation.
2026-06-04 14:57:47 +02:00
01c1082290
feat: SPA bug fixes, interactivity, federation badges, admin reindex
...
CI / Check / Test (push) Failing after 10m55s
- fix wrapup status "completed" → "Ready"
- fix unfollow sending {handle} instead of {actor_url}
- fix missing post import in users.ts
- fix feed/activity cache not invalidated on review delete/log
- add person_id to cast/crew types, link to /people pages
- add movie_id to wrapup MovieRef, link highlights to /movies pages
- add wrapup actor profile images + clickable person links
- add federated review globe badge in feed and movie detail
- add fediverse handle (@user@instance) in follower/following cards
- add admin reindex search button in settings
- add wrapup user picker for admins
- add username/display_name to user summary type
- use tmdbProfileUrl for person search results
2026-06-04 14:43:41 +02:00
bd7dc648c4
feat: search reindex, worker improvements, person IDs, user display names
...
- add admin POST /api/v1/admin/reindex-search endpoint + event-driven handler
- backfill persons from movie_cast/movie_crew into persons table
- paginate person list_page/backfill_from_credits_batch to cap memory
- concurrent worker event dispatch with semaphore (max 8)
- graceful worker shutdown (drain in-flight tasks on SIGINT)
- always ack events, log handler errors as warnings (no infinite retry)
- NATS ack_wait 600s, AtomicBool guard against concurrent reindex
- add username/display_name to UserSummaryDto and users list
- add person_id to CastMemberDto/CrewMemberDto via get_movie_profile use case
- add movie_id to wrapup MovieRef, person_id to wrapup PersonStat
- thread tmdb_person_id through wrapup cast pipeline
- add is_federated to FeedEntryDto
- cap orphaned persons query with LIMIT 500
- add SPA link to classic site footer
2026-06-04 14:43:28 +02:00
af8e58aeb8
fix: use avatar/banner URLs directly, not through posterUrl()
CI / Check / Test (push) Failing after 11m13s
2026-06-04 04:30:38 +02:00
fd9a053702
fix: exclude spa/.env from docker build to prevent baked localhost URLs
CI / Check / Test (push) Has been cancelled
2026-06-04 04:27:02 +02:00
092e769641
fix: 401 redirect uses /app/login instead of /login
CI / Check / Test (push) Has been cancelled
2026-06-04 04:22:20 +02:00
b20d23fbb3
fix: exclude spa/node_modules and spa/dist from docker context
2026-06-04 04:21:25 +02:00
b9c0b10740
feat: add SPA, serve at /app/, update Dockerfile and README
...
- React + TanStack Router + shadcn/ui SPA under spa/
- serve spa/dist at /app/ with index.html fallback for client routing
- Dockerfile: node build stage for SPA, copy dist into runtime image
- README: document SPA, CORS_ORIGINS env var, architecture entry
- vite base set to /app/, manifest.json paths fixed
2026-06-04 04:20:15 +02:00
15dc0e526b
feat: expose display_name, also_known_as, profile fields in GET /profile
2026-06-04 02:58:12 +02:00
cf2f4a1b4f
feat: watchlist add accepts title/year/imdb for movies not in DB
2026-06-04 02:47:55 +02:00
e7cdbf9ca7
fix: user profile URLs, typed returns for following/followers
...
- avatar_url/banner_url now use full base_url + /images/ prefix
- get_user_following/followers return Result<Json<_>, ApiError>
- add ap_to_domain helper for anyhow→DomainError conversion
2026-06-04 02:40:04 +02:00
837b7866af
feat: include avatar_url and banner_url in UserProfileResponse
2026-06-04 02:37:16 +02:00
c4908b7765
feat: API endpoints for any user's following/followers
2026-06-04 02:34:01 +02:00
dbc78a1ff4
feat: add user_id to FeedEntryDto
2026-06-04 02:22:08 +02:00
a97e263ed3
fix: always return following/followers counts, only hide pending for non-own profiles
2026-06-04 02:19:27 +02:00
b1d667d3cb
fix: user profile returns social counts when viewing own profile
2026-06-04 02:18:28 +02:00
bf73d4a695
feat: CORS, role in auth, banner_url, diary sort, cleanup
...
- CORS layer on API routes via CORS_ORIGINS env var
- role field in login + profile responses
- banner_url in profile response
- diary sort_by: rating_desc/rating_asc/date_asc/date_desc
- UserRole::as_str() to deduplicate role mapping
- typed DTOs for import preview (replace ad-hoc JSON)
- warn on invalid CORS origins
2026-06-04 02:06:51 +02:00
7b9b0f9ffe
feat: API preview endpoint for import sessions
2026-06-04 01:59:09 +02:00
7d6f874ae7
feat: activity feed accepts sort_by param
2026-06-04 01:35:45 +02:00
4206bb4b06
fix: diary sort_by rating_desc/rating_asc in all/movie queries
2026-06-04 01:28:35 +02:00
004243dcbb
fix: use embed=true for serde bool compat
CI / Check / Test (push) Failing after 6m35s
2026-06-03 10:17:43 +02:00
c798b851dc
fmt
CI / Check / Test (push) Has been cancelled
2026-06-03 10:14:53 +02:00
c18d4eebc1
fix: use array instead of vec for clippy
2026-06-03 10:14:20 +02:00
3f6e01ed65
feat: add embed snippet to profile settings
2026-06-03 10:09:38 +02:00