Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
ระบบขายหน้าร้านและบัญชีสนามฟุตบอล
Translation pending
BusinessTypeScript · PLpgSQLGitHub @plaipkOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
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 ↗POS + accounting system for a football-field operation: product sales, general expenses, stock receiving, credit sales ("เซ็น") with partial-payment debt tracking, cash↔bank transfers, a Void flow, and a monthly closing report (26th–25th accounting period) that allocates net profit 30/30/30/10 and emits a PDF.
Rebuilt from the original Google Apps Script + Sheets version onto: Next.js (App Router) · Supabase (Postgres, Storage) · Vercel.
No accounts/login — same trust model as the original (anyone who opens the app has full access; the original only gated destructive actions behind a shared "1234" prompt, which this drops in favor of just... not pretending to be security).
supabase/migrations/),
not application code — see the comments at the top of
20250101000003_functions.sql. RLS denies direct table writes from the
client; the RPC functions are the only way to mutate anything.src/lib/types/database.ts is hand-written to match the migrations. Every
Row/Insert/Update type must stay a fully inlined object literal —
see the comment in that file for why (a real, reproducible Supabase
TypeScript client bug where referencing a named interface, or even the
built-in Partial<T>, silently collapses .rpc()/.from() typing to
undefined/never). Regenerating with supabase gen types typescript
produces this same literal style, so that's always safe to run.supabase init +
supabase start for a local stack). Apply the migrations in
supabase/migrations/ in order — either supabase db push, or paste each
file's contents into the SQL Editor in order (0001 → 0005).cp .env.local.example .env.local and fill in the Supabase URL + keys
(Project Settings → API).npm installnpm run dev — http://localhost:3000See the header comment in scripts/migrate-from-sheets.ts for the Google
service-account setup, then:
npm run migrate
Run it against a staging/throwaway Supabase project first and spot-check totals against the original sheet before pointing it at production.
.env.local (except the GOOGLE_* ones — those are only for the one-off
migration script) in the Vercel project settings./api/reports/generate route needs the Node.js runtime (already set
via export const runtime = "nodejs") — it renders PDFs with
@react-pdf/renderer and uploads them to the private reports Storage
bucket using the service-role key.The original design (still in git history) had Supabase Auth + a profiles
table with staff/admin roles, gating Void and period-close to admins.
Dropped per a deliberate call to keep this a walk-up-and-use tool for a small
team. Re-adding it means: a profiles table + signup trigger, auth.uid()
checks back in the RPC functions, RLS policies scoped to authenticated
instead of anon, and a login page + route guard on the frontend.