尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Admin dashboard for a Group Order (GO) business purchasing Aikatsu products
from Mercari Japan, per the product's PRD. Covers order recap (Box → Batch →
Item → Customer), batch payment management, tax bill management (Tagihan
Pajak EMS), and Price Estimator configuration.
• React 19 + TypeScript, built with Vite
• React Router (hash routing)
• Zustand (+ persist) for state — currently the only data layer
• Tailwind CSS v4檢視完整 README ↗Admin dashboard for a Group Order (GO) business purchasing Aikatsu products from Mercari Japan, per the product's PRD. Covers order recap (Box → Batch → Item → Customer), batch payment management, tax bill management (Tagihan Pajak EMS), and Price Estimator configuration.
persist) for state — currently the only data layernpm install
npm run dev
The app runs entirely on the Zustand store in src/store/useStore.ts,
persisted to localStorage. There is no backend yet — item photos and
bukti transfer uploads are stored as base64 data URLs in the browser. This
is fine for demoing the workflows, but doesn't scale past a single device
or survive a cleared browser.
supabase/migrations/0001_init.sql has a Postgres schema mirroring
src/types.ts (batches, items, batch_bills, tax_bills, estimator_config,
notifications), with Row Level Security policies so customers only ever
see their own rows and Admin GO has full access. src/lib/supabaseClient.ts
is a client stub — nothing in the app calls it yet.
To connect a real project:
supabase db push or paste it into the SQL editor).batch-photos and bukti-transfer storage buckets (see the
comment at the bottom of the migration file) and add matching storage
policies..env.example to .env and fill in your project URL/anon key.useStore.ts actions to call Supabase instead of
mutating local state — not done yet, since it touches every page.The two dashboards use two separate, unrelated sign-in methods — there is no shared login screen and no SSO between them.
Admin GO signs in with a normal website account: Supabase Auth's built-in
email/password provider. This is an internal tool, not a public signup —
admin accounts are provisioned out-of-band (Supabase dashboard invite, or
a seed script) with role = 'admin' and no line_user_id. No public
"sign up as admin" flow exists or should exist.
Customers sign in with LINE Login and nothing else — no email/
password option on that dashboard. LINE Login (v2.1) is OpenID Connect–
compliant — it issues a signed id_token carrying the user's stable LINE
id (sub), display name, and profile picture. Supabase Auth accepts that
directly via supabase.auth.signInWithIdToken() once LINE is registered
as a custom OIDC provider on the project (LINE Developers Console → a
"LINE Login" channel, Callback URL pointed at the Supabase Auth callback,
Channel ID/Secret entered into Supabase's Auth provider settings).
profiles.line_user_id stores the sub claim and is how a returning
customer is matched back to their row; full_name / avatar_url are
seeded from the LINE profile on first login and editable after.role = 'customer' and always has
line_user_id set — the schema's line_user_id_iff_customer check
constraint enforces that a row is either a LINE customer or an admin
website account, never both.