尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
💊 YOYAK (요약) — 복약지도 요약 앱 처방전·알약 촬영 한 번으로, AI가 복약지도를 쉽게 요약해 드립니다. YOYAK은 고령자·환자·보호자를 위한 모바일 복약지도 요약 서비스입니다. 카메라로 알약이나 처방전을 촬영하면 OCR과 AI가 약 정보를 분석하고, 누구나 이해할 수 있는 쉬운 말로 복약지도를 요약해 줍니다. 📷 알약 / 처방전 인식 • 알약 직접 촬영 (원형 가이드 제공) • 처방전·약봉투 촬영 (사각 가이드 프레임, 85vw × 60vh) • 갤러리 이미지 업로드 • OCR 분석 → 약 이름 자동 추출 🤖 복약지도 AI 요약 • 식약처 e약은요 공공 API 연동 (효능, 용법, 부작용, 주의사항) • AI 기반 환자 맞춤 요약 생성 • 시니어 모드: 큰 글씨 + 쉬운 말 복약지도 🔊 TTS 음성 안내 • 서버 TTS API 우선 사용 • 실패 시 Web Speech API 자동 폴백 • 재생 진행률 표시 📅 복약 스케줄 관리 • 약별 복용 시간 설정 • 캘린더 기반 스케줄 관리 • 복약 시간 알림 (브라우저 Notification + 인앱 배너) • 30초 주기 체크, 자정 자동 리셋查看完整 README ↗
처방전·알약 촬영 한 번으로, AI가 복약지도를 쉽게 요약해 드립니다.
YOYAK은 고령자·환자·보호자를 위한 모바일 복약지도 요약 서비스입니다.
카메라로 알약이나 처방전을 촬영하면 OCR과 AI가 약 정보를 분석하고, 누구나 이해할 수 있는 쉬운 말로 복약지도를 요약해 줍니다.
body.senior-mode CSS 클래스 토글| 영역 | 기술 |
|---|---|
| 프레임워크 | React 18 + Vite + TypeScript |
| 상태 관리 | React Context + React Query (@tanstack/react-query) |
| UI | Tailwind CSS + shadcn/ui + Lucide Icons |
| 라우팅 | React Router v6 |
| API 통신 | Axios (JWT 인터셉터, 토큰 자동 갱신) |
| 백엔드 API | FastAPI + Tortoise ORM + MySQL + Redis |
| 클라우드 DB | Supabase (Lovable Cloud) — 약 정보, 스케줄, 상호작용 데이터 |
| Edge Functions | Deno (식약처 API 프록시, 복약지도 번들 생성) |
| 다국어 | i18next + react-i18next |
| 앱 프레임워크 | @apps-in-toss/web-framework (토스 WebView 연동) |
src/
├── api/ # FastAPI 백엔드 API 클라이언트
│ ├── client.ts # Axios 인스턴스 (인터셉터, 토큰 리프레시)
│ ├── auth.ts # 인증 API (login, signup, getMe)
│ └── medicine.ts # 약 관련 API (guide, recognize, TTS, history)
│
├── components/ # 재사용 컴포넌트
│ ├── BottomNav.tsx # 하단 네비게이션 (홈/스캔/스케줄/AI/설정)
│ ├── PrivateRoute.tsx # 인증 가드
│ ├── PillRecognizer.tsx # 알약 촬영/업로드 → 약 이름 인식
│ ├── TTSPlayer.tsx # TTS 음성 재생 (서버 + Web Speech 폴백)
│ ├── AlarmBanner.tsx # 복약 알림 배너
│ ├── AlarmPermissionPrompt.tsx # 알림 권한 요청
│ └── ui/ # shadcn/ui 기본 컴포넌트
│
├── contexts/ # React Context
│ ├── AuthContext.tsx # 인증 상태 (JWT, 데모 모드 폴백)
│ └── SeniorModeContext.tsx # 시니어 모드 on/off
│
├── hooks/ # 커스텀 훅
│ ├── useMedicationAlarm.ts # 복약 알람 로직 (30초 주기, 브라우저 푸시)
│ └── use-mobile.tsx # 모바일 반응형 감지
│
├── i18n/ # 다국어
│ ├── index.ts
│ └── locales/
│ ├── ko.json # 한국어
│ └── en.json # 영어
│
├── integrations/
│ └── supabase/ # Lovable Cloud (Supabase) 클라이언트
│
├── pages/ # 페이지 컴포넌트 (18개)
│ ├── Onboarding.tsx # 앱 소개
│ ├── Login.tsx / Signup.tsx # 인증
│ ├── Home.tsx # 메인 대시보드
│ ├── CaptureMethod.tsx # 입력 방식 선택
│ ├── PillCamera.tsx # 알약 촬영
│ ├── PrescriptionCamera.tsx # 처방전 촬영
│ ├── FileUpload.tsx # 파일 업로드
│ ├── OcrProcessing.tsx # OCR 분석 중
│ ├── OcrResultCheck.tsx # 인식 결과 확인
│ ├── OcrResultEdit.tsx # 약 정보 수정/저장
│ ├── MedicationTimeSetup.tsx# 복약 시간 설정
│ ├── MedicationSchedule.tsx # 스케줄 캘린더
│ ├── MedicationGuide.tsx # 복약지도 상세
│ ├── SilverModeGuide.tsx # 시니어 모드 복약지도
│ ├── TtsPlayer.tsx # TTS 페이지
│ ├── AiChat.tsx # AI 상담
│ └── Settings.tsx # 설정
│
├── types/ # TypeScript 타입
│ ├── user.ts # User, LoginRequest 등
│ └── medicine.ts # Medicine, GuideResponse 등
│
├── utils/
│ └── toss.ts # 토스 앱 유틸리티
│
└── assets/ # 정적 리소스
supabase/
└── functions/ # Edge Functions (Deno)
├── guide/index.ts # 복약지도 번들 생성
└── mfds-search/index.ts # 식약처 e약은요 API 프록시
온보딩(/) → 로그인(/login) → 홈(/home)
│
┌──────────────┼──────────────┐
▼ ▼ ▼
캡처 방식 선택 스케줄 확인 AI 상담
(/capture) (/schedule) (/ai-chat)
│
┌────────────┼────────────┐
▼ ▼ ▼
알약 촬영 처방전 촬영 파일 업로드
(/camera/ (/camera/ (/upload)
pill) prescription)
│ │ │
└────────────┼────────────┘
▼
OCR 분석 중 (/processing)
▼
결과 확인 (/result/check)
▼
정보 수정 (/result/edit)
▼
시간 설정 (/setup/time)
▼
복약지도 확인 (/guide/:id)
├─ 시니어 모드 (/guide/:id/silver)
└─ TTS 듣기 (/guide/:id/tts)
http://localhost/api/v1)| 기능 | Method | Endpoint |
|---|---|---|
| 회원가입 | POST | /auth/signup |
| 로그인 | POST | /auth/login |
| 토큰 갱신 | GET | /auth/token/refresh |
| 내 정보 조회 | GET | /users/me |
| 내 정보 수정 | PATCH | /users/me |
| 복약지도 생성 | POST | /medicines/guide |
| 복약지도 조회 | GET | /medicines/guide/:id |
| 복약 이력 | GET | /medicines/history |
| 알약 이미지 인식 | POST | /medicines/recognize |
| TTS 생성 | POST | /medicines/tts |
| 함수 | 역할 |
|---|---|
guide | medications + drug_info_chunks(RAG) 조합 → 복약지도 번들 반환 |
mfds-search | 식약처 e약은요 공공 API 검색 프록시 |
# 저장소 클론
git clone <YOUR_GIT_URL>
cd yoyak
# 의존성 설치
bun install
# 개발 서버 실행
bun run dev
개발 서버: http://localhost:5173
프로젝트 루트에 .env 파일을 생성합니다:
# FastAPI 백엔드 URL
VITE_API_URL=http://localhost/api/v1
# Supabase (Lovable Cloud에서 자동 제공)
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=your-anon-key
참고: Lovable Cloud 환경에서는 Supabase 관련 변수가 자동 설정됩니다.
FastAPI 백엔드가 없어도 데모 모드로 기본 UI를 확인할 수 있습니다.
이 프로젝트는 토스 앱 내 WebView 환경을 지원합니다.
granite.config.ts)defineConfig({
appName: 'yoyak',
brand: {
displayName: '요약',
primaryColor: '#7C9A7E',
},
})
lg:hidden)getUserMedia API + <input capture="environment"> 이중 지원| 테이블 | 역할 |
|---|---|
medications | 약 정보 (이름, 용량, 효능, 부작용, 식약처 코드) |
schedules | 복약 스케줄 (날짜, 시간, 복용 여부) |
drug_info_chunks | 약 정보 RAG 청크 (효능, 주의사항 등 분할 저장) |
interaction_matrix | 약물 상호작용 매트릭스 |
interaction_warnings | 병용 금기 경고 |
profiles | 사용자 프로필 (알레르기, 기저질환, 비상연락처) |
patient_links | 환자-보호자 연결 (초대코드 기반) |
user_roles | 사용자 역할 (patient / caregiver) |
┌─────────────────────────────────────────────┐
│ React Frontend (Vite) │
│ │
│ api/client.ts ──── Axios ──────────────────┼──→ FastAPI Backend
│ ├── auth.ts (Bearer JWT) │ ├── /auth/*
│ └── medicine.ts (auto refresh) │ ├── /users/*
│ │ └── /medicines/*
│ │
│ supabase/client.ts ────────────────────────┼──→ Supabase (Lovable Cloud)
│ ├── DB queries (medications, schedules) │ ├── PostgreSQL
│ └── Edge Functions │ └── Edge Functions
│ ├── guide (복약지도 번들) │ └── mfds-search
│ └── mfds-search (식약처 API) │
└─────────────────────────────────────────────┘
이 프로젝트는 비공개 프로젝트입니다.
git checkout -b feature/amazing-feature)git commit -m 'feat: add amazing feature')git push origin feature/amazing-feature)