Files
thoughts/thoughts-frontend
Gabriel Kaszewski 84edf58de6
Some checks failed
lint / lint (push) Failing after 9m26s
test / unit (push) Successful in 16m3s
fix(federation): fix 27 AP bugs, gaps, and inconsistencies
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
..

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@instance handle
  • 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