Customer Engagement Platform for Email, Push Notifications, & SMS
The world's leader for mobile push notifications, web push, SMS, email and in-app messaging. Trusted by 2 million+ businesses to send 12 billion+ messages per…
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
"우리동네 맛평가단" - 중소 식품 사업자와 소비자를 잇는 솔직한 맛 평가 & 홍보 플랫폼 ✨ 지금 바로 방문하기 🔗 Demo 바로가기 밥터뷰는 동네 식당 사장님과 손님을 "체험단"으로 연결하는 모바일 웹 서비스입니다. 사장님은 신메뉴나 주력 메뉴를 체험단에게 제공하고, 손님(맛평가단)은 저렴하거나 무료로 음식을 경험한 뒤 장점 / 단점 / 개선점으로 구분된 솔직한 리뷰를 남깁니다. 사장님은 이렇게 모인 리뷰를 대시보드에서 분석해 메뉴 개선과 홍보에 활용하고, 손님은 리뷰를 쓸 때마다 포인트를 적립해 등급을 올리고 상점에서 사용합니다. 배달앱의 단순 별점 대신 구조화된 정성 피드백을 주고받는 것이 밥터뷰의 핵심입니다. • 대형 브랜드가 마케팅을 독점해, 동네 식당·중소 식품 사업자는 인지도를 쌓기 어렵고 광고비 부담이 큽니다. • 기존 별점 리뷰는 신뢰도가 낮고, "무엇을 어떻게 고쳐야 하는지"에 대한 구체적 피드백을 얻기 어렵습니다. 밥터뷰는 무신사·화해류의 체험단 모델을 동네 식품에 적용해, 사장님에게는 실질적인 개선 인사이트를, 손님에게는 새로운 맛집을 저렴하게 경험할 기회를 제공합니다.查看完整 README ↗
"우리동네 맛평가단" - 중소 식품 사업자와 소비자를 잇는 솔직한 맛 평가 & 홍보 플랫폼
밥터뷰는 동네 식당 사장님과 손님을 "체험단"으로 연결하는 모바일 웹 서비스입니다.
사장님은 신메뉴나 주력 메뉴를 체험단에게 제공하고, 손님(맛평가단)은 저렴하거나 무료로 음식을 경험한 뒤 장점 / 단점 / 개선점으로 구분된 솔직한 리뷰를 남깁니다. 사장님은 이렇게 모인 리뷰를 대시보드에서 분석해 메뉴 개선과 홍보에 활용하고, 손님은 리뷰를 쓸 때마다 포인트를 적립해 등급을 올리고 상점에서 사용합니다.
배달앱의 단순 별점 대신 구조화된 정성 피드백을 주고받는 것이 밥터뷰의 핵심입니다.
밥터뷰는 무신사·화해류의 체험단 모델을 동네 식품에 적용해, 사장님에게는 실질적인 개선 인사이트를, 손님에게는 새로운 맛집을 저렴하게 경험할 기회를 제공합니다.
밥터뷰는 사장님(B2B)과 맛평가단(B2C) 두 종류의 사용자를 하나의 앱에서 지원합니다.
utils/locationUtils.ts)utils/reviewAnalytics.ts)data/levelSystem.ts, stores/pointStore.ts)public/sw.js)utils/validation.ts)도메인별로 분리된 Zustand 스토어로 전역 상태를 관리합니다.
| 스토어 | 역할 |
|---|---|
authStore | 로그인 사용자 정보 / 토큰 |
productStore | 체험단(상품) 목록, 찜, 선택 상품 |
applicationStore | 체험단 신청 내역 |
reviewStore | 작성된 리뷰, 공개/비공개 |
notificationStore | 알림 |
pointStore | 포인트 적립·사용, 레벨 |
각 스토어는 브라우저 localStorage와 연동되어, 새로고침하거나 로그아웃 후 다시 로그인해도 체험단·신청·리뷰·포인트 데이터가 유지됩니다. 인증과 서버 API는 Supabase(Auth, Edge Functions)를 사용합니다.
| 구분 | 사용 기술 |
|---|---|
| Core | React 18, TypeScript, Vite |
| Routing | React Router (react-router-dom v6) |
| State | Zustand (도메인별 스토어) |
| Styling | Tailwind CSS, Radix UI, motion |
| Form & Validation | React Hook Form, Zod |
| Charts | Recharts |
| Backend | Supabase (Auth, Edge Functions) |
| PWA | Web App Manifest + Service Worker |
| Test | Vitest, Testing Library |
| Deploy | Vercel |
git clone https://github.com/Duckcchun/Local-Food-Review-App.git
cd Local-Food-Review-App
npm install
프로젝트 루트에 .env.local 파일을 생성하고 아래 값을 채웁니다. (참고: 저장소에는 예시용 .env.example이 포함되어 있습니다.)
VITE_SUPABASE_PROJECT_ID=your-project-id
VITE_SUPABASE_ANON_KEY=your-anon-public-key
npm run dev
브라우저에서 http://localhost:3000 접속
npm run build
npm run preview
npm run test # 단위 테스트 (Vitest, 1회 실행)
npm run test:watch # 감시 모드
npm run test:coverage # 커버리지 리포트
현재 리뷰 분석, 폼 검증, 이미지 업로드 검증, 레벨/포인트 로직에 대한 단위 테스트가 포함되어 있습니다.
/
├─ public/ # favicon, service worker(sw.js) 등 정적 에셋
├─ src/
│ ├─ components/ # 화면 및 재사용 UI 컴포넌트
│ │ ├─ common/ # EmptyState, LiveRegion, SkipLink 등 공용/접근성 컴포넌트
│ │ ├─ ui/ # Radix 기반 UI 프리미티브 (button, dialog, tabs 등)
│ │ └─ *.tsx # HomePage, BusinessDashboard, ReviewWritePage 등 화면 컴포넌트
│ ├─ pages/ # 라우트 진입점 (*Route.tsx) — URL과 화면 컴포넌트 연결
│ ├─ layouts/ # MainLayout 등 공통 레이아웃
│ ├─ stores/ # Zustand 스토어 (auth, product, application, review, notification, point)
│ ├─ hooks/ # 커스텀 훅 (useLocalStorage, useDarkMode, usePWA, useFocusTrap 등)
│ ├─ data/ # categories, levelSystem, pointShop, mockData 등 정적/시드 데이터
│ ├─ supabase/ # Supabase Edge Functions (functions/server)
│ ├─ utils/ # locationUtils, reviewAnalytics, validation, imageUpload, statsUtils 등
│ │ └─ supabase/ # Supabase 클라이언트 정보(info)
│ ├─ types/ # 전역 TypeScript 타입 정의 (index.ts, types.ts)
│ ├─ figma/ # 디자인 연동 자산 (ImageWithFallback)
│ ├─ styles/ # 전역 스타일 (globals.css)
│ ├─ test/ # 테스트 셋업 (Vitest)
│ ├─ routes.tsx # 라우트 정의
│ ├─ App.tsx # 메인 애플리케이션
│ └─ main.tsx # 애플리케이션 진입점
├─ .env.example # 환경 변수 예시 (Supabase 키 등)
├─ manifest.webmanifest # PWA 매니페스트
├─ package.json
├─ postcss.config.js
└─ vite.config.ts # Vite 설정