···8899## Architecture
10101111+### Header banners source of truth
1212+1313+- Primary source of truth is now `orbyt-api` admin at `https://api.getorbyt.com/admin`
1414+- Public app read endpoint is `https://api.getorbyt.com/v1/headers/active`
1515+- `public/api/headers.json` is retained only as a legacy emergency fallback
1616+1117### Bluesky API (`src/utils/bluesky-api.ts`)
12181319- Fetches profiles, posts, and video feeds from `https://public.api.bsky.app/xrpc`
+3-2
public/api/headers.json
···11{
22 "_doc": {
33- "about": "Documentation for header banner JSON. This object is ignored by the app; only 'headers' is used.",
33+ "about": "Legacy fallback for header banners. Source of truth is now orbyt-api admin at https://api.getorbyt.com/admin. This object is ignored by the app; only 'headers' is used.",
44 "fields": {
55 "id": "Unique string identifier for the header",
66 "imageUrl": "Image URL for the banner background. Can be absolute or relative (e.g., 'banners/header.png').",
···3434 "textOrder": "title-first"
3535 },
3636 "localDevelopment": {
3737- "verifyLocalEndpoint": "curl -s http://localhost:5173/api/headers.json | cat@headers.json"
3737+ "verifyLocalEndpoint": "curl -s http://localhost:5173/api/headers.json",
3838+ "note": "Use only for emergency fallback/rollback. Primary app endpoint is https://api.getorbyt.com/v1/headers/active"
3839 }
3940 },
4041 "headers": [