尚未检测到更新。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].