2025-12-28
8 min read
Build notes: from zero to live (what we built and what broke)
A sealed-offer marketplace shipped on Next.js, Appwrite, and Stripe. Here’s what we built, what broke, and what we learned.
This started with one goal: selling should feel calm. No last-second theatre. No public scoreboard. Just real offers, a clear deadline, and a seller choosing the buyer that actually makes sense.
What we built
- Sealed offers (“envelopes”) — buyers don’t see competing bids.
- Deadline → seller sees all offers at once.
- Seller chooses the buyer (price + profile + logistics).
- Private outcomes — sold price visible only to buyer + seller.
The parts that broke first
Real builds don’t fail in the headline — they fail in the edges. The weird states. The “what if…” scenarios. The half-complete flows.
- Deadlines and timezones (pick a source of truth and stick to it).
- “Winner chosen” vs “payment taken” vs “dispatch” — each must be explicit.
- Admin approval and partner onboarding (schemas + scopes + emails).
What we learned
Practical lessons
- Make every action a state transition with one clear owner.
- Never leave users stuck: always show a next step or a reason.
- Make rules visible: deadlines, decision windows, and fees.
Try the model once
Browse a listing and submit one proper envelope. You’ll feel the difference fast.
Related reading
FAQ
What stack powers Sealabid?
Next.js (App Router) on Vercel, Appwrite for auth + database, Stripe for payments, and a simple content layer for the blog.
What was the hardest part to get right?
Edge cases and state transitions: deadlines, decision windows, winner selection, payment timing, and making sure users never dead-end.
Why sealed offers instead of public bidding?
Because completion matters more than drama. Sealed offers reduce sniping, bidding wars, and regret-driven bids.
Related posts