Commit Graph

20 Commits

Author SHA1 Message Date
martbost 1c9e99f91e Referral rewards: pay a hunter for bringing someone who actually hunts
PolHunter retains well and recruits badly. On 2026-09-22 it had its best day,
105 finds from 37 hunters, and had sent three people to InstantAdPay in its
whole life, all three on one member's link. Earning and sharing were separate
actions and only one of them paid.

Bringing someone is now the best-paid thing on the board, and the card sits
first in the mission list rather than on a promo page nobody opens. A flat 3
POL the first time someone they brought finds a code, then 20% on top of that
person's finds for their first 30 days, paid from the pool and never taken out
of the newcomer's drip.

Who counts as "brought by me" is the sponsor they actually joined
InstantAdPay under, handed over in the sign-in payload, so the bounty and the
commission always land on the same person. The bounty only pays for a member
who is genuinely new, once per person, and referral drips have their own daily
ceiling so a good referral day can never starve the finds.

Also: findsToday defaulted its day argument to undefined and silently returned
zero for every caller that omitted it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 04:34:22 -05:00
martbost bed75d1b0f No double posts: badge and find posts reserve an in-flight key the sweeps skip (bikereo2's First Find posted twice, 16 s race); faucet keeps a drip due on transient node errors and rotates through HUNT_RPC (comma list)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 10:45:23 -05:00
martbost 1c2cd11453 Badges reach Telegram too: a posted badge is recorded, and the sweep posts any unrecorded badge of every hunter active since the cutoff (gated, Telegram down, restart)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 08:46:58 -05:00
martbost 48c334dd73 Share links served in place with og:url carrying the ref (Facebook was dropping the name); portrait 9:16 teaser for TikTok/Reels/Shorts/Facebook; test updated
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 08:09:04 -05:00
martbost a1e846e3b5 Promo kit copy: tap to copy, paste on the board; the board's join link carries ?from=polhunter so IAP sets the return path
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 07:33:09 -05:00
martbost 0ba2486c95 Every completed mission reaches Telegram: a paid find marks itself posted, a two-minute sweep posts any paid find not yet posted (pre-live gate, Telegram down, restart), HUNT_POST_SINCE keeps rehearsal finds quiet
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 07:20:16 -05:00
martbost f1e1886f48 Missions reset with the Central day: a find blocks a mission only for that day (member id or wallet); tag reads Done today
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-20 07:13:46 -05:00
martbost 7b061480cb Launch build: k=3 floor-weighted draw, three missions per hunter per day, HUNT_LIVE_AT lifts the curtain and opens outbound at the launch moment, badge photos to topic + general, toasts on the board
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-20 05:04:24 -05:00
martbost 84a923326e Share pages: the stylesheet passes the curtain so outsiders see them styled
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 20:49:24 -05:00
martbost 67f43b68ca Share modal: a hidden modal must not cover the board (.modal[hidden] display none)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 20:46:59 -05:00
martbost 8eecc7c0cb Badge cards: seven AI artworks for the hunting achievements, the hunter's name stamped on the ribbon server-side (ffmpeg), public share pages /b/<who>/<id> with OG cards, badge strip + share modal + unlock celebration on the board, Telegram photo post gated by OUTBOUND
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 20:31:20 -05:00
martbost 7b2f71f2f7 Weekly prizes: top three of the Monday-to-Sunday Central week with 10+ finds get 3/2/1 POL as due prize drips (never finds, never against the pool), awarded once on the first tick after Sunday; Top Hunter badge; /api/prizes + winners on /leaders; admin award-by-hand
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 19:53:03 -05:00
martbost dd6a3a3bfa Social layer: leaderboard (week/month/all) + six badges, /leaders and /promo pages, share panel and rank on the board, ?r= referral cookie -> member's IAP join link, OG tags, banner set served through the curtain
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 19:40:50 -05:00
martbost 7df6ed66cd Static: video/mp4 with byte-range streaming (iOS Safari needs 206)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 19:19:25 -05:00
martbost 4beda14950 Pool spent: board notice + closed missions, starts/claims refused until midnight Central; no-wallet onboarding panel; landing: Before your first hunt steps + teaser player above the fold
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 19:16:43 -05:00
martbost 6e2b5b7dc5 Code pill on mission sites: the glass Polygon coin from the hero replaces the purple dot; coin PNGs pass the curtain
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 18:37:14 -05:00
martbost fd72ea1b84 Phone-run fixes: hash tokens, embed wakes on tab focus, dry faucet leaves drips due (+admin retry), short drip status, claim box wraps; one drip per wallet per mission
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 17:57:20 -05:00
martbost 3199347ca7 Missions may place the token with {token} and name the embed host explicitly (Telegram Mini App launch links)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 16:37:34 -05:00
martbost 523d57624e PolHunter v0.2: the hunt engine
Hand-off sign-in from InstantAdPay (lib/sso.js: HMAC token, five minutes, single use; no sign-up,
no mailer), missions with per-member per-visit proof codes (lib/missions.js: the embed is
answered only from the mission's own origin, only after the dwell; hiding place rotates by day
and member), weighted-low rewards with a daily cap that queues rather than refuses
(lib/rewards.js), the faucet sender on ethers with a low-balance alert (lib/faucet.js), the
one-line embed for the sites (public/embed.js), the hunter board, the public ledger, an
admin page, and the site's own look. Telegram is behind the OUTBOUND gate like everything else.
13-check end-to-end test in test/run.js.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 14:17:44 -05:00
martbost 1a6166abc3 PolHunter shell: default-deny gates (OUTBOUND, SIGNUPS, CURTAIN), health, placeholder page
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 10:16:11 -05:00