D. Rimron-Soutter 616d775303 Docs: refresh README and AGENTS with latest ZXDB features
Update documentation to reflect the expanded ZXDB Explorer coverage, including releases, magazines, and issues. Document new API endpoints and the graceful schema fallback mechanism in the repository.

Changes:
- README.md: Add /zxdb/releases, /zxdb/magazines, and /zxdb/issues/[id] routes; document /api/zxdb/releases/search and lookup endpoints; add note on information_schema table checks.
- AGENTS.md: Update project overview and structure to include releases, magazines, and issues; note schema capability checks in the repository description.

Signed-off-by: Junie@lucy.xalior.com
2025-12-18 19:43:16 +00:00
2025-12-12 13:43:30 +00:00
2025-11-13 15:21:30 +00:00
2025-12-17 12:07:28 +00:00
2025-12-12 13:43:30 +00:00
2025-12-12 13:43:30 +00:00
2025-10-07 22:04:14 +01:00
2025-10-07 22:04:14 +01:00
2025-10-07 22:01:08 +01:00
2025-12-17 20:22:00 +00:00
2025-10-15 23:04:08 +01:00
2025-12-17 12:41:17 +00:00

Spectrum Next Explorer

A Next.js application for exploring the Spectrum Next ecosystem. It ships with:

  • Register Explorer: parsed from data/nextreg.txt, with realtime search and deep links
  • ZXDB Explorer: a deep, crosslinked browser for entries, labels, genres, languages, and machine types backed by a MySQL ZXDB instance
  • Bootstrap 5 theme with light/dark support

Quick start

  • Prerequisites: Node.js 20+, pnpm (recommended), access to a MySQL server for ZXDB (optional for Registers)
  • Install dependencies:
    • pnpm install
  • Run in development (Turbopack, port 4000):
  • Build and start (production):
  • Lint:
    • pnpm lint

Project scripts (package.json)

  • dev: PORT=4000 next dev --turbopack
  • build: next build --turbopack
  • start: next start
  • deploy-test: push to test.explorer.specnext.dev
  • deploy-prod: push to explorer.specnext.dev

Routes

  • / — Home
  • /registers — Register Explorer
  • /zxdb — ZXDB Explorer (hub)
  • /zxdb/entries — Entries search + filters
  • /zxdb/entries/[id] — Entry detail
  • /zxdb/releases — Releases search + filters
  • /zxdb/labels and /zxdb/labels/[id] — Labels search and detail
  • /zxdb/genres and /zxdb/genres/[id] — Genres list and entries
  • /zxdb/languages and /zxdb/languages/[id] — Languages list and entries
  • /zxdb/machinetypes and /zxdb/machinetypes/[id] — Machine types list and entries
  • /zxdb/magazines and /zxdb/magazines/[id] — Magazines list and issues
  • /zxdb/issues/[id] — Issue detail (contents and references)

ZXDB setup (database, env, and helper tables) The Registers section works without any database. The ZXDB Explorer requires a MySQL ZXDB database and one environment variable.

  1. Prepare the database (outside this app)
  • Import ZXDB data into MySQL. If you want only structure, use ZXDB/ZXDB_mysql_STRUCTURE_ONLY.sql in this repo. For data, import ZXDB via your normal process.
  • Create the helper search tables (required for fast search):
    • Run ZXDB/scripts/ZXDB_help_search.sql against your ZXDB database.
  • Create a readonly role/user (recommended):
    • Example (see bin/import_mysql.sh):
      • Create role zxdb_readonly
      • Grant SELECT, SHOW VIEW on database zxdb
  1. Configure environment
  • Copy .env from example.env.
  • Set ZXDB_URL to a MySQL URL, e.g. mysql://zxdb_readonly:password@hostname:3306/zxdb.
  • On startup, src/env.ts validates env vars (t3.gg pattern with Zod) and will fail fast if invalid.
  1. Run the app

API (selected endpoints)

  • GET /api/zxdb/search?q=...&page=1&pageSize=20&genreId=...&languageId=...&machinetypeId=...&sort=title&facets=1
  • GET /api/zxdb/entries/[id]
  • GET /api/zxdb/releases/search?q=...&year=...&languageId=...&machinetypeId=...&sort=...
  • GET /api/zxdb/labels/search?q=...
  • GET /api/zxdb/labels/[id]?page=1&pageSize=20
  • GET /api/zxdb/genres and /api/zxdb/genres/[id]?page=1
  • GET /api/zxdb/languages and /api/zxdb/languages/[id]?page=1
  • GET /api/zxdb/machinetypes and /api/zxdb/machinetypes/[id]?page=1
  • GET /api/zxdb/{availabletypes,casetypes,currencies,filetypes,roletypes,schemetypes,sourcetypes}

Implementation notes

  • Next.js 15 dynamic params: pages and API routes that consume params must await it, e.g. export default async function Page({ params }: { params: Promise<{ id: string }> }) { const { id } = await params; }
  • ZXDB integration uses Drizzle ORM over mysql2 with a singleton pool at src/server/db.ts; API routes declare export const runtime = "nodejs".
  • Entry and detail pages serverrender initial content and use ISR (revalidate = 3600) for fast timetocontent; index pages avoid a blocking first client fetch.
  • Database Schema: Repository queries include graceful fallback checks (via information_schema.tables) to remain functional even if optional tables (like releases or downloads) are missing from the connected MySQL instance.

Further reading

  • ZXDB details and API usage: docs/ZXDB.md
  • Agent/developer workflow and commit guidelines: AGENTS.md

License

  • See LICENSE.txt for details.
Description
Languages
TypeScript 77.3%
SCSS 11.6%
CSS 7.5%
JavaScript 2%
Dockerfile 1.4%
Other 0.2%