A private wardrobe and outfit decision companion, adapted from
tandpfun/wardrobe.
Smart Wardrobe turns selected personal photos into a confirmed virtual wardrobe, then recommends three owned-clothing outfits based on occasion, desired appearance, weather, and transparent preference memory. Complete-outfit visualization is on demand. A narrow, disclosed retail suggestion can appear only after an independent wardrobe-gap assessment.
The product contract, 47-requirement MVP specification, target architecture,
and guided-beta evidence plan are in docs/product.
apps/web/ React/Vite mobile-first PWA
apps/api/ authenticated Node API
apps/worker/ asynchronous jobs and lifecycle work
packages/domain/ rules and state machines
packages/contracts/ versioned schemas
packages/providers/ external-service adapters
supabase/ Postgres, RLS, Storage, and local migrations
tests/ synthetic verification suites
The original Wardrobe gallery, item editor, import review, responsive CSS, Sharp image cleanup, prompt patterns, and PWA shell are preserved and migrated incrementally. Shared local JSON/files, browser-only edits, one shared identity image, and Vite middleware are not the target multi-user architecture.
The current local stack includes private signed photo intake, strict image validation, durable synthetic extraction jobs, candidate correction and duplicate review, source-photo cleanup, and a server-owned wardrobe. Cloud AI providers remain disabled by default and require a separate cost approval.
Confirmed wardrobes can now produce up to three owned-only outfit options from occasion and desired appearance, with optional manual/coarse weather, transparent constraints, evidence-bound explanations, and simple refinements. The deterministic engine remains available when weather or reranking providers are disabled or fail.
Members can mark an option as worn, save it, or reject it with an optional private note. The app keeps explicit preferences separate from cautious inferences and exposes what it remembers, why, where it applies, and how confident it is. Corrections, suppression, and deletion take effect on the next decision without erasing the source decision history.
See it on me is deferred until a member explicitly chooses it for one outfit. Identity photos and generated results use separate private assets with consent, suitability checks, exact owned-garment references, fidelity review, and replacement/deletion controls. The cloud image provider is disabled by default; local validation uses synthetic fixtures only.
After an outfit result, an independent owned-wardrobe gap check may show one compatible addition. The local catalog is clearly synthetic and cannot link to a retailer; commercial terms are excluded from gap detection and daily outfit ranking. Funnel stages remain distinct so a save, outbound visit, self-report, and attributed purchase are never conflated.
Privacy & account controls provide a reconciled portable JSON export, default-deny time-bounded support sharing, revocation/audit, and account erasure. Deletion revokes authentication immediately, then the rights worker reconciles private objects and retains only a non-identifying terminal proof.
Use Node.js 22 or newer, npm, and Docker Desktop.
npm install
npm run db:start
cp .env.example .env
npm run db:resetCopy the local Supabase URL and anonymous key from supabase status into the
private .env, then run these in separate terminals:
npm run dev:web
npm run dev:api
npm run dev:workerFull instructions are in
docs/development/LOCAL_SETUP.md.
Synthetic staging container artifacts and the approval-gated handoff are in
docs/development/STAGING.md; their presence does
not authorize a hosted deployment or live-provider call.
npm run verify
npm run test:e2e
npm run test:security
npm run test:accessibility
npm run test:performance
npm run test:readiness
npm run check
npm run db:testAll committed fixtures are synthetic. Never commit .env, data/, personal
photos, identity references, generated private assets, signed URLs, or provider
credentials.
The repository retains the original import-clothes and generate-outfits
skills under .agents/skills/. They provide useful extraction, styling, prompt,
and visual-QA heuristics; they are design and evaluation inputs rather than the
production multi-user runtime.
