尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 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].