diff --git a/.gitea/wiki/Architecture.md b/.gitea/wiki/Architecture.md new file mode 100644 index 0000000..a55064d --- /dev/null +++ b/.gitea/wiki/Architecture.md @@ -0,0 +1,155 @@ +# Architecture + +## System Overview + +``` +┌─────────────────────────────────────────────────────────────┐ +│ USER │ +└──────────────────┬──────────────────────────────────────────┘ + │ + ┌─────────┴──────────┐ + │ │ + ▼ ▼ +┌─────────────────┐ ┌──────────────────┐ +│ Static Site │ │ Chat Service │ +│ (Storj) │ │ (Railway/Fly) │ +│ │ │ │ +│ Landing │ │ Real-time AI │ +│ Style Form │ │ Style Interview │ +│ Box Display │ │ WebSocket/SSE │ +└────────┬────────┘ └────────┬─────────┘ + │ │ + └──────────┬───────────┘ + │ + ▼ + ┌─────────────────────┐ + │ API + Database │ + │ (Railway/Render) │ + │ │ + │ • User profiles │ + │ • Product catalog │ + │ • Matching engine │ + │ • Feedback store │ + └─────────────────────┘ +``` + +## Components + +### Static Site (Storj) +- **Domain**: `wardrobeai.scoble.me` +- **Tech**: Astro SSG or plain HTML/CSS/JS +- **Purpose**: Landing, forms, box display, affiliate links +- **CDN**: Storj edge + +### Chat Service +- **Domain**: `chat.wardrobeai.scoble.me` +- **Tech**: Node.js + WebSocket or Python + SSE +- **Purpose**: Real-time conversational style interview +- **Deploy**: Railway or Fly.io + +### API + Database +- **Tech**: Express.js or FastAPI + PostgreSQL +- **Purpose**: CRUD operations, matching algorithm, feedback +- **Deploy**: Railway, Render, or Fly.io + +## Data Flow + +1. User visits static site → sees landing page +2. Clicks "Start Interview" → loads chat interface from chat service +3. Chat service conducts AI interview, stores to API +4. Chat redirects to static site with profile ID +5. Static site calls API to generate box +6. API returns curated items → static site displays +7. User clicks Amazon links with `greybeardhold-20` affiliate ID +8. User provides feedback → stored via API + +## Database Schema (MVP) + +```sql +-- Users +CREATE TABLE users ( + id TEXT PRIMARY KEY, + email TEXT UNIQUE, + name TEXT, + created_at TIMESTAMP +); + +-- Style Profiles +CREATE TABLE profiles ( + id TEXT PRIMARY KEY, + user_id TEXT REFERENCES users(id), + budget INTEGER, -- 100 or 250 + sizes JSON, -- {tops, bottoms, dresses, shoes} + colors_preferred JSON, -- array + colors_avoided JSON, -- array + style_ratings JSON, -- {classic, casual, professional, boho, feminine, edgy} + lifestyle JSON, -- array of activities + invariants JSON, -- array of hard lines + must_haves JSON, -- array + wardrobe_gaps JSON, -- array + created_at TIMESTAMP +); + +-- Products (Amazon items with metadata) +CREATE TABLE products ( + id TEXT PRIMARY KEY, + asin TEXT UNIQUE, + name TEXT, + brand TEXT, + category TEXT, + color TEXT, + style_tags JSON, -- array + price INTEGER, + image_url TEXT, + affiliate_url TEXT, + description TEXT +); + +-- Boxes +CREATE TABLE boxes ( + id TEXT PRIMARY KEY, + user_id TEXT REFERENCES users(id), + items JSON, -- array of product IDs + total_price INTEGER, + status TEXT, -- pending, shipped, delivered + created_at TIMESTAMP +); + +-- Feedback +CREATE TABLE feedback ( + id TEXT PRIMARY KEY, + box_id TEXT REFERENCES boxes(id), + product_id TEXT REFERENCES products(id), + user_id TEXT REFERENCES users(id), + kept BOOLEAN, + fit_rating INTEGER, -- 1-5 + style_rating INTEGER, + color_rating INTEGER, + quality_rating INTEGER, + comment TEXT, + created_at TIMESTAMP +); +``` + +## API Endpoints + +| Method | Endpoint | Description | +|--------|----------|-------------| +| POST | /api/users | Create user | +| GET | /api/users/:id | Get user | +| POST | /api/profiles | Create profile | +| GET | /api/profiles/:userId | Get profile | +| GET | /api/products | List all products | +| GET | /api/products/:id | Get product | +| POST | /api/boxes | Generate box | +| GET | /api/boxes/:id | Get box | +| POST | /api/feedback | Submit feedback | +| GET | /api/feedback/:userId | Get user's feedback | + +## Tech Stack Rationale + +- **Next.js/Astro**: Fast SSG, good for SEO, easy to deploy +- **Express/FastAPI**: Simple, fast, well-documented +- **PostgreSQL**: Reliable, scalable, good JSON support +- **Railway/Fly**: Easy deploy, good free tiers, fast setup +- **Storj**: Already in use, cost-effective, fast CDN diff --git a/.gitea/wiki/Home.md b/.gitea/wiki/Home.md new file mode 100644 index 0000000..03c9936 --- /dev/null +++ b/.gitea/wiki/Home.md @@ -0,0 +1,38 @@ +# WardrobeAI Wiki + +Welcome to the WardrobeAI project documentation. + +## Quick Links +- [Repository](https://os.scoble.me/forgejo/sscoble/wardrobe-ai) +- [Issues Board](https://os.scoble.me/forgejo/sscoble/wardrobe-ai/issues) +- [README](../README.md) + +## Current Status +**Phase 0: Foundation** — Establishing SDLC, code review processes, and MVP architecture. + +## Project Overview +WardrobeAI is a curated clothing subscription service sourcing from small businesses and boutique brands. We learn your personal style through conversation, match pieces within your budget, and improve with every box. + +## Architecture +- **Static Site**: Storj-hosted landing and box display at `wardrobeai.scoble.me` +- **Chat Service**: Real-time AI style interview (Railway/Fly.io) +- **API + Database**: User profiles, product catalog, matching algorithm + +## Key Features +- Style interview (conversational, not a quiz) +- Budget-based curation ($100 or $250/month) +- Fit feedback loop that learns +- Invariants system (your hard lines, honored) +- Amazon affiliate integration (MVP) + +## Phases +| Phase | Status | Goal | +|---|---|---| +| 0: Foundation | 🔄 In Progress | SDLC, planning, MVP architecture | +| 1: MVP | ⏳ Pending | Working curation engine for personal use | +| 2: Growth | ⏳ Pending | 100 subscribers, algorithm improvements | +| 3: Scale | ⏳ Pending | 500+ subscribers, warehousing | +| 4: Expansion | ⏳ Pending | 2000+, men's line, Series A | + +## Contributing +All code changes require PR + review from @engineering, @trust, and @market. See [SDLC](SDLC) for details. diff --git a/.gitea/wiki/SDLC.md b/.gitea/wiki/SDLC.md new file mode 100644 index 0000000..085d76a --- /dev/null +++ b/.gitea/wiki/SDLC.md @@ -0,0 +1,73 @@ +# Software Development Lifecycle + +## Overview +WardrobeAI follows a strict PR-based workflow with multi-agent review gates. + +## Branch Protection +- `main` is protected — no direct commits +- All changes via Pull Request +- Require 3 approvals before merge + +## Review Gates + +### 1. @engineering — Code Quality +- Architecture review +- Test coverage check +- Performance assessment +- Technical debt flagging + +### 2. @trust — Security Review +- Input validation +- SQL injection prevention +- XSS prevention +- API security (rate limiting, auth) +- Dependency vulnerability scan +- Secrets management verification + +### 3. @market — Product Review +- Feature matches requirements +- User experience validation +- Business logic correctness +- Affiliate integration verification + +### 4. @cos — Final Approval +- Cross-functional consensus confirmation +- Merge execution + +## Workflow +1. Create feature branch from `main` +2. Develop and commit to feature branch +3. Open PR with clear description +4. Auto-assign reviewers: @engineering @trust @market +5. Address feedback, push updates +6. All approvals received → @cos merges +7. Delete feature branch after merge + +## PR Template +``` +## Summary +Brief description of changes + +## Type +- [ ] Feature +- [ ] Bug fix +- [ ] Documentation +- [ ] Refactor + +## Testing +- [ ] Unit tests pass +- [ ] Manual testing completed +- [ ] Security scan clean + +## Checklist +- [ ] Code follows style guide +- [ ] No secrets committed +- [ ] Documentation updated +- [ ] Reviewers assigned +``` + +## Emergency Process +If critical hotfix needed: +1. Still open PR +2. Expedited review (2 hours max per reviewer) +3. @cos can merge with 2 approvals if 3rd unresponsive 4+ hours