Work/01 · Featured

Malta.

Air freight SaaS replacing a legacy ERP — multi-tenant, AI-assisted, mobile companion shipped.

Year
2024 — 2026
Duration
18+ months
Client
Technema
Sector
Air freight · B2B SaaS
Role
Front · DA · UX/UI · Design System · Back-end
01Brief

Replace a 90s ERP. Ship a real product.

Air freight forwarders still run their warehouses on HFSQL/MALTA3 — a Windows-only ERP nobody wants to touch. Malta is the ground-up replacement.

The brief was simple, the scope was not: rebuild the ERP as a modern multi-tenant SaaS — warehouse operations, IAM, mobile, customs, billing — and ship it as one coherent product.

I joined as front-end specialist. I ended up owning the design direction, the design system, the UX/UI of every module, and progressively contributing to the back-end.

02Architecture

DDD, hexagonal, Turborepo.

Seven apps share fifteen-plus packages — including a custom @malta/design-system. Boundaries are enforced via ESLint, not Slack.

Apps in monorepo
7
WAREHOUSE · IAM · MOBILE · WORKER · ACCOUNTS
Packages
15+
DOMAIN · UI · INFRA
Tests
394
UNIT · INTEGRATION · E2E
Stack
Next + Nest
TYPESCRIPT EVERYWHERE

Infra ships on Kubernetes (Scaleway), autoscaled with KEDA on SQS, observable through Grafana + OpenTelemetry, provisioned via Terraform.

03Design System

50+ components, one voice.

The design system isn't a library — it's the contract that makes scale possible.

I built @malta/design-system before the first page was written: tokens, primitives, motion contracts, accessibility specs. The hardest part was enforcing reuse — every Sidebar, Sheet, OTP, Chart had to come from the system.

The result: a product that feels like one product, even with seven contributors shipping in parallel.

Components · documented · versioned50+Reused across 7 apps. Enforced by ESLint boundaries.
04Bill — Embedded AI

An assistant that ships actions, not just text.

Bill streams answers and triggers UI actions in the same breath. The conversation is the UI.

Bill runs on Groq + Llama 4 Scout with SSE streaming, rate limiting, and structured tool-calling. A user asks "Show transit shipments from CDG to DXB this week" — Bill streams the answer and updates the table filters in real time.

Stack & Architecture
Front-end
  • Next.js 15
  • React 19
  • TypeScript
  • Tailwind v4
  • shadcn/ui
Mobile
  • Expo SDK 54
  • React Native
  • NativeWind
Back-end
  • NestJS
  • Prisma
  • PostgreSQL
  • SQS
  • Groq SDK
Infra
  • Kubernetes
  • Terraform
  • KEDA
  • OpenTelemetry
05Mobile

A warehouse app that lives in pockets.

Operators don't sit at desks. They walk racks, scan barcodes, sign papers. The mobile app is built for them.

Built on Expo + NativeWind, mirrored design system, one-handed UX, glove-friendly tap targets, offline-first. Released on the Play Store.

06Results

What shipped.

Modules
12+
SHIPMENTS · CUSTOMS · BILLING
Components
50+
DOCUMENTED · VERSIONED
AI Assistant
Bill
GROQ · SSE · TOOLS
Platforms
3
WEB · MOBILE · WORKER
07What I learned

Beyond the front-end.

Malta forced me to stop thinking like a front-end specialist and start thinking like a product engineer. Lines blur at this scale — and that's the point. Owning the design system as a non-negotiable contract is what made it work.

Brand, design and code are the same product, written in different languages.

↳ Malta · 2024 — 2026