10 Commits

Author SHA1 Message Date
martbost 3c21f9f615 Payout alerts highlight unlocked tools: shared suite-tools level map drives the Telegram team feed, recruiting feed, member DM on upgrade, and X posts; only announces LIVE tiers and gated behind config.suiteToolsInAlerts (off until Suite launch)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-28 07:59:40 -05:00
martbost 6a977eebd0 Neutralize payout-tweet CTA (drop CTBN wording post-rebrand)
"Join the Crypto Team Build Network 👉" -> "See how it works 👉" — the tweets
are public/prospect-facing and link to rmcircle.team, so they stay RM-Circle-only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-16 07:29:42 -05:00
martbost 95a00e3ac1 Update payout-tweet hashtags to #RMCircle #Polygon #SmartContract #Crypto #Community
Matches the hashtags announced to the team (Zoom huddle). Also set live via
admin config (tweetHashtags), effective immediately for the next payout tweet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-16 07:27:46 -05:00
martbost d0b1eddda2 Show which generation caught each pass-up + finish domain go-forward
Feature (Marty): live payment proof + notifications now show the
generation for upgrade pass-ups (matrix hop distance payer→recipient),
removing the "why did they get it" question. chain.genBetween() adds a
`gen` field to payout events + /api/public/payouts; rendered as a gold
"Gen N" badge in the feed, "Gen N pass-up" in toasts, and "Gen N …" in
Telegram team alerts.

Domain: rmcircle.team is now live (added to Coolify alongside
rmcircle.saasy.top, SSL issued, both serve, no redirect). Switched the
auto-tweet CTA to https://rmcircle.team.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 05:22:47 -05:00
martbost 09b44c8286 Reframe payout tweets around the Crypto Team Build Network
Per Marty: Crypto Team Build Network is OUR team; The RM Circle is the
third-party co-op we build in, not our brand. CTA changed from "Join
The RM Circle team build" to "Join the Crypto Team Build Network", and
hashtags now lead with #CryptoTeamBuild (then #TheRMCircle as the
program tag). Payout facts unchanged. Longest render 278/280.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 16:42:46 -05:00
martbost 5c53945aee Name both sides of the event in referral tweets (purchase + payout)
Each join/upgrade yields exactly one payment, so one tweet tells the
whole story. Upgrade tweets already named the upgrader + recipient;
referral tweets now name the joining member (evt.fromId) too, e.g.
"Member #129 just joined and Member #30 instantly earned 326.2 POL".
All templates verified <=280.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 11:48:47 -05:00
martbost a0f0950c77 Use correct brand: #TheRMCircle and "The RM Circle team build"
Hashtag #RMCircle -> #TheRMCircle and CTA "Join The RM Circle team
build" to match the brand (thermcircle.com). Longest render 273/280.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 11:43:30 -05:00
martbost 2992ff414f Name "RM Circle team build" in every payout tweet + #RMCircle
CTA line now reads "Join the RM Circle team build 👉" and hashtags lead
with #RMCircle #CryptoTeamBuild. All templates verified <=280 (longest
270). Branding is in every tweet, not just implied by a hashtag.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 11:42:00 -05:00
martbost c52add619a Keep payout tweets under 280 (short CTA URL + hard length guard)
Blotato counts the raw URL length toward the 280 limit (no t.co
shortening), so the long UTM CTA overflowed. Shortened default CTA to
?utm_source=x and added a guard in render(): drop hashtags, then trim
body, so a tweet can never exceed 280. Verified a real test post to
@cryptoteambuild returns HTTP 201.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 11:38:32 -05:00
martbost c418aa516a Add auto-tweet of on-chain payout proof to @cryptoteambuild (Blotato)
New tweet.js posts a tweet to X via Blotato each time the indexer emits
a NEW team payout. Org-gated to the #21 organization; fires on all
payout types. Ships DISABLED (config.tweetEnabled default off / env
TWEET_ON_PAYOUT), so nothing posts until explicitly turned on.

Safety: dedupes by tx key (persisted to DATA_DIR/tweeted-payouts.json)
so restarts never re-post; a min-gap queue keeps bursts under Blotato's
30/min limit; API key read from env BLOTATO_API_KEY or DATA_DIR key
file, never committed or logged. Varied emoji/hashtag templates with a
CTA (+UTM) to the main page; deterministic template pick avoids X
duplicate-content rejection. Admin config allowlist gains tweetEnabled,
tweetCtaUrl, tweetHashtags, blotatoTwitterId.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 11:35:05 -05:00