About
I started on the interface: interactive lessons for the classroom, marketplace screens that had to stay quick on modest phones and networks. That work taught me that the parts people touch are only as good as the parts they never see.
So the work moved down the stack. API contracts and data models with backend teams, authentication done on the server instead of in local storage, container images that move between environments without being rebuilt, and test suites that catch the regression before a customer does.
Recent work includes SumX AI, a cloud-first ERP for project-driven organisations. I care about reusable systems, honest performance budgets, and security decisions that are written down rather than assumed.
Working principles
- Decide where code runs
- Server, edge, or browser is an architectural choice. I make it early and on purpose.
- Make the secure path the easy one
- Tokens stay server-side, roles are checked at the boundary, and audit trails exist before anyone asks for them.
- Prefer boring, reversible changes
- Small steps with tests and a rollback path beat clever migrations.
What I engineer
Seven areas, each opening onto how I approach it, the tools I reach for, and where to see it.
Frontend engineering Web and mobile interfaces that stay fast and accessible as they grow: component libraries, rendering strategy, and state that is easy to follow.
How I approach it
- Pick SSR, static, or client rendering per route, not per project.
- Ship design-system primitives before screens.
- Treat accessibility and performance as acceptance criteria.
Tools
- TypeScript
- React
- Next.js
- React Native
- Expo
- Astro
- SolidJS
- Angular
- Vue
- TanStack Router
- TanStack Query
- Vite
- Tailwind CSS
- Radix UI
- shadcn/ui
See it in
- SumX AI project
- Educonnect project
- Hamrobazar project
- Optimizing React Component Performance with useDeferredValue Hook article
- Simplifying Async State Management with the useAsync Hook article
Backend and APIs Services and API contracts that frontends can rely on, from REST endpoints to streaming updates with server-sent events.
How I approach it
- Agree on the contract and the error shapes before writing handlers.
- Keep domain logic in shared packages, not in route files.
Tools
- Node.js
- Bun
- PHP
- Laravel
- Symfony
- Laminas
- Python
- FastAPI
- REST
- Server-sent events
- PostgreSQL
- MySQL
See it in
- MyCareX project
- Meshed RTOManager project
- Educonnect project
- Generate Dynamic Open Graph Images Using Satori article
Architecture and system design Shaping systems so teams can change them safely: service boundaries, monorepos with shared domain packages, embeddable UIs, and multi-step workflows.
How I approach it
- Draw the boundaries where the teams and the data already are.
- Isolate embedded experiences with custom elements or iframes so hosts stay independent.
Tools
- Microservices
- Bun workspaces
- Shared domain packages
- Custom elements
- iframe isolation
- Approval workflows
- Document storage
Cloud and DevOps Build once, promote everywhere: container images, pipelines, and runtime configuration that behave the same in every environment.
How I approach it
- One image per commit; configuration arrives at runtime.
- Pipelines should fail loudly and early.
Tools
- Docker
- Docker Compose
- Kubernetes
- AWS S3
- AWS SES
- AWS EKS
- AWS Lambda
- Azure Functions
- GitHub Actions
- Nginx
See it in
Security and authentication Authentication that keeps tokens away from the browser, role-based access checked at the boundary, and audit logs that make incidents explainable.
How I approach it
- Authorization Code with PKCE, sessions handled on the server.
- Least privilege by default; every role change leaves a record.
Tools
- OAuth 2.0
- OpenID Connect
- PKCE
- JWT / JWE
- Auth0
- Role-based access control
- Audit logging
Testing and performance Tests at the level where bugs actually appear, and bundles that only contain what the page uses.
How I approach it
- End-to-end tests for critical flows, unit tests for logic with real edge cases.
- Measure before optimising, then keep the budget in CI.
Tools
- Playwright
- Bun test
- Jest
- PHPUnit
- PHPStan
- Rector
- Biome
- ESLint
- Prettier
AI-assisted engineering Using coding agents with guardrails, and building product features that summarise documents or answer questions from grounded sources.
How I approach it
- Agents work inside reviewable diffs and repeatable checks.
- Ground answers in retrieved sources the user can verify.
Tools
- Claude Code
- Agentic workflows
- LLM document summarisation
- Retrieval-grounded copilots
Working on something where this could help? Write to me or email [email protected].