Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
매일 밤 1시간 걸리던 마감 업무를 5분으로. 외식업 사장님을 위한 올인원 AI 운영 비서.
Translation pending
BusinessTypeScript · PLpgSQLGitHub @yenoooooooOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
AI 기반 올인원 매장 운영 비서 웹앱 매일 밤 1시간 걸리던 마감 업무를 5분으로. 외식업 사장님들은 매일 밤 영업 종료 후 마감 정산, 재고 확인, 경비 정리, 리뷰 응대 등 반복적인 운영 업무에 1시간 이상을 소비합니다. 대부분 수기 노트나 엑셀로 관리하며, 데이터 기반 의사결정은 거의 이루어지지 않습니다. 사장님비서는 이 모든 업무를 하나의 앱으로 통합하고, AI가 자동화하여 5분 안에 마감할 수 있게 합니다. 30초 매출 입력으로 자동 정산 및 분석 리포트 생성 매출 입력 (3가지 모드) • 숫자 키패드: 64px 높이 대형 버튼, 프리셋 원터치 입력 (평일/주말 기본값) • 음성 입력: Web Speech API 기반 — "오늘 매출 187만, 홀 120만, 배민 40만..." • 자유 텍스트: Claude AI가 자연어를 파싱하여 자동 분배 채널별 매출 분배 • 슬라이더 모드: 드래그로 비율 조절 (홀/배민/쿠팡이츠/요기요/포장 등) • 직접 입력 모드: 채널별 금액 직접 입력 • 결제수단 비율: 카드/현금 분리Read the full README ↗
매일 밤 1시간 걸리던 마감 업무를 5분으로.
Live Demo · Features · Tech Stack · Architecture
외식업 사장님들은 매일 밤 영업 종료 후 마감 정산, 재고 확인, 경비 정리, 리뷰 응대 등 반복적인 운영 업무에 1시간 이상을 소비합니다. 대부분 수기 노트나 엑셀로 관리하며, 데이터 기반 의사결정은 거의 이루어지지 않습니다.
사장님비서는 이 모든 업무를 하나의 앱으로 통합하고, AI가 자동화하여 5분 안에 마감할 수 있게 합니다.
| 유저 | 특징 |
|---|---|
| 개인 음식점 사장님 | 테이블 10 |
| 프랜차이즈 점주 | 1~3개 매장 운영 |
| 연령대 | 40~60대 (큰 폰트, 직관적 UI) |
| 기존 | 사장님비서 | |
|---|---|---|
| 마감 정산 | 30분+ (엑셀/수기) | 30초 (숫자 키패드) |
| 식자재 발주 | 감으로 발주 → 폐기 발생 | AI 추천 → 폐기율 30%↓ |
| 경비 관리 | 영수증 박스 보관 | 촬영 → AI OCR → 자동 분류 |
| 리뷰 응대 | 1건당 10분 고민 | AI가 말투 학습 → 3초 생성 |
| 경영 분석 | 감으로 판단 | 주간 AI 브리핑 + 코칭 |
30초 매출 입력으로 자동 정산 및 분석 리포트 생성
매출 입력 (3가지 모드)
채널별 매출 분배
수수료 자동 계산
분석 대시보드
데이터 내보내기
데이터베이스: sb_daily_closing, sb_daily_closing_channels, sb_store_fee_settings, sb_fee_channels
매출/날씨/사용량 기반 식자재 발주 최적화 — 폐기는 줄이고, 품절은 막고
초기 세팅
일일 사용량 입력
AI 발주 추천 알고리즘
추천 발주량 = (4주 평균 사용량 × 날씨 보정 계수 × 매출 추세 계수)
- 현재 재고 + 안전 재고
분석 탭 (5개 섹션, 아코디언 UI)
입고 기록
데이터베이스: sb_order_items, sb_order_item_groups, sb_daily_usage, sb_order_recommendations
영수증 촬영 → Claude Vision OCR → 자동 분류 → 세무 자료 완성
촬영 & OCR 인식
10가지 경비 카테고리
| 코드 | 카테고리 | 코드 | 카테고리 |
|---|---|---|---|
| F01 | 식재료비 | F06 | 마케팅비 |
| F02 | 소모품비 | F07 | 보험료 |
| F03 | 수선유지비 | F08 | 통신비 |
| F04 | 임대료 | F09 | 교통비 |
| F05 | 공과금 | F10 | 인건비 |
장부 조회 & 필터
내보내기
알림
데이터베이스: sb_receipts, sb_receipt_categories + Supabase Storage (sajang-receipts 버킷)
사장님 말투를 AI가 학습 → 블록 편집 → 복사해서 배민/쿠팡 바로 붙여넣기
톤 학습 시스템
답글 생성 (SSE 스트리밍)
블록형 편집기
[인사] 안녕하세요, OO 사장입니다!
[리뷰 내용 언급] 말씀하신 된장찌개가 맛있으셨다니...
[감사/해명] 정말 감사합니다 / 죄송합니다...
[마무리] 다음에도 맛있게 준비하겠습니다!
리뷰 대시보드
저장된 템플릿: 자주 쓰는 답글 템플릿 저장/불러오기
데이터베이스: sb_reviews, sb_review_replies, sb_store_tone_settings
바쁜 사장님이 3분 안에 지난주 요약 + AI 코칭으로 다음 주 전략 수립
6장 카드 캐러셀 (스와이프)
| # | 카드 | 주요 데이터 |
|---|---|---|
| 1 | 매출 요약 | 총/순매출, 일평균, 전주 대비, 요일별 그래프, 채널별 비중 |
| 2 | 수수료 분석 | 총 수수료, 매출 대비 비율, 채널별 상세, 절감 팁 |
| 3 | 비용 분석 | 총 경비, 원가율, 식재료/소모품/인건비 비중, 전주 대비 |
| 4 | 식자재 효율 | 주간 폐기 금액, 폐기율, 발주 적중률, TOP3 폐기 품목 |
| 5 | 고객 평판 | 주간 리뷰 수, 평균 별점, 답글 완료율, 긍정/부정 키워드 |
| 6 | AI 경영 코칭 | 핵심 인사이트, 이번 주 실행 제안 3~4개, 목표 체크리스트 |
부가 기능
데이터: 5개 모듈 데이터를 실시간 집계 (aggregator 패턴)
| 기술 | 용도 |
|---|---|
| Next.js 14 (App Router) | 풀스택 프레임워크, SSR/SSG, API Routes |
| TypeScript 5 | 전체 코드베이스 타입 안전성 |
| React 18 | 컴포넌트 기반 UI |
| Tailwind CSS 3 | 유틸리티 기반 스타일링 + 커스텀 디자인 토큰 |
| Framer Motion | 페이지 전환, 카운트업, 스와이프 등 모든 애니메이션 |
| Recharts | 매출/사용량/수수료 차트 |
| Zustand | 12개 글로벌 상태 스토어 |
| React Hook Form + Zod | 폼 관리 + 스키마 유효성 검증 |
| html2canvas + jsPDF | 리포트 PDF/이미지 내보내기 |
| Lucide React | 일관된 아이콘 시스템 |
| 기술 | 용도 |
|---|---|
| Supabase | PostgreSQL + Auth + RLS + Storage |
| Vercel | 배포, Serverless Functions, Cron Jobs |
| Anthropic Claude API | 텍스트 생성, 자연어 파싱, 경영 코칭 |
| Claude Vision API | 영수증 OCR 이미지 인식 |
| OpenWeatherMap API | 날씨 데이터 (발주 추천 보정) |
| Resend | 이메일 발송 (주간 브리핑/팀 초대) |
| Web Push | 브라우저 푸시 알림 |
| Cloudflare Turnstile | 봇 방지 (회원가입/문의) |
| 항목 | 상세 |
|---|---|
| 테마 | 다크모드 기본 (#0C0C0A 따뜻한 검은색), 라이트모드 지원 |
| 타이포그래피 | Plus Jakarta Sans (숫자/금액), Pretendard (한국어) |
| 컬러 | 따뜻한 앰버/오렌지 (#F97316) 포인트 + 딥 네이비 |
| 글래스모피즘 | glass-card — 반투명 배경 + blur + 미묘한 그림자 |
| 애니메이션 | 모든 전환에 Framer Motion, 숫자 카운트업, 스켈레톤 로딩 |
| 모바일 우선 | 모든 화면 375px~ 반응형, 데스크탑 사이드바 |
┌──────────────────────────────────────────────────────┐
│ Client (PWA) │
│ Next.js 14 App Router + React 18 + TypeScript │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Closing │ │ Order │ │ Receipt │ │ Review │ │
│ │ Module │ │ Module │ │ Module │ │ Module │ │
│ └────┬─────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │ │
│ ┌────┴────────────┴───────────┴────────────┴────┐ │
│ │ Zustand Stores (12개) │ │
│ │ FeeToggle · StoreSettings · Theme · Toast ... │ │
│ └────────────────────┬──────────────────────────┘ │
│ │ │
│ ┌────────────────────┴──────────────────────────┐ │
│ │ Custom Hooks (20개) │ │
│ │ useClosingData · useOrderAnalytics · ... │ │
│ └────────────────────┬──────────────────────────┘ │
└───────────────────────┼──────────────────────────────┘
│ fetch / Supabase Client
┌───────────────────────┼──────────────────────────────┐
│ API Routes (34개) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ /api/ │ │ /api/ │ │ /api/ │ │
│ │ closing │ │ receipt │ │ review │ ... │
│ │ /parse │ │ /ocr │ │/generate │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ ┌────┴────────────┴────────────┴────────────────┐ │
│ │ External APIs │ │
│ │ Claude AI · Claude Vision · Weather · Resend │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────┐ │
│ │ Supabase │ │
│ │ PostgreSQL (RLS) · Auth · Storage · Realtime │ │
│ └───────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘
sajang-biseo/
├── src/
│ ├── app/
│ │ ├── (auth)/ # 인증 (로그인/회원가입/비밀번호 초기화)
│ │ ├── (dashboard)/ # 메인 대시보드 (7개 페이지)
│ │ │ ├── home/ # 홈 (오늘의 요약)
│ │ │ ├── closing/ # 마감 리포트
│ │ │ ├── order/ # AI 발주 추천
│ │ │ ├── receipt/ # 영수증 경비 장부
│ │ │ ├── review/ # 리뷰 답글 생성기
│ │ │ ├── briefing/ # 주간 경영 브리핑
│ │ │ ├── fees/ # 수수료 분석
│ │ │ ├── settings/ # 매장 설정
│ │ │ └── DashboardShell.tsx # 공통 레이아웃 (Header/Nav/Sidebar)
│ │ ├── (legal)/ # 이용약관/개인정보처리방침
│ │ ├── admin/ # 관리자 대시보드
│ │ ├── api/ # API 엔드포인트 (34개)
│ │ │ ├── closing/parse/ # 자연어 매출 파싱
│ │ │ ├── forecast/ # AI 매출 예측
│ │ │ ├── receipt/ocr/ # 영수증 OCR
│ │ │ ├── review/generate/ # 리뷰 답글 생성 (SSE)
│ │ │ ├── briefing/ # AI 코칭 + 이메일 발송
│ │ │ ├── fees/tips/ # 수수료 절감 팁
│ │ │ ├── push/ # 푸시 알림
│ │ │ ├── cron/ # 정기 작업 (21:00 알림)
│ │ │ ├── admin/ # 관리자 API (11개)
│ │ │ ├── team/ # 팀 관리/초대
│ │ │ ├── stores/ # 매장 관리
│ │ │ └── ... # 기타 (날씨/쿠폰/문의/로그)
│ │ ├── onboarding/ # 온보딩 (매장/수수료 초기 설정)
│ │ ├── page.tsx # 랜딩 페이지
│ │ ├── layout.tsx # 루트 레이아웃 (PWA 메타태그)
│ │ └── globals.css # 글로벌 스타일 (Glass Morphism 등)
│ │
│ ├── components/ # 180+ 컴포넌트
│ │ ├── shared/ (14개) # 공통 (NumericKeypad/FeeToggle/PlanGate...)
│ │ ├── layout/ (3개) # Header/BottomNav/Sidebar
│ │ ├── closing/ (25개) # 마감 모듈
│ │ ├── order/ (28개) # 발주 모듈
│ │ ├── receipt/ (14개) # 영수증 모듈
│ │ ├── review/ (9개) # 리뷰 모듈
│ │ ├── briefing/ (8개) # 브리핑 모듈
│ │ ├── fees/ (8개) # 수수료 모듈
│ │ ├── home/ (5개) # 홈 대시보드
│ │ ├── settings/ (13개) # 설정 (13개 섹션)
│ │ ├── landing/ (9개) # 랜딩 페이지
│ │ ├── admin/ (12개) # 관리자 컴포넌트
│ │ └── onboarding/ (2개) # 온보딩 스텝
│ │
│ ├── hooks/ # 20개 커스텀 훅
│ │ ├── useClosingData.ts # 마감 데이터 CRUD
│ │ ├── useClosingAnalytics.ts # 마감 분석 (요일별/주간/월간)
│ │ ├── useOrderData.ts # 발주 데이터 CRUD
│ │ ├── useOrderAnalytics.ts # 발주 분석 (사용량/폐기/원가율)
│ │ ├── useReceiptData.ts # 영수증 데이터 CRUD
│ │ ├── useReviewData.ts # 리뷰 데이터 CRUD
│ │ ├── useBriefingData.ts # 브리핑 데이터 집계
│ │ ├── useFeesData.ts # 수수료 데이터
│ │ ├── useTeamRole.ts # 팀 역할 (owner/editor/viewer)
│ │ ├── useVoiceInput.ts # Web Speech API 음성 입력
│ │ ├── useCountUp.ts # 숫자 카운트업 애니메이션
│ │ ├── usePushNotification.ts # 웹 푸시 알림
│ │ ├── useNetworkStatus.ts # 온/오프라인 감지
│ │ └── ... # 기타
│ │
│ ├── stores/ # 12개 Zustand 스토어
│ │ ├── useFeeToggle.ts # 수수료 포함/미포함 (글로벌)
│ │ ├── useStoreSettings.ts # 현재 매장 정보
│ │ ├── useThemeStore.ts # 다크모드
│ │ ├── usePresetsStore.ts # 매출 입력 프리셋
│ │ └── ... # 기타
│ │
│ ├── lib/ # 40+ 유틸리티
│ │ ├── supabase/ # Supabase 클라이언트 (client/server/admin)
│ │ ├── fees/ # 수수료 계산 엔진 (배달앱/카드/대행)
│ │ ├── order/ # 발주 추천 알고리즘
│ │ ├── briefing/ # 브리핑 데이터 집계 (6개 aggregator)
│ │ ├── receipt/ # 영수증 처리 (카테고리/CSV/이미지)
│ │ ├── review/ # 답글 블록 타입
│ │ ├── security/ # 보안 (Rate Limit/Turnstile/검증)
│ │ ├── push/ # Web Push 전송
│ │ ├── team/ # 팀 접근 권한/이메일
│ │ ├── export/ # PDF 생성
│ │ └── utils/ # 포맷팅/날짜/검증
│ │
│ ├── types/ # 타입 정의
│ └── middleware.ts # 인증 미들웨어 + 관리자 가드
│
├── public/
│ ├── manifest.json # PWA 매니페스트
│ ├── icons/ # 앱 아이콘 (192/512/SVG)
│ └── sw.js # Service Worker (자동 생성)
│
├── next.config.mjs # PWA + CSP 보안 헤더
├── tailwind.config.ts # 커스텀 디자인 토큰
├── tsconfig.json # TypeScript 설정
└── package.json # 의존성 관리
문제: 매출 데이터를 "수수료 포함(총매출)" 또는 "수수료 미포함(순매출)"으로 전환할 때, 앱 전체의 모든 금액/차트/분석이 동시에 변경되어야 합니다.
해결: Zustand useFeeToggle 스토어로 글로벌 상태 관리. 모든 금액 표시 컴포넌트가 이 스토어를 구독하여 토글 시 즉시 반영. 수수료 계산 엔진(fees/calculator.ts)이 배달앱 중개수수료, 카드 결제수수료, 배달대행 수수료의 이중 계산을 방지합니다.
문제: "오늘 매출 187만, 홀 120만, 배민 40만, 현금 15만" 같은 자유 텍스트를 정확한 매출 데이터로 변환해야 합니다.
해결: Web Speech API로 음성 → 텍스트 변환 후, Claude API가 자연어를 파싱하여 JSON 구조로 변환. 채널별 금액, 결제수단 비율을 자동 분배합니다.
문제: Claude AI가 답글을 생성할 때 완성까지 기다리면 사용자 경험이 나쁩니다.
해결: Server-Sent Events(SSE)로 실시간 스트리밍 구현. API Route에서 ReadableStream을 생성하고, 클라이언트에서 EventSource로 수신하여 타이핑 효과로 표시합니다.
문제: Viewer 역할 사용자에게 모든 입력 필드와 액션 버튼을 비활성화해야 합니다. 필터/네비게이션 같은 조회 기능은 유지하면서 쓰기 기능만 차단해야 합니다.
해결: useTeamRole() 훅으로 canEdit/isViewer 상태를 제공하고, 각 컴포넌트에 readOnly prop을 전달하는 패턴을 모든 모듈에 일관되게 적용. 쓰기(차단) vs 필터/네비게이션(유지) vs 개인 설정(유지)으로 분류하여 처리했습니다.
문제: 주간 브리핑은 5개 모듈(마감/발주/영수증/리뷰/수수료)의 데이터를 실시간으로 집계해야 합니다.
해결: lib/briefing/ 아래 6개 전용 aggregator 함수를 구현하여 각 모듈 데이터를 독립적으로 집계한 뒤, aggregator.ts가 통합합니다. 각 aggregator는 Supabase 쿼리를 최적화하여 필요한 범위만 조회합니다.
문제: 단순 평균이 아닌, 날씨/요일/매출 트렌드를 반영한 정확한 발주량 예측이 필요합니다.
해결: 4주 이동평균 + 날씨 보정 계수(OpenWeatherMap API) + 매출 추세 가중치를 조합한 추천 알고리즘 구현. 유통기한/안전재고를 고려하여 발주 부족/충분 상태를 판단합니다.
문제: 모바일 카메라로 촬영한 고해상도 영수증 이미지를 빠르게 OCR 처리해야 합니다.
해결: 클라이언트에서 Canvas API로 1920px 리사이즈 + 품질 압축 후 전송. Claude Vision API가 OCR 인식하고 신뢰도를 판단하여 낮은 항목은 "확인 필요" 표시. Supabase Storage에 원본 이미지 보관합니다.
| 헤더 | 설정 | 목적 |
|---|---|---|
| Content-Security-Policy | 13개 디렉티브 | XSS/인젝션 방지 |
| X-Frame-Options | DENY | 클릭재킹 방지 |
| X-Content-Type-Options | nosniff | MIME 스니핑 방지 |
| Strict-Transport-Security | max-age=31536000 | HTTPS 강제 (1년) |
| Referrer-Policy | strict-origin-when-cross-origin | Referrer 노출 제한 |
| Permissions-Policy | camera=(self) | 브라우저 API 권한 제어 |
/verify-email로 리다이렉트# 저장소 클론
git clone https://github.com/yenooooooo/Ai-plan.git
cd Ai-plan/sajang-biseo
# 의존성 설치
npm install
# 환경 변수 설정
cp .env.example .env.local
# Supabase
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
# Anthropic Claude AI
ANTHROPIC_API_KEY=your_anthropic_key
# OpenWeatherMap (발주 추천용)
OPENWEATHER_API_KEY=your_weather_key
# Resend (이메일 발송)
RESEND_API_KEY=your_resend_key
# Cloudflare Turnstile (봇 방지)
NEXT_PUBLIC_TURNSTILE_SITE_KEY=your_site_key
TURNSTILE_SECRET_KEY=your_secret_key
# Web Push (푸시 알림)
NEXT_PUBLIC_VAPID_PUBLIC_KEY=your_vapid_public
VAPID_PRIVATE_KEY=your_vapid_private
# Admin
[email protected]
# Cron Secret
CRON_SECRET=your_cron_secret
npm run dev
http://localhost:3000 에서 확인
npm run build # 프로덕션 빌드
npm run start # 프로덕션 서버
Vercel에 자동 배포 설정되어 있습니다.
| 기능 | Free | Pro (₩9,900/월) | Pro+ (₩24,900/월) |
|---|---|---|---|
| 마감 리포트 | 기본 | 무제한 | 무제한 |
| 수수료 계산기 | O | O | O |
| AI 발주 추천 | X | O | O |
| 영수증 OCR | 월 5장 | 월 100장 | 무제한 |
| 리뷰 답글 | 월 3건 | 월 50건 | 무제한 |
| 주간 브리핑 | 열람만 | 열람 + 알림 | 열람 + 이메일 |
| AI 경영 코칭 | X | O | O |
| CSV/PDF 내보내기 | X | O | O |
| 매출 예측 | X | X | O |
| 매장 수 | 1개 | 3개 | 무제한 |
| 다매장 대시보드 | X | X | O |
| 직원 계정 | X | X | 매장당 3명 |
| 우선 지원 | X | X | O |
| 항목 | 수량 |
|---|---|
| 총 컴포넌트 | 180+ |
| API 엔드포인트 | 34 |
| 커스텀 훅 | 20 |
| Zustand 스토어 | 12 |
| 유틸리티 모듈 | 40+ |
| 데이터베이스 테이블 | 15+ |
| 지원 업종 템플릿 | 12 |
사장님비서 — 외식업 사장님의 매장 운영을 AI로 자동화하는 올인원 비서
Made with Next.js · TypeScript · Supabase · Claude AI