Official schedule and event guide for DEF CON. Browse talks, villages, workshops, people, organizations, and more across DEF CON conferences.
info.defcon.org is a fully static Next.js site that renders DEF CON conference data from pre-generated JSON exports. The site requires no runtime backend and can be deployed to any static hosting platform.
- Why this exists
- Verified capabilities
- Tech Stack
- Getting Started
- Static Data Export
- Project Structure
- Deployment Notes
- Troubleshooting
- Contributing
- License
DEF CON conference data originates from the HackerTracker ecosystem and related internal sources. This project provides a fast, static, easily browsable interface for that data without requiring a runtime API or database.
All data is generated ahead of time and served as static JSON files.
The site currently supports:
- Conference-specific routes under
/<conference>/- Example:
/defcon34/,/dcsg2026/
- Example:
- Schedule browsing and filtering
- Tags, people, organizations, and announcements
- Conference documents (
readme.nfo) - Bookmarks stored in browser localStorage
- Companion apps pages
- Client-side loading of conference data
- Static export builds for deployment to CDN/static hosts
Conference data is loaded client-side from:
/public/ht/<conference-slug>/
- Framework: Next.js (Pages Router, static export)
- Language: React 19 + TypeScript 5
- Styling: Tailwind CSS 4
- Icons: Heroicons
- Data Fetching: SWR
- Virtualization: react-virtuoso
- Markdown Rendering: react-markdown + remark-gfm
- Animations: GSAP
- Linting: oxlint
- Formatting: oxfmt
- Node.js ≥ 20.9.0
- npm
git clone https://github.com/junctor/hackertracker-info.git
cd hackertracker-info
npm installStart the development server:
npm run devOpen:
http://localhost:3000
Notes:
- Conference slugs are defined in
src/lib/conferences.ts - Data is loaded from
public/ht/<conference-slug>/
Generate a static site:
npm run buildOutput will be generated in:
out/
Deploy the contents of this directory to any static host (Cloudflare Pages, Netlify, S3, Apache, etc).
npm run lint
npm run lint:fix
npm run format
npm run format:checkThis project depends on pre-generated JSON exports produced by a companion repository:
https://github.com/junctor/info-export
The exporter transforms raw conference data into structured JSON used by this site.
Clone and install the exporter:
git clone https://github.com/junctor/info-export.git
cd info-export
npm installRun the export:
npm run export -- DEFCON33Copy the output into this project:
cp -r out/ht ../hackertracker-info/publicEach conference is served from:
/public/ht/<conference-slug>/
Typical structure:
entities/
indexes/
views/
derived/
manifest.json
Important precomputed indexes include:
indexes/eventsByDay.jsonindexes/eventsByTag.jsonderived/tagIdsByLabel.json
Exports must match the schema expected by the application.
src/
pages/ Next.js routes
features/ Domain modules (schedule, home, organizations, etc)
components/ Shared UI components
lib/ Conference config, utilities, types
styles/ Global styles
public/
ht/ Exported conference JSON data
images/ Site and conference images
fonts/ Local web fonts
This project is configured for static export, not server rendering.
Key configuration lives in:
next.config.ts
Important settings:
output: "export"trailingSlash: trueimages.unoptimized: true
Implications:
- All routes generate static directories (
/path/) - No Node server is required
- No Next.js image optimization service is required
Verify:
public/ht/<conference-slug>/
exists and includes:
entities/
indexes/
views/
derived/
manifest.json
Confirm the slug exists in:
src/lib/conferences.ts
Bookmarks are stored in browser localStorage under:
bookmarks
Clear or re-add them if needed.
Contributions, issues, and improvements are welcome.
Before submitting a PR:
npm run lint
npm run format:checkMIT