Capabilities in play How it was built
Capabilities in play: full-stack product engineering on Next.js and Postgres, security design with row-level policies covering every table, and interface work in a language that shapes the layout — the whole interface is in Bosnian, including the error messages raised by the SQL functions, which go straight to the user and are therefore written like sentences a person would say.
The decisions worth naming are the boring ones. Prices and stock live in database functions, so an amount cannot be forged from the browser and a sale cannot exceed stock. Photographs go from the browser straight to object storage, because a server action in Next has a 1 MB body limit and any real photo of a gym floor is larger than that; the action only records the path and the dimensions. Scroll animation is CSS with `animation-timeline: view()` and no library at all, because the public page is measured on PageSpeed and browsers without support simply show the content immediately — the correct state, not a fault.
Two things were left out on purpose. There is no card payment, because the gym takes cash and adding a card flow would have meant a fee, a terminal and a month of paperwork for a service nobody asked for. There is no QR check-in either — the schema leaves room for it, but shipping it before anyone needed it would have been a guess.
The screenshots on this page show demonstration data. Members, payments, figures and photographs were generated against a local database in order to show the system — none of them describe the gym’s real business.