About Me
How I think about system design, what I build with, and the problems I like solving.

System design
I draw the boundaries first: schemas, queues and service edges that keep a feature testable and the next change cheap.
Problem solving
Finding the query that got slow as the data grew, and the index, cache or rewrite that puts it back under budget.
Now
Exploring AI-assisted engineering and agent tooling, and what they change about how software actually gets written.
The stack
6+ years in PHP and Laravel, React and Next.js, MySQL and Redis — plus the Docker images and AWS wiring that carry them to production.
I design and build the systems behind the screen: schemas, APIs, queues and background jobs, written in PHP and Laravel, fronted with React and Next.js, and held up by MySQL, Redis, Docker and AWS. At weDevs that work runs on thousands of live stores, which is a good place to learn that a design either holds or it does not.
The work I enjoy most sits where system design meets performance: finding the query that got slow as the data grew, drawing a boundary that makes a feature testable, and leaving code the next person can read. Most of what I write about started as one of those problems on a Tuesday afternoon.
Experience
Software Engineer L2
weDevs · Nov 2024 - Present
Software Engineer
MononSoft / JMI Group · 2021 - 2024
Junior Software Engineer
MaxSOP · 2020 - 2021
Education
BSc in Computer Science & Engineering
Southeast University · In progress
Skills & Tooling
The stack I reach for day to day, ordered by where each piece sits in a system.
- PHP
- Laravel
- WordPress
- TypeScript
- JavaScript
- React
- Next.js
- Vue
- Nuxt
- Tailwind CSS
- Node.js
- Express
- MySQL
- PostgreSQL
- Redis
- Firebase
- Docker
- AWS
- Nginx
- Linux
- Git
- GitHub Actions
- REST APIs
- Queues & Jobs
- Caching
- Query tuning
- System design
- Marketplaces
- Testing
- Code review
Open Source
Work merged upstream, and the tools and experiments I build in the open.
Merged Upstream
Add auto-space in blade syntax
Laravel's official VS Code extension
Blade delimiters now space themselves: typing `{{`, `{!!` or `{{--` inserts the inner padding and leaves the caret between it, so the braces come out formatted instead of being fixed up by hand afterwards. Shipped as an opt-out setting and scoped to Blade files, so it cannot disturb any other syntax.
- TypeScript
- VS Code API
- Blade
+139 −1 4 files merged
Projects
Real-time App
RTK Chat App
A real-time chat platform in a Turborepo monorepo: a React 19 client with Redux Toolkit and RTK Query over an Express API, messaging on Socket.IO, and one-to-one and group video calls over WebRTC behind JWT auth.
- React
- Redux Toolkit
- Socket.IO
- WebRTC
Web App
Browser Terminal
A web SSH client: xterm.js in the browser talking over socket.io to an ssh2 session on the server, so a shell is one URL away with no local client installed.
- TypeScript
- ssh2
- Socket.IO
- xterm.js
WordPress Plugin
WP Debug Suite
An all-in-one debugging toolkit for WordPress: query and hook inspection, log viewing, and site introspection from inside wp-admin, so a problem can be traced without shell access.
- PHP
- WordPress
- JavaScript
AI / Retrieval
Smriti AI
Question answering over your own documents, held to two rules: answer only from the retrieved passages, and cite them. Uploads are chunked and embedded with Gemini into PostgreSQL via pgvector, and a question that the corpus does not cover gets a refusal rather than a guess.
- Laravel
- React
- pgvector
- Gemini
Web App
TypeOn
A typing practice platform with real-time per-keystroke feedback, accuracy and speed history, and progress tracking across sessions.
- TypeScript
- Next.js
- Tailwind CSS
Backend System
Task Queue
A PHP 8.2 background job system built from scratch: worker management, distributed processing, delayed and scheduled jobs, retries, and a real-time monitor for the queue.
- PHP
- Redis
- Queues
- PSR-4
The professional, client-facing work lives on the resume.
View resumeLatest Articles
Notes on the systems I build and the problems they threw at me.
13 min readYour cron ran twice: why exactly-once scheduling does not exist
A job runs at midnight for four years, then runs twice with no deploy. The prime suspect is a daylight-saving fall-back, but there are eight others — clock steps, duplicate schedulers, catch-up controllers, lost acks. How to tell them apart from the logs in ten minutes, and why the real fix is a run key with a unique index rather than a better schedule.
Intermediate- Scheduling
- Reliability
- Distributed Systems
- Operations
12 min readYour authenticator works in airplane mode: how TOTP really works
The 6-digit code is never transmitted — it is derived. A full walk through RFC 6238: the shared secret exchanged once at enrolment, the time step, HMAC-SHA1 and dynamic truncation, the verification window and clock drift, replay prevention and rate limiting, plus the attacks TOTP does and does not stop.
Intermediate- Security
- Authentication
- Cryptography
- MFA
12 min readThe auth service is down and users are still logging in: how stateless auth works
A backend interview question with a precise answer — the auth service sits on the issuance path, not the verification path. How locally verified signatures, JWKS caching and asymmetric keys keep requests flowing, exactly which operations are already broken, the revocation you traded away, and how to design the degradation deliberately.
Intermediate- Authentication
- Security
- Reliability
- System Design
Have something in mind? Start the conversation.
Whether it is a product to build, a system to untangle, or just a question about the work, send a note and it lands straight in my inbox.