Doora is a local-services marketplace concept: think "Uber for tradespeople." Customers say what they need — an electrician, a plumber, a generator technician, a hairdresser — and see verified, rated workers nearby, message them, agree on a job, and pay/rate once it's done. Workers get a public profile, a stream of nearby job requests, and a shopfront they don't have to build themselves.
This repo is a Next.js (App Router + TypeScript) implementation of that
product, ported over from an original set of static HTML/design-comp
mockups (landing page, auth flow, customer dashboard, worker dashboard).
It's a fully interactive front end — every flow below actually works in the
browser — but it currently has no backend: it's meant as a working
prototype/demo you can deploy and click through today, with a clear seam
(lib/auth.ts) for wiring up a real API and database later.
- Customers — post what they need, browse/filter workers by category, request a job, message the worker, track status (Pending → Accepted → In progress → Completed), and leave a review.
- Workers — sign up, pick service categories, set a location/radius, submit ID + portfolio for verification, then manage incoming requests, their public profile, portfolio, earnings, and reviews.
/— marketing landing page (hero, how-it-works, service categories, trust & safety, worker pitch, testimonials)/auth— sign in / sign up (role toggle: customer or worker), forgot password, and the 3-step worker onboarding (skills → location → ID/ portfolio verification)/dashboard/customer— home, find a worker, my requests (with a request detail + messaging view), messages, reviews, settings/dashboard/worker— home, requests (new/active/history tabs), my profile (with a live preview card), portfolio, earnings, reviews, settings
- Next.js 16 (App Router) + TypeScript, deployed as static-friendly pages — no server runtime required to view the app
- Styling ported directly from the original design's CSS custom properties
(see
app/globals.css) via a smallsx()helper (lib/sx.ts) that turns inline CSS-text strings into React style objects, so the original visual design carried over faithfully - Light/dark theme, fully responsive (desktop sidebar nav collapses to a mobile drawer)
No backend yet. Accounts are created and verified entirely in the browser:
passwords are hashed (SHA-256 + a per-account random salt, via the Web
Crypto API) and stored in localStorage alongside the account — never in
plain text, and nothing is sent to a server. See lib/auth.ts for the full
sign-up/sign-in/session API; swapping it for real API calls later shouldn't
require touching the UI much, since every page already goes through this
one module.
Jobs, messages, reviews, and earnings are seeded with realistic sample data and are fully interactive (accept/decline a job, step through status, message back and forth, leave a review) but only the account itself persists across page reloads — the rest lives in React state for the current session.
npm install
npm run devOpen http://localhost:3000.
See DEPLOY.md for step-by-step Vercel + Cloudflare (doora.live) setup.