I write frontend code. The interface is where a product earns trust or loses it, often through things nobody files a bug about: what the screen does while it waits, whether a failed request explains what to do next and whether tapping pay twice creates one order or two.
How I work
I start with the states nobody demos: loading, failure and values changing underneath the user. Getting those right is what separates an interface that feels solid from one that feels improvised.
In practice, that means typed API contracts, caching defined in one place, and components small enough to understand at a glance. On Glam n Go, that meant Redux Toolkit Query. On Jeba Pesa, it meant scoped CSS Modules and one rule: no screen invents its own error treatment.
When behaviour matters, I write the failing test first. Not for coverage, but because naming the behaviour forces me to decide what a component is responsible for. That is far cheaper to change in a test than across six screens that already depend on it.
Shipping is where measuring starts
A release is a hypothesis, so measurement goes in before it goes out. Google Analytics 4 or Tag Manager gets wired up, events are named after behaviour rather than buttons, and the conversions the product actually cares about are tracked from day one.
Search works the same way. I build the foundation a crawler needs: server rendered titles and descriptions, one canonical URL per page, structured data, a sitemap and Search Console verification. That is setup and integration, not an SEO campaign. I get the foundation right and leave the strategy and content to whoever owns it.
What I care about
Performance, because many users are on mid range Android devices and networks that are not generous. Accessibility, because a keyboard trap is a bug with a person on the other end of it. Readable code, because removing ambiguity is often more valuable than simply fixing the immediate issue.
Outside the editor
I read about rendering and the browser platform, and I use tools before I need them so I am not learning under a deadline.
Skills
The detail
Grouped by what the work actually involves rather than by logo.
Core
The technologies I work in most closely. I have delivered production work with them every year of my career.
- React
- TypeScript
- JavaScript (ES2023)
- Redux Toolkit
- RTK Query
- React Router
- TanStack Query
- TanStack Router
- TanStack Start
- TanStack Table
- TanStack Form
Interface & styling
Turning a design file into an interface that holds up everywhere it lands, across screen sizes, themes and however someone chooses to navigate it.
- Tailwind CSS
- CSS Modules
- Styled Components
- SASS
- Design systems
- Responsive layout
- WCAG 2.2 AA
Performance
Making pages fast on the phones and connections the audience really has, not just on a high end laptop.
- Core Web Vitals
- Code splitting
- Render optimisation
- Bundle analysis
- Image and font strategy
- Caching
Testing & quality
Writing the failing test first. It keeps the code honest about how it will actually be used, and it makes later changes far less risky.
- Test-driven development
- Vitest & Jest
- React Testing Library
- Integration testing
- End-to-end testing
- Mocking & test doubles
- Coverage as a signal, not a target
Analytics & SEO setup
Wiring measurement and the search essentials into a build. I handle the technical setup, and leave campaigns and content strategy to the specialists.
- Google Analytics 4
- Google Tag Manager
- Google Search Console
- Event & conversion tracking
- Meta & canonical tags
- Structured data (JSON-LD)
- Open Graph & social cards
- Sitemaps & robots.txt
AI integration
Building model features people can actually rely on. Streaming, tool calls, and sensible behaviour when a response is slow, wrong or unavailable.
- Claude and OpenAI APIs
- Streaming responses
- Tool calling
- Structured output
- Prompt design
- Retrieval augmented generation
- Token and cost budgeting
- Rate limits and error states
Email
Designing and building transactional email that renders consistently across mail clients, from markup and layout through to deliverability.
- Table-based layout
- Inline styles
- Outlook and Gmail quirks
- Plain text alternatives
- Preheader text
- Dark mode inboxes
- Deliverability basics (SPF, DKIM)
- Nodemailer and SMTP
Engineering practice
How the work travels from a branch to something live, reviewed and repeatable.
- Git & GitHub
- GitHub Actions
- CI/CD pipelines
- Agile delivery
- Cross-browser debugging
Technical leadership
The parts of the job that reach past my own tickets and help the people around me do their best work.
- Code review
- Mentoring & onboarding
- Technical decisions
- Scoping & estimation
- Setting conventions
- Documentation & handover
Experience
Professional experience
Hands-on experience across diverse products and teams, with a focus on end-to-end frontend development and technical ownership.
Frontend Lead
CurrentMookhRemoteRemoteFull-time
Jan 2026 — Present
- Lead frontend direction across the platform, setting the standards the rest of the work is reviewed against.
- Own architecture decisions on state, component boundaries and performance budgets.
- Review code and mentor engineers, focusing on the reasoning behind a change rather than only its output.
- Next.js
- React
- TypeScript
- Tailwind CSS
- CI/CD pipelines
Frontend Engineer
MookhRemoteRemoteFull-time
Sep 2024 — Dec 2025
- Improve app speed and efficiency by optimising component rendering across the product surface.
- Refactor existing code for readability and performance, splitting oversized components into composable units.
- Identify and fix defects reported by users or caught during testing, tracing each to root cause.
- Next.js
- React
- Tailwind CSS
- Git workflows
- CI/CD
Frontend Engineer
Jeba Jeba LimitedKampala, UgandaOn-siteContract
Aug 2023 — Sep 2024
- Implemented Figma designs in React at high fidelity for Jeba Pesa, a consumer fintech product.
- Integrated API endpoints and handled data flows through Redux Toolkit Query, giving every screen consistent caching and error handling.
- Optimised application performance and built responsive layouts with mobile treated as the primary case.
- React
- Redux
- Redux Toolkit
- JavaScript
- CSS3
Frontend Engineer
DavsafarisRemoteRemoteFreelance
Jan 2023 — Dec 2023
- Built new features on a live tours and travel booking platform without disrupting existing flows.
- Collaborated with cross-functional developer teams on work spanning frontend and backend boundaries.
- Resolved bugs, errors and cross-browser compatibility issues affecting real customer sessions.
- React
- Axios
- JavaScript
- CSS Modules
- Material UI
Web Developer
Crabtree Technology LimitedKampala, UgandaOn-sitePart-time
Jun 2022 — Jan 2023
- Built and designed client websites and web applications to brief, in HTML, CSS, JavaScript and React.
- Developed the interface and interaction layer so sites stayed usable and responsive across devices and browsers.
- Tested and debugged builds, resolving bugs, errors and compatibility issues before handover.
- JavaScript
- HTML/CSS
- jQuery
- React
Frontend Engineer
Moxtech Software DevelopersRemoteRemoteFull-time
Jan 2021 — Sep 2023
- Developed and maintained production React applications in TypeScript across multiple client engagements.
- Optimised applications for speed and scalability, from bundle size through to render performance.
- Wrote and maintained unit and integration tests to hold code quality steady as the team grew.
- TypeScript
- React
- Redux
- Tailwind CSS
- JavaScript
Frontend Developer
STRATCOMKampala, UgandaOn-siteInternship
Sep 2020 — Dec 2020
- Built an e-commerce platform end to end and deployed it on Firebase.
- Assisted on client websites and web applications, contributing interface and interaction work.
- Tested builds across devices and browsers, identifying and fixing bugs and compatibility issues.
- React
- JavaScript
- HTML/CSS
- Firebase
Have something worth building?
I'm open to frontend roles and freelance work. Tell me what you're working on and I'll tell you honestly whether I'm the right fit.