Stop wasting time thinking about what to wear. Scan · Schedule · Style
AI-powered outfit recommendation app. Users scan their wardrobe, sync their calendar, and receive a daily outfit suggestion based on occasion, weather, and personal style.
Xsolla School Project · 2025
backend/ ← Go API server (DDD)
frontend/ ← React SPA (Vite + Tailwind v4)
api/ ← OpenAPI spec (shared contract)
apphost.mts ← Aspire AppHost — all services wired here
| Tool | Version | Install |
|---|---|---|
| Aspire CLI | 13.4 | dotnet tool install -g aspire |
| Go | 1.25 | goenv install 1.25.0 |
| Node | 22.16.0 | nvm install 22.16.0 |
| Docker | any | docker.com |
aspire runThis single command starts Postgres, the AI service, the Go backend, and the React frontend — fully wired with service discovery and telemetry. The Aspire dashboard URL is printed on startup.
aspire run # start all services
aspire stop # stop all services
aspire ps # list running resources and their ports
aspire logs backend # stream logs from a specific resource
aspire dashboard # open the Aspire dashboard in a browserBackend only
# Start all supporting services (Postgres, AI) via Aspire
aspire run
# Then in a separate terminal, run just the backend directly
cd backend
DATABASE_URL=<your-postgres-url> JWT_SECRET=dev go run ./cmd/apiServer starts on http://localhost:8080. Hit GET /healthz to confirm.
Frontend only
nvm use
cd frontend
npm install
npm run devApp starts on http://localhost:5173 and proxies /api/* to the backend.
The app runs without any API keys — AI and weather features gracefully degrade. To enable them:
| Variable | Required for | How to get it |
|---|---|---|
ANTHROPIC_API_KEY |
AI outfit recommendations | console.anthropic.com (free tier available) |
WEATHER_API_KEY |
Live weather in outfit suggestions | openweathermap.org (free) |
JWT_SECRET |
Auth (auto-generated in dev) | Any long random string |
DATABASE_URL |
Postgres connection | Auto-wired by Aspire in dev |
With Aspire (recommended): set keys in your shell before aspire run:
export ANTHROPIC_API_KEY=sk-ant-...
export WEATHER_API_KEY=...
aspire runWithout Aspire: copy backend/.env.example to backend/.env and fill in the values.
Without ANTHROPIC_API_KEY, the app starts normally — wardrobe, calendar, and auth all work. Only the outfit recommendation endpoint returns a 422 with a clear message.
Full spec at api/openapi.yaml.
| Feature | Method | Endpoint |
|---|---|---|
| Auth | POST |
/auth/register · /auth/login |
| Preferences | GET PUT |
/users/me/preferences |
| Wardrobe | GET POST |
/wardrobe/items · /wardrobe/scan |
| Calendar | POST DELETE |
/calendar/connect · /calendar/disconnect |
| Outfit | GET |
/recommendations/outfit |
| Name |
|---|
| Naqi |
| Nabihah |
| Ilman |
| Aizat |
| Cyril |