Skip to content

πŸ‘΅πŸ»A-dinger: μΉ˜λ§€ν™˜μž μΌ€μ–΄ μ„œλΉ„μŠ€

Notifications You must be signed in to change notification settings

Alzheimer-dinger/FE

Repository files navigation

A-dinger (μ•ŒμΈ ν•˜μ΄λ¨Έλ”©κ±°) β€” 치맀 ν™˜μž μΌ€μ–΄ μ›Ήμ•±

Swagger API Docs Badge MIT License Badge

λ³΄ν˜Έμžβ€“ν™˜μž μ—°κ²°, 톡화 기둝 뢄석, 감정 리포트, λ¦¬λ§ˆμΈλ”μ™€ μ•Œλ¦Όμ„ μ œκ³΅ν•˜λŠ” 치맀 ν™˜μž μΌ€μ–΄ μ„œλΉ„μŠ€


πŸ“’ λͺ©μ°¨

ν”„λ‘œμ νŠΈ μ†Œκ°œ | νŒ€μ› ꡬ성 | 기술 μŠ€νƒ | Convention | 개발 κΈ°κ°„ | 핡심 κΈ°λŠ₯ | νŽ˜μ΄μ§€λ³„ κΈ°λŠ₯

맨 μœ„λ‘œ ‴


πŸ“– ν”„λ‘œμ νŠΈ μ†Œκ°œ

λ³Έ ν”„λ‘œμ νŠΈλŠ” 치맀 ν™˜μžμ™€ 보호자λ₯Ό μœ„ν•œ AI λ™λ°˜ μΌ€μ–΄ μ›Ήμ•±μž…λ‹ˆλ‹€. ν™˜μžλŠ” μ•±μ—μ„œ 인곡지λŠ₯κ³Ό μ‹€μ‹œκ°„ λŒ€ν™”(μŒμ„±/μžλ§‰)둜 일상을 κ³΅μœ ν•˜κ³ , λ³΄ν˜ΈμžλŠ” μ—°κ²° 계정을 톡해 심리 μƒνƒœμ™€ 이상 μ§•ν›„λ₯Ό λͺ¨λ‹ˆν„°λ§ν•©λ‹ˆλ‹€. ν•˜λ£¨ν•˜λ£¨ μΆ•μ λ˜λŠ” λŒ€ν™”Β·ν™œλ™ 데이터λ₯Ό 뢄석해 일·주·월 λ‹¨μœ„ μ’…ν•© 리포트 (감정 νƒ€μž„λΌμΈ, 참여도, 평균 ν†΅ν™”μ‹œκ°„, μœ„ν—˜ μ§€ν‘œ)λ₯Ό μ œκ³΅ν•˜μ—¬ μ„Έμ‹¬ν•œ λŒλ΄„ κ³„νš μˆ˜λ¦½μ„ λ•μŠ΅λ‹ˆλ‹€.

  • 원클릭 톡화 흐름 κ΅¬ν˜„ (λŒ€κΈ° β†’ μ§„ν–‰ β†’ μ’…λ£Œ μƒνƒœ 관리)
  • WebSocket 기반 μ‹€μ‹œκ°„ μžλ§‰ 및 응닡 λ Œλ”λ§
  • λ³΄ν˜Έμžβ€“ν™˜μž 관계 관리(μš”μ²­/승인/ν•΄μ œ) 및 λ¦¬λ§ˆμΈλ”/μ•Œλ¦Ό
  • PWA/FCM 기반 ν‘Έμ‹œ μ•Œλ¦Ό, μ›Ή λŒ€μ‹œλ³΄λ“œλ‘œ 리포트 μ—΄λžŒ

πŸ‘₯ νŒ€μ› ꡬ성

λ…Έμ˜ˆμ› ν”„λ‘œν•„ 이미지
λ…Έμ˜ˆμ›

Frontend
UI/UX Β· 톡화 WebSocket
API 연동 Β· CD Β· FCM
κΉ€νš¨μ‹  ν”„λ‘œν•„ 이미지
κΉ€νš¨μ‹ 

Frontend
UI/UX Β· API 연동 Β· μƒνƒœκ΄€λ¦¬

🧰 기술 μŠ€νƒ

Frontend

React React DOM TypeScript Vite React Router Axios Firebase PWA

UI / Styling

styled-components React Icons React Mobile Picker React Spinners Recharts

Dev Tools

ESLint Prettier @vitejs/plugin-react Vite Plugin SVGR


πŸ“¦ μ»¨λ²€μ…˜ Β· ν”„λ‘œμ νŠΈ ꡬ쑰

Branch Convention

  • main β€” 배포용 브랜치.
  • develop β€” 톡합 개발 브랜치. κΈ°λŠ₯/λ¦¬νŒ©ν† λ§/버그 ν”½μŠ€ λ¨Έμ§€ λŒ€μƒ. 배포 μ‹œ PR β†’ main.
  • feature/{#issue number}/{short-desc} β€” κΈ°λŠ₯ λ‹¨μœ„ μž‘μ—…. μ™„λ£Œ μ‹œ PR β†’ develop.
  • refactor/{#issue number}/{short-desc} β€” λ¦¬νŒ©ν† λ§ μž‘μ—…. PR β†’ develop.
  • fix/{#issue number}/{short-desc} β€” 였λ₯˜ μˆ˜μ •. PR β†’ develop.

Commit Convention


  [feat]: μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€
  [refactor]: μ½”λ“œ λ¦¬νŒ©ν† λ§
  [style]: μŠ€νƒ€μΌ μˆ˜μ •, μ½”λ“œ μ˜λ―Έμ— 영ν–₯을 μ£Όμ§€ μ•ŠλŠ” 변경사항
  [fix]: 버그 μˆ˜μ •
  [docs]: λ¬Έμ„œ μž‘μ„± 및 μˆ˜μ •
  [test]: ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€
  [chore]: λΉŒλ“œ 업무 및 νŒ¨ν‚€μ§€ λ§€λ‹ˆμ € μˆ˜μ •, production code와 λ¬΄κ΄€ν•œ λΆ€λΆ„λ“€
  [rename]: 파일, 폴더 μ‚­μ œ 및 이름 μˆ˜μ •
  [comment]: 주석 μΆ”κ°€ 및 λ³€κ²½

ν”„λ‘œμ νŠΈ ꡬ쑰


src/
β”œβ”€β”€ assets/        # 이미지, μ•„μ΄μ½˜ λ“± 정적 λ¦¬μ†ŒμŠ€
β”‚
β”œβ”€β”€ components/    # μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ common/
β”‚   β”œβ”€β”€ modal/
β”‚   └── index.ts
β”‚
β”œβ”€β”€ hooks/         # μ»€μŠ€ν…€ React Hooks
β”‚
β”œβ”€β”€ mocks/         # 개발 및 ν…ŒμŠ€νŠΈμš© mock 데이터
β”‚
β”œβ”€β”€ pages/         # 라우트 λ‹¨μœ„ νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ call/
β”‚   β”œβ”€β”€ init/
β”‚   β”œβ”€β”€ mypage/
β”‚   β”œβ”€β”€ report/
β”‚   └── index.ts   # νŽ˜μ΄μ§€ export 관리
β”‚
β”œβ”€β”€ services/      # API 톡신 둜직
β”‚
β”œβ”€β”€ utils/         # 곡톡 μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
β”‚
β”œβ”€β”€ App.tsx
β”œβ”€β”€ main.tsx
└── vite-env.d.ts
  

πŸ—“οΈ 개발 κΈ°κ°„

κΈ°κ°„ μŠ€ν”„λ¦°νŠΈ λͺ©ν‘œ μ£Όμš” μ‚°μΆœλ¬Ό
2025-06-20 ~ 2025-07-03 (1~2μ£Όμ°¨) μš”κ΅¬μ‚¬ν•­ μ •μ˜ Β· API λͺ…μ„Έ Β· DB 섀계 μš”κ΅¬μ‚¬ν•­ μ •μ˜μ„œ, ERD, Swagger μ΄ˆμ•ˆ
2025-07-04 ~ 2025-07-31 (3~6μ£Όμ°¨) 핡심 κΈ°λŠ₯Β·UI/UX 개발, RAG κ΅¬ν˜„, ν”„λ‘¬ν”„νŠΈ μ—”μ§€λ‹ˆμ–΄λ§ FE νŽ˜μ΄μ§€/μ»΄ν¬λ„ŒνŠΈ, BE 도메인/인증, RAG μ„œλΉ„μŠ€
2025-08-01 ~ 2025-08-14 (7~8μ£Όμ°¨) κΈ°λŠ₯ ν†΅ν•©Β·μ•ˆμ •ν™” ν…ŒμŠ€νŠΈ E2E/톡합 ν…ŒμŠ€νŠΈ, λ²„κ·Έν”½μŠ€, μ„±λŠ₯/λ³΄μ•ˆ 점검
2025-08-15 ~ 2025-08-21 (9μ£Όμ°¨) 배포·λͺ¨λ‹ˆν„°λ§Β·μš΄μ˜ 릴리즈 λ…ΈνŠΈ, λŒ€μ‹œλ³΄λ“œ, μ•Œλ¦Ό λ£°

🧠 핡심 κΈ°λŠ₯ κ΅¬ν˜„ λ‚΄μš©

1) μ‹€μ‹œκ°„ AI 기반 톡화 제곡

ν™˜μžμ™€ AIκ°€ μŒμ„±μœΌλ‘œ λŒ€ν™”ν•˜κ³ , μ‹€μ‹œκ°„ μžλ§‰μ„ μ œκ³΅ν•˜λŠ” 톡화 κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. 톡화 μ „/쀑/ν›„ μƒνƒœλ₯Ό λͺ…ν™•νžˆ λΆ„λ¦¬ν•˜κ³ , μ˜€λ””μ˜€ 슀트림 μ²˜λ¦¬μ™€ 슀트리밍 응닡을 μ•ˆμ •μ μœΌλ‘œ μ—°κ²°ν•©λ‹ˆλ‹€.

β‘  UI 흐름

CallWaiting β†’ CallActive β†’ CallEnd (μ’…λ£Œ ν›„ μš”μ•½/μ €μž₯)

  • CallWaiting: μž₯치/κΆŒν•œ 체크(마이크), μ„œλ²„ μ—°κ²° μ€€λΉ„, μƒνƒœ ν‘œμ‹œ
  • CallActive: μ‹€μ‹œκ°„ μžλ§‰(λΆ€λΆ„/μ΅œμ’…), λ°œν™”/응닡 νƒ€μž„λΌμΈ, μŒμ†Œκ±°/μ’…λ£Œ λ²„νŠΌ
  • CallEnd: 톡화 μš”μ•½ λ…ΈμΆœ, μ €μž₯/μ΄νƒˆ λ™μž‘ λΆ„κΈ°

β‘‘ μ˜€λ””μ˜€ 처리

  • useAudioStream ν›…μœΌλ‘œ λ°œν™” 감지(VAD) 및 마이크 슀트림 μˆ˜μ§‘
  • WebAudio / MediaDevices API μ‚¬μš©, μž…λ ₯ 레벨 λͺ¨λ‹ˆν„°λ§ 및 μΌμ‹œμ •μ§€/재개
  • μƒ˜ν”Œλ ˆμ΄νŠΈ/채널 μ •κ·œν™” β†’ λ„€νŠΈμ›Œν¬ 전솑 포맷으둜 인코딩(슀트리밍)

β‘’ μ‹€μ‹œκ°„ μ—°κ²°

  • WebSocket 기반 μ–‘λ°©ν–₯ 슀트리밍: μ˜€λ””μ˜€ μ—…μŠ€νŠΈλ¦Ό, μžλ§‰/μ˜€λ””μ˜€ λ‹€μš΄μŠ€νŠΈλ¦Ό
  • λΆ€λΆ„/μ΅œμ’… μžλ§‰ ꡬ뢄 λ Œλ”λ§(λΆ€λΆ„ κ°±μ‹  β†’ μ΅œμ’… ν™•μ •)
  • μ—°κ²° μ‹ λ’°μ„±: ν•‘/퐁 ν—¬μŠ€μ²΄ν¬, μ§€μˆ˜μ  μž¬μ‹œλ„, μΌμ‹œ λ„€νŠΈμ›Œν¬ λ‹¨μ ˆ 볡ꡬ
  • μ—λŸ¬/μ˜ˆμ™Έ 처리: 인증 였λ₯˜, μž₯치 μ ‘κ·Ό μ‹€νŒ¨, λͺ¨λΈ κ³ΌλΆ€ν•˜ μ‹œ μ‚¬μš©μž κ°€μ΄λ“œ
  • λ¦¬μ†ŒμŠ€ 정리: νŠΈλž™ stop, μ†ŒμΌ“ close, λ©”λͺ¨λ¦¬ ν•΄μ œ(μ’…λ£Œ/μ΄νƒˆ μ‹œ)

2) μ‚¬μš©μž λ§žμΆ€ν˜• 톡합 λ³΄κ³ μ„œ

일간/κΈ°κ°„ μ’…ν•© κ΄€μ μ—μ„œ 감정 및 이용 μ§€ν‘œλ₯Ό μ‹œκ°ν™”ν•©λ‹ˆλ‹€. λ‚ μ§œ/κΈ°κ°„ 선택에 따라 API νŒŒλΌλ―Έν„°λ₯Ό κ΅¬μ„±ν•˜κ³ , μ „μ²˜λ¦¬λœ λ°μ΄ν„°λ‘œ κ·Έλž˜ν”„/μ§€ν‘œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ Œλ”λ§ν•©λ‹ˆλ‹€.

β‘  일간(DailySection)

  • λ‚ μ§œ 선택 + μ›”κ°„ 이λͺ¨μ§€ μΊ˜λ¦°λ”λ‘œ ν•˜λ£¨ 흐름 λΉ λ₯Έ 탐색
  • 감정 계산 둜직: λŒ€ν™” 둜그 기반 점수 μ‚°μΆœ(행볡/μŠ¬ν””/λΆ„λ…Έ/λ†€λžŒ/κΆŒνƒœ λ“±)
  • μ›ν˜• μŠ€μ½”μ–΄ κ²Œμ΄μ§€λ‘œ 당일 μƒνƒœλ₯Ό μ§κ΄€μ μœΌλ‘œ ν‘œν˜„

β‘‘ μ’…ν•©(TotalSection)

  • κΈ°κ°„ 선택: 1μ£Ό / 1달 / μ‚¬μš©μž μ§€μ • λ²”μœ„
  • 감정 νƒ€μž„λΌμΈ: λ‚ μ§œλ³„ 점수 μΆ”μ„Έ(Recharts 라인/에어리어 차트)
  • 참여도/평균 ν†΅ν™”μ‹œκ°„/μœ„ν—˜λ„ 계산 및 μΉ΄λ“œ μ§€ν‘œλ‘œ μš”μ•½
  • EndDate κΈ°μ€€ μ’…ν•© λ³΄κ³ μ„œ: 선택 λ²”μœ„μ˜ 말일을 κΈ°μ€€μœΌλ‘œ μš”μ•½ 문ꡬ/μ§€ν‘œ ν™•μ •

β‘’ 데이터 흐름(μš”μ•½)

  • 톡화 쀑: 마이크 κΆŒν•œ β†’ μ˜€λ””μ˜€ 슀트림(WebSocket) 전솑 β†’ AI 응닡(μ˜€λ””μ˜€/μžλ§‰) μˆ˜μ‹ 
  • 톡화 ν›„: μ„Έμ…˜ μš”μ•½/λŒ€ν™” 둜그 μ„œλ²„ 기둝 β†’ 뢄석 APIκ°€ 집계/리포트 생성
  • 리포트 쑰회: μ‚¬μš©μž/μ—°κ²° λŒ€μƒ 식별 β†’ 쿼리 νŒŒλΌλ―Έν„° ꡬ성 β†’ 일간/μ’…ν•© API 호좜 β†’ μ‹œκ°ν™”

🧭 νŽ˜μ΄μ§€λ³„ κΈ°λŠ₯

Splash Β· μ˜¨λ³΄λ”©
  • μ•± λ‘œλ“œμ‹œ μŠ€ν”Œλž˜μ‹œ β†’ 둜그인 μƒνƒœμ— 따라 λΌμš°νŒ…
  • 간단 μ†Œκ°œ/κΆŒν•œ μ•ˆλ‚΄(마이크, ν‘Έμ‹œ)
둜그인/νšŒμ›κ°€μž…
  • μ΄λ©”μΌΒ·λΉ„λ°€λ²ˆν˜Έ μœ νš¨μ„± 검사, 였λ₯˜ λ©”μ‹œμ§€ 인라인 ν‘œμ‹œ
  • νšŒμ›κ°€μž… ν›„ ν”„λ‘œν•„ 초기 μ„€μ •(이름/성별/ν™˜μžμ½”λ“œ μ˜΅μ…˜)
  • JWT λ°œκΈ‰(Access/Refresh), FCM 토큰 등둝
ν”„λ‘œν•„
  • λ‚΄ ν”„λ‘œν•„: 이미지/이름/성별/λΉ„λ°€λ²ˆν˜Έ μˆ˜μ •, 판맀 μ˜μ—­μ€ λ―Έμ‚¬μš©
  • 관계(보호자-ν™˜μž) μƒνƒœ ν‘œμ‹œ
관계 관리
  • ν™˜μžμ½”λ“œλ‘œ μš”μ²­, 만료 μ‹œ μž¬μ „μ†‘, 승인/거절
  • 관계 λͺ©λ‘/ν•΄μ œ, μƒνƒœ(REQUESTED/APPROVED λ“±) ν‘œμ‹œ
톡화(μ‹€μ‹œκ°„ AI)
  • 흐름: CallWaiting β†’ CallActive β†’ End
  • 마이크 κΆŒν•œ, λ°œν™” 감지(useAudioStream), WebSocket/Streaming
  • μ‹€μ‹œκ°„ μžλ§‰/응닡, μ’…λ£Œ ν›„ 기둝 μ €μž₯
톡화 기둝(Transcripts)
  • λͺ©λ‘: μ„Έμ…˜ID/제λͺ©/μΌμ‹œ/μ§€μ†μ‹œκ°„ μš”μ•½
  • 상세: μš”μ•½/λŒ€ν™” 둜그, νŽ˜μ΄μ§•/검색
뢄석 리포트
  • 일간: λ‚ μ§œ 선택, μ›”κ°„ 이λͺ¨μ§€ μΊ˜λ¦°λ”, 감정 점수, μ›ν˜• μŠ€μ½”μ–΄
  • μ’…ν•©: κΈ°κ°„(1μ£Ό/1달/μ‚¬μš©μž μ§€μ •) 선택, 감정 νƒ€μž„λΌμΈ, 참여도/평균 ν†΅ν™”μ‹œκ°„/μœ„ν—˜λ„
λ¦¬λ§ˆμΈλ”
  • μ•Œλ¦Ό μ‹œκ°Β·μƒνƒœ 등둝/쑰회(ACTIVE/INACTIVE)
  • PWA/FCM 기반 ν‘Έμ‹œ
μ„€μ •/λ‘œκ·Έμ•„μ›ƒ
  • μ„Έμ…˜ μ’…λ£Œ(토큰 λ¬΄νš¨ν™”), λ³΄μ•ˆ/μ•Œλ¦Ό μ„€μ •
ν”Όλ“œλ°±
  • 평점(예: VERY_LOW~)κ³Ό μ‚¬μœ  μ €μž₯, 운영 κ°œμ„ μ— ν™œμš©

맨 μœ„λ‘œ ‴

About

πŸ‘΅πŸ»A-dinger: μΉ˜λ§€ν™˜μž μΌ€μ–΄ μ„œλΉ„μŠ€

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 2

  •  
  •