This commit implements a comprehensive local file mirror system for ZXDB and WoS downloads, allowing users to access local archives directly through the explorer UI. Key Changes: Local File Mirroring & Proxy: - Added `ZXDB_LOCAL_FILEPATH` and `WOS_LOCAL_FILEPATH` to `src/env.ts` and `example.env` for opt-in local mirroring. - Implemented `resolveLocalLink` in `src/server/repo/zxdb.ts` to map database `file_link` paths to local filesystem paths based on configurable prefixes. - Created `src/app/api/zxdb/download/route.ts` to safely proxy local files, preventing path traversal and serving with appropriate `Content-Type` and `Content-Disposition`. - Updated `docs/ZXDB.md` with setup instructions and resolution logic. UI Enhancements & Grouping: - Grouped downloads and scraps by type (e.g., Inlay, Game manual, Tape image) in `EntryDetail.tsx` and `ReleaseDetail.tsx` for better organization. - Introduced `FileViewer.tsx` component to provide inline previews for supported formats (.txt, .nfo, .png, .jpg, .gif, .pdf). - Added a "Preview" button for local mirrors of supported file types. - Optimized download tables with badge-style links for local/remote sources. Guideline Updates: - Updated `AGENTS.md` to clarify commit message handling: edit or append to `COMMIT_EDITMSG` instead of overwriting. - Re-emphasized testing rules: use `tsc --noEmit`, do not restart dev-server, and avoid `pnpm build` during development. Signed-off-by: junie@lucy.xalior.com
5.2 KiB
5.2 KiB
ZXDB Explorer — Missing Features & Gaps
Audit of the /zxdb pages against the ZXDB schema and existing data. Everything listed below is backed by tables already present in the Drizzle schema (src/server/schema/zxdb.ts) but not yet surfaced in the UI.
Current Coverage
| Section | List page | Detail page | Facets/Filters |
|---|---|---|---|
| Entries | Search | Full detail | genre, language, machinetype |
| Releases | Search | Downloads, scraps, files, magazine refs | — |
| Labels | Search | Authored/published entries, permissions, licenses | — |
| Magazines | Search | Issues list | — |
| Issues | via magazine | Magazine refs (reviews/references) | — |
| Genres | List | Entries by genre | — |
| Languages | List | Entries by language | — |
| Machine Types | List | Entries by type | — |
Missing Top-Level Browse Pages
1. Countries
- Tables:
countries,labels.country_id - Value: Browse by country ("all software from Spain", "UK publishers").
2. Tools
- Tables:
tools,tooltypes - Value: Utilities, emulators, and development tools catalogued in ZXDB.
3. Features
- Tables:
features - Value: Hardware/software features (Multiface, Kempston joystick, etc.).
4. Topics
- Tables:
topics,topictypes - Value: Editorial/thematic groupings used by magazines.
5. Tags / Collections
- Tables:
tags,tagtypes,members - Value: Tags are shown per-entry but there is no top-level "browse by tag" page (e.g. all CSSCGC entries, compilations).
6. Licenses
- Tables:
licenses,licensetypes,relatedlicenses,licensors - Value: Shown per-entry detail but no "browse all licenses" hub (e.g. all games based on a Marvel license).
Missing Cross-Links & Facets on Existing Pages
7. Magazine reviews on Entry detail
- Release detail shows magazine refs, but entry detail does not aggregate them.
- A user viewing an entry cannot see "reviewed in Crash #42, p.34" without drilling into each release.
8. Year / date filter on Entries
- ZXDB has
release_yearon releases. No year facet on the entries explorer. - Users cannot browse "all games from 1985".
9. Availability type filter on Entries
availabletypesAPI route exists but is not a facet on the entries explorer.- Would allow filtering by "Never released", "MIA", etc.
10. Max players filter on Entries
entries.max_playersexists but is not filterable.- Would enable "all multiplayer games".
11. Label type filter on Labels page
labeltypestable exists androletypesAPI is served.- Cannot filter the labels list by type (person / company / team / magazine).
12. Country filter on Labels page
- Labels have
country_idbut no filter on the list page.
13. Country / language filter on Magazines page
- Magazine list has search but no country or language filter chips.
Missing Data on Detail Pages
14. Entry detail: magazine reviews section
search_by_magrefsis used in release detail but entry detail does not aggregate magazine references across all releases.- Same issue as #7 — the entry page should show a combined reviews/references panel.
15. Label detail: country display
- Labels have
country_id/country2_idbut the detail page does not show them.
16. Label detail: Wikipedia / website links
labels.link_wikipediaandlabels.link_siteexist but are not displayed on the label detail page.
17. Entry detail: related entries via same license
- Licenses are shown per-entry but there is no click-through to "other games with this license".
Entirely Unsurfaced Datasets
18. NVGs
- Table:
nvgs - Historical download archive metadata. Not exposed anywhere.
19. SPEX entries / authors
- Tables:
spex_entries,spex_authors - No UI.
20. Awards
- Table:
zxsr_awards, referenced bymagrefs.award_id - No awards browsing or display.
21. Review text
- Table:
zxsr_reviews(intro_text,review_text) - Magazine refs link to reviews by ID but the actual review text is never rendered.
22. Articles
- Tables:
articles,articletypes - No articles browsing.
Navigation / UX Gaps
23. No discovery mechanism
- No "random entry", "on this day", or "featured" section. Common for large historic databases.
24. No stats / dashboard
- No summary counts ("ZXDB has X entries, Y labels, Z magazines"). Would anchor the landing page.
Suggested Priority
| Priority | Items | Rationale |
|---|---|---|
| High | 7/14 (magazine refs on entry detail), 8 (year filter), 15-16 (label country + links) | Data exists, just not wired up. High user value. |
| Medium | 1 (countries), 5 (tags browse), 6 (licenses browse), 9 (availability filter), 24 (stats) | New pages but straightforward queries. |
| Low | 2-4 (tools/features/topics), 10-13 (additional filters), 17-22 (unsurfaced datasets), 23 (discovery) | Useful but niche or requires more design work. |