Skip to content
All projectsProduct2023

Laminastore

A game top-up storefront, built end to end because I wanted to.

Interface

  • Representative interface still for Laminastore
  • Representative interface still for Laminastore

Representative interface stills.

Role
Solo
Organisation
Personal project
Period
2023
Stack
  • Next.js
  • TypeScript
  • Tailwind
  • Express

Short explanation

Laminastore is a game top-up storefront — buy credit for a game, pay, done. I built the storefront, the API behind it and the admin surface for running it, because I wanted to know what a complete product felt like rather than what a complete frontend felt like.

  • Storefront in Next.js, TypeScript and Tailwind.
  • A backing API written in Express rather than a hosted backend.
  • A separate admin dashboard for catalogue and orders.
  • Open source — two public repositories.

Why it exists

Buying game credit in Indonesia meant slow, cluttered, ad-heavy sites. I wanted to see whether the whole flow — browse, checkout, fulfil — could be made fast and quiet instead.

The honest second reason: I'd built a lot of interfaces for other people's backends and wanted to find out which of my API frustrations were the backend's fault and which were mine.

Three surfaces, one product

Storefront

The customer-facing half — catalogue and checkout.

Express API

Written rather than rented.

Reaching for a hosted backend would have shipped faster. Writing it meant making the decisions myself: what the resources are, what the endpoints return, where validation belongs.

Admin dashboard

A separate surface for the person running the shop.

The part that's easy to skip on a personal project, and the part that turns it from a demo into something operable.

What it taught me

That the interesting decisions are at the seams. Designing an API for a screen I was also building made it obvious how often I'd been handed endpoints that were shaped for the database instead of the view — and how easy that is to do when you never see the interface.