尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
The Greater Mansarovar — Interactive Site Plan
Customers can browse freely. Prices, plot dimensions and the layout diagram unlock once they share a name and mobile number (no OTP). Each lead is linked to the plots that visitor opened, so the builder sees what each customer is interested in.
With no DATABASE_URL, the API uses an in-memory store (data resets on restart), so it runs with zero setup.檢視完整 README ↗Two apps on one Vercel project:
| URL | Who | What |
|---|---|---|
/ | Customers | Mobile-first site plan (2D plan, 3D model, satellite map), plot search & filters, plot details, enquiry |
/admin/ | Builder / owner | Password-protected leads dashboard: visitors, leads, conversion, most-viewed plots, lead pipeline, CSV export |
/buildings/ | Customers | Apartment / society building visualiser (see src/buildings/) |
Customers can browse freely. Prices, plot dimensions and the layout diagram unlock once they share a name and mobile number (no OTP). Each lead is linked to the plots that visitor opened, so the builder sees what each customer is interested in.
The dashboard has three tabs: Today, Stock and Customers.
/api/inventory every minute, so a plot put on hold in the dashboard turns yellow on the 2D plan, 3D model and map without a redeploy. Customers never see names or numbers, only the status.ANTHROPIC_API_KEY set the answer comes from Claude; without it a keyword search runs.?cp=Name, so every customer who comes through it is credited to that broker (first touch wins) and shows up as "via Name" in Customers and the Excel export.Plot, Status, Price (lakh), Note to update many plots at once.The Customers tab is a phone-first CRM in the spirit of Privyr, built for plots and flats:
VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY (npx web-push generate-vapid-keys) and VAPID_SUBJECT. Alerts fire for new website leads, Facebook / Instagram form leads, and WhatsApp customers who want to talk or booked a visit.The Ads tab connects marketing to the CRM:
fbclid is treated as Facebook)./api/webhooks/meta): every form submission becomes a lead card within seconds, tagged with the campaign / ad name. Needs META_VERIFY_TOKEN, META_PAGE_TOKEN (and optionally META_APP_SECRET for signature checks)./api/webhooks/whatsapp): customers who message the business number (including from Click-to-WhatsApp ads) get an instant reply in their language. The assistant quotes live stock, learns budget / size / facing, books a site-visit day (saved as the follow-up date) and hands over to the team when asked. Every chat shows on the customer's card with a reply box. Needs WA_VERIFY_TOKEN, WA_TOKEN, WA_PHONE_ID (optional WA_APP_SECRET). Without an AI key a scripted 4-step flow runs; without WhatsApp credentials replies are stored but not sent (sandbox).VITE_RERA_ID is set.npm test # API tests (in-memory store, no network)
Local AI without a key (disposable): set
AI_DEV_CLI=1in.envand the API routes AI calls through the installedclaudeCLI. Never active on Vercel.
npm install
npm run dev # http://localhost:5173 · admin: http://localhost:5173/admin/ (password: admin)
With no DATABASE_URL, the API uses an in-memory store (data resets on restart), so it runs with zero setup.
vercel.json (Vite build → dist, API routes from api/).DATABASE_URL to the project. Tables are created automatically on the first request.ADMIN_PASSWORD: required. The builder's dashboard password.SESSION_SECRET: optional, a long random string.VITE_BUILDER_PHONE / VITE_BUILDER_WHATSAPP: optional, e.g. 919876543210. Adds Call / WhatsApp buttons after an enquiry.VITE_RERA_ID: the project's RERA number, printed on shared stock messages.ANTHROPIC_API_KEY: optional. Turns on the AI assistant in the dashboard (ask about stock, morning note).index.html customer page shell
admin/index.html builder dashboard shell
src/shared/ plot data (plots_data.json) + derived geometry, zones, facing, pricing
src/customer/ customer app: plan.js (D3), view3d.js (three.js, lazy), mapview.js (Leaflet, lazy)
src/admin/ dashboard UI
api/index.js the one Vercel function (vercel.json rewrites /api/* to it); dispatches to server/router.js
server/ API handlers (one file per endpoint, same names as the URL)
track.js anonymous visits / plot views (+ broker tag ?cp=)
lead.js lead capture (name + mobile)
inventory.js public live stock (status + demand, no customer details)
admin/inventory.js stock: list, change status / price / hold, history, Excel upload
admin/ai.js assistant: ask about stock, morning note, ad copy (Claude, with plain fallbacks)
admin/marketing.js campaigns, ad spend, WhatsApp threads, sandbox chat, setup status
admin/insights.js drop-off funnel, speed to contact, lost reasons, no-shows, action items (+ AI coach note)
admin/activity.js log calls / WhatsApp / visits per lead (moves the pipeline)
admin/settings.js message templates, team, builder's name
admin/push.js phone alert subscriptions (Web Push)
webhooks/meta.js Facebook / Instagram lead ads → lead cards
webhooks/whatsapp.js WhatsApp Cloud API → AI assistant → lead cards
admin/session.js sign in / out (signed HttpOnly cookie)
admin/leads.js list + update lead status / notes
admin/stats.js KPIs, daily series, most-viewed plots
lib/ db (Neon or in-memory), units / marketing / crm repos, inventory rules, insights, ai, wa-bot, push, auth, http helpers
Edit src/shared/plots_data.json (status, price, area) and redeploy. Polygons are in plan units (1 unit = 1 ft).
Known data issue: plot numbers 180–183 appear twice (the four large plots on the south edge reuse them). They are shown as 180-2 … 183-2 until the correct numbers are filled in.