- Client
- Lumtri — in-house product
- Type
- Consumer marketplace
- Market
- Aklan, Philippines
- Status
- Beta, 2026

- Product strategy
- UX & interface design
- Full-stack engineering
- Database & trust architecture
- Payments & subscriptions
- Infrastructure & ongoing operation
- Next.js 16
- TypeScript
- Supabase / PostgreSQL
- Tailwind CSS 4
- shadcn/ui
- TanStack Query
- Zustand
- PayMongo
- Web Push
- Vercel
The problem
Second-hand trade in Aklan already happens. It happens in community group chats, in long comment threads, and in messages that begin with the words "still available?". Demand is not the missing piece.
What is missing is structure. A group chat has no search, so the same item gets posted over and over. It has no history, so a seller who took someone's money last month looks identical to one who did not. And renting has nowhere to live at all, because a chat thread cannot express a date range.
Building for one province rather than one country is the whole point. A listing in the next barangay should outrank one three hours away — and that is a ranking decision you can only make when the province is the market rather than a filter applied on top of one.
Safety as a schema decision, not a banner
Every marketplace tells you to meet in a public place. BaligyAklan ships a table of them — town plazas, municipal halls, PNP stations — created in the very first migration, with a deal's agreed meet-up point stored as a reference into it. Choosing where to meet is part of the transaction record, not advice someone scrolls past.
Phone numbers follow the same principle. Neither party sees the other's number until both have confirmed the same meet-up, and any change to the time or place resets both confirmations. Contact details are the reward for a mutual commitment rather than something handed out at first contact.
Sellers must pass ID verification before they can post at all. Buyers are verified later, at the point of commitment rather than at signup, because a marketplace that demands documents before you can browse has no browsers.
The rules live in the database
A deal moves through a fixed set of statuses — chat, offer, reserved, meet-up arranged, then one of several terminal outcomes — and those transitions are not enforced in application code. They are Postgres functions and triggers. A participant can open a deal, but cannot update one directly: every change after that goes through a checked procedure.
That closed a real hole rather than a theoretical one. Before it, a participant could set a deal's status to "meet-up arranged" by hand and trigger the phone reveal without the other side having confirmed anything. Entering that state now requires both confirmations and an agreed time, checked by the database rather than by the interface.
Row-level security is on for every table. Ninety-three migrations sit behind the product — roughly what it costs to make safety rules that hold rather than safety rules that are merely documented.
Three ways to list, one interface
Most marketplace software treats rent as a checkbox on a sale. It is not. A rental has a rate per day, week, or month, and a viewing rather than a handover — so the offer-and-counter-offer flow that fits a sale does not apply to it at all. Rates are negotiated in the chat instead.
So For Sale and For Rent are a top-level switch, and browse never mixes them. A third mode — stocked listings, for sellers with more than one of something — reuses the rental deal path but keeps sale wording throughout. All three are modes of one listings table rather than three parallel systems, which is why the interface stays legible instead of fragmenting into special cases.
It has to pay for itself
BaligyAklan Pro is priced at ₱149 a month or ₱1,490 a year, with the PayMongo checkout, signed webhook, and grant path built and proven end to end in test mode while the account clears live approval. The free tier is capped at ten active listings, enforced by a database trigger rather than a check in the interface.
Businesses can claim a verified shop identity by submitting a DTI, Mayor's, or Barangay permit for admin review — and renaming an approved shop sends it back for re-approval, so a badge cannot be earned under one name and worn under another.
Working out how a marketplace earns before launch is not an afterthought. It changes what you build.
When something goes wrong
Reports, warnings, bans, and listing removals all exist — and so do appeals. A user can formally contest a moderation decision or a rating, and an admin either overturns it or upholds it, with the reversal and the notification happening atomically. Banned accounts stay able to log in for exactly this reason: so they can appeal.
Trust badges are computed, never stored — derived on read from completed deals and the tags buyers leave on ratings. They cannot be granted, bought, or drift out of sync with the record underneath them.
Why this project is on this website
BaligyAklan is not a portfolio piece. It is a product we own, operate, and are on call for — the same stack and the same standards we bring to client work.
That is the point. When a business hires a young studio, the risk being priced in is whether we can survive contact with production: real users, real edge cases, real consequences for getting a trust rule wrong. We would rather answer that with something you can open in a browser than with a case study about someone else's logo.
- Listing modes
- Sale · Rent · Stock
- Coverage
- 17 municipalities
- Platform
- Installable PWA
- Operated by
- Lumtri