Open-Source Cold Email & Warmup Platform
Warmbly 是開源的冷郵件平台:溫暖您的收件箱、發送活動、並對每個回覆進行分流。可在我們的雲端運行或自行託管整個系統。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證RealOS, managed marketing SaaS for real estate operators. Built for AM Collective.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Managed marketing SaaS for real estate operators. Website, live listings,
AI chatbot, ad pixel, lead capture, ad creative, reporting. Built and managed
by us. Launched in two weeks.
LeaseStack is a temporary working name. See NAMING.md for how to rename
globally once the product name is final.
A single Next.js app that serves four surfaces from one codebase:檢視完整 README ↗Leasing intelligence for rental operators (track, not manage). LeaseStack traces every ad dollar, website visitor, lead, and tour to the signed lease and shows it in one dashboard the operator logs into. It tracks performance; it does not run ads or create creative. Live at leasestack.co.
Positioning and tone: see PRODUCT.md. Repo rules for contributors and
agents: AGENTS.md. Design tokens: DESIGN.md.
A single Next.js app that serves four surfaces from one codebase:
leasestack.co), sells the product to operators.leasestack.co/admin), the LeaseStack operations team's dashboard across
every tenant: intake queue, fulfillment pipeline, creative requests,
cross-tenant analytics, impersonation.leasestack.co/portal), the client's dashboard: leads,
chatbot conversations, ad creative requests, multi-property
CRM, billing, site builder, and the SEO Agent at /portal/seo/agent
(composite score, ranked recommendations, target queries, AI content
drafter, drafts inbox).telegraphcommons.com), hostname-routed,
rendered from app/(tenant): live AppFolio listings, chatbot widget,
lead capture, SEO pages.All four are served by the same Next.js app. Middleware resolves hostname,
matches to an Organization, and routes to the correct surface.
| Layer | Technology |
|---|---|
| Framework | Next.js 16, App Router, Turbopack |
| Language | TypeScript (strict) |
| UI | React 19, Tailwind v4, shadcn/ui, Radix |
| Database | Prisma 7 + Neon Postgres |
| Auth | Clerk (multi-org) |
| Payments | Stripe |
| Resend | |
| AI | Anthropic Claude SDK |
| Backend systems | AppFolio (REST + embed fallback) |
| Hosting | Vercel, single project, wildcard + custom domains |
| Analytics | PostHog, GA4 per-tenant |
| Errors | Sentry |
Infrastructure scaffolding carried over from an earlier template (auth, billing, email framework, admin shell, shadcn/ui, intake wizard framework). Domain rebuilt from scratch around the real-estate model: properties, listings, leads, applications, chatbot conversations, creative requests, ad campaigns.
Original sprint plan lives in prd/. Historical sprint notes are archived in
docs/archive/BUILD_LOG.md.
pnpm install
cp .env.example .env.local # fill in real secrets
pnpm db:push # requires DATABASE_URL set
pnpm db:seed # seeds the LeaseStack operator org + Telegraph Commons (foundation)
pnpm dev
For the sales-demo deployment (e.g. leasestack.co/demo) where every page
needs to look fully populated for prospects, run the showcase seeders against
a throwaway Neon branch (never production):
ALLOW_DEMO_SEED=true \
pnpm exec tsx scripts/seed-telegraph-commons.ts # foundation
ALLOW_DEMO_SEED=true \
pnpm exec tsx scripts/seed-telegraph-commons-showcase.ts # residents,
# leases,
# work orders,
# ad campaigns
# + 28d metrics,
# SEO snapshots,
# reputation,
# insights,
# reports,
# notifications
Both scripts are triple-guarded against running in production (NODE_ENV,
VERCEL_ENV, ALLOW_DEMO_SEED opt-in, plus a hostname heuristic).
pnpm dev, local dev server with Turbopackpnpm build, prisma generate && next buildpnpm vercel-build, adds prisma migrate deploy ahead of Next build, only when VERCEL_ENV=production (preview shares the prod DB)pnpm type-check, tsc --noEmitpnpm db:push, push Prisma schema to the configured databasepnpm db:seed, run prisma/seed.tspnpm db:studio, Prisma StudioSee prd/CLAUDE.md for the target file map. Roughly:
app/
(platform)/ marketing site
(tenant)/ hostname-routed tenant marketing site
admin/ master admin
portal/ client portal
onboarding/ intake wizard
api/ route handlers
lib/
tenancy/ hostname -> org, RLS scope, impersonation
integrations/ appfolio, cursive (lead marketplace import), slack, resend, stripe
build/ tenant provisioning pipeline
chatbot/ proactive chatbot runtime
email/ resend framework
stripe/ retainer billing
components/
chatbot/ forked from telegraph-commons
tenant-site/ building blocks for surface 4
portal/ client portal components
admin/ master admin components
intake/ intake wizard steps
ui/ shadcn/ui
prisma/
schema.prisma real-estate domain schema
seed.ts operator org + Telegraph Commons seed
prd/ product requirements (12 sprints)
See .env.example for the full list. Key real-estate-specific vars:
CURSIVE_API_KEY, CURSIVE_API_URL (lead marketplace segment import)APPFOLIO_OAUTH_CLIENT_ID, APPFOLIO_OAUTH_CLIENT_SECRETVERCEL_API_TOKEN, VERCEL_PROJECT_ID (custom-domain attachment)ANTHROPIC_API_KEY (chatbot)AGENCY_ORG_SLUG, AGENCY_ADMIN_EMAILScoped API keys let external systems (Zapier, Typeform, Make, custom forms,
Calendly, Twilio) push data into a tenant without a dedicated webhook.
Generate keys at /portal/settings/api-keys. Auth via
Authorization: Bearer re_live_.... Keys are rate-limited per-key (60
requests / minute).
# Create or merge a lead
curl -X POST https://www.leasestack.co/api/ingest/lead \
-H "Authorization: Bearer re_live_..." \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","firstName":"Alex","source":"FORM"}'
# Schedule a tour for an existing lead
curl -X POST https://www.leasestack.co/api/ingest/tour \
-H "Authorization: Bearer re_live_..." \
-H "Content-Type: application/json" \
-d '{"leadEmail":"[email protected]","propertyId":"prop_...","scheduledAt":"2026-05-01T17:00:00Z"}'
# Append chatbot turns (merges by sessionId)
curl -X POST https://www.leasestack.co/api/ingest/chatbot \
-H "Authorization: Bearer re_live_..." \
-H "Content-Type: application/json" \
-d '{"sessionId":"sess-1","email":"[email protected]","messages":[{"role":"user","content":"hi"}]}'
Available scopes: ingest:lead, ingest:tour,
ingest:chatbot, or * for full access.
End-to-end SEO + AEO automation lives at /portal/seo/agent (operator) and
/admin/content-drafts (LeaseStack review queue). See
docs/SEO_AEO_AGENT_ARCHITECTURE.md
for the full design. Highlights:
lib/seo/dataforseo.ts, lib/seo/sync-orchestrator.ts)
pulls live SERP rankings, Lighthouse audits, backlinks, ranked keywords,
keyword intersection, local pack, and on-page audits.lib/seo/agent.ts) ranks actions across 10
categories (CTR_FIX, CONTENT_GAP, NEIGHBORHOOD_PAGE, REFRESH, AEO_GAP,
AEO_NOT_CITED, ONPAGE_AUDIT, BACKLINK_OPPORTUNITY, SCHEMA_GAP,
INTERNAL_LINKING).lib/seo/draft-writer.ts) produces six
formats: blog post, neighborhood page, property description, meta rewrite,
FAQ block, ad copy. Every draft is reviewed by an admin before shipping.SeoScoreHistory
(lib/seo/score-snapshot.ts).seo-competitor-scan (03:00 UTC),
dataforseo-sync (04:00 UTC), seo-fact-aggregate (05:00 UTC).DATAFORSEO_LOGIN, DATAFORSEO_PASSWORD. Engine degrades
gracefully when keys are absent (every DataforSEO call returns
{ skipped: true }).