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 }).