Improve ZXDB downloads with local mirroring and inline preview
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
This commit is contained in:
@@ -147,7 +147,8 @@ Comment what the code does, not what the agent has done. The documentation's pur
|
||||
- git branching:
|
||||
- Do not create new branches
|
||||
- git commits:
|
||||
- Create or update COMMIT_EDITMSG file, await any user edits, then commit
|
||||
- Create or update COMMIT_EDITMSG file if commits pending, await any user
|
||||
edits, or additional instructions. Once told, commit all the changes
|
||||
using that commit note, and then delete the COMMIT_EDITMSG file.
|
||||
Remember to keep the first line as the subject <50char
|
||||
- git commit messages:
|
||||
|
||||
36
COMMIT_EDITMSG
Normal file
36
COMMIT_EDITMSG
Normal file
@@ -0,0 +1,36 @@
|
||||
Improve ZXDB downloads with local mirroring and inline preview
|
||||
|
||||
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
|
||||
2
ZXDB
2
ZXDB
Submodule ZXDB updated: 3784c91bdd...dc2edad9ec
137
docs/plans/zxdb-missing-features.md
Normal file
137
docs/plans/zxdb-missing-features.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# 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_year` on releases. No year facet on the entries explorer.
|
||||
- Users cannot browse "all games from 1985".
|
||||
|
||||
### 9. Availability type filter on Entries
|
||||
- `availabletypes` API 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_players` exists but is not filterable.
|
||||
- Would enable "all multiplayer games".
|
||||
|
||||
### 11. Label type filter on Labels page
|
||||
- `labeltypes` table exists and `roletypes` API is served.
|
||||
- Cannot filter the labels list by type (person / company / team / magazine).
|
||||
|
||||
### 12. Country filter on Labels page
|
||||
- Labels have `country_id` but 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_magrefs` is 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_id` but the detail page does not show them.
|
||||
|
||||
### 16. Label detail: Wikipedia / website links
|
||||
- `labels.link_wikipedia` and `labels.link_site` exist 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 by `magrefs.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. |
|
||||
@@ -19,9 +19,6 @@ ZXDB_REMOTE_FILEPATH=https://zxdbfiles.com/
|
||||
# Note: Example uses the Internet Archive WoS mirror; keep the trailing slash
|
||||
WOS_REMOTE_FILEPATH=https://archive.org/download/World_of_Spectrum_June_2017_Mirror/World%20of%20Spectrum%20June%202017%20Mirror.zip/World%20of%20Spectrum%20June%202017%20Mirror/
|
||||
|
||||
# Local cache root where files will be mirrored (without the leading slash)
|
||||
CDN_CACHE=/mnt/files/zxfiles
|
||||
|
||||
# Local mirror filesystem paths for downloads.
|
||||
# Enabling these (and verifying existence) will show "Local Mirror" links.
|
||||
# See docs/ZXDB.md for how prefixes are stripped and joined to these paths.
|
||||
|
||||
Reference in New Issue
Block a user