Government software doesn't have to feel like government software.
I design for real operators — non-technical staff navigating these systems every day. UX grounded in direct requirement discovery, not assumptions. Certified in product design, UX, and design thinking (Simplilearn, Accenture, Le Wagon, CPD).
0+
UX certifications
0
enterprise products designed
0
client projects shipped
Good architecture is invisible. Bad UX isn't.
I design the parts people touch — forms, flows, and dashboards that non-technical operators finish without a manual.
In this world
Before / afterUI galleryDesign system
5+
UX certifications
4
enterprise products designed
Before / after
Same data. Different respect for the operator.
Government tools are usually built for the database, not the human at the desk. Drag to compare the default with the redesign — bigger type, plain language, and a flow that finishes without a manual.
New allocation
Assign items to an institution. We'll check stock for you.
✓ Stock reserved for 8 hours — you can review before confirming.
Reserve & reviewSave draft
After · the redesign
ALLOCATION ENTRY FORM (MODULE: MPDD_ALLOC_V1)
INST_ID *
select...
ITM_CODE *
QTY_ALLOC *
0
BENEF_TYP
select...
RMK_TXT
ERR: QTY_ALLOC must satisfy AVAIL_BUCKET constraint [code 4012]
* mandatory. Use ALL CAPS codes. Contact admin for INST_ID mapping.
Before · the default
Process · operator-first UX
Good design is invisible to the operator
I design enterprise software for people who never chose to use software — university registrars, estate managers, hostel admins. If they need training, the design failed.
01Discover
Shadow the operator
Before opening a design tool, I sit with the people using the system.
Real example ↓For MPDD, I paired with store-room staff during a high-volume allocation week — 200+ daily issues. They were using 12 clicks per allocation and reading jargon (DB field names, not what they call things). That discovery drove the entire v2 UX.
02Define
Map the model to the mental model
What the schema calls it and what the user calls it are usually different. Both need to be correct.
Real example ↓The Estate module has a strict hierarchy: building→floor→room. University admins call them "blocks", "levels", and "units". The DB stays normalised; the UI speaks their language. I maintain both in the same component layer.
03Design
Design for real constraints
Minimum 15px type. Drawer-based CRUD. Errors that say what to do, not just what went wrong.
Real example ↓For Affiliation's bulk import, the original design showed a generic "row 47 failed" message. I redesigned it to show the exact column, the value, and the fix (e.g. "Programme code 'CS-01' not found — check your masters list"). Support tickets dropped visibly.
04Validate
Measure by adoption, not screenshots
The test is: can a non-technical operator finish the task without asking anyone?
Real example ↓For the eHousing module, the success metric was zero training-support calls in the first week after rollout. The allocation flow was redesigned twice based on shadowing sessions until that bar was cleared.
The gallery
Things I've shipped
Enterprise modules open a screen carousel; client builds link straight to the live site.
MPDD
Material distribution, inventory & dispatch
End-to-end kit procurement, inventory and dispatch for university material distribution — rebuilt from the schema up.
FIFO inventory with a 4-bucket stock invariant (available / reserved / allocated / in-transit)
11-state allocation lifecycle with an append-only status log
Procurement pipeline: Purchase Request → Purchase Order → Goods Receipt
The lifecycle for colleges seeking affiliation to a university — applications, committee audits, automatic fees, and statutory reporting. 63 models, 30+ controllers.
Automatic fee & billing engine — prices each application from configured fee heads (flat / per-course / per-subject) + date-windowed late fees, emitting an itemized bill
Background job queue for bulk exports — streaming XLSX → S3 with live cron progress
Committee workspace with configurable audit / inspection forms & scoring
Provisional affiliation certificates (A / B)
Per-programme intake-capacity range configuration
Streaming Excel→S3 export: 25k rows/sheet, chunked flush, GC + an 85%-memory-threshold guard and retry/backoff — exports hundreds of colleges without OOM.
Yii2 (PHP)MySQLPhpSpreadsheetAWS S3yii\queueRBAC
6 screens
Estate
Physical-infrastructure asset management
The university estate as a hierarchical asset register — buildings, floors, rooms, roads and civil works — with cost estimation and analytics.
Hierarchical register: building → floor → room → washroom → house → road → block
Scenario-driven 4-step building form (profile → structural → facilities → cost + geo)
Colour, type and shape live as tokens so every screen stays consistent and themeable — the same discipline powering this site's three worlds.
Colour
Accent
--accent
Secondary
--accent-2
Tertiary
--accent-3
Surface
--surface
Foreground
--fg
Type scale
Display / 48
Aa
Heading / 30
Clarity
Body / 16
Readable at a desk, not a demo.
Caption / 12
Operator-first
Shape & components
8px
14px
22px
PrimarySecondaryChip
Let's connect
Open to the right opportunity.
Full-stack engineer with 3.5 years building national-scale systems. Growing into Product and Gen AI. If you're working on something interesting — reach out.