A website for easy hack discovering, uploading, and patching.
Go to file
2025-11-28 18:27:16 -10:00
.vscode Refactor and implement submit form functionality 2025-10-15 13:57:26 -10:00
docs/legal Update TERMS.md to include prohibitions on scraping 2025-11-14 23:41:22 -10:00
patches Add patching support using RomPatcher.js (with example patch file) 2025-10-07 13:07:25 -10:00
public Update logo icon 2025-10-31 15:20:42 -10:00
src Pull latest changes from remote database 2025-11-28 18:26:50 -10:00
supabase Pull latest changes from remote database 2025-11-28 18:26:50 -10:00
.gitignore Refactor and implement submit form functionality 2025-10-15 13:57:26 -10:00
LICENSE.md Add Terms of Service 2025-10-31 01:12:27 -10:00
next.config.ts Add Terms of Service 2025-10-31 01:12:27 -10:00
package-lock.json Add Discord admin webhook notifications 2025-11-07 17:50:20 -10:00
package.json Fix db:pull script not updating types 2025-11-28 18:27:16 -10:00
postcss.config.mjs Initial commit from Create Next App 2025-10-03 01:04:22 -10:00
README.md Update README 2025-10-16 01:19:17 -10:00
tsconfig.json Initial commit from Create Next App 2025-10-03 01:04:22 -10:00

Hackdex

Next.js React Tailwind CSS Supabase S3 Compatible License: MIT

What is Hackdex?

Hackdex is a community hub for discovering and sharing Pokémon romhack patches. Players link their own legally obtained base roms once, then easily patch locally in the browser and download the patched rom. Hackdex only stores patches, screenshots, and metadata—never any roms—so distribution stays practical without any of the legal pitfalls. Creators get a consistent place to publish, version, and present their projects.

Core features

  • Discover: curated hacks with screenshots, tags, versions, and summaries
  • Submit: metadata, screenshots, social links, and a BPS patch file
  • Patch in the browser: Powered by RomPatcher.js; linked base roms stay on the user's device
  • Safe delivery: short-lived signed URLs for assets and downloads; no rom storage required

Tech stack

  • Next.js 15 (App Router), TypeScript, React 19, Tailwind CSS 4
  • Supabase (Postgres, Auth, Storage) for data, auth, and cover images
  • S3-compatible object storage (Minio locally or preferred provider) for patch files (patches bucket)
  • In-browser patching with RomPatcher.js; local persistence with IndexedDB and the File System Access API

High-level architecture

  • UI: Next.js App Router with a mix of server and client components
  • Data: Supabase tables for hacks, tags, covers, patches; signed URLs for hack-covers
  • Patches: stored in an S3-compatible bucket patches; downloads use short-lived signed URLs via an API route
  • Auth: Supabase SSR helpers manage cookies; client SDK for browser calls

Contribution guidelines

  • PRs welcome. Keep changes small, typed, and accessible
  • Prefer clear naming, early returns, and avoid any
  • Match existing Tailwind and component patterns
  • Hackdex does not host roms and never will; users supply them locally during patching
  • Patching happens entirely in the browser against the user's local file

Local development setup

Set up local Supabase for database, auth, and storage, and an S3-compatible bucket for patch files.

Prerequisites

  • Node.js 20+
  • Docker and the Supabase CLI
  • An S3-compatible service (Minio locally, or a cloud provider like AWS S3 or Cloudflare R2)

Environment variables (.env.local)

Provide your Supabase project URL, publishable key, public site urls, and S3 connection details:

NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=

NEXT_PUBLIC_SITE_URL=
NEXT_PUBLIC_SITE_DOMAIN=

S3_ENDPOINT=
S3_PORT=
S3_ACCESS_KEY_ID=
S3_SECRET_ACCESS_KEY=
S3_USE_SSL=

Supabase (local)

Follow the official guide to run Supabase locally with the CLI (includes Studio):

Typical flow:

  1. Initialize and start services using the CLI
  2. Note the printed API URL and publishable key; set them in .env.local as shown above
  3. Apply this repositorys migrations in supabase/migrations
  4. Create a Supabase Storage bucket named hack-covers (private is fine; the app uses signed URLs)

S3compatible storage for patches

  • Create a bucket named patches
  • Point the S3_* environment variables to your S3 endpoint (Minio locally or your vendor)

Install & run

npm install
npm run dev

For easier debugging in VS Code, use the launch configurations in .vscode/launch.json (full stack, server-side, or client-side).


License & Branding

  • MIT licensed; see LICENSE.md
  • Branding Notice: the name “Hackdex” is reserved for use by the original project; see LICENSE.md