···6677## Routing
8899-- Done: shareable record routes at `/records/:did/:collection/:rkey`.
1010-- Done: direct record routes boot the desktop shell, select the repo/collection in
1111- Nautilus, and open the record in gedit.
1212-- Done: record routes fetch client-side with public ATProto and use DIDs as the
1313- canonical identity.
1414-- Done: record routes opportunistically hydrate public identity metadata for nicer
1515- labels: handle, display name, avatar, DID, and PDS.
1616-1717-## Browser
1818-1919-- Preserve the first-run public handle setup flow for browsing a repo.
2020-- Add handle typeahead to setup using `app.bsky.actor.searchActorsTypeahead`.
2121-- Keep repository collection browsing in Nautilus.
2222-- Keep cursor-based pagination / “Load more records” for large collections.
2323-- Keep public record JSON viewing in gedit.
2424-- Keep local record caching and full-text search across cached records.
2525-- Keep user-readable network and cache errors.
99+- Keep `/` as the desktop home.
1010+- Keep `/browse` as the configured/default public repo in Nautilus.
1111+- Add canonical repo routes under `/repos/:did`.
1212+- Add collection routes at `/repos/:did/collections/:collection`.
1313+- Add record routes at `/repos/:did/collections/:collection/:rkey`.
1414+- Add app routes that open the matching GNOME-style window:
1515+ - `/repos/:did/map` -> Network Map.
1616+ - `/repos/:did/identity` -> Identity Inspector.
1717+ - `/repos/:did/logs` -> Log Viewer.
1818+ - `/repos/:did/blobs` and `/repos/:did/blobs/:cid` -> Eye of GNOME.
1919+ - `/live`, `/live/jetstream`, `/live/firehose`, `/live/spacedust` -> System Monitor.
2020+ - `/labels` -> Label Browser.
2121+ - `/car` -> Archive Manager.
2222+ - `/servers/:host` -> Network Servers.
2323+- Route loaders should stay browser-only and public/read-only.
2424+- DIDs remain canonical in URLs; handles are accepted as lookup/input affordances and
2525+ resolved client-side.
26262727## Apps
28282929Every new surface should feel like a GNOME 2 app that happens to speak `at://`.
30303131- **Nautilus**
3232+ - Preserve the first-run public handle setup flow for browsing a repo.
3333+ - Add handle typeahead to setup using `app.bsky.actor.searchActorsTypeahead`.
3234 - Browse public repo collections.
3335 - Select collections and records.
3436 - Open records in gedit or media blobs in Eye of GNOME.
3737+ - Keep cursor-based pagination / “Load more records” for large collections.
3838+ - Keep local record caching and full-text search across cached records.
3939+ - Keep user-readable network and cache errors.
3540 - Surface cached/search states clearly.
4141+ - Add collection filtering, reverse order, page-size controls, and preview field
4242+ selection.
4343+ - Add collection schema tabs and links into System Monitor for the selected repo or
4444+ collection.
3645- **gedit**
3746 - Read-only JSON viewer for records.
3847 - Preserve copy, wrapping, syntax highlighting, and native GTK-style window behavior.
4848+ - Add record tabs for JSON, schema, backlinks, and info.
4949+ - Show AT URI, CID, raw PDS link, external app links, and read-only verification status.
3950- **Eye of GNOME (eog)**
4040- - Add image/blob viewing.
5151+ - List public repo blob CIDs via `com.atproto.sync.listBlobs`.
4152 - Open from Nautilus when a record contains embedded images or media blobs.
4242- - Support `app.bsky.feed.post` embedded images as the first target.
5353+ - Preview image/video blobs, with `app.bsky.feed.post` embedded images as the first
5454+ target.
5555+ - Link each blob back to its repo and raw PDS URL when possible.
5656+- **Network Map**
5757+ - Visualize an account at the center with app namespaces around it.
5858+ - Show app count, record-type count, PDS hosting status, and app/domain validation.
5959+ - Let users hide unresolved apps and jump from an app namespace into Nautilus.
6060+- **System Monitor**
6161+ - Icon: `/icons/humanity/apps/utilities-system-monitor.svg`.
6262+ - Read-only live ATProto monitor for Jetstream, Firehose, and Spacedust-style backlink
6363+ streams.
6464+ - Filter by DID, collection, cursor, and stream instance where supported.
6565+ - Show event rate, total events, top collections/sources, expandable JSON, and copy.
6666+- **Identity Inspector**
6767+ - Icon: `/icons/humanity/apps/identity-inspector.svg`.
6868+ - Show DID document, aliases, services, verification methods, and rotation keys.
6969+ - Validate handles through DNS TXT and `.well-known` when possible.
7070+ - Link out to PDS endpoints and copy identity fields.
7171+- **Log Viewer**
7272+ - Show PLC audit history for `did:plc` identities.
7373+ - Present alias, service, verification method, and rotation-key diffs.
7474+ - Include event filters, validation status, and hash links to individual log entries.
7575+- **Archive Manager**
7676+ - Icon: `/icons/humanity/apps/archive-manager.svg`.
7777+ - Open local CAR files without requiring a live PDS connection.
7878+ - Browse archive collections and records in the same read-only style as Nautilus/gedit.
7979+ - Export archive contents to a ZIP of JSON files.
8080+- **Label Browser**
8181+ - Query public labeler services with URI patterns.
8282+ - Show label value, target, CID, negation, created/expiry timestamps, and pagination.
8383+ - Add client-side label filtering with wildcard include and `-exclude` support.
8484+- **Network Servers**
8585+ - Inspect public PDS host info, version, available domains, and repo list.
8686+ - Link repos into Nautilus and open server firehose views in System Monitor.
4387- **About This Computer**
4488 - Show OS/theme info and current public repo identity metadata when available.
4589- **Desktop shell**
4690 - Preserve brown panels, tan chrome, Humanity icons, small dense spacing, task buttons,
4791 tray affordances, and movable/resizable windows.
48929393+## Priority Order
9494+9595+- [x] Add canonical `/repos/:did/...` routing.
9696+- [ ] Deepen Nautilus and gedit with collection controls plus record JSON/schema/info tabs.
9797+- [ ] Add Identity Inspector.
9898+- [ ] Add System Monitor with Jetstream first.
9999+- [ ] Add Network Map.
100100+- [ ] Add Archive Manager.
101101+- [ ] Add Eye of GNOME blob browsing and previews.
102102+- [ ] Add Label Browser.
103103+- [ ] Add Log Viewer.
104104+- [ ] Add Network Servers.
105105+106106+## Tests
107107+108108+- Vitest unit tests for pure helpers and data behavior:
109109+ - ATProto route helpers.
110110+ - identity normalization and DID/PDS resolution helpers.
111111+ - repo record summarization and collection grouping.
112112+ - pagination behavior.
113113+ - local DB migrations, cache repositories, and search.
114114+- Browser/component tests for desktop UI behavior:
115115+ - first-run setup and handle typeahead states.
116116+ - Nautilus collection selection, search, pagination, and record opening.
117117+ - gedit JSON display, copy behavior, and record metadata tabs.
118118+ - window manager open, focus, minimize, maximize, and route-driven gedit opening.
119119+- Playwright E2E/smoke tests for critical flows:
120120+ - `/` boots the desktop.
121121+ - `/browse` opens the configured repo after setup.
122122+ - `/repos/:did` hydrates identity and opens Nautilus.
123123+ - `/repos/:did/collections/:collection` selects the collection.
124124+ - `/repos/:did/collections/:collection/:rkey` opens Nautilus and gedit around the record.
125125+ - Mock external ATProto boundaries in tests unless the test is explicitly an integration
126126+ smoke test.
127127+49128## V2
5012951130- **gnome-terminal**
···58137- **Contacts**
59138 - Follows / followers graph browser built on `app.bsky.graph.follow`; show avatar,
60139 handle, and mutual-follow status in an address-book layout.
6161-- **File Roller**
6262- - Export any collection to a `.json` archive or CAR file for local backup.
6363- - Import archives to preview records without a live PDS connection.
64140- Local starred/bookmarked records surfaced as a “Bookmarks” sidebar item in Nautilus.
65141- Sync indicator in the panel showing last-synced time per repo/collection.
66142- Multi-repo switching from the panel without implying authentication.
···8484 <ol>
8585 <li>Choose a public ATProto repo by handle.</li>
8686 <li>Open Nautilus to browse collections and records.</li>
8787- <li>Open records in gedit, then share stable DID-based URLs.</li>
8787+ <li>Open records in gedit to view or share them.</li>
8888 </ol>
8989- <p>
9090- Direct links look like
9191- <code>/records/:did/:collection/:rkey</code> and reopen the desktop around that record.
9292- </p>
8989+ <p>You can direct link a record with the following structure:</p>
9090+ <pre>
9191+ <code>/repos/:did/collections/:collection/:rkey</code>
9292+ </pre>
9393 </section>
9494 </div>
9595
···1616Record windows use stable DID-based URLs:
17171818```txt
1919-/records/:did/:collection/:rkey
1919+/repos/:did/collections/:collection/:rkey
2020```
21212222Opening one of those links boots the desktop, selects the collection in Nautilus, and