ENGINEERING DIGITAL SYSTEMS

Surf Start a Project
Back to insights
Product·March 28, 2026·7 min read

Building Qliina: What a Laundry SaaS Taught Us About Africa

Lessons from building a SaaS platform for an industry that doesn't read SaaS playbooks — laundromats, dry cleaners, and the corner shop that does both.

Surf Engineering
writing from Port Harcourt

When we tell people we built a SaaS platform for laundries, we usually get one of two reactions. Engineers say "how big can that market actually be?" Operators say "how soon can I have it?"

That gap — between what the tech world assumes about an industry and what people actually working in it need — is where Qliina was born. And it's where we learned more about building software for Africa than any product we'd shipped before.

The world's most underrated industry

In Port Harcourt alone, there are over four hundred laundry operations of various sizes. From the woman with two washers behind her flat to the eight-branch chain with corporate clients. Most of them are still tracking orders on paper. The successful ones have moved to WhatsApp. A handful use spreadsheets.

None of them have a system designed for them. The "POS" software they get sold is generic retail software with a laundry skin. It doesn't know what delicate cycle means. It doesn't understand that a single order can have 23 items from 4 customers being processed at 3 different stages simultaneously. It doesn't speak the language.

We spent six weeks before writing a line of code just shadowing operators. Watching what they did. Asking why. Most of what we ended up building wasn't on our original spec sheet.

The unexpected things that mattered

A few examples of what we missed in our first sketch and only learned by watching:

Tags, not orders. Laundries don't think in orders. They think in tags. A tag is a unique identifier physically pinned to a garment. It belongs to a customer, sure, but the tag is the unit of work. We rebuilt our data model around tags. Suddenly everything got simpler.

Stage transitions are public. When a customer walks in to drop off a shirt, three people are watching the transaction — the operator, the customer, and the next-in-line customer learning what to expect. The UI has to be readable across a counter. We tripled our font sizes. We added giant color-coded badges. We removed half the labels and made the icons louder.

Receipt printers are the API. Half the operators don't have smartphones at the counter. They have a thermal printer connected to a tablet. Our "send notification" function isn't an email — it's a print job. We learned ESC/POS so the platform could speak to printers as a first-class output.

SMS still wins. WhatsApp is universal but inconsistent. SMS gets through. For order-ready notifications, we default to SMS with a WhatsApp fallback. Our delivery rates went from 76% to 98%.

The tech stack, briefly

For those curious — we built Qliina on:

  • Nuxt 3 for the operator dashboard (now migrating to Nuxt 4)
  • Vue Native + Capacitor for the customer mobile app
  • PostgreSQL with Prisma as the data layer
  • Hono on Cloudflare Workers for the API
  • Cloudflare R2 for image storage (every tag gets a before/after photo)
  • Termii for SMS, with Twilio failover for international

The stack choices were boring on purpose. The interesting work was never in the framework.

What we got wrong

Plenty.

We launched with a beautiful customer-facing app and a half-built operator dashboard. We had it backwards. Customers don't need an app — they need their clothes back clean. Operators need the platform to run their business. The operator dashboard is now five times the size of the customer app and gets 95% of our engineering time.

We also priced wrong. We launched with per-order pricing, thinking we'd scale with our customers. Turns out laundry operators hate variable costs more than almost any other business owner. They want to know their monthly bill. We moved to flat tiered pricing in month three. Conversions doubled.

The bigger lesson

You can't build great African software from a textbook. The textbook assumes broadband, smartphones, predictable payment rails, low cash usage, and customers who'll wait six seconds for a page to load. Some of those are true here. Most are not.

What works is sitting in a laundry shop on a Wednesday morning, watching one woman handle a queue of seven people while folding a basket of shirts. Then asking: what would help her?

The answer is rarely what's in the framework.

Got an idea worth building?

Whether you're building in Africa or sourcing engineering talent from it — let's sketch it together.