Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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.