Carta Operum
Survey chart of the island of Pinafore. Its places are the app's features.

Gazetteer ◆ Island the second

Pinafore

a shop for children's clothes

Year
2026
Role
Flutter Developer
Platforms
iOS, Android
Stack
Flutter, Riverpod, go_router, Serverpod, PostgreSQL, Docker, S3-compatible storage, Laravel/Filament

Log of the voyage

The brief

The app had to be a whole shop: a catalog shoppers can search and filter, product pages that tell the truth about what is in stock in each size, a cart that survives closing the app, checkout with local delivery and payment, and an admin panel to run it all.

The course we set

A Flutter client with Riverpod and GoRouter talks to a Dart backend on Serverpod and PostgreSQL, running in Docker, with images in S3-compatible storage. The shop owner manages categories, products and promotions in a Laravel and Filament admin panel, and the app reads them live.

The landing

The finished shop has a home feed with live promos, a category catalog with product counts, a product grid with price, size and colour facets and six sort modes, product pages with a gallery and ratings, a persistent cart, checkout with a carrier branch picker and four payment methods, and order history with live statuses.

Plates

Pinafore, in its own colours

The home feed: promotions, new arrivals and popular picks
Plate I. The home feed: promotions, new arrivals and popular picks
A product page bound to real stock, sizes and colours
Plate II. A product page bound to real stock, sizes and colours
Four ways to pay, and the order summary below
Plate III. Four ways to pay, and the order summary below
Engraving: a sea serpent circles a lighthouse at sea
Plate IV. The Size-Stock Serpent coils about the Promo Lighthouse

The Size-Stock Serpent

A child's dress comes in several sizes and colours, and each combination has its own stock. A product page that shows only a total sells a size that is gone, and a scheduled discount must start on time, not early.

How it was tamed

Product pages are bound to real per-size stock from the backend, so the size and colour pickers only offer what can be bought, and the price on the page already reflects any scheduled discount. The cart persists between sessions, and the catalog filters on the same facets: price, size and colour.

Soundings, counted in the finished app

  • 4payment methods at checkout
  • 6sort modes on the product grid
  • 3filter facets: price, size and colour