You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A production-grade fashion e-commerce front end: full catalog, cart, coupons, checkout, order lifecycle and an admin console — built with TanStack Start, React 19, Tailwind v4 and TypeScript.
Vendoo is a luxury-minimal fashion storefront designed in and for Accra, Ghana. It ships a complete
shopping journey — discovery, product detail, wishlist, bag, coupons, checkout with Mobile Money, order
confirmation and order tracking — plus an admin catalog manager. Prices are rendered in Ghana Cedis
(GH₵) through a single formatting layer, and the whole interface supports a first-class dark mode.
The app is server-rendered (SSR) via TanStack Start on a Cloudflare Worker runtime, with per-route SEO
metadata, hydration-safe client state and an accessible, motion-aware design system.
Features
Storefront
Home — cinematic hero, collection grid, limited-drop countdown, editorial sections, trust bar.
# install
bun install # or: npm install# develop (http://localhost:8080)
bun run dev
# typecheck / lint / format
npx tsgo --noEmit
bun run lint
bun run format
# production build + local preview
bun run build
bun run preview
Demo credentials & codes
Purpose
Value
Admin sign-in
poundsghst@gmail.com (any name)
Coupons
VENDOO10, WELCOME20, SAVE50, FREESHIP
Payment
Any values — checkout is simulated (no real charge)
All colour, gradient and shadow values are OKLCH tokens in src/styles.css and consumed as semantic
Tailwind classes (bg-background, text-muted-foreground, border-border, shadow-soft,
gradient-hero, glass). No hardcoded hex or text-white/bg-black in components, so both themes stay
consistent by construction.
State & persistence
Client state lives in focused React contexts and is persisted to localStorage (vendoo-cart,
vendoo-orders, vendoo-products, vendoo-wishlist, vendoo-user, vendoo-theme, vendoo-coupon),
with cross-tab sync via the storage event and a seed-version guard so catalog updates propagate. All
storage reads happen after mount, keeping SSR and client markup identical.
Production readiness audit
Findings from a full pass over UI/UX, business logic, rendering and SEO, and what was done.
Area
Finding
Status
Hydration
Date.now() in the countdown's initial state produced a server/client mismatch (React #418)
Fixed — time reads moved into useEffect with a stable placeholder
Hydration
Coupon code read from localStorage during render in bag and checkout
Fixed — moved to post-mount effects
Hydration
Theme script mutates <html> before hydration
Fixed — suppressHydrationWarning on the shell element
Console
Preview console now reports zero errors across home, shop, PDP, bag, checkout, admin
Verified
Scrollbar
Default OS scrollbar broke the premium feel
Redesigned — thin, rounded, brand-tinted, accent on hover; .no-scrollbar utility for internal panes
Accessibility
Missing global focus treatment; motion could not be opted out of
Fixed — global :focus-visible ring and prefers-reduced-motion reset
SEO
Product pages emitted a generic "Product · Vendoo" title
Fixed — real product name, description, price, OG/Twitter image per product
SEO
All routes carry unique titles, descriptions and OG tags
Verified
Currency
Mixed dollar/cedi output
Fixed — single formatPrice source of truth in src/lib/format.ts
Commerce logic
Stock validated in the bag and re-validated at payment; stock decremented on order creation; coupon cleared after purchase
Verified
UX
Product card required a "configure" detour before adding
Fixed — direct "Add to bag" with default variant selection
Dark mode
Gradients and shadows washed out in dark theme
Fixed — dark-specific gradient/shadow tokens
Copy
Localisation to Ghana (Accra addresses, GH₵ thresholds, Mobile Money, Harmattan edit)
Done
Typecheck
tsgo --noEmit clean
Passing
Known limitations (by design, for the demo build)
Data is seeded and persisted client-side; there is no database, real auth or payment processor yet.
Admin access is allow-list based on the client; it is a demo gate, not a security boundary.
Checkout settlement is simulated; no PCI or MoMo API integration.
Roadmap
Backend — move catalog, orders and users to a hosted Postgres with row-level security; server
functions for order creation and stock decrement (authoritative, race-safe).
Real auth — email/OTP plus Google sign-in, server-verified roles in a dedicated user_roles table.
Payments — Paystack / Flutterwave for Ghana (Card + MTN MoMo + Vodafone Cash) with webhooks.
Transactional email — order confirmation, shipping and delivery notifications.
Newsletter — double opt-in capture with segmentation for drops.
Search — server-side, typo-tolerant catalog search with facets.
Analytics — funnel instrumentation (view → add → checkout → purchase) and Core Web Vitals.
Testing — Vitest unit coverage for pricing/coupons and Playwright end-to-end for the buy flow.
License
Released for portfolio and evaluation purposes. Product photography is placeholder imagery.
Vendoo. Considered essentials, designed in Accra — the wardrobe you keep forever.
About
Vendooo is a modern fashion e-commerce platform for discovering curated collections, exploring product details, saving favorites, managing a shopping cart, and completing secure purchases through a refined, editorial storefront experience.