Commit graph

22 commits

Author SHA1 Message Date
Scott Scoble
5000d89ec3 feat: MVP completion — product DB expansion (50 items), feedback-driven weight tuning, user auth
- Added 24 new products across 7 categories (Shoes, Accessories, Dresses, Bottoms, Tops, Outerwear, Undergarments)
- Expanded color coverage: Green, Red, Purple, Yellow, Orange, Brown, Gold
- Implemented feedback-driven matching algorithm weight tuning
  - Analyzes kept vs not-kept feedback when 10+ submissions exist
  - Blends default weights with learned signals (max 50% shift)
  - Returns tunedWeights in response when model is active
- Added user authentication (email+password, PBKDF2 hashing):
  - POST /api/auth/signup — register + auto-login
  - POST /api/auth/login — authenticate + return token
  - POST /api/auth/logout — revoke token
  - authenticate middleware on /api/profile, /api/box, /api/feedback
  - Profile fetch enforces owner-only access
  - Frontend passes Bearer token on authenticated requests
  - 401 response redirects to login flow
- Fixed duplicate AFFILIATE_ID declaration
2026-05-03 00:19:20 -07:00
Scott Scoble
f90275f631 Merge remote-tracking branch 'origin/feature/input-validation' 2026-05-02 22:49:55 -07:00
OpenClaw Agent
b177fcccc0 Consolidated fix: profile fetch, affiliate env var, CORS lockdown, auth TODO
Combines fixes from PRs #34 and #35 into a clean single branch.

## Profile fetch fix (was PR #34)
- CuratedBox.js: Fetch user profile from /api/profile/:userId before
  generating box. Use actual user preferences (colors, styles, budget)
  instead of hardcoded placeholders.

## Affiliate env var fix (was PR #35)
- init-db.js, server.js: Read AMAZON_ASSOCIATE_ID from env var, fall
  back to 'greybeardhold-20'. Convert all 26 seed product affiliate
  links to template strings using the constant.
- .env.example: Add AMAZON_ASSOCIATE_ID configuration example.

## CORS lockdown
- server.js: Restrict CORS to specific origins (localhost:3000,
  wardrobe.scoble.me) instead of wildcard '*'.

## Auth TODO
- CuratedBox.js: Add TODO comment to implement authentication and
  permission checks for profile access.

## Style validation fix
- server.js: Add stylePreferences validation (handle string/array cases)
  with JSON.parse fallback in the /api/box endpoint.

## Minor fix
- server.js: Fix leading space in Pact Women's Cotton Cardigan title.
2026-05-02 22:49:12 -07:00
Scott Scoble
23ec656c5d feat: Wardrobe AI landing page — waitlist + product overview
Standalone HTML landing page with:
- Hero with product value prop (AI-curated boutique clothing)
- 3-step How It Works (profile → curation → feedback loop)
- 4 differentiators vs subscription boxes
- Free early access pricing card
- Waitlist form with localStorage persistence
- Mobile responsive, zero dependencies
- Styled with rose/sage/cream palette

Accessible at: https://os.scoble.me/forgejo/sscoble/wardrobe-ai/src/branch/main/site/index.html
2026-05-02 21:10:13 -07:00
Scott Scoble
400cb4c9c7 feat: add WardrobeAI landing page (Phase 0 waitlist capture)
- Hero with value prop and dual CTAs
- 3-step How It Works
- 4-differentiator grid (small biz first, budget control, ML learning, hard lines honored)
- 3-tier pricing (Essential 00, Signature 50, Custom)
- Designer spotlight section (placeholder for real vendors)
- Waitlist form with email + tier preference + localStorage persistence
- Warm, inviting aesthetic (no fashion jargon, plain English)
- Mobile responsive, zero dependencies

Addresses sscoble/wardrobe-ai#17
2026-05-02 21:00:53 -07:00
Scott Scoble
5e237d6e57 feat: add input validation middleware (Joi + XSS sanitization)
- Email validation (Joi regex)
- Budget validation (100 or 250 integer)
- Rating range check (1-5 integer)
- Box ID validation (non-empty, >= 5 chars)
- Recursive HTML sanitization (< > encoding)
- Whitespace trimming
- Applied to /api/users, /api/profiles, /api/box, /api/feedback
- Tested: all validations pass, XSS blocked

Addresses marcus/engineering#2
2026-05-02 20:59:07 -07:00
Scott Scoble
113c4a24ec Merge PR #35: Amazon affiliate env var + all MVP code
- Use process.env.AMAZON_ASSOCIATE_ID for all 26 products
- CORS locked to specific origins
- Auth TODO comments added
- Profile fetch with fallbacks
- Approved by @trust, @market, @engineering-2
2026-05-02 17:24:16 -07:00
Scott Scoble
1c19002b43 Merge PR #35: Amazon affiliate env var + MVP core
Approved by @trust, @market, @engineering-2
2026-05-02 17:24:06 -07:00
Marcus (cos)
7bc7b1bf1b Merge consolidated fixes with resolved conflicts 2026-05-02 17:21:15 -07:00
OpenClaw Agent
c54e1021d6 fix: use AMAZON_ASSOCIATE_ID env var for ALL 26 products
Replaced hardcoded 'greybeardhold-20' affiliate tags with
 template literal in both init-db.js and server.js.
All 26 products now respect the AMAZON_ASSOCIATE_ID environment variable,
with 'greybeardhold-20' as the default fallback.
2026-05-02 14:50:44 -07:00
OpenClaw Agent
390ec6e290 Address PR #34 review comments
- Fetch profile in fetchProfile() and use state in generateBox()
- Convert API underscore fields to camelCase for consistency
- Add TODO comment for auth gap in generateBox()
- Change CORS from '*' to specific allowed origins
2026-05-02 14:48:52 -07:00
OpenClaw Agent
52555112e1 Fix PR #34: Fetch profile before generateBox() 2026-05-02 14:46:21 -07:00
OpenClaw Agent
2f8cde0409 Fix hardcoded preferences bug - use actual user profile data 2026-05-02 13:26:58 -07:00
OpenClaw Agent
8922d419b0 Add Amazon affiliate tag ?tag=greybeardhold-20 to all product links
- Update all amazon.com URLs in init-db.js seed data
- Update all amazon.com URLs in server.js seed data
- Add AMAZON_ASSOCIATE_ID to .env.example
2026-05-02 13:26:52 -07:00
Marcus
ef157d25a9
Remove .gitea/wiki — using Forgejo wiki instead
Wiki pages now maintained via Forgejo web interface/API at:
https://os.scoble.me/forgejo/sscoble/wardrobe-ai/wiki

Pages created:
- Home
- SDLC
- Architecture

Refs #27
2026-05-02 12:55:03 -07:00
Marcus
ab69d48674
Enable SSH commit signing
- Generated ed25519 signing key
- Configured git to use SSH signing
- Added key to Forgejo user settings
- All future commits will be signed

Key fingerprint: SHA256:j8oNRynZpHi9J/88AVzxOq9cRYl1kxiVaWetHtLTZqE
2026-05-02 12:47:38 -07:00
Marcus
abda61d5e8 Add wiki documentation: Home, SDLC, Architecture
- Home.md: Project overview, quick links, current status
- SDLC.md: PR workflow, review gates (@engineering, @trust, @market, @cos)
- Architecture.md: System diagram, data flow, database schema, API endpoints

Wiki pages establish project documentation baseline.
Refs #27
2026-05-02 12:36:42 -07:00
OpenClaw Agent
6aa9b1cec2 Initial commit: WardrobeAI MVP - Product curation engine with style matching algorithm 2026-05-02 12:35:46 -07:00
Marcus
7dd427a5f2 Initial commit: README, directory structure, and project foundation
- Comprehensive README with project overview, market opportunity, competitive differentiation
- Repository structure: brand/, business/, engineering/, legal/, marketing/, operations/, product/, research/, site/
- Roadmap: Phase 0 (Foundation) through Phase 4 (Expansion)
- Tech stack: Next.js, PostgreSQL, Python/Node, Stripe, Storj
2026-05-02 11:58:32 -07:00
1003ef8719 Initial commit 2026-05-02 11:41:00 -07:00
OpenClaw Agent
5b28cb7d9c Option D: memory rewrite — daily notes updated 2026-04-25 15:49:35 -04:00
OpenClaw Agent
42a50c4044 Option D: initial workspace commit with memory architecture
- MEMORY.md seeded (the VHS tape)
- memory/ dir created (daily notes)
- SOUL.md, IDENTITY.md, USER.md, AGENTS.md in place
- Every future MEMORY.md rewrite will be git-committed
2026-04-25 13:51:53 -04:00