Software Engineer · Nairobi

AnaMuraya

Full-stack software engineer specializing in production web platforms, real-time systems, and frontend architecture.

Role
Full-stack · React + Node
Based in
Nairobi · GMT+3 · remote-ready
Ana Muraya, smiling in sunglasses and a tailored blazer.
Selected work

01Things I've built

A few professional and personal builds, told as case studies, the problem, my role, the technical calls I made, and what came out the other side.

Professional work

Vrai · Front-end engineer · 2024–26

Vrai

Customer-facing commerce for a high-value jewelry brand on Next.js + Shopify.

ProblemHigh-value jewelry buyers need certainty, where's my custom order, is it in stock, does it look right, and every unanswered question became a support ticket or a lost sale.
My roleFront-end engineer building customer-facing commerce on Next.js against Shopify, NetSuite & HubSpot.
Key callsDrove a WISMO order tracker off Shopify webhooks plus NetSuite fulfillment data for proactive status updates; surfaced live stock on product pages via the Shopify Storefront GraphQL API; replaced a video diamond viewer with an interactive 360° spinner; served region-aware offers by geolocation across US, UK & EU.
Outcome~85% fewer account-related support tickets, 50% faster product-page loads, and +3% add-to-cart on high-value pieces.
Next.jsTypeScriptTanStack QueryShopify GraphQLNetSuiteHubSpotDatoCMS
Team · in production
Architecture: a POS device order flows through the POS Service and Order Service, authenticated, validated, processed, then routed over WebSocket to the matching order-confirmation board, or ignored if no board is connected.Architecture: a menu item created or updated on a POS client flows through the POS Service and Menu Service, is validated and stored in MongoDB, then pushed to the matching digital menu board, or ignored if not connected.Click to enlarge
Backend · Real-time · Team

Stream Signage

A digital drive-thru board that mirrors each order and the live menu as it's keyed in.

ProblemDrive-thru orders went wrong the same two ways: staff re-reading orders back to confirm, and menus that didn't know what was sold out. The fix was a board that mirrors the order in real time as it's entered and reflects menu changes the moment they happen.
My roleBackend/integrations engineer, I designed the adapter interface every POS integration plugs into, built the real-time sync layer, and owned the POS integrations end to end.
Key callsPut every POS behind one adapter interface so the core talks to all of them the same way and a new POS is an implementation, not a rewrite; drove the boards off DB-change webhooks over WebSocket so screen and source of truth never drift; modeled related data together in MongoDB to skip joins on the hot read path; documented the API in OpenAPI so integrators work off a contract.
OutcomeSeven POS systems, Oracle, Clover, NorthStar, TableNeeds, CBS, HolidayOil & Toast, unified behind a single adapter across 10+ merchant locations, with orders and menu updates landing on confirmation boards in real time. The next POS is a new adapter, not a new project.
NestJSTypeScriptMongoDBWebSocketOpenAPIAWS · EC2/S3/CloudWatchAdapter pattern

Personal builds

Team · in production
Yebo Sports home on mobile: a monthly availability calendar with selectable dates, a recurring-booking shortcut, and the KES wallet balance.Yebo Sports payment screen: a 15-minute countdown reserving the selected slots, with a pending order and price breakdown.Yebo Sports payment method selection: Pesapal (M-Pesa, card, or bank transfer), wallet balance, and loyalty points.Yebo Sports PWA install prompt on Android Chrome, offering to add the app to the home screen.Click to enlarge
Product · Full-stack · Team

Yebo Sports

A mobile-first PWA for booking sports pitches in Ruaka, Kenya.

ProblemBooking a local pitch meant phone calls and double-bookings. We needed real-time slot availability and payment with the methods Kenyans actually use.
My roleFrontend engineer and one of four developers on a seven-person team, I owned the booking calendar, cart/checkout, and digital wallet flows.
Key callsStored slots in UTC but rendered in EAT so availability is never off by three hours; wired M-Pesa, Visa & Mastercard through one Pesapal checkout; shipped an installable, offline-tolerant PWA because most users arrive on mid-range Android over patchy data.
OutcomeA real facility moved from WhatsApp threads to self-serve booking, with a KES wallet and recurring weekly blocks for teams and schools.
Next.js 15React 19SupabaseTypeScriptPWAPesapalSass
Open source · React + TypeScript

Irregular image editor

A published React component for cropping and masking images into any shape.

ProblemRectangular crop is everywhere; masking an image to an arbitrary shape, a freeform outline, a polygon, or a preset, isn't. I wanted one small, dependency-free React component that does it and is genuinely pleasant to install and use.
My roleSole author and maintainer, the API, the tsup build, accessibility, the docs, a live demo, and the release pipeline.
Key callsShipped dual ESM + CJS with per-condition .d.ts types and subpath exports (/freehand, /polygon, /preset, /core) so consumers pull only what they use; kept React a peerDependency with zero runtime deps; exposed a headless /core for a custom UI; made the handles keyboard-accessible, handled cross-origin images, and kept it SSR-safe for Next.js; green CI on every push.
OutcomeA typed, tested, tree-shakeable component you can install and use in minutes, with PNG/SVG export, a live demo, and an MIT license.
TypeScriptReacttsupVitest + RTLESM + CJS.d.ts typesZero-depAccessibility
Frontend architecture · Personal build

Bank of B.A.C

A fully-tested banking flow with optimistic UI that reconciles against a live statement.

ProblemMoney UIs are unforgiving, one stale balance or double-submitted transfer and the user stops trusting you. So I built a flow that feels as reliable as it behaves: optimistic updates that always reconcile against the real statement.
My roleSole engineer, architecture, the component library, state, and the entire test suite.
Key callsHeld account state in Context + TanStack Query so optimistic UI never drifts from source of truth; routed every form through React Hook Form to block impossible transactions before they fire; built components in isolation in Storybook and pinned behaviour with Jest + RTL.
OutcomeA fully-tested flow where deposits, withdrawals and transfers reconcile against a live statement, plus a reusable component library. Deployed on Vercel.
Next.jsTypeScriptSassReact Hook FormTanStack QueryContext APIJestRTLStorybook

Experience

  1. Front End Engineer · Vrai2024–26

    E-commerce on Next.js + Shopify; ~85% fewer support tickets, 50% faster loads.

  2. Software Developer · Pactus AI2024

    Sole dev on a 0→1 legal-tech MVP, built with the founders from scratch.

  3. Integrations Engineer · Pinely2023–24

    Led the POS integration team for Stream Signage (detailed above).

  4. Software Engineer · CoreTec Solutions2022–23

    Brought React into a legacy .NET stack; built Django REST APIs; championed the move to GitHub.

  5. Software Developer · Castynet Studios2019–22

    Led front-end on React + TypeScript apps; reusable component libraries; mentored the team.

  6. Software Developer Mentor · DigiKids2018–21

    Taught JavaScript, React, Python & Java at Strathmore University.

A little about me

02The person behind the commits

I'm Ana, a software engineer in Nairobi who likes turning messy, real-world problems into software that's fast, tested, and kind to the person using it.

I live mostly in the React + TypeScript world, but I'm comfortable dropping to the backend with Node, NestJS, Django, and REST APIs when a feature needs it. I care about testing, accessibility, and the small details that make an interface feel considered.

Frontend

ReactNext.jsTypeScriptSassTanStack QueryZodReact Hook FormPWASvelte

Backend & data

NestJSNodeDjangoREST APIsGraphQLWebSocketMongoDBPostgreSQLSupabaseOpenAPIM-Pesa / Pesapal / FlutterwaveStripeShopify

Craft

JestReact Testing LibraryStorybookAccessibilityAWS · EC2/S3/CloudWatch/Route 53/Lambda/SQS/SNS/EventBridge/Load Balancer/CloudFrontAWS Certified Cloud PractitionerCI/CDGit

Looking for

Full-time or contract, frontend, backend or full-stack, on a team that sweats the details. Nairobi-based (GMT+3), happily remote.

Raised on early-2000s Cartoon Network & Saturday-morning cartoons, it's still my debugging soundtrack.

Play playlist
A DigiKids computer lab — rows of desks with monitors running a coding quiz.

Taught kids to code at DigiKids , Web development, Python, Pygames & Roblox.

a connected world
I'm based in Nairobi, Kenya 🇰🇪 — finding how far you are…

Three small things about working with me

Let's talk

Building something good?
I'd love to hear about it.

Whether it's a role, a project, or just to swap notes on testing and cartoons, my inbox is open.