Commit Graph

215 Commits

Author SHA1 Message Date
9798a1d829 refactor: type safety + dedup cleanup across 13 code smells
Some checks failed
test / unit (push) Has been cancelled
lint / lint (push) Has been cancelled
- typed PagedResponse/CreatedApiKeyResponse/NotificationSummaryResponse replace json! blocks
- extract TagRow/ApiKeyRow/OutboxRow to module level, top_friend uses sqlx flatten
- add should_broadcast() helper, inline dead let bindings in federation_event
- add UploadContext struct, extract_upload_field, wants_activity_json helpers
- rename PostgresFederationRepository→PgFederationRepository, PostgresApUserRepository→PgApUserRepository
- add IntoAnyhow trait replacing ~30 .map_err(|e| anyhow!(e)) calls
- extract build_ap_service shared between bootstrap and worker factories
- add postgres/constants.rs, PartialEq+Eq on PasswordHash
2026-05-29 12:02:03 +02:00
84edf58de6 fix(federation): fix 27 AP bugs, gaps, and inconsistencies
Some checks failed
lint / lint (push) Failing after 9m26s
test / unit (push) Successful in 16m3s
Round 1 — 18 bug fixes:
- remote likes/boosts now persist in engagement tables
- intern_remote_actor uses name@domain, expanded username to VARCHAR(255)
- PgRemoteActorRepository upsert/find now handles all fields
- update_following_status no longer a no-op, count_followers counts all
- accept/reject follow publishes event before DB mark (atomicity)
- fetch_outbox_page follows pagination via next links
- actor URL canonicalized to /users/{uuid}
- content_to_html escapes single quotes
- WebFinger accepts application/ld+json type
- try_from_ap accepts Article and Page object types
- feed SQL uses parameterized viewer UUID instead of format!
- content cap raised from 500 to 5000 chars
- also_known_as changed from Option<String> to Vec<String>
- connections fetch always triggers from page 1

Round 2 — 9 gap fixes:
- on_announce_removed handler deletes boost row on Undo(Announce)
- on_update handles Person/Service/Group actor profile updates
- sync_remote_actor_to_user syncs remote_actors → users on create/update
- FederationBlockPort: block_by_username sends Block activity to remote
- domain RemoteActor gains inbox_url, shared_inbox_url fields
- remote_actors attachment column (JSONB) with read/write
- .well-known/host-meta endpoint
- 256KB body limit on AP inbox routes
- outbox cleanup job (7-day retention, hourly sweep)
2026-05-29 11:28:40 +02:00
f9de21dcfa refactor(tests): remove unused value_objects imports from test files
Some checks failed
lint / lint (push) Failing after 9m20s
test / unit (push) Successful in 16m13s
2026-05-29 10:18:18 +02:00
79f1e63bb8 perf(feed): replace correlated subqueries with LEFT JOIN aggregations
Some checks failed
lint / lint (push) Failing after 9m14s
test / unit (push) Successful in 16m3s
Feed queries ran 5 correlated subqueries per row (3 COUNT + 2 EXISTS
for engagement counts and viewer context). Replaced with LEFT JOIN
aggregations computed once per query. Adds migration 016 with indexes
on likes(thought_id), boosts(thought_id), thoughts(in_reply_to_id),
and compound viewer-context indexes — expected to drop ~3s queries to
<100ms on typical page sizes.

Also removes WebFinger from the footer (requires query params, zero
standalone value as a link).
2026-05-29 04:35:32 +02:00
fc806f82a4 feat: add Footer component with navigation links
Some checks failed
lint / lint (push) Has been cancelled
test / unit (push) Has been cancelled
2026-05-29 04:30:36 +02:00
bcd86fbfe7 refactor: extract handler business logic into application use cases
Some checks failed
test / unit (push) Has been cancelled
lint / lint (push) Has been cancelled
11 handlers were calling repos/ports directly, bypassing the
application layer. Extracted into proper use cases:

feed: get_public_feed, get_user_feed, get_tag_feed, get_popular_tags
profile: get_user_profile (with follow check), list_users,
         count_local_users, list_local_followers, list_local_following
federation_management: set_also_known_as

Also registers 9 previously undocumented handlers in OpenAPI modules.
2026-05-29 04:22:43 +02:00
5b4b747dd7 feat(federation): enrich RemoteActor with bio, banner, followers/following URLs
Some checks failed
lint / lint (push) Failing after 9m25s
test / unit (push) Has been cancelled
Bumps k-ap to 0.3.1 which adds bio, banner_url, followers_url,
following_url, and also_known_as to RemoteActor. These are populated
from fetched actor JSON at follow/ingest time so followers and following
listings no longer return null profile fields.

Adds migration 015 for the new remote_actors columns, updates all JOIN
queries in postgres-federation to select and return the new fields, and
maps them through k_ap_actor_to_domain.

Also fixes clippy: remove empty line after doc comment in port.rs.
2026-05-29 04:07:52 +02:00
bd370776fe refactor: simplify function signatures and improve code readability
Some checks failed
lint / lint (push) Failing after 9m6s
test / unit (push) Has been cancelled
2026-05-29 03:47:29 +02:00
ecb61f9b8f feat: add federation processed activities table and update dependencies
Some checks failed
test / unit (push) Has been cancelled
lint / lint (push) Has been cancelled
- Created a new SQL migration to add the `federation_processed_activities` table with an index on `processed_at`.
- Updated dependencies in `Cargo.toml` files across `bootstrap` and `worker` crates, including version updates for `k-ap`.
- Enhanced the event publishing mechanism in the `factory.rs` file to include a new `KapPublisher` for handling federation events.
- Refactored the `build` function in `factory.rs` to accommodate the new event publisher and improve ActivityPub service initialization.
- Modified the worker's main loop to handle new federation event types and improved error handling for event processing.

Co-authored-by: Copilot <copilot@github.com>
2026-05-29 03:47:06 +02:00
37d03a06dd docs(openapi): fix schema registration for federation actors and management
Some checks failed
lint / lint (push) Failing after 8m56s
test / unit (push) Successful in 16m29s
2026-05-29 02:09:16 +02:00
55e5bcc2bb docs(openapi): register federation management and actors doc modules 2026-05-29 02:08:08 +02:00
ac26eaca6b docs(openapi): annotate federation actors handlers and add doc module 2026-05-29 02:06:40 +02:00
86d0497509 docs(openapi): annotate all federation management handlers and add doc module 2026-05-29 02:04:59 +02:00
989004dd74 docs(openapi): annotate all missing user handlers 2026-05-29 02:02:31 +02:00
64cc11c2a1 docs(openapi): annotate get_followers, get_following, get_popular_tags handlers 2026-05-29 02:00:53 +02:00
01ef118b0a docs(openapi): add FeedOptionsQuery IntoParams and update feed annotations 2026-05-29 01:59:17 +02:00
4ab6da67c7 fix(frontend): fix instance badge overflow on narrow screens 2026-05-29 01:47:50 +02:00
dc75ac5f6c fix(frontend): prevent handle overflow in instance badge row 2026-05-29 01:44:03 +02:00
b14b8592a2 fix(frontend): add instance badge to remote author movie diary cards 2026-05-29 01:42:43 +02:00
4db7194838 fix(frontend): wider search input on large and 2K screens 2026-05-29 01:40:11 +02:00
c94b42cba8 feat(frontend): add follow request explanation to remote user card 2026-05-29 01:37:57 +02:00
1ad6f8ae8f feat(frontend): add fediverse handle format hints to search page 2026-05-29 01:36:53 +02:00
d76ff9dafb feat(frontend): add fediverse handle widget to feed sidebar 2026-05-29 01:35:36 +02:00
522ee9c1b1 feat(frontend): add instance badge to remote author posts in feed 2026-05-29 01:34:12 +02:00
00996327fb feat(frontend): add styled 404 and error pages 2026-05-29 01:20:32 +02:00
7ed639c9ea fix(frontend): remove emojis from landing page feature cards and badges 2026-05-29 01:14:29 +02:00
3ad609a793 fix(frontend): de-AI landing page copy, remove em dashes and manifesto tone 2026-05-29 01:12:29 +02:00
9849bb4991 fix(frontend): prevent iOS Safari auto-zoom on input focus 2026-05-29 01:10:50 +02:00
2199e5c66d fix(frontend): move search to header center on mobile, nav links in hamburger only 2026-05-29 01:08:57 +02:00
6e7bf05942 feat(frontend): add hamburger sheet menu for mobile nav 2026-05-29 01:07:27 +02:00
037217960e fix(frontend): place scroll indicator directly below hero card in flow 2026-05-29 01:03:59 +02:00
44b3a6de60 fix(frontend): move scroll indicator inside hero section so it anchors correctly 2026-05-29 01:02:43 +02:00
1fd46f3f2a feat(frontend): add animated scroll indicator to landing page hero 2026-05-29 01:01:29 +02:00
9c5d5518bb fix(frontend): add blur overlay on landing page for better text contrast 2026-05-29 01:00:02 +02:00
95ea633e78 fix(frontend): restore background image on landing page by removing gradient override 2026-05-29 00:59:07 +02:00
a97507cc15 feat(frontend): replace inline LandingPage with new multi-section component 2026-05-29 00:56:28 +02:00
858faddda9 feat(frontend): add LandingPage server component with all 5 sections 2026-05-29 00:54:59 +02:00
ea3a32ccaf feat(frontend): add LandingFeatures client component with scroll animation 2026-05-29 00:52:01 +02:00
8fad8eefa0 feat(frontend): add landing page CSS keyframes and utility classes 2026-05-29 00:50:44 +02:00
5a05968ae9 fix(frontend): rewrite FiltersSortingPanel with shadcn, correct styling, useTransition 2026-05-29 00:23:07 +02:00
8229285a2f refactor(postgres): format FeedSqlBuilder for improved readability 2026-05-29 00:13:55 +02:00
145b07d636 refactor(postgres): introduce FeedSqlBuilder to consolidate SQL construction 2026-05-29 00:11:07 +02:00
7991aef47b feat(frontend): wire FiltersSortingPanel into home feed with sort/filter params 2026-05-28 23:56:49 +02:00
ed6a4f9f72 feat(frontend): add FiltersSortingPanel client component 2026-05-28 23:55:04 +02:00
f815d71c32 feat(frontend): add FeedOptions type and update getFeed to support sort/filter params 2026-05-28 23:52:58 +02:00
0688ffe0ae feat(backend): wire FeedRequest/FeedOptions sort+filter through all feed layers 2026-05-28 23:45:46 +02:00
95728302b7 feat(domain): add FeedSort, FeedFilter, FeedOptions, FeedRequest CQRS query types 2026-05-28 23:39:35 +02:00
4d00d856c1 feat: swap TopFriends for ProfileFriendsWidget on profile page 2026-05-28 22:54:13 +02:00
a279988d39 feat: add ProfileFriendsWidget with top-friends/all-friends conditional 2026-05-28 22:52:56 +02:00
2f56839938 feat: add AllFriendsCard component for local and remote friends 2026-05-28 22:50:50 +02:00