FloCafe
FloCafe는 구독 없이 무료로 주문·테이블·주방 디스플레이·로컬 데이터를 관리하는 로컬 퍼스트 레스토랑 POS입니다
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A Next.js app (App Router) in src/app, backed entirely by Supabase.
| Piece | Where |
|---|---|
Routes (one page.tsx per URL, page titles) | src/app ((site) holds every page with the header and footer) |
| Screens rendered by those routes | src/views |
| Shared components, hooks, backend client | src/components, src/hooks, src/lib |
pnpm install
cp .env.example .env.local # Supabase URL, publishable key, function slug
pnpm dev # http://localhost:5173
pnpm build && pnpm start # production build
Screens are client components ("use client"): data loads in the browser through the api Edge Function, so pages are rendered with their loading state on the server and fill in once the session is known. Environment variables must start with NEXT_PUBLIC_ to reach the browser. Deploy on Vercel or any Node host; set the three NEXT_PUBLIC_SUPABASE_* variables there and add the site's address to Supabase's Redirect URLs.
The app runs entirely on Supabase: database, file storage, backend function and sign-in (Supabase Auth with email + password and email magic links).
| Piece | Where |
|---|---|
| Tables, indexes, constraints | supabase/migrations/20261031000000_init_schema.sql |
| Storage buckets, auction-closing cron job | supabase/migrations/20261031000100_platform.sql |
Every query and mutation (same names as before, e.g. listings.get) | supabase/functions/_shared/modules/*.ts |
| Rules shared with the UI (plans, bidding, accounts, profile fields) | supabase/functions/_shared/domain/*.ts (imported in the app as @/shared/...) |
HTTP entry point (/functions/v1/api) | supabase/functions/api/index.ts |
React hooks (useQuery, useMutation, usePaginatedQuery, useBackendAuth, Authenticated...) | src/lib/backend/react.tsx |
Typed function references (api.listings.get) and row types (Doc, Id) | src/lib/backend/api.ts, src/lib/backend/types.ts |
| File uploads | src/lib/backend/upload.ts |
api Edge Function, which checks the Supabase Auth access token (sent in the x-user-token header) and applies the same rules the Convex functions did.db-changes. Browsers refetch the queries that read that table. After a mutation returns, the caller's own affected queries have already been refreshed.public-media holds listing photos, blurred previews, avatars, profile photos and feed photos. private-media holds locked originals and verification photos, which are only shown through 6-hour signed URLs to people allowed to see them. Uploads use one-time signed upload URLs, and the server only accepts files the user uploaded themselves.pg_cron runs app.close_due_auctions() every minute. Deletes cascade through foreign keys instead of background purge jobs.Pages: /signin (sign in, create account, email link), /auth/callback (where email links land) and /auth/reset (choose a new password). In the Supabase dashboard:
https://your-domain) and add https://your-domain/** (and http://localhost:5173/** for development) to Redirect URLs. Email links only work for listed addresses.npx supabase login
npx supabase link --project-ref <project-ref>
npx supabase db push # creates tables, buckets, cron job
npx supabase functions deploy api # verify_jwt is off in supabase/config.toml
.env.example to .env.local and fill in NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY and NEXT_PUBLIC_SUPABASE_FUNCTION (the function's slug) (Dashboard → Project Settings → API).ALLOWED_ORIGINS=https://your-domain as a function secret to restrict CORS.pnpm db:start # local Supabase (Docker)
echo PUBLIC_SUPABASE_URL=http://127.0.0.1:54321 > supabase/functions/.env
pnpm functions:serve
pnpm dev
Add an exported query(...) or mutation(...) to a module in supabase/functions/_shared/modules/. It's picked up by registry.ts and becomes api.<module>.<name> in the app with full types. Use ctx.db (get, first, select, insert, patch, delete, paginate, or raw SQL via rows) and ctx.storage. Throw AppError for messages the user should see. Schema changes go in a new file in supabase/migrations/.