Ecommerce Template
Next.js·React 등으로 만든 최신 전자상거래 템플릿
Ten2Ten — 임대 거래를 세입자 간 직접 연결, 중개인·수수료 없이
Ten2Ten — передача аренды напрямую между жильцами, без риелторов и комиссии. Снять квартиру, комнату или студию в Москве и Санкт‑Петербурге от прежних жильцов.
커머스TypeScript · PLpgSQLGitHub @txtBilly온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Tenant-to-tenant apartment marketplace. NYC. No brokers, no fees — just $100 to connect with the person leaving the place you want.
Market: US / NYC · Languages: English, Spanish · Stack: Next.js 14, Supabase, Stripe, Twilio, Resend.README 전문 보기 ↗Tenant-to-tenant apartment marketplace. NYC. No brokers, no fees — just $100 to connect with the person leaving the place you want.
Market: US / NYC · Languages: English, Spanish · Stack: Next.js 14, Supabase, Stripe, Twilio, Resend.
Instead of opening an empty browse page, the homepage is an intake form: seekers describe what they want, we match the first members by hand, and notify them by SMS. This avoids the "empty playground" problem. The intake also works over inbound SMS (Twilio webhook).
ten2ten/
├── src/
│ ├── middleware.ts # locale routing (must live in src/ with the app dir)
│ ├── app/
│ │ ├── layout.tsx # root metadata
│ │ ├── globals.css
│ │ ├── [locale]/
│ │ │ ├── layout.tsx # sets <html lang>
│ │ │ ├── page.tsx # cold-start homepage + intake
│ │ │ ├── browse/ # placeholder (Session 3)
│ │ │ ├── list/ # placeholder (Session 3)
│ │ │ └── account/ # placeholder (Session 2)
│ │ └── api/
│ │ ├── intake/ # POST intake submissions
│ │ ├── stripe/webhook/ # grants credits on payment
│ │ └── twilio/sms/ # inbound SMS intake
│ ├── components/IntakeForm.tsx
│ ├── lib/
│ │ ├── supabase/{client,server}.ts
│ │ ├── credits.ts # the credit ledger logic
│ │ ├── stripe.ts
│ │ ├── twilio.ts # SMS + email (Resend)
│ │ └── cn.ts
│ └── i18n/{config.ts,en.json,es.json}
└── supabase/
├── schema.sql # run first
└── rls-policies.sql # run second
npm install
In your Supabase project (SQL Editor), run in order:
supabase/schema.sqlsupabase/rls-policies.sqlEnable the postgis extension if the schema step doesn't (Database → Extensions → postgis).
Copy .env.example to .env.local and fill it in.
Supabase keys (Settings → API Keys in the dashboard):
sb_publishable_…) into NEXT_PUBLIC_SUPABASE_ANON_KEY, and the Secret key (sb_secret_…) into SUPABASE_SERVICE_ROLE_KEY.anon and service_role from the Legacy API Keys tab.Both work with this code — the new keys are drop-in replacements for the old ones.
npm run dev # http://localhost:3000 (redirects to /en)
npm run build # production build
npm run typecheck
/ → /en redirect./api/intake → saves to intake_requests → sends Twilio confirmation SMS./api/twilio/sms).Run npm run dev as usual. After deleting or renaming a route file (an
app/[locale]/**/page.tsx, layout.tsx, etc.) while the dev server is still
running, Next's .next cache can keep serving stale chunk manifests for the
old route tree — this shows up as layout.css/main-app.js 404s and pages
that hang on their first load instead of rendering or erroring. If you hit
that, stop the server and run:
npm run dev:clean # rm -rf .next && next dev
instead of a plain npm run dev. Do this any time a build step in these
session specs deletes a route (e.g. removing onboarding/ in the signup
merge).
txtBilly/ten2ten GitHub repo to a new Vercel project (auto-detects Next.js)..env.example variables under Settings → Environment Variables.ten2ten.app under Settings → Domains, then update DNS.https://ten2ten.app/api/stripe/webhook and the Twilio SMS webhook to https://ten2ten.app/api/twilio/sms.Note:
[email protected]is pinned. ThesupabaseCLI is not a project dependency — usenpx supabaseif you need it locally.