Commit Graph

16 Commits

Author SHA1 Message Date
martbost 4cfe851e81 Launch bonus: pay it automatically to the first referral home
Marty offered 5 POL to the first hunter who gets a referral all the way
through. It now pays itself: the bonus is written alongside the very first
bounty anyone earns, from the same faucet, and can never be written twice.

It sits outside the daily referral ceiling on purpose, because it is one
payment rather than a rate, and it announces itself to Telegram so the room
knows the race is over. While it is unclaimed the board card says so, and the
moment it is won the card stops advertising it.

Set refFirstBonusPol to 0 to retire it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 10:07:23 -05:00
martbost c316dab8e6 Recruiter badge: the card for bringing someone who actually hunts
Matches the existing set at 1080x1080, same violet and gold, same laurel
wreath and floating Polygon coins, with a blank ribbon for the hunter's name.
Inside the wreath, four anonymous figures wired together as a team tree, one
at the top lighting up the three below it.

Awarded on a bounty rather than a match, so it means a person they brought
turned up and found their first code, not merely that an existing hunter
kept hunting. It shows locked on the board until then, which is the point.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 06:10:00 -05:00
martbost 48611374d6 Referral card: count someone as brought on the day they joined InstantAdPay, not the day this directory first saw them
The backfill stamped firstSeen at seeding time, so every hunter already on the
board read as brought in today.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 04:43:34 -05:00
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 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 5db6cdff52 Code pill: six fixed cells on their own row, tap to copy, wrapping header; claim error names the length when it is not 6; board hint
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-20 07:59:52 -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 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 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 bac6110fad Faucet: settle sent drips from their receipts on every tick; a wait timeout or restart never strands or re-sends a drip
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 18:33:41 -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 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