Curly hair care is a deeply personal part of many people's identities, yet most people with curly hair spend years using the wrong products and routines because generic advice doesn't account for their unique hair type, porosity, or goals. As someone with curly hair, I experienced this firsthand, spending hours watching TikToks and YouTube videos just to piece together advice with no centralized source.
I wanted to build something that felt like a knowledgeable friend who understood your specific hair, not a one-size-fits-all guide. Curl Doctor is a personalized mobile app that takes users through a detailed hair quiz, then generates a custom routine, product recommendations, and daily tasks tailored to their exact profile. It also includes tools to track wash days, log hair progress through a photo journal, and get product recommendations based on curl type.
Planning a proper curly hair routine is overwhelming. According to surveys within the curly hair community on Reddit (r/curlyhair, 2M+ members), most users report spending months or years using the wrong products before understanding their hair's actual needs, since curl pattern, porosity, density, and scalp condition all require completely different approaches.
Existing resources are extremely fragmented, YouTube for styling, Reddit for product recommendations, one app for ingredient checking, a blog for routine advice, but none of them know a person's actual hair profile. Looking at competitors like Curly Hair Scanner & Care Plan and Hair Snap Health & Style Scan confirmed this gap: strong single features (ingredient checking, AI photo scans) but no personalization, no routine builder, and no progress tracking tied to an actual hair profile. That gap is what Curl Doctor was built to fill, acting as a single, personalized hub that learns each person's hair profile through a quiz and turns it into a routine, product list, daily tasks, and wash day steps.
Before any UI work, I mapped the user flow with rough sketches: onboarding → quiz → dashboard → feature tabs. From there I prototyped the landing, onboarding, and quiz screens in Figma before moving into code.
For the visual language, I looked at wellness and personal-care apps to find a tone that felt caring and grounded rather than like a generic productivity tool. That translated into rounded corners throughout, a warm cream base instead of a stark white interface, and a small distinct color per dashboard section (cream, black, rust, and mint) to add variety without loud colors. Typography uses the device's native system font (San Francisco on iOS) at bold weights for headings and regular weights for body text, so everything renders crisply and feels familiar.
From the sketches I moved into Figma to prototype the landing, onboarding, and quiz screens before writing any code.
Hair Quiz — an 11-question quiz covering curl pattern, porosity, density, scalp type, concerns, and goals.
Personalized Routine — daily, weekly, monthly, and quarterly steps generated from the quiz answers.
Product Recommendations — real products scored and matched against the user's hair concerns and curl type.
Personalized Dashboard — daily tasks, a curl streak tracker, wash day status, and a progress overview.
Wash Day Routine — a step-by-step checklist personalized to porosity, scalp type, and concerns.
Weekly Check-In — a quick 3-question check-in on curls, scalp, and routine consistency, logged over time.
Photo Journal — logging wash day photos with captions to visually track hair progress.
Profile & Editable Hair Data — users can update their hair profile at any time and have the routine, tasks, and products regenerate automatically.
Curl Doctor was built with React Native and Expo Router for file-based navigation, chosen for familiarity and because every file inside /app becomes a screen automatically with no manual route registration. There's no backend: all user data (quiz answers, curl streak, completed tasks, wash day dates, weekly check-ins, and journal entries) is stored locally on-device with AsyncStorage, keeping the app fast, free to run, and fully private.
The 11-question quiz is driven by a single dynamic component that handles text input, single-select, and multi-select questions, with an animated progress bar tracking completion. On submit, the routine page pulls the saved quiz answers and passes them into a generateRoutine() function that builds a full plan across four timeframes based on the user's concerns, goals, porosity, scalp type, heat use, and whether their hair is color-treated.
The dashboard reloads every time it comes into focus so the streak and checklist stay accurate: the streak is tracked across a 7-day array, and completing all daily tasks marks the current day and updates the count. The wash day checklist works the same way through generateWashDaySteps(), generating personalized steps (for example, a biweekly protein treatment for high-porosity hair, or a clarifying step for oily scalps) that only let the user complete the day once every step is checked off.
Product recommendations work off a JSON catalog of real products tagged by hair concern and curl type. Each product is scored by counting how many tags match the user's profile, then sorted so the best matches surface first. The photo journal uses expo-image-picker to take or select a photo, then stores the photo URI, caption, and date in AsyncStorage, rendering entries in a two-column grid with the most recent first. The profile page reuses the same quiz question data (filtered to drop the name question) so editing a hair profile automatically regenerates the routine, dashboard tasks, and product matches on the next load.
Curl Doctor was my first full app coding project, and it taught me how much thought goes into making an app feel personal. The biggest challenge was making sure the quiz answers had a meaningful effect in every part of the app, which took real planning around how the data flowed. I also underestimated how much visual design affects how people interact with an app: my first dashboard felt flat and boring, and iterating on spacing and color made it feel much calmer to use. It gave me a lot of confidence handling data, structuring a multi-screen app, and thinking through user experience end to end.
The current version has real limitations: AsyncStorage works well for small amounts of local data but has size constraints as journal photos and check-in history grow, and login currently uses hardcoded demo credentials rather than real authentication, so it doesn't support multiple users. Planned next steps include daily task reminders and a weekly check-in nudge, replacing the hardcoded ingredient list with real AI-based ingredient analysis, and a dedicated wash day streak separate from the daily task streak.
The app isn't published to the App Store, but you can pull the code and run it locally with Expo, then sign in with the demo account below.
Email: hello@curldoctor.com
Password: curl2025
A full walkthrough of Curl Doctor, from onboarding through the quiz, dashboard, routine, and photo journal.