bounty.index
menu

// sync across devices

Under the hood

How it's built.

One quiet daily job, indexed for scan speed. Every public bounty program on five platforms flows through this pipeline into a single searchable index.

$ pipeline --trace
● live

01 · extract

Pull

Five platform JSONs fetched daily from arkadiyt/bounty-targets-data — HackerOne, Bugcrowd, Intigriti, YesWeHack, Federacy. One canonical upstream, no scraping.

// source · single mirror

02 · normalize

Shape

Per-platform normalizers unify shape and asset types. Every ingest hashes the meaningful fields with SHA-256; unchanged programs skip a snapshot row.

// diff · sparse history

03 · store

Index

Neon Postgres via Drizzle ORM with a lazy Proxy-based client. GIN + pg_trgm indexes on searchable text; JSONB payloads for snapshot history.

// similarity() ranked

04 · deliver

Render

Next.js 16 App Router. Force-dynamic routes with per-route loading.tsx skeletons. Static assets on Vercel Edge, Vercel Analytics for real-user metrics.

// ttfb · sub-100ms

Data

  • arkadiyt/bounty-targets-data

    upstream JSON mirror of five platforms

  • SHA-256 content hashes

    snapshot dedupe — sparse history

  • program_snapshots

    JSONB timeline per program

Runtime

  • Vercel Cron

    daily · 0 6 * * *

  • Fluid Compute

    reused function instances, graceful shutdown

  • @vercel/analytics

    real-user metrics

Storage

  • Neon Postgres

    lazy Drizzle client to survive build-time page-data collection

  • pg_trgm GIN index

    fuzzy search on program name + handle

  • Drizzle ORM

    typed queries; no runtime overhead

Live index·rebuilt every 24h·MIT licensed