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 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