FloCafe
FloCafe is the free, local-first restaurant POS in the FloPOS ecosystem. Run orders, tables, kitchen display, and local data without a software subscription.
翻译准备中
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗קצב מצלם נתח → מפרסם → הנתח מופיע בלייב אצל הלקוחות → לקוח מזמין נתח שלם או סטייקים → המלאי מתעדכן אטומית → הקצב מכין ומעדכן סטטוס.
האפיון המלא: SPEC.md. שאלות פתוחות וחובות טכניים: OPEN_QUESTIONS.md.
Next.js 15 (App Router) · TypeScript · Tailwind CSS 4 · Supabase (Postgres, Auth, Storage, Realtime) · Vercel · PWA.
solor, הפונקציות רצות בפרנקפורט fra1)SoloR (ckkzvlheczzdifvfvygv, אזור eu-central-1)claude/funny-fermat-217fy0 מעלה גרסה חדשה לייצור.supabase/
migrations/ ← סכמה, פונקציות RPC אטומיות, RLS, bucket ו-Realtime
seed.sql ← גזעים + רשומת קצבייה אחת
tests/ ← בדיקות SQL (כולל מקביליות ו-idempotency)
src/
app/(customer)/ ← פיד לייב, דף נתח, ההזמנות שלי, פרופיל
app/butcher/ ← בית קצב, אשף נתח, ניהול נתח, הזמנות
app/login, onboarding, auth/*
components/ ← CutDetail (משותף לדף הנתח ולתצוגה המקדימה), MediaUploader, OrderTimeline…
lib/pricing.ts ← חישובי מחיר (זהים ל-SQL) + בדיקות
lib/i18n/he.ts ← כל הטקסטים בעברית
lib/labels.ts ← enum → עברית
middleware.ts ← הגנת נתיבים לפי התחברות, פרופיל ותפקיד
eu-central-1 — פרנקפורט, הכי קרוב לישראל).npx supabase link --project-ref <ref> ואז npx supabase db push, ואחר כך מריצים את supabase/seed.sql ב-SQL Editor.supabase/migrations/*.sql לפי הסדר, ואחריהם את supabase/seed.sql.{{ .Token }}, למשל:
<h2>קוד הכניסה שלך ל-SoloR</h2>
<p style="font-size:28px;letter-spacing:6px"><b>{{ .Token }}</b></p>
(מומלץ אותו דבר גם בתבנית Confirm signup.)https://<domain>/auth/callback.NEXT_PUBLIC_ENABLE_GOOGLE=true.cut-media נוצר במיגרציה, עם מגבלה של 200MB לקובץ. שימו לב: בתוכנית Free מגבלת הקובץ הגלובלית היא 50MB. כדי להעלות סרטונים גדולים יותר צריך תוכנית Pro, ולהעלות את המגבלה ב-Storage → Settings.הקצב נרשם באפליקציה כמו כל משתמש (אימייל וקוד, ואז שם וטלפון). אחר כך מריצים ב-SQL Editor:
update profiles
set role = 'butcher', butcher_id = '00000000-0000-4000-8000-000000000001'
where id = (select id from auth.users where email = '[email protected]');
ומעדכנים את פרטי הקצבייה (שם, כתובת, טלפון ושעות איסוף):
update butchers set name = '...', address = '...', phone = '...', pickup_hours = '...'
where id = '00000000-0000-4000-8000-000000000001';
מייבאים את הריפו ל-Vercel ומגדירים משתני סביבה (ראו .env.example):
NEXT_PUBLIC_SUPABASE_URL=https://<ref>.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=<anon / publishable key>
NEXT_PUBLIC_ENABLE_GOOGLE=false
ה-service role key לא נדרש לאפליקציה, ואסור לשים אותו בצד הלקוח.
cp .env.example .env.local # ממלאים URL ו-anon key
npm install
npm run dev # http://localhost:3000
npm test # בדיקות יחידה: pricing (כולל הדוגמה מ-6.3), ולידציה, סינון פיד
npm run typecheck
npm run db:test # מיגרציות + RPC + RLS + מקביליות על Postgres מקומי (PGHOST/PGUSER/PGPASSWORD)
db:test מקים מסד נתונים זמני, יוצר תחליף מינימלי לסכמת auth של Supabase, מריץ את כל המיגרציות וה-seed, ובודק:
NOT_ENOUGH_STEAKS;publish_cut, place_order, cancel_order, advance_order, store_sale, withdraw_cut ו-revert_to_draft הן SECURITY DEFINER ונועלות את שורת הנתח (FOR UPDATE). ללקוח יש הרשאת עמודות רק לשדות תוכן; לסטטוס, למלאי ולהזמנות אין לו הרשאת כתיבה בכלל.pricing.ts זהים לחישוב ב-SQL, ומשמשים לתצוגה בלבד.