feat(web): forum homepage with live category and board listing (ATB-27) (#42)
* docs: add homepage design doc for ATB-27
* docs: add homepage implementation plan for ATB-27
* style: add homepage category and board grid CSS
* test: add failing tests for homepage route (ATB-27)
TDD setup: 11 tests covering forum name/description in title and header,
category section rendering, board cards with links and descriptions,
empty states, error handling (503 network, 500 API), and multi-category
layout. All tests intentionally fail against the placeholder route.
* feat: implement forum homepage with live API data (ATB-27)
Replaces placeholder homepage with real implementation that fetches forum
metadata, categories, and boards from the AppView API and renders them.
Also strengthens 500 error test to assert on message text.
* fix: use shared getSession in homepage route
* refactor: extract isNetworkError to shared web lib/errors.ts
* test: update stubs test to mock homepage API calls
The homepage now fetches /api/forum and /api/categories in parallel, so
the two GET / stub tests need mockResolvedValueOnce calls for both endpoints.
* fix: address code review feedback on homepage route (ATB-27)
- Add structured error logging to both catch blocks in home.tsx
- Add Stage 2 error tests (boards fetch) for 503 and 500 responses
- Mark forum homepage complete in atproto-forum-plan.md
* fix: re-throw programming errors in homepage catch blocks (ATB-27)
- Add isProgrammingError to apps/web/src/lib/errors.ts
- Guard both catch blocks with isProgrammingError re-throw before logging
- Add two tests verifying TypeError escapes catch blocks (stage 1 and stage 2)