cp .env.example .envEnsure that SUPABASE_URL and SUPABASE_ANON_KEY are set. This is for GitHub user registration on login.
With Deno installed:
deno task build # one-time build
deno task dev # run server + watch
# open http://localhost:8080 (override with PORT=8899 deno task dev)The scraper API (/issue-scraper) now runs on a local Deno server.
- Local development: set environment variables in
.env(e.g.SUPABASE_URL,SUPABASE_KEY/SUPABASE_SERVICE_ROLE_KEY,VOYAGEAI_API_KEY). The Deno server loads.envautomatically via std/dotenv. - Deployment: configure the same variables in your runtime environment (e.g., system env vars). No Cloudflare configuration is required.
- Required:
SUPABASE_URL,SUPABASE_ANON_KEYfor the browser bundle. - Server-side: provide either
SUPABASE_KEYorSUPABASE_SERVICE_ROLE_KEY(the workflow and server accept both). - Local: set values in
.env(see.env.example:1). - GitHub Secrets: set
SUPABASE_URL,SUPABASE_ANON_KEY, and eitherSUPABASE_KEYorSUPABASE_SERVICE_ROLE_KEYso CI builds and deploys correctly (.github/workflows/deploy-deno.yml:1). - Deno Deploy: the deploy script forwards whichever server-side key is present (
.github/workflows/deployment/deploy.sh:1). - Ensure
SUPABASE_URLpoints to a valid project ref (e.g.,https://wfzpewmlyiozupulbuur.supabase.co). Update secrets if the project changes.
- There is a plugin (
build/plugins/invert-colors.ts) that inverts the greyscale shades instyle.cssand outputsinverted-style.css. - This plugin specifically seeks greyscale colors. Any colors with saturation are ignored.
- Any deliberate use of color (with saturation) should be added in
special.cssto not be processed.
- Deno-only policy: use Deno tasks and
npm:tools through Deno. Do not runnpm,pnpm,yarn,node, ornpxin this repo. - Run server:
deno task dev(watch) ordeno task serve(server only). - Quick smoke (15s, ephemeral port):
deno task serve:15s - Build assets:
deno task build(esbuild vianpm:esbuild). - Formatting:
deno task format(Prettier). Check mode:deno task format:check. - Linting:
deno task lint(ESLint). This repo does not usedeno fmt. - Spell check:
deno task cspell. - Static analysis (Knip):
deno task knip— runs via Deno’snpm:and checks unused files/exports (not dependencies). No Node required. - Git hooks: pre-commit runs lint-staged (Prettier/ESLint) via Deno; commit messages are checked with Commitlint.
- Login with GitHub to view issues locally
- Keyboard navigation (up/down arrows and escape/enter key)
- Sorting
To verify the server starts and does not hang under an agent, run a Codex sub-instance and execute the 15s task:
codex exec --yolo -C "$PWD" "Run the convenience task: deno task serve:15s. Expect an ephemeral port and a 15s runtime. Return output and exit."
This starts the server on an ephemeral port, streams the logs (e.g., "Deno server listening on http://0.0.0.0:"), and exits after ~15 seconds without hanging.


