Inspiration
Free credits, airdrops, hackathon prizes, referral rewards and grants show up across six different platforms, mixed in with reposts, noise, and outright scams. By the time something's trending it's usually too late to be early, and checking six feeds by hand all day isn't realistic. I wanted something that watches for me and only speaks up when something actually clears a bar — not another firehose I'd learn to tune out.
What it does
RADAR collects from X, Reddit, GitHub, Hacker News, YouTube and RSS in parallel, on a schedule or on demand. It normalizes every platform's post into one common shape, deduplicates near-identical reports of the same opportunity (MinHash + fuzzy matching + shared-entity blocking), and tracks each one as a stable "opportunity" across runs in SQLite instead of re-detecting it every cycle.
Each opportunity is scored on relevance, source independence, risk (rule-based scam signals), and trend velocity, then classified into one of three tiers — do it now / watch / ignore — weighing reward against effort and risk, not just the raw score. Only "do it now" gets pushed to Telegram unasked; everything else stays reachable on request.
Hackathon opportunities that clear the bar get one more check: RADAR opens the real hackathon page and reads the actual deadline and prize text, and checks whether I already have a matching GitHub repo, instead of trusting whatever a tweet claimed.
The Telegram bot (cry4scan) gives each alert three buttons: dig deeper into that one opportunity, mark it done, or ignore it — and it remembers the decision so it doesn't push the same thing twice unless the situation genuinely changes.
How I built it
Python 3.12, SQLite for storage, ThreadPoolExecutor for the six parallel collectors. Collection reuses existing tools instead of writing scrapers: OpenCLI for X/Reddit, the GitHub CLI for GitHub, the HN Algolia API, yt-dlp for YouTube, feedparser for RSS. Dedup and clustering use datasketch (MinHash/LSH) and RapidFuzz; trend detection uses ruptures for change-point analysis. Notifications go out through Apprise (desktop toast) and a Telegram bot built on the raw Bot API, scheduled with APScheduler.
The rule I held myself to: reuse a mature library for anything already solved (collection, dedup, clustering, change-point detection), and only write code for what's actually specific to this radar — the scoring model, the do_now/watch/ignore decision logic, hackathon verification, and the Telegram workflow.
Challenges I ran into
- Deduplication that understands "the same real thing," not just "the same URL" — a bare link with no text used to match everything, a short unrelated headline used to match a long tweet. Took real tuning against actual false positives, not synthetic test cases.
- A crash where one failed Telegram button tap took the whole bot offline — needed to isolate failures per callback instead of one shared failure path.
- False positives in relevance scoring: large numbers in unrelated posts were tripping the "reward mentioned" signal, and a separate off-topic signal was being computed but silently discarded instead of actually used.
- Verifying hackathon pages without pretending to be something I'm not: if a page is behind an anti-bot check or login wall, RADAR says so and asks me to check it myself instead of trying to get around it.
Accomplishments that I'm proud of
A system that's actually quiet most of the time. It watches six sources continuously and only interrupts me for the one or two things worth acting on — the tiering and cooldown logic mean the same opportunity doesn't get re-pushed just because it's still sitting there.
What I learned
How much of "collect and detect" is already solved well by existing open-source libraries, and how much of the real value is in the last mile: deciding what's worth a human's attention, not just what matched a keyword.
What's next for cry4radar
Extend the same real-page verification RADAR does for hackathons to airdrops, free-credit programs and events — right now only hackathons get fact-checked against their own source before notifying.
AI usage disclosure
Built with significant assistance from Claude (Anthropic's Claude Code), used as a pair-programming assistant throughout: architecture, implementation, debugging real issues found while testing against live data, and iterating on the scoring model and the Telegram bot. Every feature was directed, reviewed, and tested by me; the open-source-first approach, the specific scoring/decision heuristics, and what counts as "risky" or "worth pushing" were my own project decisions, not left to the AI to invent unsupervised. Chat history available on request per the hackathon rules.
Log in or sign up for Devpost to join the conversation.