- Type
- Consumer marketplace, live
- Stack
- Next.js 15, React 19, Fastify 5, BullMQ, Prisma, PostgreSQL, Redis, Stripe
- Hosting
- Oracle Cloud, Docker Compose, Caddy with automatic HTTPS
- Status
- Live at goodhour.shop, in active development
This is one of Equality Software’s own products, built in-house with our ADLC method. It is not a client engagement.
The problem
Hotels, car hire and travel services are sold by the night or by the day, yet many people need them for a few hours: a room between flights, a van for an afternoon, a guide for a morning. Hosts also have idle hours they cannot sell. We wanted a marketplace for hourly bookings where AI helps both sides without ever being trusted blindly with money.
What we built
A modular monolith in one TypeScript codebase: a Next.js web app, a Fastify API split into modules with enforced boundaries, a BullMQ worker for background agent jobs, and a Prisma data layer on PostgreSQL. Travellers can pay instantly or post a request and run an AI reverse auction; hosts get verified listings, reviews, per-booking messaging and receipts.
How governance is built in
- Every agent call is logged. Each agent has exactly one function that calls the model, and it writes a decision log row on success and on fallback, so real and fallback decisions can be told apart.
- Hard limits on the server. Prices, budgets and exchange rates are bounded in code, never left to the model.
- Safe fallbacks. If the model times out or is unavailable, each agent falls back to a deterministic rule (static rate, lowest price or market rate) and the marketplace keeps working.
- Honest localisation. Forty locales are registered, each with a status that tests enforce, so the app never claims a translation it does not have.
Delivery
Good Hours runs on an Oracle Cloud server with Docker Compose and Caddy for automatic HTTPS. Pushing to the main branch deploys automatically within minutes. The same server now also hosts this website.
What it shows for clients
AI can make real commercial decisions safely when the boundaries are in code: clamp what the model can change, verify what it returns, log every decision and keep a human in the loop where money moves. We apply the same approach in agentic AI development.
