-
Notifications
You must be signed in to change notification settings - Fork 0
Door Listings
Sell doors — used trade-ins, in-stock units, quick-ship specials — straight
from the app onto your marketing site. Doors for Sale is the in-app
surface; a public JSON feed is what your website reads. Design rationale:
door-listings-website-plan.md.
A listing is one physical door sold once (deliberately not an inventory SKU): size and specs, photos, a listing type (used / in-stock / quick-ship), a condition grade (new / like-new / good / fair), and a price shown either as a fixed number or as "call for price".
draft → published → sold
▲ └──→ archived (withdrawn unsold)
pending_review ──→ published / rejected (with a reason)
-
Office listings start as drafts and go live when published. Only
publishedlistings are ever publicly visible. -
Tech submissions — the mobile app has a photo-first field capture
screen: a tech spots a saleable trade-in on site, shoots it, and submits.
Submissions wait in
pending_reviewuntil the office publishes or rejects (with a reason); the submitter can keep editing until it's published, after which the listing belongs to the office. - Sold keeps the listing for history but removes it from the site; archived withdraws it without a sale.
The office grid (nav: Doors for Sale) manages the whole board — edit, photo management, publish/reject, mark sold. Publishing is its own permission, so who can put things on the public website is an explicit grant, separate from who can draft listings.
The feed is a plain unauthenticated JSON endpoint (published listings are public by definition — a key here would be ceremony):
GET /public/door-listings.json # the feed
GET /public/door-listings/<photo>.jpg # photo bytes
It returns only published listings — your stock ranked above consignment
doors — with specs, price display, and photo URLs. Point your site's
server-side render (or a static-site build) at it and the "used doors" page
maintains itself: publish in the app, it's on the site; mark sold, it's
gone. No webhook, no redeploy. (A keyed twin, GET /api/v1/listings with a
listings:read-scoped API key, exists for callers that already
authenticate — see Website Lead Intake for how keys
are minted.)
- Technician Mobile App — the field capture screen.
- Inventory & Purchasing — stocked parts (a different thing: catalogs and stock levels, not one-off sales).
- Website Lead Intake — the other website↔GDX wire.