About

I build products that ship

I build production software across frontend, backend and applied AI. My work focuses on turning real operational problems into systems that are straightforward to use, maintain and ship.

Before that, I built AI products during industrial training. That period taught me something simple: flashy demos are easy to like, but clear and stable systems are what people keep using.

What I build

Product EngineeringInterfaces and workflows built around real users.
Backend SystemsAPIs, databases and integrations designed for reliability.
Applied AIAI features that solve specific product problems rather than existing as demos.

Engineering Notes

Bugs I've met and survived

Bugs, incidents and lessons from shipping software. Some details are simplified for clarity.

Built an AI chatbot for an e-commerce platform. WebSocket connection worked great — until it didn't. Messages would randomly appear twice. I spent a day convinced the AI model was hallucinating duplicates. Turned out: React's StrictMode mounts components twice in dev, creating two WebSocket connections to the same room. In production, rapid re-renders during streaming were doing the same thing. Fix: moved the socket to a singleton ref, deduped by message ID. One line of logic that took a full day to earn.

Built an inventory management platform that used OCR to scan barcodes and product labels. Seemed fine — until someone noticed stock counts were wildly off. Investigation revealed: our OCR was confusing the letter 'O' with the number '0' in product codes like 'P0012' vs 'PO012'. They mapped to completely different items. Thousands of units misattributed. The fix was a post-processing regex to normalize ambiguous characters based on code schema patterns. But first I had to explain to a warehouse manager why the computer couldn't read the letter O. That was a fun meeting.

Built a restaurant booking system. Everything worked perfectly — until Daylight Saving Time happened. Reservations stored as UTC were being displayed without accounting for the DST offset switch. Customers got confirmation emails saying 7 PM, showed up at 7, and their table wasn't ready until 8. The fix was straightforward: use a proper timezone library, always store with timezone context, never do manual UTC offset math. Lesson: store canonical timestamps and convert using explicit IANA timezone context at the presentation boundary.