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)
Thoughts — Frontend
Next.js 15 (App Router) frontend for the Thoughts self-hosted microblogging server.
Features
- Post thoughts, reply, boost, and like
- Home feed, public feed, per-user timelines
- Browse and follow remote Fediverse actors by
@user@instancehandle - Full remote actor profiles — bio, banner, profile fields, posts tab, followers/following tabs
- Full-text search for local users and thoughts; remote actor lookup via WebFinger
- Notifications, API key management, profile editing
- Dark/light theme
Setup
bun install
Copy .env.local.example to .env.local (or set the variables directly):
NEXT_PUBLIC_API_URL=http://localhost:8000
NEXT_PUBLIC_SERVER_SIDE_API_URL=http://localhost:8000
NEXT_PUBLIC_API_URL is used by client-side fetches (runs in the browser).
NEXT_PUBLIC_SERVER_SIDE_API_URL is used by server-side fetches (runs in Next.js SSR — can point to an internal service URL in Docker).
Run
bun run dev # development — http://localhost:3000
bun run build # production build
bun run start # serve production build
Docker
docker build \
--build-arg NEXT_PUBLIC_API_URL=https://api.yourdomain.example.com \
--build-arg NEXT_PUBLIC_SERVER_SIDE_API_URL=http://thoughts:8000 \
-t thoughts-frontend .
docker run -p 3000:3000 thoughts-frontend