Requirements and Specifications - snuhcs-course/swpp-2026-project-team-14 GitHub Wiki
Requirements and Specifications
Document Revision History
| Version | Date | Author | Changes |
|---|---|---|---|
| 0.1 | 2026-10-06 | Dongkun Moon | Created the page: abstract, customer, competitive landscape, and the body analysis requirements (P9, P10): user stories, non-functional requirements, wireframe. |
| 0.2 | 2026-10-07 | Hyeon U Jeong | Added the wardrobe requirements: capture and measurement, analysis, editing, persistence, and screen flows with failure handling. |
| 0.3 | 2026-10-09 | Juhyeon Choi | Added outfit recommendation, conversational refinement, constraint preservation, style-profile, and product-recommendation requirements, including user stories, non-functional requirements, and interface specifications. |
| 0.4 | 2026-10-16 | Hyeon U Jeong | Added login, account isolation, manual guest-data import, style-profile editing and eight-step onboarding requirements and screen flows; updated existing body/profile and wardrobe descriptions for the implemented integration (PR #26). |
1. Project Abstract
Choosing what to wear depends on more than finding nice clothes: people also consider their body shape, their taste, what they already own and how much they can spend, yet most fashion services recommend new products or generic outfits without knowing what is in the user's closet. StyleMate is an Android app that acts as a personal AI fashion partner built around the user's own wardrobe. From a front and a side photo and the user's height, AI estimates garment-relevant body measurements and body shape, which the user can review and correct together with their preferred fit and styles. The user then builds a digital wardrobe by photographing their clothes; AI identifies each item's name, category and color and measures the garment. Using this body profile and wardrobe, StyleMate recommends outfits from clothes the user actually owns, and lets them refine an outfit in conversation, for example "Keep these jeans" or "Make it more casual", keeping locked items and changing only what was asked. When something is genuinely missing, it recommends new products that match the user's style, budget and existing wardrobe, so users make better use of what they have and buy only what is useful.
2. Customer
General audience: smartphone users, mainly university students and young adults, who want to dress well with the clothes they already have and buy new items more carefully.
Specific customer types:
| Customer type | Situation | What StyleMate offers |
|---|---|---|
| Students who struggle to combine their clothes | Own enough clothes but wear the same few outfits; unsure what suits their proportions. | Outfit recommendations from their own wardrobe that take their body shape into account. |
| Online shoppers unsure about size and fit | Buy clothes online without trying them on; returns because of fit. | Garment-relevant body measurements (e.g., shoulder width, inseam) and fit preferences kept in one profile. |
| Budget-conscious users | Want to buy fewer, better items. | Product recommendations only for real gaps in the wardrobe. |
| Users dressing for a specific occasion | Need to adjust an outfit for a date or presentation without starting over. | Conversational editing that keeps the items they want and changes the rest. |
3. Competitive Landscape
| Feature | Digital closet apps (e.g., Acloset) | Online fashion stores (e.g., Musinsa) | Photo body-measurement services (e.g., 3DLOOK) | General AI chatbots (e.g., ChatGPT) | StyleMate |
|---|---|---|---|---|---|
| Body measurements from phone photos | X | X | O | X | O |
| Digital wardrobe with AI tagging of each item | O | X | X | X | O |
| Garment measurements from a photo of the item | X | X | X | X | O |
| Outfit recommendations from clothes the user owns | O | X | X | โณ (only if the user describes their clothes) | O |
| Conversational outfit editing that keeps chosen items | X | X | X | โณ (no structured wardrobe) | O |
| Product recommendations based on body, style, budget and existing wardrobe | โณ | โณ (body/style, not the user's wardrobe) | โณ (size only) | X | O |
O = supported, X = not supported, โณ = partly. Based on publicly described features at the time of writing; the team should re-check each entry.
How StyleMate differs: existing services cover one piece each โ a closet, a store, a body scan or a chat. StyleMate connects them: the body profile, the actual wardrobe and the conversation feed into the same recommendations, so suggestions fit both the user's body and what they already own.
4. Functional Requirements
4.1 Body analysis (owner: Dongkun Moon ยท P9 screen, P10 AI integration)
StyleMate needs the user's body measurements to recommend clothes that fit. Instead of asking for a tape measure, the user takes two photos (front and side) and enters their height. The app then returns 16 garment measurements, which the user can check and correct.
Measurements provided (names follow ISO 8559-1, garment sizing):
| Group | Measurements |
|---|---|
| Lengths | shoulder width (์ด๊นจ๋๋น), sleeve length (์๋งค๊ธธ์ด), torso length (์์ฒด๊ธธ์ด), rise (๋ฐ์๊ธธ์ด), inseam (์์ชฝ ๋ค๋ฆฌ๊ธธ์ด), outseam (๋ฐ๊นฅ ๋ค๋ฆฌ๊ธธ์ด) |
| Circumferences | neck (๋ชฉ๋๋ ), chest (๊ฐ์ด๋๋ ), underbust (๋ฐ๊ฐ์ด๋๋ , female only), waist (ํ๋ฆฌ๋๋ ), hip (์๋ฉ์ด๋๋ ), armhole (์ํ๋๋ ), bicep (ํ๋๋๋ ), wrist (์๋ชฉ๋๋ ), thigh (ํ๋ฒ ์ง๋๋ ), calf (์ข ์๋ฆฌ๋๋ ) |
US-B1 ยท Measure my body from two photos
As a new user, I want to take a front and a side photo and enter my height, so that StyleMate knows my body measurements without a tape measure.
| # | Acceptance criterion |
|---|---|
| B1-1 | Given I choose body analysis during onboarding or later from My Profile, when the capture guide or photo input screen opens, then instructions explain how to take the photos: underwear or tight clothing, A-pose, full body in frame, phone at waist height, plain background. |
| B1-2 | Given I am on the photo input screen, when I add a photo with ์นด๋ฉ๋ผ or ์จ๋ฒ, then I see its preview, and ๋ถ์ํ๊ธฐ stays disabled until both a front and a side photo are added. |
| B1-3 | Given both photos are added, when my height is empty or outside 100โ220 cm, then ๋ถ์ํ๊ธฐ stays disabled and the height field shows the allowed range. Weight (30โ200 kg) and gender are optional. |
| B1-4 | Given valid photos and height, when I tap ๋ถ์ํ๊ธฐ, then I see a progress screen and then the results. |
| B1-5 | Given a photo with no person, several people, a cut-off body, the wrong view, or an upside-down or sideways image, when I tap ๋ถ์ํ๊ธฐ, then I return to the input screen with a specific retake hint, and my photos are kept so I can replace only the wrong one. |
| B1-6 | Given I pick a file the app cannot read, when it fails to load, then a message asks me to choose another photo and my previous photo stays. |
| B1-7 | Given I do not want to analyse during onboarding, when I tap the upper-right ๊ฑด๋๋ฐ๊ธฐ on the body-input step, then I continue to wardrobe setup without a body profile and can start analysis later from My Profile. |
US-B2 ยท Review and correct my measurements
As a user, I want to see each estimated measurement on a body figure and fix wrong ones, so that the measurements StyleMate uses are correct.
| # | Acceptance criterion |
|---|---|
| B2-1 | Given the analysis succeeded, when the results screen opens, then a body figure matching my gender (female / male / neutral) shows shoulder width, chest, waist, hip and inseam, and every other measurement is a highlighted point on the figure. |
| B2-2 | Given the results screen, when I tap a body part, then a card shows its name, a short description and the value. When I tap ์์ , then I can enter a new value (5โ250 cm), which is marked ์ง์ ์์ ํจ. |
| B2-3 | Given the results screen, when I open ์ ์ฒด ์น์ ๋ณด๊ธฐ, then all measurements are listed by group, and tapping a row opens the same editor. |
| B2-4 | Given I wore loose clothing in the photos, when the results open, then a warning names the affected measurements and suggests retaking in tight clothing. Results are still shown; I am never asked what I wore. |
| B2-5 | Given I did not enter my weight, when the results open, then a note says circumferences become more accurate with it. |
| B2-6 | Given the separate body re-analysis results screen, when I choose a preferred fit (slim / regular / loose) and styles, then I can select at most 3 styles; a 4th cannot be selected. Onboarding collects fit/mood choices separately in Steps 2โ3 (ยง4.4). |
| B2-7 | Given I am done reviewing, when I confirm the measurements, then the profile is saved. ํ์ธํ๊ณ ๊ณ์ํ๊ธฐ during onboarding moves to wardrobe setup (Step 6); ์ ์ฅํ๊ธฐ during re-analysis returns to the main app. |
US-B3 ยท Understand my body shape
As a user, I want short styling insights about my body shape, so that I know which cuts suit me.
| # | Acceptance criterion |
|---|---|
| B3-1 | Given the results or My Profile screen, when my measurements are clearly past a rule's threshold, then an insight card is shown, e.g. a body type (ํ์ฒด ๋ณผ๋ฅจํ, ์์ฒด ๋ณผ๋ฅจํ, ํ๋ฆฌ ๋ผ์ธํ, ์ผ์ํ), leg proportion or shoulder width, each with a styling tip. |
| B3-2 | Given a ratio close to a rule's threshold, when insights are built, then no insight is shown for that rule, rather than a possibly wrong one. |
| B3-3 | Given loose clothing was detected in a region an insight depends on, when insights are built, then that insight is hidden with a note to retake in tight clothing, unless I entered those values myself. |
| B3-4 | Given any insight, when it is displayed, then it uses neutral styling language only, with no weight, health or "obesity" terms. |
US-B4 ยท See and redo my body profile
As a user, I want to see my body profile in the My Profile tab and analyse it again, so that it stays up to date when my body changes.
| # | Acceptance criterion |
|---|---|
| B4-1 | Given I confirmed a profile, when I open ์ฒดํ ๋ฐธ๋ฐ์ค ์ฐธ๊ณ from My Profile, then a separate body-details screen shows the same body figure and insights (read-only), all measurements, my basic information including the detected clothing, and a note that values are styling estimates, not medical measurements. |
| B4-2 | Given the body-details screen opened from My Profile, when I tap ์ฒดํ ๋ค์ ๋ถ์ํ๊ธฐ, then the flow opens with my height, weight, gender and preferences pre-filled, and my old profile stays until I confirm the new one. |
| B4-3 | Given the body-details screen opened from My Profile, when I tap ์ฒดํ ํ๋กํ ์ญ์ and confirm, then the body profile is removed while style preferences remain. |
US-B5 ยท Keep my body photos private
As a user, I want my body photos to be used only for measuring and then deleted, so that I can safely take photos in underwear or tight clothing.
| # | Acceptance criterion |
|---|---|
| B5-1 | Given the capture guide or input screen, when I read the privacy note, then it says photos are used only for measurement, deleted right after analysis, and only numbers are kept. |
| B5-2 | Given an analysis request, when the server processes it, successfully or not, then the photos are handled in memory only and never written to disk, storage or logs. |
| B5-3 | Given an analysis, when it runs, then the photos are not sent to any third-party AI service. |
4.2 Wardrobe โ Hyeon U Jeong
The wardrobe lets users photograph their clothes, estimate garment measurements without a reference object, review the suggested information, and save the item for later use.
The wardrobe supports garment capture, measurement, analysis, editing and browsing without requiring a body profile. Guests save their wardrobe on the device; signed-in users access only their own account records on the backend. Login does not upload guest records automatically; manual import is specified in ยง4.4.
US-W1 ยท Measure a garment without a reference object
As a user, I want to photograph a garment and check its measurement points, so that I can record its dimensions without placing a ruler or reference card beside it.
| # | Acceptance criterion |
|---|---|
| W1-1 | Given camera permission and a supported phone, when I select a garment type and point the camera at a garment laid flat on the floor, then the app shows available automatic measurement points while it recognises the floor. |
| W1-2 | Given the floor is tracked, when I tap ์ดฌ์, then the image is frozen and I can review the proposed measurements or select points manually. ํ์ธ is enabled only after at least one measurement is completed and no point selection is unfinished. |
| W1-3 | Given automatic points are missing or unsuitable, when I select measurement endpoints myself, then the app calculates the corresponding length. No fixed camera height or reference object is required. |
Automatic point detection supports short- and long-sleeved tops and outerwear, trousers, shorts and skirts. Not every garment produces every measurement. Shoes are a wardrobe category, but automatic shoe measurement is outside this iteration.
US-W2 ยท Get basic information from a garment photo
As a user, I want the app to suggest a garmentโs name, category and colors, so that I do not have to enter all basic information myself.
| # | Acceptance criterion |
|---|---|
| W2-1 | Given I have confirmed a captured photo, when I tap ๋ถ์ํ๊ธฐ and analysis succeeds, then an editable result shows a suggested name, category and one or two representative colors, together with the available measurements. |
| W2-2 | Given an unusable photo or a failed request, when analysis cannot finish, then the app shows an error and keeps the photo available for retry or retaking. It does not show the item as saved. |
US-W3 ยท Correct the result before saving
As a user, I want to edit the suggested information and add my own notes, so that the saved item reflects the garment I actually own.
| # | Acceptance criterion |
|---|---|
| W3-1 | Given the result screen, when I edit the name, category, optional details or measurements, then the edited values are used when saving. Changing category clears incompatible measurements. |
| W3-2 | Given the color selector, when I choose from the palette or tap a point in the photo, then the selected color can be added, up to five distinct colors. |
| W3-3 | Given an empty name, an invalid measurement or an overlong note, when I try to save, then the invalid input cannot be submitted. Names allow 1โ80 characters, entered measurements must be positive numbers, and notes allow up to 2,000 characters. Measurements are displayed to two decimal places in cm. |
US-W4 ยท Save and update a wardrobe item
As a user, I want to save a reviewed garment and edit it later, so that I can maintain my wardrobe without registering the same item again.
| # | Acceptance criterion |
|---|---|
| W4-1 | Given valid information, when I tap ์ท์ฅ์ ์ถ๊ฐ and saving succeeds, then the item appears in the wardrobe and remains available after reopening the app and reconnecting to the same backend. |
| W4-2 | Given a saved item, when I open it, change its information and tap ์ ์ฅํ๊ธฐ, then the existing item is updated. If saving fails, my entered values remain available for retry. |
US-W5 ยท Browse registered clothes
As a user, I want to browse my saved clothes by category, so that I can find an item and review its information.
| # | Acceptance criterion |
|---|---|
| W5-1 | Given saved items, when I open the wardrobe, then I see the item count and photo cards. Selecting ์ ์ฒด, ์์, ํ์, ์์ฐํฐ or ์ ๋ฐ filters the displayed cards. |
| W5-2 | Given an empty wardrobe or a loading failure, when the screen opens, then it shows an empty state with ์ดฌ์ํ๊ธฐ, or an error with ๋ค์ ๋ถ๋ฌ์ค๊ธฐ, respectively. Unsaved analysis drafts do not appear in the list. |
4.3 Outfit recommendation and conversational styling
StyleMate builds outfit recommendations using clothing items registered in the user's wardrobe. Recommendations may consider saved fit and style preferences, body-profile information when available, and current context such as weather or occasion. Users can refine outfits through natural-language conversation while preserving selected garments and previously specified constraints.
US-O1 ยท Get an outfit from my own wardrobe
As a user, I want to receive outfit recommendations made from clothes I actually own, so that I can decide what to wear without buying additional items.
| # | Acceptance criterion |
|---|---|
| O1-1 | Given I have enough registered clothing items, when I request an outfit recommendation, then every recommended garment corresponds to an item saved in my wardrobe. |
| O1-2 | Given relevant context such as weather, occasion, preferred fit, style, or body measurements is available, when an outfit is generated, then the system considers that information. |
| O1-3 | Given I select a particular registered garment, when I request an outfit around it, then the selected garment is included whenever a valid combination exists. |
| O1-4 | Given my wardrobe does not contain enough suitable items, when a complete outfit cannot be generated, then the system explains the limitation instead of presenting unregistered garments as owned. |
US-O2 ยท Refine an outfit through conversation
As a user, I want to refine an outfit through natural-language conversation, so that I can adjust my styling without starting over.
| # | Acceptance criterion |
|---|---|
| O2-1 | Given I have a current outfit, when I request a change such as "Make it more casual," then the system returns a revised outfit reflecting the request. |
| O2-2 | Given I ask to change only one part of an outfit, when the outfit is revised, then unrelated garments remain unchanged whenever possible. |
| O2-3 | Given I make multiple consecutive requests, when each request is processed, then the system preserves the latest outfit, previous constraints, and relevant styling context. |
| O2-4 | Given a requested change cannot be satisfied using registered garments, when I submit the request, then the current outfit remains available and the system explains the limitation. |
US-O3 ยท Keep selected garments fixed
As a user, I want to keep specific garments fixed while changing the rest of an outfit, so that StyleMate respects the clothing choices I have already made.
| # | Acceptance criterion |
|---|---|
| O3-1 | Given a recommended outfit, when I lock a garment or explicitly ask to keep it, then that garment becomes a fixed constraint for subsequent revisions. |
| O3-2 | Given one or more garments are locked, when I request another outfit modification, then the locked garments remain unchanged unless I explicitly unlock or replace them. |
| O3-3 | Given a new request conflicts with a locked garment, when both constraints cannot be satisfied, then the system explains the conflict rather than silently replacing the locked garment. |
US-O4 ยท Manage my style preferences
As a user, I want to review and update my styling preferences, so that future outfit recommendations reflect my current taste.
| # | Acceptance criterion |
|---|---|
| O4-1 | Given I have saved styling preferences, when I open My Style, then I can review my preferred fits, selected styles or moods, colors, and body-aware styling settings. |
| O4-2 | Given I modify a preference, when I save the change, then the updated preference is used in future outfit recommendations. |
| O4-3 | Given I have a confirmed body profile and body-aware styling is enabled, when I request an outfit, then the recommendation may use my saved body measurements and styling insights. |
| O4-4 | Given I have no body profile or disable body-aware styling, when I request an outfit, then I can still receive recommendations based on my wardrobe and other available context. |
US-O5 ยท Get product recommendations for wardrobe gaps
As a budget-conscious user, I want product recommendations only when they meaningfully complement my existing wardrobe, so that I can avoid unnecessary purchases.
| # | Acceptance criterion |
|---|---|
| O5-1 | Given a useful garment type is missing from my wardrobe, when the system identifies a meaningful wardrobe gap, then it may suggest a product that addresses the gap. |
| O5-2 | Given my budget, style preferences, body profile, and wardrobe information are available, when a product is recommended, then the system considers the relevant information. |
| O5-3 | Given a product is suggested, when I view the recommendation, then the system explains how the product coordinates with clothes I already own. |
| O5-4 | Given no meaningful wardrobe gap is identified, when I use StyleMate, then purchasing new clothing is not required or presented as necessary. |
4.4 Login and onboarding โ Hyeon U Jeong
Users can start StyleMate without an account, record their preferences and clothes on the device, and sign in later if they want to keep data in an account. This section describes the implemented login/onboarding flow after PR #26. Garment capture and body-measurement requirements remain in their respective sections, with the integrated account and onboarding behavior specified here.
US-L1 ยท Create an account and sign in
As a user, I want to create an account with an app-specific ID and password, so that I can access my own saved information.
| # | Acceptance criterion |
|---|---|
| L1-1 | Given My Profile or the onboarding welcome screen, when I select ๋ก๊ทธ์ธ, then a dialog provides ID, masked password, login, close, and a ํ์๊ฐ์ link. |
| L1-2 | Given the registration screen, when I provide a unique ID of 4โ20 lowercase English letters, digits or underscores, a password of 8โ64 characters and matching confirmation, then registration signs me in and returns me to My Profile. No name, email or phone number is required. |
| L1-3 | Given invalid credentials or registration input, when I submit, then I receive an actionable error and can correct my input. Unknown IDs and wrong passwords use the same login error. Submission is disabled while a request is running. |
Social login, password recovery and account deletion are outside this feature.
US-L2 ยท Keep and end my login
As a user, I want to remain signed in after reopening the app and be able to log out, so that I control when my account is used.
| # | Acceptance criterion |
|---|---|
| L2-1 | Given a valid saved login, when I reopen the app, then my account is restored without entering the password again. Login expires 30 days after issuance; ordinary use does not extend that period. |
| L2-2 | Given an expired or revoked login, when the app checks it or an account request is rejected, then account screens are cleared and the app returns to guest data with a re-login notice. A temporary connection failure alone does not log me out. |
| L2-3 | Given I select ๋ก๊ทธ์์, when the server confirms it, then this login ends and guest data is shown. If logout fails because of connectivity, I remain signed in and can retry. Other devices' logins are not ended. |
US-L3 ยท Keep guest and account data separate
As a user, I want to use the app before registration without mixing my device data with another account's records.
| # | Acceptance criterion |
|---|---|
| L3-1 | Given I am a guest, when I save preferences, reviewed body measurements, garments or outfits, then they remain on this device after restarting the app. The app explains that uninstalling or clearing app data can remove them. |
| L3-2 | Given I sign in, sign out or switch accounts, when the active identity changes, then the displayed records belong to that identity. Login alone does not upload or replace guest records. |
| L3-3 | Given an offline device, when I open locally available guest information or cached account profile/wardrobe metadata, then it can still be displayed. Login, new AI analysis and account saves require a server connection; account photos and saved outfits are not fully available offline. |
US-L4 ยท Bring device data into my account
As a signed-in user, I want to choose when to import this device's information and whether to replace conflicts, so that existing account data is not overwritten unexpectedly.
| # | Acceptance criterion |
|---|---|
| L4-1 | Given I am signed in, when I tap the import icon beside ๋ง์ดํ๋กํ, then a dialog shows the total and profile/garment/outfit counts with ์ทจ์ and ๊ฐ์ ธ์ค๊ธฐ. It does not open automatically on login, registration or app restart. |
| L4-2 | Given a matching record already exists, when I review conflicts, then the account value is kept unless I explicitly select replacement. Names alone do not make two garments the same record. |
| L4-3 | Given an import is interrupted or a response is lost, when I retry, then confirmed records are not duplicated and unfinished records can be retried. Garment/outfit relationships and guest originals are retained. If an account record changes after review, I must review it again. |
This is an explicit copy into the account, not continuous synchronization between devices and guest storage.
US-L5 ยท Edit my style and open body details
As a user, I want my fit, mood and color choices together in My Profile, so that I can update my preferences even without a body analysis.
| # | Acceptance criterion |
|---|---|
| L5-1 | Given My Profile, when I toggle fit or mood choices, then the change is saved directly. Multiple choices are allowed; an empty confirmed fit selection uses regular. A failed account save restores the previous choice. |
| L5-2 | Given a new profile, when I open favorite colors, then the list starts empty. I can explicitly save up to eight distinct colors; leaving with the back arrow discards edits. |
| L5-3 | Given the ์ฒดํ ๋ฐธ๋ฐ์ค ์ฐธ๊ณ card, when I open it, then a separate screen shows the existing measurements, or offers analysis if none exist. Deleting body information does not delete style preferences. |
These requirements cover preference storage and editing. Recommendation behavior and conversational styling remain in ยง4.3.
US-N1 ยท Start with optional onboarding
As a new user, I want a short setup that I can skip, so that I can enter the app before completing every profile and wardrobe detail.
| # | Acceptance criterion |
|---|---|
| N1-1 | Given incomplete onboarding, when I start the app, then I see welcome, fit, mood, optional body input/results, wardrobe setup/registration and completion in an eight-step flow. The shared header has one skip action at the upper right. |
| N1-2 | Given the fit step, when it first opens, then nothing is selected and every choice can be deselected. Continuing with no selection confirms regular. Skipping body analysis also skips its result screen. |
| N1-3 | Given wardrobe setup, when I add clothes, then the app shows top, bottom and shoe counts in equal-width columns with visual dividers. Two tops, two bottoms and one pair of shoes are suggestions, not completion requirements. Registration repeats through Step 7 and returns to Step 6. |
US-N2 ยท Resume and finish setup
As a user, I want to continue an interrupted setup and finish without logging in, so that partial setup does not block use of the app.
| # | Acceptance criterion |
|---|---|
| N2-1 | Given I close the app partway through setup, when I reopen it, then the last saved step, selections, numeric body input, analysis result and garment-editor draft can be restored. Body photos must be selected again; a missing temporary capture requires retaking the photo. |
| N2-2 | Given I skip every optional input, when I finish, then the app opens normally and does not force onboarding again. Entering outfit recommendations without body information shows the existing analysis-required guidance. |
| N2-3 | Given the completion screen, when I continue as a guest or choose login/registration, then local information is retained and login stays optional. Shoes can be registered, while the existing outfit combination remains top/bottom with optional outerwear. |
5. Non-functional Requirements
5.1 Body analysis
| ID | Requirement | Target | Iteration 1 status |
|---|---|---|---|
| NFR-B1 | Response latency | Results within 5 s of tapping ๋ถ์ํ๊ธฐ (Wi-Fi, server path). | About 0.5 s of server time per analysis on a laptop CPU once the model is loaded. Not yet measured on the deployed VM. |
| NFR-B2 | Accuracy | Lengths within 2.5 cm and chest/waist/hip within 4 cm of a tape measure, for photos in underwear or tight clothing. | Synthetic 3D bodies: mean error 0.55 cm (98.7 % accuracy). Validation with real photos and tape measurements is planned. |
| NFR-B3 | Robustness | Every unusable photo gets a specific retake hint; no input crashes the server. | Stress-tested with 11 image formats, sizes from 30ร40 to 6000ร8000, and broken or wrong photos: no server errors. |
| NFR-B4 | Honest results | Loose clothing never silently produces wrong numbers: it is detected and the user is warned. | Detection on held-out synthetic bodies: loose tops 100 %, loose bottoms 96 %, false alarms โค 1.1 %. |
| NFR-B5 | Privacy | Photos never persisted and never sent to third parties; HTTPS in production. | Photos are processed in memory only; the app strips photo metadata (EXIF) before upload. |
| NFR-B6 | Cost | No per-analysis cost; runs on the team's CPU-only server (2 vCPU, 8 GiB). | Open-source models only; about 340 MiB memory per server process. |
| NFR-B7 | Inclusive language | Insights never use weight, health or "obesity" wording. | Checked by unit tests. |
5.2 Wardrobe
| ID | Requirement | Target | Iteration 1 status |
|---|---|---|---|
| NFR-W1 | Responsive capture | Keep the camera usable while point detection runs; avoid displaying points from an outdated camera position. | Detection runs asynchronously. Old or mismatched results are discarded. Near-real-time updates depend on the network and server; deployed latency has not been benchmarked. |
| NFR-W2 | Reviewable measurements | Let users inspect points and correct values before saving. | Automatic and manual point selection, editable cm values and measurement-source data are implemented. Accuracy against tape measurements has not been established. |
| NFR-W3 | Recoverable failures | A failed analysis or save must not silently appear successful or unnecessarily discard the current input. | Progress and error states are shown; photos or edited values remain available for retry. |
| NFR-W4 | Consistent interaction | Use the same typography, spacing, cards and primary actions as body analysis. | The wardrobe reuses the shared theme and screen components. |
| NFR-W5 | Controlled image and credential handling | Keep AI credentials on the backend and define how garment photos are processed and retained. | Preview frames are sent to the backend for point detection. The confirmed photo is sent to Gemini on analysis. Guest drafts/photos are stored on the device; signed-in analysis stores an owner-linked draft and normalized photo on the server. Account records and photos require the owner's valid login. Metadata is removed from server-stored photos. |
5.3 Outfit recommendation and conversational styling
| ID | Requirement | Target | Iteration 1 status |
|---|---|---|---|
| NFR-O1 | Wardrobe grounding | Every garment presented as owned must reference a saved wardrobe item. The system must not fabricate unregistered garments. | Planned; to be validated after recommendation integration. |
| NFR-O2 | Constraint preservation | Explicitly locked garments must remain unchanged until the user unlocks or replaces them. Requests targeting one outfit slot should not unnecessarily modify other slots. | Planned; multi-turn testing pending. |
| NFR-O3 | Conversation continuity | The latest outfit, fixed garments, and relevant constraints must remain available throughout an active refinement session. | Session-state management is planned. |
| NFR-O4 | Response latency | A normal outfit recommendation or refinement request should complete within 10 seconds under stable network conditions. | Not yet benchmarked. |
| NFR-O5 | Recoverable failures | Failed recommendation requests must preserve the last valid outfit and active constraints, allowing the user to retry. | Failure handling is planned. |
| NFR-O6 | Preference consistency | Saved fit, style, and body-profile settings should be applied consistently unless overridden by an explicit request. | To be validated during recommendation integration. |
| NFR-O7 | Purchase restraint | Outfit recommendations must remain usable without purchasing new items. Product suggestions should appear only for meaningful wardrobe gaps. | To be validated with wardrobe-gap scenarios. |
5.4 Login and onboarding
| ID | Requirement | Target | Current status |
|---|---|---|---|
| NFR-L1 | Account isolation | Only the authenticated owner can read or modify account data; identity changes must clear previous screen state. | Owner-filtered APIs and account-scoped storage/ViewModels implemented; foreign records are hidden. |
| NFR-L2 | Credential handling | Do not persist plaintext passwords or return password hashes to the app. Protect the persisted login credential. | Django password hashing, server token hashes and Android Keystore encryption implemented. |
| NFR-L3 | Bounded authentication attempts | Limit repeated failures without exposing whether an ID exists. | Five failures within five minutes lock the ID for five minutes; login/registration share 20 requests per IP per minute. |
| NFR-L4 | Recoverable storage and network failures | Preserve existing local files and user input on failure; avoid duplicate imports. | Atomic local file replacement, explicit errors, item-level import retry records and version checks implemented. |
| NFR-L5 | Consistent data retrieval | A large account must not fail simply because its whole list exceeds one response limit. | Bounded paginated lists; replace the wardrobe cache only after every page succeeds. |
| NFR-N1 | Optional and resumable setup | Setup completion is independent of body analysis, garment targets and account registration. | Separate local progress/completion state and reusable body/wardrobe screens implemented. |
| NFR-N2 | Consistent interaction | Reuse the shared cream/terracotta theme, typography and header; avoid duplicate skip actions. | Shared components, one upper-right skip action and the approved Step 6 count layout implemented. |
6. User Interface Requirements
6.1 Body analysis

This wireframe illustrates the body-analysis subflow. The integrated eight-step onboarding and current My Profile layout are shown in ยง6.4; body analysis is optional during onboarding.
| Screen | What it does | Allowed inputs | Not allowed / failure handling | What happens on click |
|---|---|---|---|---|
| 1 Capture guide | Shows how to take the photos (front and side figures, 5 rules, privacy note). | ์ฌ์ง ์ฐ์ผ๋ฌ ๊ฐ๊ธฐ, ๊ฑด๋๋ฐ๊ธฐ | โ | ์ฌ์ง ์ฐ์ผ๋ฌ ๊ฐ๊ธฐ โ photo input. ๊ฑด๋๋ฐ๊ธฐ โ main app (profile can be created later). |
| 2 Photo input | Collects front and side photos, height, weight and gender. Says tight clothing gives the best result. | Photos from ์นด๋ฉ๋ผ or ์จ๋ฒ; height 100โ220 cm; weight 30โ200 kg (optional); gender ์ฌ์ฑ / ๋จ์ฑ / ์ ํ ์ ํจ | ๋ถ์ํ๊ธฐ disabled without both photos and a valid height. Out-of-range values are shown in red. An unreadable photo shows a banner and keeps the previous photo (2a). | ๋ถ์ํ๊ธฐ โ analyzing. โ โ capture guide. โ on a photo removes it. |
| 3 Analyzing | Progress indicator while the server analyses the photos. | โ | Rejected photo โ back to input with a specific hint (2b). No connection or server error โ back to input with a retry message. | โ |
| 4 Results (AI๊ฐ ์ถ์ ํ ์ฒดํ) | Body figure with 5 pinned values, tappable body parts, warnings, insight cards and full measurements. Re-analysis also shows the existing fit/style controls. | Tap a body part; ์์ (5โ250 cm); ์ ์ฒด ์น์ ๋ณด๊ธฐ. Outside onboarding: one of 3 fits and at most 3 styles. | An edit outside 5โ250 cm cannot be saved. Onboarding uses the separate fit/mood steps. | Body part โ detail card (4a). ์์ โ edit dialog. ๋ค์ ์ฐ๊ธฐ or โ โ photo input. ํ์ธํ๊ณ ๊ณ์ํ๊ธฐ โ onboarding Step 6; ์ ์ฅํ๊ธฐ after re-analysis โ main app. |
| 5 My Profile / body details | My Profile shows account controls and style preferences; ์ฒดํ ๋ฐธ๋ฐ์ค ์ฐธ๊ณ opens the separate confirmed body profile, insights, measurements, basic information and disclaimer. | Open body details; ์ฒดํ ๋ค์ ๋ถ์ํ๊ธฐ; ์ฒดํ ํ๋กํ ์ญ์ . | Delete asks for confirmation first and retains style preferences. | Body card โ details. Re-analysis โ flow with values pre-filled. Delete โ confirm โ body profile removed. |
6.2 Wardrobe
The wireframe shows garment capture, review, analysis and saving. Red branches show three failure paths: opening the wardrobe when the server is unreachable, analyzing a photo without a garment, and entering 0 cm in a measurement field. Each error screen includes the next action for recovery.

| Screen | What it does | Allowed inputs | Not allowed / failure handling | What happens on click |
|---|---|---|---|---|
| 1 Wardrobe | Shows saved items, count and category filters. | Filter, photo card, ์ดฌ์ํ๊ธฐ; retry after a load error. | Camera permission denial does not block browsing. Loading failures show ๋ค์ ๋ถ๋ฌ์ค๊ธฐ. | Card โ editor. ์ดฌ์ํ๊ธฐ โ permission check and capture. |
| 2 Capture | Shows the live camera and available points. | Garment type and ์ดฌ์. | Capture requires usable AR tracking. Unsupported AR or missing permission prevents capture. | ์ดฌ์ โ frozen measurement review. |
| 3 Measurement review | Shows points and calculated lengths on the frozen image. | Measurement selection, manual endpoints, ์ฌ์ดฌ์, ํ์ธ. | ํ์ธ is disabled without a completed measurement, during detection, or with an unfinished point pair. | ํ์ธ โ photo confirmation. ์ฌ์ดฌ์ โ live camera. |
| 4 Photo confirmation | Shows the photo and measurement summary. | ๋ค์ ์ดฌ์ and ๋ถ์ํ๊ธฐ. | While analyzing, duplicate analysis is disabled. Failure keeps the photo and shows a retry or retake message. | ๋ถ์ํ๊ธฐ โ progress, then editor on success. |
| 5 Garment editor | Edits basic information, optional details, measurements and notes. | Name, category, colors, applicable details, positive cm values, notes. | Invalid values prevent saving. Category changes clear measurements; subtype changes remove inapplicable fields. Saving disables duplicate submissions. | ์ท์ฅ์ ์ถ๊ฐ or ์ ์ฅํ๊ธฐ โ wardrobe after success. |
6.3 Outfit recommendation and conversational styling
The main styling interface allows users to receive outfit recommendations from their registered wardrobe, refine outfits through natural-language conversation, and manage styling preferences.
The primary navigation includes Today's Outfit, AI, Wardrobe, and My Style.
Screen descriptions
| Screen | What it does | Allowed inputs | Not allowed / failure handling | What happens on click |
|---|---|---|---|---|
| 1 Today's Outfit | Displays a recommended outfit composed of registered wardrobe items, together with available weather or occasion context and a styling explanation. | Select a garment, request another outfit, lock an item, open AI refinement, or confirm an outfit. | If the wardrobe cannot satisfy the request, the system explains the limitation. Failed requests preserve the previous valid outfit. | Garment โ item details. Refine โ AI conversation. Confirm โ select the current outfit for the session. |
| 2 AI Conversation | Lets users modify their current outfit through natural-language instructions while preserving the latest outfit and relevant constraints. | Enter text, select quick actions, request garment replacements, lock or unlock items. | Locked garments cannot be replaced without explicit permission. Impossible or conflicting requests display an explanation. | Send โ revised outfit. Lock/unlock โ update active constraints. |
| 3 Refined Outfit | Displays the updated garment combination and explains which items changed. | Accept the revised outfit or continue editing. | Unknown garment IDs, invalid combinations, and unauthorized changes to locked items cannot be accepted. | Confirm โ select revised outfit. Continue โ AI conversation. |
| 4 My Style | Displays saved preferences, including preferred fits, styles, colors, and body-aware styling options. | Edit preferences, save changes, enable or disable body-aware styling. | A body profile is optional. Missing body measurements must not block wardrobe-based recommendations. | Save โ update preferences. Body profile โ saved profile or body-analysis flow. |
| 5 Product Suggestion | Displays optional product recommendations when a meaningful wardrobe gap is identified. | View a recommendation or dismiss it. | External products must not be presented as garments already owned. Purchasing is never required. | View โ product details when supported. Dismiss โ return to styling. |
Outfit recommendation flow
- The user opens Today's Outfit and requests a wardrobe-based recommendation.
- StyleMate selects suitable garments from the user's saved wardrobe using available context and preferences.
- The user reviews the suggested outfit and may confirm it or request changes.
- If the user opens AI Conversation, the current outfit and explicit constraints are preserved.
- The user may request changes such as "Make it more casual," "Change only the shoes," or "Keep these jeans."
- StyleMate revises only the permitted parts of the outfit and validates the result against registered wardrobe items.
- The user may accept the revised outfit or continue refining it.
If a request cannot be satisfied, the system keeps the last valid outfit and explains the limitation instead of inventing a garment or silently changing a locked item.
Failure handling
| Scenario | Expected behavior |
|---|---|
| Insufficient wardrobe items | Explain which garment categories are missing instead of generating an invalid outfit. |
| Conflict with a locked garment | Preserve the locked garment and explain the conflicting request. |
| Network or recommendation failure | Keep the latest valid outfit and active constraints; provide a retry option. |
| Missing body profile | Continue outfit recommendation using wardrobe items and other available preferences. |
| Unavailable product recommendation | Keep wardrobe-based outfit recommendation usable without requiring a purchase. |
6.4 Login and onboarding
The following screen flows show the normal actions and recovery paths. Red branches name the failure trigger and the next recovery action.



| Screen | What it does | Allowed inputs | Not allowed / failure handling | What happens on click |
|---|---|---|---|---|
| My Profile | Shows login/account controls, fit/mood choices, favorite colors and the body-details entry. | Login/logout; fit and mood toggles; color editor; body details; manual import while signed in. | Guest data warning; account save failure restores the previous selection. | Login โ dialog; colors/body โ separate screen; import icon โ confirmation. |
| Login dialog | Accepts ID/password and links to registration. | ID, password, visibility toggle, close, login, registration. | Wrong credentials retain the dialog and show one common error. Requests and links are disabled while busy; a rate-limit countdown blocks resubmission. | Login success โ My Profile; ํ์๊ฐ์ โ registration. |
| Registration | Collects only ID, password and confirmation. | Required credentials, password visibility, back, register. | ID/password rules, mismatch, duplicate ID and connectivity failures are shown without discarding the form. | Success โ signed-in My Profile; back โ login. |
| Import confirmation / conflicts | Shows candidate counts, then replacement choices when needed. | ์ทจ์, ๊ฐ์ ธ์ค๊ธฐ; explicit replacement checkboxes. | Changed account versions require re-review. Partial failures keep unfinished items retryable; closing a loading dialog prevents a late reopening. | Confirm โ review/import โ result; retry โ unfinished imports or profile refresh. |
| 1 Welcome | Introduces StyleMate. | ์์ํ๊ธฐ, login link, upper-right skip. | Starting does not require an account. | Start โ 2; login โ dialog; skip โ main app. |
| 2 Fit / 3 Mood | Collects multiple preferences. | Toggle choices, next, back, upper-right skip. | Fit starts unselected; continue with no fit โ regular. | Continue โ next step; back preserves the saved draft. |
| 4 Body input / 5 Results | Reuses the body-photo input and editable measurement results. | Front/side photos, height, optional weight/gender; review/edit; skip. | Analysis needs both photos and valid inputs. Invalid photos/server failures keep input for retry. Analysis in progress prevents duplicate requests and navigation. | Analyze โ 5; confirm โ 6; skip body โ 6. Body measurement details remain in ยง6.1. |
| 6 Wardrobe setup / 7 Registration | Shows category counts and repeats garment registration. | Add top/bottom/shoes, edit a registered item, next, back, skip; existing garment editor actions. | Targets are optional. Registration failures preserve drafts; no separate lower skip action. | Add/edit โ 7; save/cancel โ 6; next/skip โ 8. Capture/measurement details remain in ยง6.2. |
| 8 Completion | Summarizes style and registered garments. | First outfit entry, optional login/registration, back. | Missing body information leads to the existing guidance after entering the main app. | Continue โ main app; login โ complete local onboarding, then authentication. |