0b74344efe
docs: fix DX for new contributors
...
test / unit (push) Has been cancelled
lint / lint (push) Has been cancelled
- Fix port mismatch: Dockerfile EXPOSE 8000, .env.example PORT=8000,
compose.yml gets explicit PORT=8000
- Add thoughts-frontend/.env.example with all required vars
- Document NEXT_PUBLIC_FEDIVERSE_DOMAIN in README
- Document private cargo registry (k-ap on Gitea)
- Add local dev workflow: make dev-infra → cargo run → bun dev
- Split make targets: test-unit (no DB), test-integration, up
2026-05-29 14:27:42 +02:00
6d0b1a3121
refactor: eliminate User/UserResponse struct literals, add AP user tests
...
- Feed/search adapters use #[sqlx(flatten)] UserRow instead of
inline User construction — single point of change when User
gains fields
- User::new_remote constructor replaces struct literal in testing
- to_summary_response replaces inline UserResponse in get_users
- 5 integration tests for PgApUserRepository (find, count,
profile_fields→attachment)
2026-05-29 14:17:41 +02:00
020a79704f
refactor: dedup JSONB name/value helpers, add profile fields validation
...
lint / lint (push) Failing after 9m29s
test / unit (push) Has been cancelled
Extract parse/serialize into postgres::jsonb, used by user,
remote_actor, and postgres-federation. Validate profile fields
in update_profile use case (max 4, name≤64, value≤256).
2026-05-29 13:59:39 +02:00
805bd9534f
feat: add profile fields for local users
...
DB→domain→API→AP→frontend end-to-end. Fields stored as
JSONB, exposed via PATCH /users/me, serialized as AP
PropertyValue attachment. Editor in federation settings,
display on profile card.
2026-05-29 13:54:25 +02:00
14a869cc8d
fix(federation): convert remote actor posts handler to PagedResponse
...
lint / lint (push) Failing after 9m36s
test / unit (push) Successful in 16m25s
missed in prior refactor — was still returning snake_case per_page via json!
2026-05-29 12:23:28 +02:00
6abd2e7aad
fix(frontend): align Zod schemas with camelCase API responses
...
lint / lint (push) Has been cancelled
test / unit (push) Has been cancelled
per_page → perPage in paginated response schemas, drop tag field from tag endpoint
2026-05-29 12:15:07 +02:00
9798a1d829
refactor: type safety + dedup cleanup across 13 code smells
...
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
...
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
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
...
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
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
...
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
...
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
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
...
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
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