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