Skip to content

beminder/BeautyMinder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

BeautyMinder πŸ’„βœ¨

codecov OpenAI API Documentation Continuous Delivery & Jacoco CodeCoverage License: MIT

Overview 🌟

πŸ‡ΊπŸ‡Έ English

BeautyMinder is the culmination of our capstone design class, commenced in September 2023.

A comprehensive cosmetics management app, meticulously tuned to individual skin types as determined through the Baumann skin type assessment.

It integrates advanced technologies such as Flutter, AWS EC2, MongoDB, and Redis to provide a seamless and personalized user experience.


πŸ‡°πŸ‡· ν•œκ΅­μ–΄

BeautyMinderλŠ” 2023λ…„ 9~12μ›”, 3달간 μ œμž‘λœ μΊ‘μŠ€ν†€ λ””μžμΈ μˆ˜μ—…μ˜ κ²°κ³Όλ¬Όμž…λ‹ˆλ‹€.

Baumann ν”ΌλΆ€ μœ ν˜• 평가λ₯Ό 기반으둜 ν•œ κ°œλ³„ ν”ΌλΆ€ μœ ν˜•μ— 맞좘 쒅합적인 ν™”μž₯ν’ˆ 관리 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€.

Flutter, Docker, ELK, Redis λ“±μ˜ κΈ°μˆ μ„ ν†΅ν•©ν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ λ§žμΆ€ν˜• κ²½ν—˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

Key Features πŸŽ‰

1. Cosmetic Management

  • Expiry Tracking (μœ ν†΅κΈ°ν•œ 관리): Automate management of product lifecycles with integrated expiration date monitoring.
  • OCR Integration: Streamline product registration using Optical Character Recognition for effortless management.
  • Alerts & Reminders (μœ ν†΅κΈ°ν•œ 만료 μ•Œλ¦Ό): Receive alerts for impending product expirations and routine reminders, enhancing personal skincare discipline.
  • Skincare Diary (루틴 κΈ°λŠ₯): Document and track your skincare journey with timeline and album features, observing tangible skin transformations.

2. Baumann Skin Type-Based Product Recommendations

  • Discover Your Skin Type (λ°”μš°λ§Œ νƒ€μž… 뢄석): Discover your unique skin type through the Baumann skin type assessment.
  • Customized Recommendations (λ°”μš°λ§Œ νƒ€μž…μ— λ”°λ₯Έ μΆ”μ²œ): Receive tailored product suggestions aligned with your specific skin type needs.

3. Information Discovery

  • Summarized Reviews via GPT (GPT 리뷰 μš”μ•½): Gain insights with AI-powered summaries of comprehensive product reviews.
  • Websocket Integration (λ°”μš°λ§Œ μ‹€μ‹œκ°„ μ±„νŒ…): Engage in active discussions with peers sharing similar Baumann skin types for communal knowledge exchange.

Technology Stack πŸ› οΈ

Important

Flutter, Spring Boot v3.1

Area Technology
Frontend Flutter
Backend AWS EC2 (Docker: Spring Boot+Redis+Logstash+FastAPI)
Database MongoDB (hosted on Atlas), AWS S3
Real-Time Metrics Redis
WebSocket STOMP
Search Engine Elasticsearch (AWS OpenSearch)
Log analysis Logstash, Kibana (AWS OpenSearch Dashboard)
Text Summarization GPT API
Image OCR Google Cloud Vision
Notification Svcs Naver Cloud SMS API, SMTP Protocol
DevOps JUnit5, Locust, GitHub Actions, AWS Elastic LoadBalancer

System Architecture πŸ—οΈ

Group 10 sa

Baumann Skin Type Survey

types

  1. Individual Question Score Calculation:

For each question in the survey, a score is calculated based on the selected option. The scoring function can be represented as:

$$ \text{{score}}(q_i) = \begin{cases} 1.0, & \text{if option 1 is selected;} \\ 2.0, & \text{if option 2 is selected;} \\ 3.0, & \text{if option 3 is selected;} \\ 4.0, & \text{if option 4 is selected;} \\ 2.5, & \text{if option 5 is selected (special case);} \\ 0.0, & \text{if the choice is invalid or for specific two-choice questions.} \end{cases} $$

For certain two-choice questions, a different rule applies:

$$ \text{{score}}(q_i) = \begin{cases} 0.0, & \text{if option 1 is selected;} \\ 5.0, & \text{if option 2 is selected.} \end{cases} $$

  1. Aggregate Category Scores:

For each category (A, B, C, D), the total score is the sum of the individual question scores within that category. If (n) is the number of questions in a category, and (q_i) represents each question:

$$ \text{{Total Score for a Category}} = \sum_{i=1}^{n} \text{{score}}(q_i) $$

  1. Moisture Score Calculation:

The moisture score is calculated specifically from certain questions, represented as (m_i). If we assume there are (k) questions contributing to the moisture score:

$$ \text{{Moisture Score}} = \left( \frac{\sum_{i=1}^{k} \text{{score}}(m_i)}{16} \right) \times 100 $$

  1. Skin Type Determination:

Each category score is compared to a threshold to determine the skin type descriptor. This can be represented with the following conditions:

$$ \text{{Skin Type}} = \begin{cases} O, & \text{if A score} \geq 22; \\ D, & \text{otherwise;} \end{cases} ] [ \begin{cases} R, & \text{if B score} \geq 32; \\ S, & \text{otherwise;} \end{cases} ] [ \begin{cases} P, & \text{if C score} \geq 28.5; \\ N, & \text{otherwise;} \end{cases} ] [ \begin{cases} W, & \text{if D score} \geq 42.5; \\ T, & \text{otherwise.} \end{cases} $$

  1. Result Compilation:

The final skin type is a string concatenation of the individual skin type descriptors from each category, represented as:

$$ \text{{Final Skin Type}} = \text{{Skin Type from A}} + \text{{Skin Type from B}} + \text{{Skin Type from C}} + \text{{Skin Type from D}} $$

Elasticsearch

Important

μ€μ „ν•œλ‹’ + N-gram

image

OCR (using Google Vision)

ocr.mp4

Email verification

email

Team Members πŸ‘₯

Name Role Major
Jieun Lee (LeeZEun) Frontend Software Engineering
Suji Bae (Bae-suji) Frontend Software Engineering
Yoon Wook Cho (yoonwook) Frontend Software Engineering
Heesang Kwak (KWAKMANBO) Frontend Software Engineering
Seok Won Choi (Alfex4936) Backend Software Engineering

License

This project is licensed under the MIT license. Feel free to edit and distribute this template as you like.