Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
AI 기반 올인원 매장 운영 비서 웹앱 매일 밤 1시간 걸리던 마감 업무를 5분으로. 외식업 사장님들은 매일 밤 영업 종료 후 마감 정산, 재고 확인, 경비 정리, 리뷰 응대 등 반복적인 운영 업무에 1시간 이상을 소비합니다. 대부분 수기 노트나 엑셀로 관리하며, 데이터 기반 의사결정은 거의 이루어지지 않습니다. 사장님비서는 이 모든 업무를 하나의 앱으로 통합하고, AI가 자동화하여 5분 안에 마감할 수 있게 합니다. 30초 매출 입력으로 자동 정산 및 분석 리포트 생성 매출 입력 (3가지 모드) • 숫자 키패드: 64px 높이 대형 버튼, 프리셋 원터치 입력 (평일/주말 기본값) • 음성 입력: Web Speech API 기반 — "오늘 매출 187만, 홀 120만, 배민 40만..." • 자유 텍스트: Claude AI가 자연어를 파싱하여 자동 분배 채널별 매출 분배 • 슬라이더 모드: 드래그로 비율 조절 (홀/배민/쿠팡이츠/요기요/포장 등) • 직접 입력 모드: 채널별 금액 직접 입력 • 결제수단 비율: 카드/현금 분리查看完整 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