Open-Source Cold Email & Warmup Platform
Warmbly is the open-source platform for cold email: warm your mailboxes, send campaigns, and triage every reply. Run it on our cloud or self-host the whole thing.
Your leasing data. Working for you. Every lead source, every channel, every conversion: tracked, aggregated, and acted on.
MarketingTypeScript · JavaScriptGitHub @adamwolfe2OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
RealOS, managed marketing SaaS for real estate operators. Built for AM Collective.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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:Read the full 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 }).