Open-Source Cold Email & Warmup Platform
Warmbly는 메일함을 예열하고 캠페인 전송·답변 triage를 지원하는 오픈소스 콜드 이메일 플랫폼입니다
임대 데이터를 수집·통합·활용해 모든 리드와 전환을 관리합니다
Your leasing data. Working for you. Every lead source, every channel, every conversion: tracked, aggregated, and acted on.
마케팅TypeScript · JavaScriptGitHub @adamwolfe2온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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 }).