A lean, fast frontend for poidh (pics or it didn't happen) bounties, also a Farcaster mini app https://poidh.borodutch.com
  • JavaScript 60.1%
  • CSS 21%
  • TypeScript 15.1%
  • HTML 3.7%
  • Dockerfile 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Claude 66e6e620a4
All checks were successful
CI / test (push) Successful in 6s
tugport Live
Design and mobile pass: spacing fix, leaderboard podium, tab bar
- main's top padding was overridden by .wrap on every page; fixed
- leaderboard: podium for the top three, rows with per-chain scores and a
  bar scaled to the leader, your rank pinned, numbered pages
- phones: bottom tab bar (bounties, activity, create, top, you), sticky
  submit-a-claim bar once the panel's button scrolls away, roomier spacing
- hero actions + how-it-works sheet, winner thumbnails on past bounties
- hydrated avatars keep their size class

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 12:28:03 -07:00
.forgejo/workflows Comment posting and voting, activity feed, mini app association, tests 2026-10-29 12:01:37 -07:00
public Design and mobile pass: spacing fix, leaderboard podium, tab bar 2026-10-29 12:28:03 -07:00
vendor zkPassport: nationality badge on profiles and verification on your own 2026-10-29 12:19:36 -07:00
.dockerignore poidh: lean frontend for the poidh protocol 2026-10-29 11:47:35 -07:00
.gitignore zkPassport: nationality badge on profiles and verification on your own 2026-10-29 12:19:36 -07:00
Dockerfile poidh: lean frontend for the poidh protocol 2026-10-29 11:47:35 -07:00
lib.test.js Comment posting and voting, activity feed, mini app association, tests 2026-10-29 12:01:37 -07:00
LICENSE poidh: lean frontend for the poidh protocol 2026-10-29 11:47:35 -07:00
README.md zkPassport: nationality badge on profiles and verification on your own 2026-10-29 12:19:36 -07:00
server.ts Keep the home page's API answers warm after deploys 2026-10-29 12:21:24 -07:00

poidh

A lean frontend for poidh (pics or it didn't happen), live at https://poidh.borodutch.com. It uses the same contracts and the same bounties, and reads its data from poidh.xyz's API.

  • No build step and no npm dependencies: plain ES modules in public/ and one Bun server, server.ts.
  • server.ts serves the static files (brotli/gzip compressed once at startup) and proxies /api/* to poidh.xyz, which sends no CORS headers. Public queries are cached for 15 s and served stale while they refresh. Bounty pages get per-bounty OG and Farcaster embed tags for link previews.
  • /resolve turns a claim's URI (metadata JSON, an image or a video) into its media. Results are kept in DATA_DIR/media.jsonl.
  • /thumb makes small webp thumbnails with libvips and caches them in DATA_DIR/thumbs.
  • /upload stores claim photos and videos by content hash in DATA_DIR/uploads; they are served from /u/<sha256>.<ext>.
  • zkPassport badges: vendor/build.sh bundles the pinned SDK into public/vendor/ (loaded only when someone verifies; Barretenberg left out because poidh verifies proofs server-side).
  • Wallets are found through EIP-6963. Inside a Farcaster client the app is a mini app (public/miniapp.js, which talks the host protocol without the SDK) and uses the client's wallet. The manifest is at /.well-known/farcaster.json.

Tests: bun test (needs nothing installed).

Run locally:

bun server.ts   # http://localhost:3000

Environment variables:

  • PORT (default 3000)
  • DATA_DIR (default ./data)
  • PUBLIC_URL: the public origin when the app runs behind a TLS proxy
  • UPSTREAM (default https://poidh.xyz)
  • FARCASTER_ACCOUNT_ASSOCIATION: the signed {header, payload, signature} JSON for the mini app manifest

MIT, like the original poidh-app.