Ecommerce Template
Next.js·React 등으로 만든 최신 전자상거래 템플릿
스페인·프랑스·이탈리아·포르투갈에서 소유주 직접 매매·임대 아파트·주택을 찾고, 매물 등록은 무료
Find apartments and houses for sale or rent directly from owners in Spain, France, Italy and Portugal. Listing your property is free.
커머스TypeScript · PLpgSQLGitHub @rasbi-tools-cal온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Property portal for Spain, France, Italy and Portugal: owners list for free, buyers and tenants search
with filters and a map, contact owners directly and get email alerts.
Stack: Next.js 16 (App Router, Turbopack) · React 19 · TypeScript · Tailwind CSS v4 + shadcn/ui ·
next-intl (EN/ES/FR/IT/PT) · Supabase (Postgres + PostGIS, Auth, Storage, RLS) · Leaflet ·
Cloudflare Turnstile · SMTP email (any provider).
Requirements: Node 22+, pnpm, Docker Desktop.README 전문 보기 ↗Property portal for Spain, France, Italy and Portugal: owners list for free, buyers and tenants search with filters and a map, contact owners directly and get email alerts.
Stack: Next.js 16 (App Router, Turbopack) · React 19 · TypeScript · Tailwind CSS v4 + shadcn/ui · next-intl (EN/ES/FR/IT/PT) · Supabase (Postgres + PostGIS, Auth, Storage, RLS) · Leaflet · Cloudflare Turnstile · SMTP email (any provider).
Requirements: Node 22+, pnpm, Docker Desktop.
pnpm install
pnpm db:start # Supabase in Docker (first run downloads images)
pnpm db:reset # applies supabase/migrations + supabase/seed.sql (demo accounts)
pnpm seed:demo # 16 demo listings with photos (local only)
cp .env.example .env.local # then paste the keys printed by `npx supabase status`
pnpm dev # http://localhost:3100
| What | Where |
|---|---|
| Site | http://localhost:3100 |
| Emails (sign-up, alerts, messages) | Mailpit — http://127.0.0.1:54324 |
| Database UI | Supabase Studio — http://127.0.0.1:54323 |
Demo accounts (password Evalorio2026): [email protected] (moderator),
[email protected] (trusted owner, publishes instantly), [email protected] (first listing goes to review).
pnpm typecheck
pnpm lint
pnpm db:test # 24 pgTAP tests: RLS, privilege escalation, listing workflow, location privacy
pnpm test:e2e # Playwright: sign-up → post listing → moderation → search → contact → favourites
Trigger the alert emails by hand:
curl -H "Authorization: Bearer $CRON_SECRET" "http://localhost:3100/api/cron/alerts?frequency=daily"
app/[locale]/ pages (English at /, other languages under /es, /fr, /it, /pt)
[country]/[[...segments]] SEO search pages: /spain/madrid/apartments-for-sale, /es/espana/madrid/pisos-en-venta
listing/[ref] /listing/100002-penthouse-with-terrace
post, post/[id] 5-step listing wizard (draft autosaved per step)
account/*, admin/* owner dashboard, moderation
app/api/ auth callbacks, cron, GDPR export, one-click unsubscribe
components/ UI (shadcn in components/ui)
lib/actions/ server actions (validated with zod, rate limited)
lib/catalog.ts countries, property types, localized URL slugs
messages/*.json translations
supabase/migrations/ schema, RLS, triggers, search functions, geography data
supabase/tests/ database security tests
proxy.ts i18n routing + session refresh + protected routes
anon/authenticated by default, grants are explicit and
column-level where it matters (users can never change role, is_banned, is_trusted).listing_private (owner/admin only).
The public pin is offset by 80–200 m unless the owner opts in. Phone numbers are revealed on click,
rate limited and logged.pnpm remote:link, remote:push, remote:config, remote:check).https://yourdomain/**),
Email templates (copy supabase/templates/*), Captcha → Turnstile secret, custom SMTP,
Google provider (optional; then set NEXT_PUBLIC_GOOGLE_AUTH_ENABLED=true).pnpm remote:make-admin [email protected]..env.example in Vercel (production keys, never the local ones).NEXT_PUBLIC_MAP_TILE_URL / _ATTRIBUTION / _ORIGINS to a provider (MapTiler, Stadia, …).vercel.json (instant every 15 min needs a paid Vercel plan).lib/static-content.tsx) reviewed and completed; fill in the [brackets].