Wardrobe

No items yet — add your first piece!

Item #{{ detailItem.item_id }}

Cutout
Cutout
Category
Brand
{{ detailItem.brand?.name || '—' }}
Price
{{ detailItem.price != null ? ('$' + Number(detailItem.price).toFixed(2)) : '—' }}
Tags
{{ t.name }}
Colors
{{ c.name }}
Note
{{ detailItem.note || '—' }}
Occasions
{{ o.name }}
Seasons
{{ seasonLabel(code) }}
Care
No care tags {{ t.name }}
{{ detailItem.care_note || '—' }}

Looks

No looks yet — create your first outfit!

Wears

All wear photos, newest first. Linked wears can jump to the original look.
No wear photos yet — add one from a look detail page.

Look

{{ detailLook.stars || 0 }}/5
No items in this look yet
Notes
Occasions
Seasons
Staple
{{ detailLook.is_staple ? 'Yes' : 'No' }}
Stars
{{ detailLook.stars || 0 }}/5
Items
{{ detailLook.items?.length || 0 }}
No wear photos yet
No image
{{ wearWhenLabel(wear) }}
{{ wear.note }}

Calendar

{{ calendarMonthLabel }}
{{ w }}
{{ day.dayNumber }}
{{ scheduleTimeLabel(entry) }}
{{ scheduleEntryLabel(entry) }}

Rules

Reusable outfit shapes. Generate outfits from a rule, or compose rules into generations.
No rules yet
A rule describes one outfit shape — a set of slots and cross-slot constraints. Generations pick from your rules and mix them together.
Create your first rule

Generator

Compose outfit recipes and preview fresh combinations from your wardrobe.
No recipes yet
Create a generation to describe the outfits you want the app to propose.
Create your first generation
  • {{ g.name }}
    {{ g.note }}
    {{ (g.rules || []).filter(r => r.kind==='whitelist').length }} whitelist {{ (g.rules || []).filter(r => r.kind==='blacklist').length }} blacklist existing ok
    {{ rulePhraseLabel(b.rule) || ('Rule #' + b.rule_id) }} +{{ (g.rules || []).length - 4 }} more
← Generator

{{ activeGeneration.name }}

{{ activeGeneration.note }}

{{ (activeGeneration.rules || []).filter(r => r.kind==='whitelist').length }} whitelist rules {{ (activeGeneration.rules || []).filter(r => r.kind==='blacklist').length }} blacklist rules {{ activeGeneration.recommend_existing_looks ? 'Existing matches allowed' : 'Existing matches hidden' }}
Bound rules

Manage

Account
Signed in as {{ currentUser?.username || loginUser }}
Colors
Used for filtering and item metadata.
No colors
Categories
Use top-level rows as groups; nest entries underneath for filtering.
{{ catLabel(group.parent) }} ({{ categoryGroupItemCount(group.parent.category_id) }})
Effective: {{ group.parent.effective_silhouette || 'other' }}
No nested categories yet
No categories
Brands
Optional metadata for items.
No brands
Tags
Multi-select labels for items.
No tags
Occasions
Contexts for items and looks (work, casual, formal…).
No occasions
Care tags
Laundry and care labels for items.
No care tags
Care templates
Named snapshots of care tags plus a care note.
No care templates
Users
Admin-only create/update/delete.
No users
Preferences
Personal settings for how the app previews your looks.
Preview mode
Auto uses your latest wear photo when available, otherwise it shows outfit composition.
Picker size
Comfortable uses a 3-column picker. Compact uses a denser 4-column picker.
Detail view
Canvas (default) opens looks as a collage editor and shows saved canvas layouts on the Looks list. Gallery keeps the classic 2×2 membership thumbnails and the thumbnail-grid detail page.
Columns
Placement
Columns control how many wardrobe tiles show per row. Right placement puts the browser beside the canvas on tablet/desktop; phones (under 768px) always keep it at the bottom.
#{{ item.item_id }}