Saleor Store
우리 컬렉션을 쇼핑하세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Hyperlocal marketplace for food, groceries and everyday essentials.
A shop appears only when the customer is inside the shop's own delivery radius and the shop is inside the radius the customer chose. Both directions must hold — there is no wider fallback.
| Layer | Choice |
|---|---|
| Framework | Next.js 16 (App Router) + TypeScript |
| Styling | Tailwind CSS v4 (CSS-first @theme) |
| Database | Supabase Postgres + PostGIS |
| Auth | Supabase Auth — phone OTP, Google, email + password |
| Storage | Supabase Storage |
| Realtime | Supabase Realtime |
One app serves all four audiences. Routes are grouped by role and separated by Postgres row level security, not by separate builds.
| Area | Routes | Role |
|---|---|---|
| Customer / guest | /, /browse, /cart, /orders | none / customer |
| Business | /business/** | seller |
| Delivery | /delivery/** | delivery |
| Admin | /admin/** | admin |
npm install
cp .env.example .env.local # then fill in your Supabase keys
npm run dev
Open http://localhost:3000. The website needs the Supabase keys in .env.local to render; without them it shows an error page.
.env.local.supabase/migrations/ in order, either with the
Supabase CLI (supabase db push) or by pasting each file into the SQL editor.Migrations are ordered and idempotent to apply in sequence.
| File | Contents |
|---|---|
0001_foundation | Extensions, enums, role helpers |
0002_identity | profiles, user_roles, addresses, new-user trigger |
0003_catalog | categories, sellers, products |
0004_commerce | cart_items, orders, order_items, order_events, payments |
0005_delivery | Agents, fleets, invites, assignments |
0006_engagement | Reviews, favourites, notifications |
0007_platform | Platform settings, audit log, upload ledger |
0008_marketplace | nearby_sellers, nearby_products, nearby_categories |
0009_rls | Row level security for every table |
0010_functions | Order lifecycle, payments, delivery, admin review |
0011-0024 | Hardening, images, order flow and live tracking, Cashfree payments (see each file's header) |
0025_foundation_hardening | Stronger delivery code with lockout, expiry of ignored paid orders and abandoned payments |
0026_subscriptions | Monthly shop subscription: trial, grace, suspension, gating |
0027_assign_delivery | The shop assigns its own delivery partner (replaces the open claim) |
0028_shop_documents | FSSAI and GST documents, FSSAI-gated approval, expiry hides a food shop, licence shown to customers |
0029_web_push | Browser notifications: subscriptions, delivery queue on notifications, refund notice |
0030_order_exits | Shop cancel, failed delivery, rider hand-back, refunds, cash handover, customer problem reports |
0031_hours_and_auto_accept |
Order and payment amounts are integers in paise. Nothing computes with a formatted value. The invariant the system maintains is:
verified_prepaid + cash_collected + unpaid = total
verified_prepaid_paise is written only when a seller verifies a payment.
cash_collected_paise is written only when a delivery partner completes an
order with the customer's six-digit code. No status alone ever implies money
was received.
Defined once in src/app/globals.css under @theme:
#ff4d1c, accent saffron #ffb020| Opening hours enforced at order time, optional auto-accept |
0032_account_and_cleanup | Account erasure (anonymize_customer), drops unused notification_devices |
0033_admin_console | Pause a shop or rider, order search and timeline, admin management, audit trail |