Skip to content

Dublin, Ireland

53.3498° N / 6.2603° W

Hey,I'm Shaun O'Neill

Software engineer at Rapid7. The rest of my time goes on small products that ship.

7 years at Rapid7, intern to senior, most of it on the parts of a security platform every other team builds on top of — the design system, the app shell, navigation, tenant and user management. My own products are where I do the rest of it: schema and migrations, payment webhooks, a Python renderer behind Cloudflare Access, and the email that arrives when one of them breaks on a Sunday.

AutoToonify — screenshot of the live site

AutoToonify

autotoonify.com
01/05

Selected work

Five products I built, shipped and still run. Each one is a live site you can open right now — the only claim on this page I'd rather you checked than took my word for.

Live

AutoToonify

Photos redrawn as illustrations, with the rights to use them.

Upload a photo, pick a style — cartoon, watercolour, oil, anime — and get an illustration back in seconds. Previews are free and watermarked so you can find the right style before spending a credit on the clean render, and full commercial rights come with it, which is the part cheaper tools tend to withhold in a paragraph you find afterwards.

Try first
Free watermarked previews
Licence
Full commercial rights
Price
Credits, or €2.99/mo

Next.js · OpenAI · Sharp · Stripe · Drizzle

autotoonify.com
Live

MyCityMapped

Personalised city-map posters, for anywhere on earth.

Pick a place, pick one of seventeen map styles, and a 300 DPI print-ready file arrives in minutes — A4 up to A1, no account needed. Rendering runs as a separate Python service behind Cloudflare Access, because drawing a poster takes long enough that it has no business sharing a request with the shop.

Price
€1.99, all sizes
Styles
17
Checkout
Guest, no account

Next.js · Drizzle · Postgres · Stripe · Python

mycitymapped.com
Live

ReceiptWise

Receipt and expense tracking for a household, not an accountant.

Photograph a receipt or forward the emailed one to your own private address, and it lands in a ledger the rest of the house can see. Email ingest is a forwarding address rather than a Gmail integration on purpose: reading someone's entire inbox to find their receipts is a trade nobody should have to make.

Ingest
Photo or forwarded email
Sharing
One ledger per household
Price
€1.99/mo, 7-day trial

Next.js · Clerk · Drizzle · Postgres · Stripe · OpenAI

receiptwise.io
Live

HomeScout

Every Irish home for sale, on one map.

MyHome.ie and the estate agents' own sites list the same house at different prices, which makes the Irish market close to unreadable. HomeScout merges the duplicates into one property and keeps its full price history, so a €20k "reduction" that is really a relisting shows up as exactly that.

View
Map first, all Ireland
Keeps
Price-drop history
Cost
Free, no agent fees

Next.js · MapLibre · Drizzle · Neon · better-auth

homescout.ie
Live

BehindTheBadge

Type a registration, find out what the car actually is.

A reg goes in; engine, fuel type, tax status, NCT dates and running costs come back out of the official databases, with whatever the community has added underneath. It started as something I wanted while standing in a car park, which is still the best reason I've had to build anything.

Covers
Irish and UK plates
Shows
Specs, tax, NCT, costs
Cost
Free

Next.js · TypeScript · Postgres

behindthebadge.io

All five are mine end to end: the code, the database, the DNS, the Stripe account and the support inbox. There is another in progress, which stays off this page until it's finished — a work list with unreleased things on it is a list of intentions.

One company, four titles

7 years at Rapid7, from a summer internship to senior. Staying put long enough to live with your own decisions turns out to be the fastest way to find the bad ones.

  1. Sep 2024 — Present

    2 yrs 1 mo

    Current

    Senior Software Engineer

    Rapid7Dublin, Ireland

    Partner with product managers and engineering leadership on quarterly and sprint planning, ensuring alignment between technical priorities and business goals.

    • Collaborate with engineers across multiple teams to deliver company-wide initiatives, focusing on consistency, scalability, and a seamless user experience across the platform.
    • Provide technical leadership by shaping frontend architecture, promoting best practices in React and TypeScript, and ensuring long-term maintainability of the codebase.
    • Mentor and support teammates through code reviews, design discussions, and knowledge sharing, fostering a collaborative and high-performing team culture.

    React.js · TypeScript · Planning & Execution · Cross-Team Collaboration · Mentorship · Frontend Architecture

  2. Jan 2023 — Sep 2024

    1 yr 9 mos

    Software Engineer II

    Rapid7Dublin, Ireland

    Designed and implemented advanced React components and patterns, enabling faster development and greater consistency across teams.

    • Took an active role in mentorship and onboarding, supporting new engineers and interns, and helping to raise overall code quality.
    • Collaborated closely with UX, product, and backend teams to translate complex requirements into polished, accessible, and responsive user interfaces.
    • Contributed to company-wide initiatives to unify the customer experience, ensuring cohesive design and technical alignment across multiple teams.

    React.js · TypeScript · Design Systems · Performance Optimization · Mentorship · Cross-Team Initiatives

  3. Jun 2020 — Jan 2023

    2 yrs 8 mos

    Software Engineer I

    Rapid7Dublin, Ireland

    Built and maintained interactive, high-performance web applications using React.js, with seamless backend integrations.

    • Participated in code reviews and knowledge sharing, ensuring adherence to best practices and consistency across projects.
    • Worked closely with designers to deliver responsive, user-friendly experiences that aligned with customer needs.
    • Helped improve frontend workflows by adopting modern libraries and tooling, streamlining development and reducing technical debt.

    React.js · JavaScript · Frontend Development · Agile Collaboration

  4. Jun 2019 — Jun 2020

    1 yr 1 mo

    Software Engineering Intern

    Rapid7Dublin, Ireland

    Supported the development of React-based web applications, gaining experience with modern frontend tools and practices.

    • Learned and applied best practices through active participation in code reviews and pair programming with senior engineers.
    • Collaborated with designers to implement UI features that improved usability and consistency.
    • Assisted in refining development workflows by contributing to internal tooling and documentation.

    React.js · JavaScript · Collaboration · Learning & Adaptability

About

The short version: I like building things that other people use, and I am suspicious of clever solutions.

I have worked at the same company since I was an intern, which is unfashionable and has been the best career decision I've made. 7 years on one platform means living with your own architecture long enough to find out which parts of it were wrong, and then having to fix them in front of the people who use it.

At Rapid7 that means the interface layer of a security platform: the design system, the app shell, navigation, tenant and user management — the pieces every other team builds on top of, and therefore the pieces that have to be right. Most of the work now is other people's code, which suits me. Reviews, design discussions, and making the case for the boring option.

At home it is the opposite of that, and it is the whole stack. I write the schema and the migrations, the checkout and the webhook that reconciles it, the render service and the cron that retries it — and I own the DNS records and the email that arrives when any of it breaks on a Sunday. Nothing has taught me more about what people actually do with software, as opposed to what the spec said they would.

Away from a screen: a 2017 Audi S5 I photograph far more than is reasonable, a homelab that runs considerably more than it needs to, and a long-running attempt to get CarPlay into a car Audi never intended to have it.

Language
TypeScript, and Python when the job calls for it
Framework
Next.js App Router, React 19
Data
Postgres through Drizzle, mostly on Neon
Payments
Stripe — a separate account per product
Hosting
Vercel for the products, Proxmox at home for the rest
Analytics
PostHog, EU region

The car, and the one before it

I photograph my own Audi far more than is defensible — the S5 now, the A5 before that. Track days at Mondello, Dublin streets at the hour nobody else is up. It's the one hobby with no keyboard in it.

Audi S5

The current one

A dark blue Audi S5 in profile on the circuit at Mondello Park, driver in a helmet, low autumn sun.
On track, Mondello ParkInstagram
The same Audi S5 parked in the pit lane at Mondello Park, open garages and other cars behind it.
Pit lane, Mondello ParkInstagram

Audi A5

The one before it

A black Audi A5 on an empty Dublin city-centre street at dusk, glass office block and double yellow lines behind it.
City centre, DublinInstagram
The black Audi A5 shot low from a kerb, stone wall and trees behind it, grille filling the frame.
Kerbside, DublinInstagram
More at @thatsexyaudi