№ II · since 2026 · beta
SharpFeed
Paywalled alerts when Polymarket's actually-sharp wallets — the ones with public track records of being right early — open or close a position. Smaller audience than AlphaFeed, sharper signal, real-money auto-trader running on the same data.
What users see
A subscriber pays once on-chain, pairs Telegram, picks a wallet to follow, and starts getting alerts the moment that wallet trades. Each alert includes the market, the side, the size in USD, the price, and a direct link. Filters per subscriber: minimum trade size, optional category limits.
The wrinkle: cohort vs followed
SharpFeed has two related but distinct sets of wallets, and confusing them was the most operationally interesting bug in the system to date.
- The observational cohort is a small frozen set of wallets we paper-track to validate the underlying signal — does following these specific wallets at this stake size actually earn money? It's a measurement instrument.
- The followed set is the (currently much smaller) subset of wallets the live auto-trader actually mirrors with real capital. Right now: one wallet.
The mistake: the daily Telegram digest iterated the cohort, not the followed set. Operator (me) was getting alerts about wallets I wasn't trading, which read as noise — "why is the bot telling me about beachboy4 again, I don't even follow them." The fix was a single defaulted parameter on the digest formatter that filters cohort entries down to the followed set, plus a footer line so future-me knows suppression is happening.
The lesson generalises beyond this app: "observation" and "action" are different sets and should be different APIs. Conflating them at the data layer means every consumer downstream has to remember which one they wanted, and somebody will eventually forget.
Architecture
┌────────────────────┐ ┌──────────────┐ ┌──────────────────┐
│ polymarket gamma │ → │ trade events │ → │ alert worker │
│ + subgraph poll │ │ table │ │ (5s loop) │
└────────────────────┘ └──────┬───────┘ └────────┬─────────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────────┐
│ paper-tracker│ │ telegram digests │
│ (cohort obs) │ │ (followed only) │
└──────────────┘ └──────────────────┘
│
▼ (anon, BUY, ≥$500)
┌──────────────────┐
│ auto-trader │
│ + approval gate │
└──────────────────┘ Five long-running services in Docker Compose: the gamma fetcher, the alert worker, the auto-trader executor, a position monitor that reconciles open trades against market settlement, and the Telegram bot itself. Each restartable independently.
Operational discipline
- Per-trade safety check runs before every order placement. Checks the
USDC balance, the kill-switch counter, the spread on the target market, and the
recent-API-error rate. Any failure flips the intention to
skippedwith a reason. - Approval-mode warmup — the first N intentions after any restart go
through a manual
/yes//noTelegram prompt before placing real orders. Catches "model decided something weird" before it's expensive. - Idempotent state — consecutive-loss counter and key-validity cache are derived from canonical tables on every check, never from incremented counters. Restart safety is a property, not a hope.
- 146 tests covering safety paths: gating, kill-switch, idempotency, on-chain key validation, intention lifecycle, digest filtering. Run on every deploy.
Stack
- Backend: Python 3.11, Flask, SQLite (WAL), Docker Compose
- On-chain: Unlock Protocol for paid memberships, web3.py for key verification, py-clob-client for Polymarket order placement
- Delivery: Telegram Bot API for both subscriber alerts and operator
commands (
/yes//no//stop//resume//status//positions) - Hosting: single Hetzner-class VPS, nginx in front, daily heartbeat digest to operator, automated cert renewal
Status
Beta. The auto-trader is in approval-mode-warmup with conservative size; the observational cohort is running its 14-day proof window. Subscriber tier opens once the auto-trader's followed set has earned its keep — the same gate logic as AlphaFeed, applied to a sharper but smaller market.