A catalog system for underground electronic music.
SIGIL.ZERO operates as a record label and release platform for dark, underground, and experimental electronic dance music. The label organizes its catalog through a series structure: modular collections that group releases by concept, aesthetic, or sonic territory.
This is not a streaming service. It is an index. A map of recorded transmissions.
The source code for the SIGIL.ZERO website. A static site generator built to serialize markdown content into structured release catalogs, artist profiles, and mixtape archives.
Content is stored as markdown files with YAML frontmatter. The system validates schemas, filters by metadata, and renders catalog pages with search and filter capabilities.
All content lives in /content. All logic lives in /src. All output is static HTML.
- Next.js 16 with static export and Turbopack
- React 19 for UI components
- TypeScript for type safety across content schemas and application logic
- Zod for runtime schema validation
- Tailwind CSS for styling
- Vitest for unit and integration testing
- Playwright for end-to-end testing
- GitHub Actions for continuous integration
Content processing uses gray-matter for frontmatter parsing, remark and rehype for markdown transformation.
Install dependencies:
npm installRun the development server:
npm run devThe site will be available at http://localhost:3000.
Add new content to these directories:
/content/releases— Official releases/content/mixtapes— DJ sets and mixes/content/artists— Artist profiles/content/series— Series definitions
Global site data lives in /data:
/data/label.yml— Label metadata/data/links.yml— External link definitions/data/series.yml— Series registry
Each markdown file requires specific frontmatter fields. Run validation:
npm run check-frontmatterAdditional validators:
# Fast local validation (frontmatter + mixtapes)
npm run validate:quick
# Full validation (frontmatter + all content types)
npm run validate:contentRun unit and integration tests:
npm run test # Watch mode
npm run test:run # Single run
npm run test:ui # Browser-based UI
npm run test:coverage # With coverage reportRun end-to-end tests:
npm run e2e # Headless
npm run e2e:ui # Interactive mode
npm run e2e:headed # With browser visible
npm run e2e:debug # Debug mode
npm run e2e:report # Show last Playwright reportThis repository uses Husky to enforce validation and tests during development:
- Pre-commit: runs frontmatter + mixtape validation.
- Pre-push: runs full content validation and unit tests.
- Pre-push E2E: optional, enabled with
RUN_E2E_ON_PUSH=1.
Default pre-push checks match:
npm run prepush:localRun all checks (including E2E) manually before larger merges/releases:
npm run prepush:full
# or
RUN_E2E_ON_PUSH=1 git pushBypass hooks only if necessary:
git commit --no-verify -m "message"The site deploys as static HTML to GitHub Pages.
Build the production site:
npm run buildOutput is written to /docs. The build process:
- Validates all markdown frontmatter
- Generates static pages for all routes
- Copies output to
/docsfor GitHub Pages - Preserves CNAME for custom domain
Push to the main branch to trigger automatic deployment via GitHub Actions.
CI pipeline runs on push/PR as three parallel jobs:
- Unit & Integration Tests — runs
check-frontmatter,test:run, andtest:coverage - E2E Tests (Playwright) — runs the full Playwright suite against a built server
- Build Verification — runs
npm run buildand confirmsdocs/index.htmlwas produced
All three jobs must pass for the CI status check to succeed.
Version 1.0 publicly released.
The catalog system is operational. Testing infrastructure is complete. Content added.
This system prioritizes content over presentation. Releases are data. The interface is an access layer.
The architecture enforces constraints:
- Static output only. No server, no database.
- Markdown as the source of truth. No CMS.
- Type-safe schemas. Invalid content fails the build.
- Comprehensive test coverage. Behavior is verified.
Speed and simplicity over feature accumulation.
- This repository’s source code is released under the MIT License.
- Brand identity, artwork, and site content are excluded and remain proprietary.