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.
לראות את הבשר. להכיר את הקצב. לבחור את הנתח האמיתי.
Translation pending
CommerceGitHub @oavital77-codeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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, ומשמשים לתצוגה בלבד.