Software engineer · scraping infrastructure, booking and payment platforms
status: written by a person
In 2026 I made more commits than anyone in the ScrapeOps GitHub organisation.In my evenings and weekends, I built the platform behind eight local businesses' websites, with bookings and payments built in.
I own
Proxy routing and spend at ScrapeOps: which provider every request goes to, and whether it makes money.
The Cloud Browser product at ScrapeOps, top to bottom: I wrote 90% of it.
The whole Armed Solutions platform as CTO: payments, bookings, infrastructure and security.
Kerry, Ireland · remote · BSc Computer Science and Information Technology, University of Galway · CV · PDF
What a bot-detection system can see about you, right nowread in your browser · nothing is sent or stored
browser
…
screen
…
time zone
…
languages
…
cpu cores
…
graphics card
…
canvas hash
…
automated?
…
Each of these on its own is ordinary. Together they're often enough to tell your browser apart from millions of others, and to tell a real person from a scraper pretending to be one. Getting scrapers past checks like these is my day job.
I also spot the tells that make a website or design look AI-made. There are two examples below.
§01verified against the repo
Selected work
May–Nov 2026 · one platform · 26 shipped units · 8 client sites · ~860 commits, alongside a full-time engineering job
CASE 01 · payments · Aug–Nov 2026
Direct booking against someone else's inventory
Problem
A holiday-rental agency wanted guests to book and pay on its own site, but its property management system (Lodgify) owns the calendar and prices.
Built
A custom Stripe checkout, instalment payment plans, abandoned-checkout recovery, multi-currency charging (guests pay in their own currency, the agency settles in euros), and a reconciliation sweep.
The hard part
Money and inventory live in two systems that can disagree. Payment is captured before the booking is created, so a guest ends up either paid and booked or charged nothing. A refund is only issued once the booking system conclusively shows there's no booking; anything inconclusive goes to a human. Late 3-D Secure confirmations are judged by Stripe's own timestamp, not the server clock.
Result
Live on the client's site, charging real cards and writing real bookings.
CASE 02 · booking · Sep–Nov 2026
A room booking engine that can't double-sell a night
Problem
A B&B needed native online booking, while also selling rooms on Booking.com and Airbnb.
Built
Room types, a nightly calendar, holds, quotes, instalments, refunds, guest manage-booking, staff desk tools, and a two-way calendar mirror with the Beds24 channel manager.
The hard part
Every booking write runs in a serializable transaction with retry, so two guests can't take the same night. The channel-manager sync recognises its own bookings even though the API doesn't store the reference it needs, and it cancels rather than deletes.
Result
Online booking is open on the live site, with OTA stays on the same calendar. It's the pilot for a direct-booking product priced at a few percent instead of ~15% platform commission.
CASE 03 · infrastructure · Jun–Nov 2026
One codebase, isolated client deployments
Problem
Run many client businesses from one platform without one client's site being able to see another's data.
Built
Each client's site ships as its own container, compiled from the shared codebase with every other client's routes and assets stripped out at build time. Each client gets its own database role, with row-level security on the shared Postgres. Every branch gets its own preview environment.
The hard part
Enabling row-level security on a database that live, unchanged client sites were already reading. It was rolled out so nothing running broke, with checks that block destructive migrations and table-locking indexes before they ship.
Result
Client sites run as separate containers on their own domains.
CASE 04 · infrastructure · Jul 2026
Moving production off managed hosting
Problem
Move the platform, client sites and database from managed services to self-run servers.
Built
Docker deploys with rollback, a TLS edge serving custom client domains, health checks that fail when the database is down, error monitoring, connection pooling, and continuous backups.
The hard part
The database cutover. Staging-clone validation, a backup-restore drill and a maintenance window, with the guarantee that the platform and client sites never wrote to different databases mid-move. Restore drills now run against the backups.
Result
Cut over on 23 July 2026.
CASE 05 · payments · Jun–Nov 2026
Gift vouchers and session passes on Stripe Connect
Problem
Small businesses wanted to sell gift vouchers online as the merchant themselves, with no marketplace in the middle.
Built
Stripe Connect onboarding and direct charges, three sales channels (hosted page, embeddable script, API), QR and barcode vouchers with a scanner, PDF delivery, and a ledger for multi-session passes.
The hard part
Keeping voucher state in step with Stripe events across many connected accounts. Refunds and disputes void vouchers, and fulfilment is safe whichever arrives first, the redirect or the webhook.
Result
In progress.
CASE 06 · hardware · Nov 2026
Signage you install by flashing a card
Problem
A holiday-rental agency needed digital signage on Raspberry Pi screens, installed on site by someone other than me.
Built
A ready-to-flash Raspberry Pi image. Write it to the card, put it in the Pi, and the signage is ready to go, with nothing to set up after. Two shop-window TVs, one wide and one upright, play a slideshow from a folder on the card, with the Armed Solutions logo showing while they boot. To change the pictures, copy new ones onto the card from a laptop.
The hard part
Making it safe to unplug at any time, with no network, keyboard or password. The image is built from the official, checksum-verified Raspberry Pi OS, gets through first boot without asking anything, then seals its own system as read-only so a power cut can’t corrupt the card. The slides folder stays writable, and a marker file in it rotates the portrait screen. It’s boot-tested in a container before it ships.
Result
Both screens are live in the shop window. The installer set them up from the image and an 11-page guide, without me on site.
Smaller builds
Timed-slot booking for a shared-capacity venue, safe against overbooking races.
First-party, per-client website analytics with no third-party tracker.
Passkeys, MFA and login rate limiting on the platform admin.
A pipeline that sources local businesses and drafts outreach with an LLM, held for human approval.
Making the agency site readable by AI agents: markdown versions of pages, llms.txt, and WebMCP tools.
A restaurant table-booking system with a live floor plan, built and then deliberately removed (16k lines) once it wasn't worth maintaining.
8 client marketing sites from one site registry.
specimen aI can spot these. Like this:
SPECIMEN A · the purple hero · common since 2023contained
🚀 Now with GPT-powered extraction →
Elevate Your Scraping Journey with AI-Powered Insights ✨
Unlock seamless, robust data pipelines that empower your team to harness the full potential of the web. No code. No limits. Just results.
Get Started Free →
▶ Watch Demo
AI Insights+312%
indigo-500 → purple-600 gradient text
emoji eyebrow pill
unlock / seamless / robust
gradient CTA + shimmer sweep
glassmorphism, backdrop-blur
chart with no axes, no data
Flagged: indigo-500 → purple-600 gradient text
Flagged: emoji eyebrow pill
Flagged: unlock / seamless / robust
Flagged: gradient CTA + shimmer sweep
Flagged: glassmorphism, backdrop-blur
Flagged: chart with no axes, no data
VERDICTgenerated. confidence 0.97. signals: 6
§025 items, 0 cards
What I do
Find out why your scraper gets blocked. I compare your requests with a real browser's and find what gives you away, from TLS and HTTP/2 fingerprints to header order. The usual suspects are Cloudflare, Akamai and DataDome.
Cut what scraping costs you. Fewer retries, cheaper proxies where they hold up, and plain HTTP where a browser was never needed.
Run browsers at scale. Fleets of automated browsers (Camoufox, Playwright) in containers, on servers you control.
Build booking and payment systems. Stripe checkouts, calendars that can't sell the same night twice, and the back office around them. What I've built.
AI audits. I go through a website, app or poster for the tells that make it look AI-generated: copy, layout, colour and imagery. You get the list, and the fix for each one.
§03fixed scope, no retainers
How engagements work
01 · auditFixed-scope audit. You tell me what is broken, slow or expensive, and send your current setup. You get back a written diagnosis: what is wrong, why, and the fixes in order of effort.
02 · hands-onShort engagements. A week or two where I make the fixes myself, in your code, and hand it back working.
not offeredOngoing maintenance. The goal is that you don't need me afterwards.
Audits are a fixed price, from $750. Hands-on work is quoted after the audit.
specimen bI can spot these. Like this:
SPECIMEN B · the ai poster · common since 2022contained
fig. 1 · generated for this page, by hand
6 fingers
garbled text: 'SCRAPNG'
5 typefaces
no negative space
style clash: vector / 3D / brush
teal-orange grade
'31TH OCTOBRE'
Flagged: 6 fingers
Flagged: garbled text: 'SCRAPNG'
Flagged: 5 typefaces
Flagged: no negative space
Flagged: style clash: vector / 3D / brush
Flagged: teal-orange grade
Flagged: '31TH OCTOBRE'
VERDICTgenerated. confidence 0.99. signals: 7
§04side projects
Things I've built
SortDeck. A model trained on photos of Pokémon cards that tells each card’s generation and type from the image, with a confidence score, built on CLIP embeddings and OpenCV. The plan was a 3D-printed sorting machine run by a Raspberry Pi. I retired it before building the machine. retired
ServerMonitors. A stock-alert service: about fifteen pluggable shop adapters (Shopify, WooCommerce, BigCommerce, Squarespace and others), a FastAPI server on a VPS, Discord alerts, and a portal where subscribers log in and pick what to watch. Adapters are tested against responses captured from real shops. 2026
A trading-card competitions site. Next.js and Prisma, with accounts and email verification, chosen entry numbers, a skill question, a wallet balance and Solana payments through Phantom. I later put it through my own security audits: auth and sessions, input validation, PII in logs, and draw fairness. 2025
Lantic. My final-year project. Type an Eircode and see average house prices and rents nearby, your commute to work, and the amenities around it on a map. The listing data came from a small Flask API I wrote and deployed in Docker. 2024
Where it started. Discord stock monitors for consoles, PC parts and trainers across Irish and UK retailers during the 2020–21 shortages, hosted on Heroku for friends. Learning the hard way to alert once per restock, not on every check. 2020–21
§05Kerry, Ireland, remote
About
I'm Eddie Sheehy, a software engineer in Kerry, Ireland. I work on scraping infrastructure full-time at ScrapeOps: bot detection, TLS fingerprinting, browser fleets and proxies. What I do there.
I build the Armed Solutions platform in evenings and weekends. Most of it shipped in five months of 2026.
I work remotely, with teams anywhere.
Experience
Two years out of university, I own production systems that handle money: provider routing and spend at ScrapeOps, and payments, bookings and infrastructure as CTO of Armed Solutions.
202120222023202420252026
BSc, University of Galway
Net Feasa, intern
IBM, intern
University of Galway, research
ScrapeOps
Armed Solutions, co-founder
Feb 2025 – now · Full-time · Remote
Scraping Infrastructure Engineer, ScrapeOps
Proxy routing, anti-bot handling, cloud browsers and the product around them. What I do at ScrapeOps.
May 2026 – now · Own company, evenings and weekends · Dingle
Postgraduate Research Assistant, University of Galway
Software engineer on a research team rating pavement conditions on greenways from sensors on bikes and scooters. Built the React web app that maps the surveyed routes, and the APIs and database behind it on a self-hosted server.
Jan – Sep 2023 · Internship · Galway, hybrid
Software Developer, IBM
Front-end and back-end work on IBM’s SOAR security platform. Cleared static-analysis code issues, and was one of the top code contributors by the end of the internship. Python, Jenkins.
Jun – Sep 2022 · Internship · Dingle
Software Engineer, Net Feasa
Worked on LoRaWAN farm sensors, from Tekelek milk-tank levels to weather stations, for on-farm pilots with Teagasc. Python and servers.
Education
BSc Computer Science and Information Technology, University of Galway, 2020 – 2024. Final-year project: Lantic, an Eircode property explorer with its own pricing API.
Skills
Languages
TypeScript, JavaScript, Go, Python, SQL
Web
Next.js, React, Node.js, Express, Astro, Tailwind
Data and infra
Postgres, Prisma, Redis, Docker, Linux servers, CI and preview deploys, Sentry
Payments
Stripe, Stripe Connect
Scraping
Proxy routing, TLS and HTTP/2 fingerprinting, Playwright, Puppeteer, Camoufox, CDP
Earlier
At school, co-wrote and self-published a smartphone guide: 150 copies, sold out in two weeks. Munster winner and national runner-up, Junior Achievement Ireland Young Entrepreneur, 2018.
§06plain links
Contact
For scraping work, send the target and what is going wrong. For anything else, tell me what you’re building.