Case studies

Selected builds where the engineering problem was clear, written up with the background and the reasoning behind each decision.

National R&D Project Analysis Pipeline
2025.03Finance & PublicNew Build

National R&D Project Analysis Pipeline

Researchers had to file a request to the development team every time they wanted to change anything in the pipeline, from data preprocessing to model inference. Given that this was a government research project where research direction changed often, researchers needed to be able to adjust the configuration themselves, without going through the development team.

Key technical decision

Broke everything from preprocessing to inference into individual nodes, connected together

Preprocessing steps and model combinations needed differed by researcher, so a single fixed pipeline wasn't enough. Making each step an independent node that researchers could pick and connect as needed meant they could try new experiment configurations immediately, without a development team request.

PyTorchRAGVector DB
Read the full case
Recruiting Matching Platform
2025.02HR & RecruitingNew Build

Recruiting Matching Platform

Recruiters read through every application submitted to a job posting one by one, judging fit against requirements manually. Review time grew with the number of applicants, and it was also cumbersome to record why a particular candidate was chosen.

Key technical decision

Showed the basis items alongside the fit score, not the score alone

A score alone left recruiters unable to explain why a result came out the way it did, so it couldn't actually be used in decisions. We broke the result down by which requirements matched and which fell short, so recruiters could use it as a basis for their final judgment.

Next.js.NETAzure
Read the full case
Fintech Settlement System
2024.11Finance & PublicNew Build

Fintech Settlement System

Staff reconciled transaction records from payment processors against bank deposit records by hand in spreadsheets, every day. As transaction volume grew, reconciliation started taking more than a day, and delayed closings began affecting the next settlement cycle.

Key technical decision

Did not auto-finalize reconciliation results; only exception cases required staff confirmation before closing

Since settlement involves real money, letting the system finalize automatically would delay catching errors. We split the flow so that transactions matching the rules were processed automatically, while anything outside the rules required a human to confirm and approve before closing.

.NET 8AzurePostgreSQL
Read the full case
Internal Document Assistant
2024.09Software & InfrastructureNew Build

Internal Document Assistant

The client wanted to search internal policies and technical documents, but a security policy prohibited uploading documents to external LLM services. They needed a way to answer questions directly without documents ever leaving the company.

Key technical decision

Built a language model that runs inside the internal network instead of an external LLM

Keeping documents from leaving the company was the core requirement. Placing the model on internal infrastructure let both queries and documents stay within company boundaries.

LLMRAGVector DBPython
Read the full case
Franchise Headquarters Portal
2024.07Retail & LogisticsNew Build

Franchise Headquarters Portal

Headquarters received operating metrics from each franchise store separately, so judging which stores needed more support meant staff compiling reports every time.

Key technical decision

Had stores enter metrics themselves, with headquarters adding a final review step

Stores knew their own on-the-ground data best, but trusting entries as-is meant input errors would flow straight into the metrics. We added a headquarters review step after store entry, balancing data accuracy against the burden on store staff.

Next.jsTypeScriptPostgreSQL
Read the full case
Smart Factory Equipment Monitoring
2024.06Manufacturing & EnergyNew Build

Smart Factory Equipment Monitoring

When equipment developed a problem, no one knew until a floor worker spotted it visually. Equipment signals were captured in the PLC, but there was no screen to aggregate and view them.

Key technical decision

Collected equipment signals over MQTT instead of HTTP polling

Equipment PLCs pushed out hundreds of signals per second, and polling for status at a fixed interval simply dropped whatever occurred between polls. We introduced a broker and switched to a publish model where equipment pushed signals, so they could be received in order without loss.

PythonMQTTAzure
Read the full case
Delivery Control System
2024.03Retail & LogisticsNew Build

Delivery Control System

Dispatchers checked where a delivery vehicle currently was and whether it was running late by phone. As the fleet grew, phone-based tracking reached a point where it simply didn't work anymore.

Key technical decision

Separated vehicle location collection from delay detection logic

Location collection needed to run continuously without interruption, while delay detection was a separate calculation factoring in route and schedule. Separating the two roles kept the location collection pipeline stable while letting delay detection logic be improved independently.

PythonNext.jsAWS
Read the full case
Power Usage Monitor
2024.02Manufacturing & EnergyNew Build

Power Usage Monitor

Each site only saw its power usage through the month-end bill, so even with a reduction target in place, there was no way to check progress mid-month. Usage spikes could not be caught as they happened, which also delayed identifying the cause.

Key technical decision

Used TimescaleDB for time-series data storage

Power usage data collected at short intervals per site grew massive over time, and comparisons later needed to span periods — for example, against the same time last year rather than this month. We used a structure built for time-series data to keep period-based aggregate query performance workable.

PythonNext.jsTimescaleDB
Read the full case
Production Management Board
2023.09Manufacturing & EnergyNew Build

Production Management Board

From order intake to shipment, tracking which stage each process was at relied on a shop-floor whiteboard and staff memory. As the number of processes grew, it became harder to tell which stage was currently causing delays.

Key technical decision

Moved the whiteboard approach directly into a board-style screen, while designing the underlying data structure from scratch

Floor staff were already used to checking on process stages by moving items across a whiteboard. We kept the familiar interaction on screen while redesigning the underlying data to preserve process-transition history, so we could later trace which process stage delays repeated at.

Next.jsTypeScriptPostgreSQL
Read the full case
Video Editing Tool MVP
2023.04Software & InfrastructureNew Build

Video Editing Tool MVP

The client wanted video editing to happen entirely inside the browser. They needed an initial version that handled layers and a timeline without installing any desktop editing software.

Key technical decision

Implemented canvas rendering with WebGL

With multiple layers stacked and everything needing to redraw on every timeline scrub, plain Canvas 2D got sluggish as layers increased. Moving to GPU-backed WebGL kept the editor responsive even as layer count grew.

ReactWebGLNode.jsAWS
Read the full case
Retail Inventory Management System
2022.09Retail & LogisticsLegacy Modernization

Retail Inventory Management System

Each store kept its own separate inventory ledger. For headquarters to see overall inventory, staff had to call stores or compile spreadsheets, and in the meantime actual stock and the ledger kept drifting out of sync.

Key technical decision

Kept the existing accounting system as-is, syncing inventory data through an API only

Rebuilding the accounting system would have meant re-validating tax handling as well, which was too risky. It was safer to build only the inventory management piece new and hand off just the figures accounting needed at closing, via API.

C#ReactAWS
Read the full case
Screen Golf Franchise Control Tower
2021.06Consumer & LeisureNew Build

Screen Golf Franchise Control Tower

The client was a headquarters running screen golf stores nationwide as a franchise, but equipment status and sales data existed only on each store's local PC. If a store's equipment stopped, headquarters had no way of knowing until a customer complaint call came in.

Key technical decision

A resident agent on each store PC that pushes status to a central PostgreSQL server

Store internet quality varied by region, so a central server polling each store for status meant some stores responded slowly or not at all. Switching to a push model, where stores send status first, meant even stores with unstable lines reported in at a minimum interval.

PythonReactPostgreSQL
Read the full case

All 24 projects are listed in the portfolio.

View the full portfolio

Working on something similar?