Ecommerce Template
Next.js·React 등으로 만든 최신 전자상거래 템플릿
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Digital coupons for local shops. See CLAUDE.md for the product spec and build phases.
1. Install Node 20 or newer.
2. Copy .env.example to .env.local and fill in the Supabase values.
3. Install and start:
4. Open http://localhost:3000. The ticket sample is at /styleguide.
Other scripts: npm run build, npm run start, npm run lint.
Migrations live in supabase/migrations/ and match what is applied to the Supabase project.
After a schema change, regenerate src/lib/supabase/database.types.ts.
To make a user an admin, run in the Supabase SQL editor:README 전문 보기 ↗Digital coupons for local shops. See CLAUDE.md for the product spec and build phases.
Install Node 20 or newer.
Copy .env.example to .env.local and fill in the Supabase values.
Install and start:
npm install
npm run dev
Open http://localhost:3000. The ticket sample is at /styleguide.
Other scripts: npm run build, npm run start, npm run lint.
Migrations live in supabase/migrations/ and match what is applied to the Supabase project.
After a schema change, regenerate src/lib/supabase/database.types.ts.
To make a user an admin, run in the Supabase SQL editor:
update public.profiles set role = 'admin' where id = (select id from auth.users where email = '[email protected]');
The scripts create throwaway users and a test business in the Supabase project, run their checks, then delete everything they made. They need SUPABASE_SECRET_KEY in .env.local.
node --env-file=.env.local scripts/test-redemption.mjs
Checks the redemption functions directly, including concurrent verify races, limits, expiry, wrong business, paused coupons, staff invites and Realtime.
npm run build
npx next start -p 3100
BASE_URL=http://localhost:3100 node --env-file=.env.local scripts/test-pages.mjs
Fetches pages as a shopper, a staff member, an owner and a signed-out visitor, and checks access and content.
BASE_URL=http://localhost:3100 node --env-file=.env.local scripts/test-admin-actions.mjs
Calls the admin server actions, and the redeem, scanner and staff actions, over HTTP the way the browser does, as an admin, a merchant, a shopper and a signed-out visitor. Needs the same running build. It restores the category order and platform settings afterwards.
BASE_URL=https://coupersville.com node --env-file=.env.local scripts/test-billing.mjs
Stripe billing in test mode (it refuses to run with a live key): forged and duplicate webhooks, a successful payment, declined and failing cards, 3D Secure held for authentication, cancelling, a stale event arriving late, and a failed renewal using a Stripe test clock. Against the live site Stripe delivers the webhooks; against a local build (BASE_URL=http://localhost:3100) the script signs and sends them itself and also checks the Checkout and portal actions. Card entry in Checkout itself needs a person.
BASE_URL=http://localhost:3100 node --env-file=.env.local scripts/test-signin-codes.mjs
Shopper sign-in with an email code, through the real server actions of a local build: merchants refused, a code signing in and a save carrying on, wrong codes, and the per-email and per-IP limits. The code comes from Supabase's admin generateLink, so no email is sent; receiving a real email needs a person with an inbox.
BASE_URL=http://localhost:3100 node --env-file=.env.local scripts/test-finish.mjs
Phase 7: marketing and legal pages, titles, sitemap, robots, Open Graph image, PWA files and icons, the 404 page, every email (welcome, staff invite, plan started, plan ending, plan ended, coupon removed), the daily job run twice, and account deletion for a shopper and for an owner with a Stripe test plan. Accounts that should get a real email use Resend's test inbox ([email protected]), so those emails show in the Resend dashboard but reach no one. It needs CRON_SECRET in .env.local and stops before calling the daily job if a real plan ends within 7 days.
The camera scanner, the stamp animation and the screen wake lock are not covered here. Test them on real phones.
node --env-file=.env.local scripts/seed-demo.mjs add six demo shops with coupons
node --env-file=.env.local scripts/seed-demo.mjs --remove remove them
Against the production project it refuses unless you add --production. Demo owners use @demo.coupersville.test addresses, which never receive email.
vercel.json runs /api/cron/daily at 15:00 UTC. Vercel sends CRON_SECRET with it; set the same variable on Vercel. To run it by hand:
curl -H "Authorization: Bearer $CRON_SECRET" https://coupersville.com/api/cron/daily
Running it twice in a day sends nothing new.
src/app/opengraph-image.jpg is made from public/town-sign.jpg by node scripts/make-og-image.mjs. Run it again if the sign changes.