Work/Marketplace
BuyFinder
Post what you want and the price you will pay; sellers bid.
LiveLive.
WebInstallable web app
The problem
“I know what I want and what I will pay. Who can I trust?”
Finding a specific item in Nigeria means hours of scrolling classifieds, Instagram and WhatsApp, comparing prices and still not knowing who is real. Scams are common, and the whole burden of checking a seller falls on the buyer. Hard-to-find things, such as one TV model or a flat in a certain area, often cannot be found by browsing at all. Buyers' intent sits in private WhatsApp messages and "who has a plug" posts that nobody can search or protect. Sellers advertise into the void, and honest ones inherit the scam reputation of the platforms they use.
Who had it
- BuyersFind a specific item at a price they set, from sellers who can be trusted.
- Sellers and shopsReach buyers who already hold a price and want the item now.
- FindersSource an item for a request, and say openly that they are sourcing it.
- The BuyFinder teamSpot scams early and act on reports with a clear record.
What the answer had to survive
- Scams are common, so a buyer's contact details must be protected.
- Posting a request must take under two minutes on a phone.
- Safety rules must hold even if someone bypasses the screen.
- Login must work without a password to remember.
- Launch could not wait on outside approvals.
What we built
Post the item and your price; sellers come to you with sealed bids.
BuyFinder turns the marketplace around. A buyer posts what they want, one price they will pay and an area. Sellers who cover that category and area send one sealed bid each. A seller sees the buyer's price and the number of bids, never a rival's offer. Contact details stay hidden unless the buyer chooses to show them, and then only to a verified seller who has bid. The buyer picks a bid and the two close the deal themselves, paying on delivery. No money passes through BuyFinder. An AI screen reads every request and bid first.
AI inside BuyFinder
-
Reads every post before it goes live
AI screens every request and every bid. It rejects with a one-sentence reason, tidies the title and picks out brand and model. If the AI service is down, posting carries on.
What it does
For buyers
- Three-step request wizardCategory, description, one price, area and contact choice, built for a phone and aimed at under two minutes.
- Choose who sees contact detailsChat only by default, or share email or phone. Only a verified seller who has bid can see it.
- Compare sealed bidsBids appear side by side. Any above the buyer's price sit in a separate, collapsed group.
- Accept, chat and rateAccept one bid to open a chat, mark the request fulfilled, and rate the seller afterwards.
- Report a seller in one tapReasons include a scam attempt, a deposit request, a fake item, a no-show or abuse.
For sellers
- Quick onboardingChoose a role, give a name, phone number and consent, and start bidding as a new seller.
- Coverage by category and areaAlerts go only for matching requests, in categories and Lagos areas the seller chose.
- One sealed bid per requestPrice, condition, photos, location and delivery terms. A bid can be lowered once and never raised.
- Verified badge by phone callThe team phones the seller and confirms. The badge shows a person has checked.
- Public seller profileRole, badge, rating, completed deals and response time, made to be linked from social bios.
Trust and safety
- AI screen on every postEach request and bid is read before it is accepted. A rejection gives a one-sentence reason.
- Automatic pauses and suspensionsHeavy bidding pauses a seller. Repeated scam reports from different people suspend an account.
- Too-low bids held backA bid far below the buyer's price is held for review, because too good to be true is a scam sign.
- Safety remindersAfter posting or bidding, a reminder: inspect first, meet in public, never pay a deposit.
Public pages
- Public feed of requestsCategory chips, subcategories, an area sheet and search. Each card shows the item, price and bid count.
- Shareable request pagesRequest and seller pages made for social media, with no buyer identity shown.
- Email-code loginEnter an email, receive a six-digit code. No password to remember.
- Installable web appMobile-first, with a bottom navigation bar, installable to a phone's home screen.
For the team
- Metrics dashboardShare of requests with a bid within 24 hours, time to first bid, and open reports.
- Verification queueTap-to-call and WhatsApp links for each seller waiting for a confirmation call.
- Reports queue with audit logEach report shows context and actions, and every admin decision is recorded.
A day with it
- 1
Post a request
Choose a category, describe the item, state one price and area, and choose how contact is shown. Sign in with an emailed code.
- 2
Request is screened
The AI screen accepts it or gives a one-sentence reason. A safety reminder follows: inspect before paying.
- 3
Sellers are alerted
Sellers who cover that category and area are told. The buyer gets a one-time sign-in link when the first bid arrives.
- 4
Compare sealed bids
The buyer sees every bid side by side, accepts one and opens a chat with that seller.
- 5
Meet and pay on delivery
The two meet, the buyer inspects the item, and pays the seller directly. BuyFinder holds no money.
- 6
Mark fulfilled and rate
The buyer marks the request fulfilled and rates the seller. The seller rates the buyer.
How it works inside
A web app runs on one small cloud server behind automatic HTTPS. It uses a hosted database that enforces the safety rules itself. When a request is posted, database triggers match sellers and queue alerts. A scheduled job sends them, and a second one expires old requests.
Cut the network to see what this system does without it.This one lives on the internet, so it waits, like any website. Its staying power is on our side: backups, health checks and tested recovery.
On the device
- Browser or installed appBuyers, sellers and the team all use the same web app.
Our cloud
- Web app serverNext.js app behind automatic HTTPS, in a container.
- Scheduled jobsSends queued alerts every minute; expires old requests hourly.
Outside services
- Marketplace databasePostgres with row-level security, triggers and functions.
- Notification outboxTriggers queue every email so nothing is lost if sending is slow.
- Email-code loginSends and checks the six-digit codes.
- Photo storageHolds seller photos for bids.
- AI screenReads every request and bid; posting continues if it is down.
- Email serviceAlerts, login codes and one-time sign-in links.
Every part and every link, as text
- Browser or installed app — Buyers, sellers and the team all use the same web app. (on the device)
- Web app server — Next.js app behind automatic HTTPS, in a container. (our cloud)
- Scheduled jobs — Sends queued alerts every minute; expires old requests hourly. (our cloud)
- Marketplace database — Postgres with row-level security, triggers and functions. (outside services)
- Notification outbox — Triggers queue every email so nothing is lost if sending is slow. (outside services)
- Email-code login — Sends and checks the six-digit codes. (outside services)
- Photo storage — Holds seller photos for bids. (outside services)
- AI screen — Reads every request and bid; posting continues if it is down. (outside services)
- Email service — Alerts, login codes and one-time sign-in links. (outside services)
- Browser or installed app → Web app server: Secure web requests (needs internet)
- Web app server → Marketplace database: Queries under row-level security (needs internet)
- Web app server → Email-code login: Send and check codes (needs internet)
- Web app server → Photo storage: Photo uploads (needs internet)
- Web app server → AI screen: Screen requests and bids (needs internet)
- Marketplace database → Notification outbox: Triggers queue alerts (works offline)
- Web app server → Notification outbox: Reads queued alerts (needs internet)
- Scheduled jobs → Web app server: Send alerts, expire requests (works offline)
- Web app server → Email service: Sends queued email (needs internet)
The hard parts
Business rules that cannot be bypassed
- The situation
- A marketplace is only as safe as its rules. A rule enforced only on the screen is bypassed by anyone with a browser console.
- What we did
- Put the rules in the database. Sellers see only requests matching their coverage. Triggers pause a seller after 30 bids a day, suspend an account after three reports from different people in 30 days, and hold any bid under 40% of the buyer's price. Contact details come out through one checked function.
- The lesson
- The same rules apply to the web app, the admin panel and any future app.
A test that found what the screen would hide
- The situation
- Row-level security, guard triggers and function privileges interact in ways that are hard to see by clicking.
- What we did
- Wrote an end-to-end SQL test that plays buyer, two sellers, admin and anonymous visitor through the whole loop, asserting at every step. It caught a policy loop, a guard that reverted the system's own updates, access rights open to everyone, and a price leak at edge values.
- The lesson
- Dangerous defects in permissioned systems stay invisible until someone tests as each role.
Seller verification without a government gate
- The situation
- A national ID and selfie check looked like the safe default, but it needed paperwork that would have stalled launch and tied day one to outside systems.
- What we did
- Redesigned seller activation. A seller gives name, phone and consent, and can bid at once as a new seller. The team then confirms by phone before a Verified badge is shown. The ID route stays one setting away.
- The lesson
- Sellers start immediately, and the badge still means a person has checked.
AI as a gatekeeper, never a single point of failure
- The situation
- Free-text posts and bids can be spam, sales ads, illegal items, off-platform payment requests, or contact details hidden in a title.
- What we did
- Added an AI screen to every request and bid. It rejects with a one-sentence reason, tidies the title and picks out brand and model. It fails open: if the AI service is down or unconfigured, posting carries on.
- The lesson
- AI features that degrade gracefully are safe to put in the critical path.
The stack
- Apps
- Next.js 15React 19Tailwind CSS 4Installable web app
- Backend
- TypeScriptNext.js server actionszod input checks
- Data
- Postgres with row-level securityDatabase triggers and functionsPhoto storage
- Infrastructure
- One cloud server in LondonDocker ComposeCaddy for automatic HTTPSCloudflare DNS
- Services
- Amazon SES emailEmail-code loginAI screening model
- Testing
- End-to-end SQL test as each roleESLint
How it came together
- 1Model and specificationThe business model and the first-version specification were written.
- 2A proven databaseThe database was proven end to end and the app put on a cloud server.
- 3Live on its domainLogin moved to email codes, and the site went live over HTTPS with email delivery.
- 4The marketplace rulesEvery category, one price, sealed bids, contact controls and AI screening were shipped.
- 5Mobile firstThe whole interface was redesigned for phones first.
- 6Seller activationSeller activation was reworked: a details form, then confirmation by phone from the team.
