I build tools for the boring failure modes β the ones where nothing crashes, nothing alerts, and the data has been quietly wrong for three weeks.
A scraper that returns 0 results because it parsed a block page as data.
A bot that died on one API timeout at 3am. A monitor that alerts on the
timestamp instead of the price. Every repo below exists because of one of those.
Everything here runs. Most have a one-command demo that needs no key, no signup, and no network.
πΈ stealth-scrape
Config-driven scraping for sites that don't want to be scraped. Adding a site is
a YAML file, not code. The core idea: a block page returns 200 OK, so every
response is classified before extraction β WAF, captcha, rate-limit, empty
shell β and a layout change fails loudly instead of silently writing blanks.
Falls back to search-engine discovery when a site's own search is closed off.
python -m stealth_scrape --site olx --query "rtx 3090" --out results.csvReal extraction output from live product pages, plus a write-up of four layout
traps that produce a scraper which looks correct on your test page and returns
nulls across a catalogue β including the price living in a visually-hidden node
that Selenium's .text returns empty for.
Real-time dashboard: FastAPI, WebSocket streaming, live candlestick charts, dark/light themes. Instrument switching without reconnecting. Tabular figures so columns don't jitter twice a second β the detail you only notice after sitting in front of one for an hour.
pip install -r requirements.txt && uvicorn app.main:appA bot built around what happens when the API doesn't answer. Transient and permanent failures are separate types β a 502 retries, a 401 never does. Backoff uses full jitter so retries don't land as one synchronised stampede. Exhausting the retry budget logs and continues; only a permanent error exits.
python -m bot.main --demo # no token β watch it recover from a flaky APIπ pagewatch
Alerts you won't mute. Every page differs on every fetch β timestamps, view counters, session tokens β so it watches a CSS-targeted value, normalises known noise, and never mistakes a WAF challenge for a change.
python -m pagewatch --demo # baseline β noise (silent) β real change β blockedPython Β· Selenium Β· FastAPI Β· Linux Β· PostgreSQL Β· Docker
Available for scraping, automation, dashboards and monitoring work. Send me a URL and I'll tell you whether it's extractable before you commit to anything.