Complete guide to all attributes tracked for clothing items in the ADHD-Closet application.
The ADHD-Closet tracks rich metadata about each clothing item:
These fields apply to every item in your wardrobe:
| Field | Type | Description | Example |
|---|---|---|---|
| title | String | Optional name/description | “Black band t-shirt” |
| category | Enum | Main category | tops, bottoms, dresses, etc. |
| brand | String | Brand/manufacturer | “H&M”, “Target”, “Handmade” |
| sizeText | String | Size information | “M”, “32x30”, “One Size” |
| materials | String | Fabric composition | “100% cotton”, “Polyester blend” |
| Field | Type | Description | Example |
|---|---|---|---|
| isLicensedMerch | Boolean | Is this official licensed merchandise? | true, false, null |
| franchise | String | Band name, movie, game, show, etc. | “My Chemical Romance”, “Star Wars”, “The Legend of Zelda” |
| franchiseType | Enum | Type of franchise | band, movie, tv_show, game, anime, comic, sports, brand, other |
Franchise Types:
Examples:
isLicensedMerch: true, franchise: "Slipknot", franchiseType: "band"isLicensedMerch: true, franchise: "The Mandalorian", franchiseType: "tv_show"isLicensedMerch: true, franchise: "Super Mario Bros", franchiseType: "game"isLicensedMerch: false, franchise: null, franchiseType: null| Field | Type | Description | Example |
|---|---|---|---|
| colors | Array | Named colors | ["black", "dark purple"] |
| colorPalette | Array | Hex color codes | ["#000000", "#4B0082"] |
| pattern | String | Pattern description | “solid”, “striped”, “floral”, “graphic print” |
| tags | Array | Style tags | ["emo", "goth", "casual", "edgy"] |
| Field | Type | Description | Example |
|---|---|---|---|
| fitNotes | String | How item fits | “Oversized fit creates volume contrast” |
| pairingTips | Array | Styling suggestions | ["Pairs well with high-waisted bottoms"] |
| confidence | Object | AI confidence scores | { "category": 0.95, "colors": 0.88 } |
| Field | Type | Description |
|---|---|---|
| state | Enum | available, laundry, unavailable, donate |
| cleanStatus | Enum | clean, dirty, needs_wash |
| wearsBeforeWash | Int | Wears before washing needed |
| currentWears | Int | Current wear count since last wash |
| lastWornDate | DateTime | When item was last worn |
| lastWashedDate | DateTime | When item was last washed |
| Field | Type | Description | Example |
|---|---|---|---|
| storageType | Enum | Storage method | hanging, folded, drawer, shelf |
| locationInCloset | String | Where stored | “Left side”, “Top drawer” |
| sortOrder | Int | Custom ordering | For organizing display |
These attributes are stored in the attributes JSON field and vary by category.
| Attribute | Values | Description |
|---|---|---|
| neckline | crew, v-neck, scoop, boat, square, halter, off-shoulder, turtleneck | Neckline style |
| sleeveLength | sleeveless, short, 3/4, long | Length of sleeves |
| sleeveFit | fitted, loose, puff, bell | How sleeves fit |
| visualWeight | minimal, moderate, heavy, complex | Visual heaviness |
| silhouette | fitted, loose, oversized, boxy | Overall shape |
Example:
{
"neckline": "v-neck",
"sleeveLength": "short",
"sleeveFit": "fitted",
"visualWeight": "minimal",
"silhouette": "fitted"
}
| Attribute | Values | Description |
|---|---|---|
| bottomsType | jeans, dress_pants, casual_pants, cargo_pants, shorts, skirt, leggings, joggers | Type of bottom (stored separately) |
| rise | low, mid, high | Waist height |
| inseam | Number | Length in inches |
| fit | skinny, slim, straight, wide, bootcut, flare | How bottom fits legs |
| hemline | raw, cuffed, distressed | Bottom edge style |
| visualWeight | minimal, moderate, heavy | Visual heaviness |
| pocketStyle | String | Description of pockets |
Example:
{
"rise": "high",
"inseam": 30,
"fit": "skinny",
"hemline": "raw",
"visualWeight": "moderate",
"pocketStyle": "5-pocket jean style"
}
Note: High rise skinny jeans = bottomsType: "jeans" + rise: "high" + fit: "skinny"
| Attribute | Values | Description |
|---|---|---|
| neckline | crew, v-neck, scoop, boat, square, halter, off-shoulder, turtleneck | Neckline style |
| sleeveLength | sleeveless, short, 3/4, long | Length of sleeves |
| waistline | natural, empire, dropped, none | Where waist sits |
| hemline | mini, knee, midi, maxi, asymmetric | Dress length |
| silhouette | fitted, A-line, shift, bodycon, flowy | Overall shape |
Example:
{
"neckline": "scoop",
"sleeveLength": "sleeveless",
"waistline": "empire",
"hemline": "midi",
"silhouette": "A-line"
}
| Attribute | Values | Description |
|---|---|---|
| silhouette | fitted, loose, oversized, boxy | Overall shape |
| length | cropped, hip, mid-thigh, knee, long | How long jacket is |
| visualWeight | minimal, moderate, heavy, complex | Visual heaviness |
Example:
{
"silhouette": "oversized",
"length": "hip",
"visualWeight": "heavy"
}
| Attribute | Values | Description |
|---|---|---|
| shoeType | sneakers, boots, sandals, heels, flats, loafers, oxfords, platforms | Type of shoe (stored separately) |
| heelHeight | Number | Height in inches |
| heelThickness | none, slim, chunky, wedge | Heel style |
| toeboxShape | rounded, almond, pointed, square | Toe shape |
| visualWeight | minimal, moderate, heavy | Visual heaviness |
Example:
{
"heelHeight": 3,
"heelThickness": "chunky",
"toeboxShape": "rounded",
"visualWeight": "heavy"
}
| Attribute | Values | Description |
|---|---|---|
| accessoryType | purse, bag, backpack, belt, hat, scarf, gloves, sunglasses, watch | Type (stored separately) |
| size | small, medium, large | Overall size |
| material | String | What it’s made of |
| structure | structured, unstructured, semi-structured | How stiff/floppy |
| visualWeight | minimal, moderate, heavy | Visual heaviness |
| occasion | casual, formal, both | When to wear |
Example:
{
"size": "medium",
"material": "leather",
"structure": "structured",
"visualWeight": "moderate",
"occasion": "both"
}
| Attribute | Values | Description |
|---|---|---|
| jewelryType | necklace, earrings, bracelet, ring, anklet, brooch | Type (stored separately) |
| metal | gold, silver, rose gold, bronze, mixed, none | Metal type |
| gemstones | yes, no | Has gemstones? |
| style | delicate, statement, chunky, minimalist | Overall style |
| occasion | everyday, formal, special | When to wear |
Example:
{
"metal": "silver",
"gemstones": "no",
"style": "statement",
"occasion": "everyday"
}
| Attribute | Values | Description |
|---|---|---|
| style | one-piece, two-piece, bikini, tankini, boardshorts, rash-guard | Swimwear style |
| coverage | minimal, moderate, full | How much covered |
| activity | swimming, surfing, beach, pool | Intended activity |
Example:
{
"style": "two-piece",
"coverage": "moderate",
"activity": "beach"
}
| Attribute | Values | Description |
|---|---|---|
| activityType | gym, running, yoga, cycling, sports | Intended activity |
| fit | compression, fitted, loose | How tight |
| moisture-wicking | yes, no | Wicks sweat? |
| visualWeight | minimal, moderate | Visual heaviness |
Example:
{
"activityType": "yoga",
"fit": "fitted",
"moisture-wicking": "yes",
"visualWeight": "minimal"
}
| Attribute | Values | Description |
|---|---|---|
| style | pajamas, nightgown, robe, sleep-shirt, shorts-set | Sleepwear style |
| warmth | light, medium, heavy | How warm |
| season | summer, winter, all-season | Best season |
Example:
{
"style": "pajamas",
"warmth": "medium",
"season": "all-season"
}
| Attribute | Values | Description |
|---|---|---|
| comfort-level | ultra-comfy, relaxed, presentable | Comfort rating |
| style | sweats, joggers, lounge-set, casual | Style type |
| occasion | home-only, casual-outing | Where to wear |
Example:
{
"comfort-level": "ultra-comfy",
"style": "sweats",
"occasion": "home-only"
}
| Attribute | Values | Description |
|---|---|---|
| type | two-piece, three-piece, co-ord, matching-set | Set type |
| formality | casual, business-casual, formal | Formality level |
| completeness | complete-set, mix-and-match | Can pieces separate? |
Example:
{
"type": "two-piece",
"formality": "business-casual",
"completeness": "mix-and-match"
}
Visual weight describes how much visual “presence” an item has in an outfit.
| Level | Description | Examples |
|---|---|---|
| Minimal | Light, airy, barely there | Simple tank top, thin jewelry, minimalist shoes |
| Moderate | Balanced presence | Basic t-shirt, regular jeans, simple accessories |
| Heavy | Strong visual impact | Chunky sweater, platform boots, large bag |
| Complex | Very busy/detailed | Heavily patterned top, intricate jewelry |
Why it matters:
{
"category": "bottoms",
"bottomsType": "jeans",
"attributes": {
"rise": "high",
"fit": "skinny",
"visualWeight": "moderate"
}
}
{
"category": "tops",
"attributes": {
"neckline": "crew",
"sleeveLength": "short",
"sleeveFit": "loose",
"silhouette": "oversized",
"visualWeight": "moderate"
}
}
{
"category": "shoes",
"shoeType": "platforms",
"attributes": {
"heelHeight": 3,
"heelThickness": "chunky",
"toeboxShape": "rounded",
"visualWeight": "heavy"
}
}
The AI uses attributes to create balanced, cohesive outfits:
User: "Generate an outfit"
AI analyzes:
- Visual weight balance (heavy + minimal = good)
- Color harmony (complementary colors)
- Formality matching (casual with casual)
- Season appropriateness (heavy coat in winter)
- Style consistency (tags overlap)
Result: Balanced, wearable outfit
Filter by specific attributes:
// Find all high-rise skinny jeans
items.filter(item =>
item.category === 'bottoms' &&
item.bottomsType === 'jeans' &&
item.attributes.rise === 'high' &&
item.attributes.fit === 'skinny'
)
// Find statement jewelry
items.filter(item =>
item.category === 'jewelry' &&
item.attributes.style === 'statement'
)
Attributes drive smart pairing suggestions:
Attributes are stored in two ways:
model Item {
accessoryType AccessoryType? // purse, bag, etc.
jewelryType JewelryType? // necklace, earrings, etc.
shoeType ShoeType? // sneakers, boots, etc.
bottomsType BottomsType? // jeans, dress_pants, etc.
}
model Item {
attributes Json? // { "neckline": "v-neck", "rise": "high", ... }
}
Why two approaches?
const item = await prisma.item.findUnique({
where: { id: itemId },
select: {
id: true,
category: true,
bottomsType: true,
attributes: true,
colors: true,
tags: true
}
});
// Access attributes
console.log(item.attributes.rise); // "high"
console.log(item.attributes.fit); // "skinny"
// Find all high-rise bottoms
const highRiseItems = await prisma.item.findMany({
where: {
category: 'bottoms',
attributes: {
path: ['rise'],
equals: 'high'
}
}
});
await prisma.item.update({
where: { id: itemId },
data: {
attributes: {
rise: 'high',
fit: 'skinny',
visualWeight: 'moderate',
hemline: 'raw'
}
}
});
Attributes are automatically detected from photos using AI:
// AI analyzes clothing photo
const result = await inferItemDetails(photoBase64);
// Returns:
{
"category": "bottoms",
"subType": "jeans",
"colors": ["black"],
"colorPalette": ["#1a1a1a"],
"pattern": "solid",
"attributes": {
"rise": "high",
"fit": "skinny",
"visualWeight": "moderate",
"hemline": "raw"
},
"fitNotes": "High-rise creates flattering silhouette",
"pairingTips": [
"Pairs well with crop tops",
"Works with tucked-in shirts"
],
"tags": ["casual", "versatile"],
"confidence": {
"category": 0.95,
"attributes": 0.88
}
}
The AI considers:
Attributes support ADHD-friendly features:
A: Yes! While AI infers attributes automatically, you can always edit them in the item detail view.
A: Use the closest match or leave blank. The system is flexible.
A: No! Core attributes (category, colors) are most important. Others enhance recommendations but are optional.
A: The attributes JSON field is extensible. You can add custom key-value pairs.
A: Typically 85-95% accurate. Review and adjust as needed.
| Category | Attributes |
|---|---|
| Core | 10+ fields (title, brand, colors, pattern, etc.) |
| Tops | 5 attributes |
| Bottoms | 7 attributes |
| Dresses | 5 attributes |
| Outerwear | 3 attributes |
| Shoes | 5 attributes |
| Accessories | 6 attributes |
| Jewelry | 5 attributes |
| Swimwear | 3 attributes |
| Activewear | 4 attributes |
| Sleepwear | 3 attributes |
| Loungewear | 3 attributes |
| Suits & Sets | 3 attributes |
Total: 60+ attributes across all categories
Last Updated: 2026-01-31
Version: 1.0 (Complete Attributes Reference)
| Attribute | Options |
|---|---|
| Neckline | crew, v-neck, scoop, boat, square, halter, off-shoulder, turtleneck, cowl, mock, polo |
| Sleeve Length | sleeveless, short, 3/4, long |
| Sleeve Fit | fitted, loose, puff, bell, cap, dolman, raglan |
| Silhouette | fitted, loose, oversized, boxy, cropped, longline, tunic, peplum |
| Attribute | Options |
|---|---|
| Rise | high, mid, low, ultra-high, ultra-low |
| Inseam | short (< 27”), regular (27-32”), long (32”+), extra-long (34”+) |
| Leg Shape | skinny, straight, bootcut, flare, wide-leg, tapered, jogger |
| Waistband | elastic, drawstring, button/zip, pull-on, belted |
| Attribute | Options |
|---|---|
| Heel Height | flat (0-1”), low (1-2”), mid (2-3”), high (3-4”), stiletto (4”+) |
| Toe Shape | round, pointed, square, almond, open |
| Closure | lace-up, slip-on, buckle, zipper, velcro |
| Attribute | Options |
|---|---|
| Visual Weight | minimal, moderate, heavy, complex |
| Pattern | solid, striped, plaid, floral, graphic, abstract, animal, polka-dot, paisley |
| Material | cotton, polyester, wool, silk, denim, leather, synthetic, blend, linen, cashmere |
| Fit | tight, fitted, regular, loose, oversized |
Quick lookup complete! For detailed descriptions, see sections above.