Built end to end, then kept running.

A small studio in Malaysia. We build the whole thing: the database, the checkout, the admin panel your team actually uses.

Keep scrolling. Everything below is running live, not screenshotted.

Preparing scene

What this studio does, as a guided sequence

  1. Interfaces that hold. Readable, consistent, and cheap to change later.
  2. Taking payments. Checkout, stock and payouts that stay correct in four currencies.
  3. The whole build. Database, logic and interface. Built by the same hands, no handoffs.
  4. Machine learning. Models judged on the mistakes that actually cost something.

What we build

The things every project has to get right. Each one below is the real problem, running.

  • The whole build

    { …, paidAt, stripeFee }

    An order only carries what it actually has yet. A refund date on an unpaid order is not a bug to catch later; it cannot be written.

  • Taking payments

    218 sen → 9,418 IDR

    Card fees always come back in ringgit, whatever the customer paid in. Miss the conversion and every foreign order quietly reports the wrong profit.

  • Interfaces that hold

    The same component in all five. None of them were retrofitted.

  • Getting found

    Site map: So Google finds every page, not just the homepage

  • Moving a live system

    • wp_users
    • wp_postmeta
    • wp_posts
    • wp_options
    0 / 1,671 rows

    One table at a time, each verified before the next. A rollback is always one step back.

  • Machine learning

    • open85.9%
    • power88.9%
    • pinch79%
    • key68.6%

    Weighting costs aggregate accuracy and buys back the rare grips. For a prosthetic hand that is the correct trade.

Work

A mental health service, a clinical practice and a store. The hardest part of each one is on this page, running.

Live

Gunung

gunungclimbing.my (opens in a new tab)

Direct-to-consumer climbing gear for Southeast Asia. Storefront, inventory, checkout, and a four-market currency system, end to end.

Commerce that handles real money, real inventory, and four currencies in production.

Four markets, four currencies
MY · ID · SG · PH
The right country and currency picked automatically, and remembered. Rupiah prices drop the decimals, because rupiah does not have any.
Sells while you sleep
Stock stays honest
Inventory decrements on payment, not on add-to-cart, so two people cannot buy the last one.
Database changes since launch
14
Each one applied to a live store without losing an order.
Payments
Books actually balance
Card fees come back in ringgit whatever the customer paid in, and get converted before they hit the order.
  • Next.js 16
  • React 19
  • Supabase
  • Stripe
  • Vercel
RegionMYR
MYR189.00

MYR carries two decimals.

state

Real rates from the shipped storefront, and the button runs its real loading state when clicked.

Live

Consultant neurosurgeon

drsyedneuro.com (opens in a new tab)

A practice site for a consultant neurosurgeon in Malaysia: conditions, patient guides, publications, and a career timeline, all editable through a Supabase-backed admin area.

Patients read these pages before brain surgery. Accessibility and clarity were requirements, not preferences.

Written for patients, not doctors
18 pages
Conditions and guides rewritten from clinical sources into language someone can read the night before surgery.
Findable when it matters
Structured for search
Someone searching a condition at 2am finds the page, not the homepage.
Readability
Passes AA
Every text colour measured against its background; the faint greys were replaced.
Edits it himself
No developer needed
Conditions, guides, publications, photos and videos, all editable from a login.
  • Next.js 16
  • TypeScript
  • Supabase
  • Tailwind v4
  • JSON-LD
Condition searchtype a condition

Type a condition. At 2am, this is what Google shows — the page, not the homepage.

Live

SAPOT

book.sapot.app (opens in a new tab)

A peer support platform matching people with trained supporters who have lived experience. Rebuilt from WordPress: booking, payments, calendar sync and an admin area.

A live service with real bookings on it was migrated and rebuilt without losing an appointment.

Moved off WordPress
Nothing lost
Accounts and bookings carried into a new schema while the service stayed open.
Cannot be double-booked
Pattern plus exceptions
A weekly pattern, minus the days blocked off, minus what is already taken.
Consent and age
Recorded, not assumed
Stored per user, and under-age signups are logged rather than quietly refused.
Payments
Signed, not trusted
Callbacks are checked against a signature, so a forged one cannot buy a session.
  • Next.js 15
  • React 19
  • TypeScript
  • Supabase
  • Billplz
  • Google Calendar
Bookable hours5 open
  • 09:00Open
  • 10:00Open
  • 11:00Open
  • 12:00
  • 13:00
  • 14:00Open
  • 15:00Open
  • 16:00

The recurring pattern on its own. Turn on the other two to see what removes hours from it.

All 7 projects

What it’s like to work with us

From people we have built and shipped with.

In the many times I've worked with Alwi, he's always effectively led us to success. He's always mindful of our aims and objectives and keeps our team motivated towards reaching our goals

Ronit SarnaSoftware Developer

Alwi demonstrated exceptional agency right from the start. He quickly grasped our goals, took proactive steps without needing constant direction, and produced remarkable results in record time. We couldn't have asked for a better collaborator

Martynas PociusCo-founder, NarrativeScapes

Alwi is an independent thinker who helps problem-solve based on our needs. Rather than waiting for detailed instructions, he takes initiative to understand the challenges we face and works through them. He also delivers results quickly and reliably, keeping momentum going even when timelines are tight

Najiya IlyaCEO & Co-founder, SAPOT

Approach

The unhappy paths, first

What the screen does while it is loading, when the form is empty, when the payment fails. These get built alongside the normal case, because bolting them on later is how they end up missing entirely.

Change one thing, not fifty

Every colour, size and spacing comes from one place. Rebrand a site, tighten the spacing, shift the whole palette: one edit, not a week of hunting through files.

Checked, not eyeballed

On the neurosurgeon’s site, three greys looked fine and measured too faint to read for anyone with low vision. They were replaced. Patients read those pages before brain surgery.

Launching is the easy half

Gunung has had fourteen rounds of database changes since it went live, none of which lost an order or dropped the store. Most work happens after launch, and that is the part people forget to budget for.

Now change it yourself

The cards, the buttons, the type and the spacing you have scrolled past are all computed from five values. Drag them and the whole page retunes at once, live, without anything breaking.

Take the control panel

Have something that needs building?

Tell us what it is, what it has to do, and when it needs to be live. Work that is not a fit gets said so directly.

  1. Within two daysA reply either way, including no.
  2. Before any moneyA written scope with a fixed price and a date. If the scope changes later, the price changes with it, in writing, first.
hello@tempadigital.com