Wardrober is a self-hosted virtual wardrobe app for cataloging clothing from photos, tracking where items live, and generating outfit combinations using color theory, layer rules, and weather/style preferences.
This is the public CK42X release of the app currently used in the lab. It intentionally ships with no wardrobe photos, no local database, and no private deployment links.
- Mobile-friendly clothing photo upload
- AI clothing analysis with OpenAI vision models
- Local SQLite catalog through Drizzle ORM
- Storage-location labels for physical organization
- Color, pattern, style, layer, and weather metadata
- Outfit generation with color harmony, layer matching, and availability rules
- Local-first data model: uploaded images and
db/local.dbstay on your machine and are gitignored
- Next.js 15 App Router
- React 19 + TypeScript
- Tailwind CSS
- Drizzle ORM + SQLite (
better-sqlite3) - OpenAI vision API for clothing analysis
npm install
cp .env.example .env.local
# edit .env.local and set OPENAI_API_KEY
npm run db:push
npm run devOpen http://localhost:3000.
OPENAI_API_KEY=your_openai_api_key_hereThe app uses the key server-side only in app/actions/upload-clothing.ts.
- Go to Add Clothing Item.
- Upload or capture a clothing photo.
- Add a storage location such as
Main ClosetorDresser. - Wardrober analyzes the item and stores category, layer, color, style, pattern, and weather suitability.
- Use View Wardrobe to browse items and mark availability.
- Use Generate Outfits to build combinations from available items.
Wardrober is designed for self-hosting. By default:
- SQLite data is stored at
db/local.db. - Uploaded images are stored under
public/uploads/. - Both are ignored by git.
- This public repository contains only source code and an empty
public/uploads/.gitkeepplaceholder.
Do not deploy a personal instance publicly unless you understand that files under public/uploads/ are served by the web app.
npm run dev # start development server
npm run build # build for production
npm run start # start production server
npm run lint # run Next/ESLint command configured by the app
npm run db:push # create/update local SQLite schema
npm run db:studio # open Drizzle Studioapp/ Next.js pages and server actions
db/ Drizzle SQLite schema and connection
lib/ outfit generation and color theory logic
public/uploads/ local uploaded clothing photos (gitignored)
npm run db:pushcreates the local SQLite file before using wardrobe/outfit pages.- If you change the upload path, keep personal photos out of version control.
- The live private lab deployment includes personal wardrobe data that is not part of this public release.
MIT