CLARIFY PROJECT MANAGER

The operating system for Canadian real-estate agents.

One subscription. One AI coach. Every tool an agent needs — listings, buyer guides, websites, email, CRM — unified under a single conversational surface. Replacing a $400/mo stack of Canva, ChatGPT, Mailchimp, and a CMA tool with something that sounds like them and knows their clients.

Tools shipped
9
+3 this quarter
Beta users
2
Braden · Kelley
Target ARPU
$100/mo
+ credit top-ups
Stack size
1 worker
Single file backend
02System Status

What's live right now.

Thirteen modules in production, one in active build, three placeholders. Colour-coded by state — green ships, amber moves, grey waits.

New Chat
General-purpose Sonnet 4.6 assistant with memory + custom instructions. The ChatGPT replacement.
Core · Shipped
My Branding
Single source of truth for every deliverable. Colours, logos, PREC, tone.
Core · Shipped
Listing Presentation
Premium CMA skill. Web + PDF. Edit-chat, QR share, publish flow.
Shipped
Open Canvas
Free-form AI document generation. Inside the Presentations leg.
Shipped
Buyer's Guide
Province-specific, live web search, first-time vs repeat buyer variants.
Shipped
Website Builder
Property · Neighbourhood · Agent · Custom. Publishes to /w/:slug.
Shipped
Photo Studio
Twilight conversion + virtual-staging prep via Vision analysis.
Shipped
Signal · Domains
Custom sending domains, DNS verification, Resend integration.
Phase 1 · Shipped
Signal · Contacts
People-only CRM. Tags, sources, consent log, detail view.
Phase 2 · Shipped
Signal · CSV Import
Bulk import with CASL consent capture per contact.
Shipped
Signal · Segments
Saved segments + filter builder. Campaign targeting.
Phase 3 · Building
Marketing / Lead Gen
Ads, landing pages, funnels. Tile placeholder.
Planned
Business Tracker
GCI pipeline, deal stages, commission analytics.
Planned
Agent Orchestrator
The chat that routes to every tool. The unifier.
Vision
03Product Architecture

How the tools talk to each other.

Today a grid of tiles. Tomorrow, a graph — the agent at the centre, tools as satellites, branding + CRM as the shared substrate every deliverable pulls from.

Listing Presentation
Deliverable
Buyer's Guide
Deliverable
Website Builder
Deliverable
Open Canvas
Deliverable
Branding
Substrate
Agent Orchestrator
AI Coach · Router · Memory
Signal · CRM
Substrate
Signal · Email
Channel
Photo Studio
Creative
Marketing / Leads
Planned
Business Tracker
Planned
Data flow
Shared substrate
04Roadmap · Horizons

Now. Next. Later.

No Gantt charts. No dates. Just what we're building this cycle, what's queued, and what's waiting on a signal to move.

Now
Active
Signal · Phase 3Saved segments, filter builder, campaign targeting.
First campaign sendEnd-to-end test: import → segment → send → track.
Buyer's Guide polishCut 5-min stalls. Nail the 2–3 min target.
Later
Waiting
Business TrackerGCI, pipeline, commission analytics.
Marketing / Lead GenAd copy, landing pages, funnels.
Market Update presentationQuarterly market report generator.
Team plansBrokerage / team tier above solo.
05Infrastructure

The bones.

Eight services. One file of backend code. Zero frameworks. Chosen for latency, cost, and the ability for one person to hold the whole thing in their head.

Cloudflare Workers
runtime
The entire backend. Single worker file, ~3,000 lines. Streams SSE from Anthropic to the browser.
Edge compute
Cloudflare D1
database
SQLite at the edge. Holds profiles, presentations, websites, chats, memories, contacts, domains.
Primary data
Workers Assets
static
Pure HTML/CSS/JS served from the same worker. No bundler, no build step, no framework.
Frontend delivery
Anthropic · Sonnet 4.6
AI
Every client-facing deliverable. CMAs, buyer guides, websites, chat. Streaming from day one.
Premium generation
Anthropic · Haiku 4.5
AI
Background tasks — chat titles, memory extraction, image analysis, brand style summaries.
Utility intelligence
Resend
email
Transactional + campaign delivery. Custom domains with DNS-verified DKIM/SPF/DMARC.
Signal channel
web_search
tool
Claude's native web search. Powers Buyer's Guide research — live gov.ca data, cited sources.
Live research
pdf.js
client
Client-side PDF text extraction. Saves tokens — we never send full PDFs to the model.
Input preprocessing
06Unit Economics

The money shape.

Simple on the surface, usage-based underneath. Predictable base revenue; variable consumption priced per credit.

$100 / month
Base subscription. Includes a monthly credit allocation that covers ~90% of a typical agent's usage. Credits replenish on the 1st.
Thesis · The average Canadian realtor spends $300–600/month across Canva Pro, ChatGPT Plus, Mailchimp, a CMA tool, and a website builder. Clarify compresses that stack to $100 and makes every output actually sound like them. The savings are the acquisition wedge; the quality is the retention wedge.
Top-ups
Pay-as-you-go
Heavy usage months buy additional credit packs. Never get gated mid-flow.
Credit sinks
Generation · Sends · Photos
CMA generation, buyer guides, email sends, twilight conversions. Chat is effectively free.
07The Bets

What has to be true for this to win.

Five assumptions. If any one of them breaks, the thesis needs a rewrite.

BET · 01
Agents will pay for "one app that does everything" over best-in-class point tools.
Convenience beats sophistication. Realtors aren't software buyers — they're sales people. One login, one bill, one support thread.
BET · 02
AI quality is now a commodity. The moat is the workflow wrap + brand coherence.
Anyone can call Claude. Only Clarify knows this agent's PREC, colours, past clients, and consult style. That context is the defensible layer.
BET · 03
An AI coach beats a dashboard of tools.
Ten tiles is just ten more things to learn. One chat that says "here's what you need today" is a product. That's the orchestrator bet.
BET · 04
Canada-first is a feature, not a limitation.
US products don't handle PREC, CREA rules, CASL, or province-specific guides. Winning Canada deeply gives a defensible beachhead US giants won't copy.
BET · 05
A single founder can hold the whole system in their head — and that's a competitive advantage.
One worker file, no framework, no microservices. Shipping velocity is 10× a team of five. Complexity is the enemy.
08Recent Ship Log

Velocity, in the open.

What moved in the last two weeks. Green = shipped, amber = fix, grey = cut.

Apr 19
Ship
Signal · CSV ImportBulk contact import with per-row CASL consent logging.
Apr 19
Ship
Signal · Contacts CRMPeople-only CRM with tags, sources, consent log, and detail view.
Apr 19
Ship
Signal · Phase 1Custom sending domains + Resend integration + DNS verify flow.
Apr 17
Ship
New Chat · Memory + Custom InstructionsPersistent facts + structured "about you / how to respond".
Apr 15
Ship
Photo StudioTwilight conversion + virtual-staging vision analysis.
Apr 12
Fix
Buyer's Guide · 5-min stallpause_turn continuation handler + keepalive progress ticker.
Apr 10
Ship
Buyer's GuideFirst-time / repeat, 13 provinces, Sonnet 4.6 + live web search.
Apr 07
Cut
Multi-file worker modularisationDecided against splitting index.js. Single file stays.
09Risk Register

What keeps us up at night.

Honest ledger of things that could go sideways. Each with a mitigation or a deliberate decision to accept.

ID
Risk
Mitigation
Level
State
R01
Anthropic outage / price spike
Sonnet alternatives queued (GPT-5, Gemini 2.5). Model-agnostic prompt layer planned for v1.1.
Med
Watching
R02
CASL violation (email compliance)
Every imported contact gets consent_log row. Unsubscribe handling native in Resend. Audit trail immutable.
High
Mitigated
R03
Orchestrator too complex to ship
Ship v0.1 as "chat with tool-use for 3 tools" — don't boil the ocean. Expand coverage as we learn.
Med
Planning
R04
Base64 images in D1 bloat the DB
R2 migration is Phase 2. Known debt, acceptable at 2 beta users. Hard blocker by ~50 users.
Med
Deferred
R05
Single-file worker becomes unmaintainable
Locked decision — no modularisation. Re-evaluate at 6,000 lines. Current: ~3,000.
Low
Accepted
R06
Password gate is not real auth
Fine for 2 beta users. Real auth + Stripe is the "Next" horizon before any wider launch.
High
Queued
R07
Canada-only is too small a market
Beachhead, not ceiling. Canadian realtor TAM alone ~$1B. US expansion possible post-PMF — but not before.
Low
Accepted
R01
MedWatching
Anthropic outage / price spike
Sonnet alternatives queued (GPT-5, Gemini 2.5). Model-agnostic prompt layer planned for v1.1.
R02
HighMitigated
CASL violation (email compliance)
Every imported contact gets consent_log row. Unsubscribe handling native in Resend. Audit trail immutable.
R03
MedPlanning
Orchestrator too complex to ship
Ship v0.1 as "chat with tool-use for 3 tools" — don't boil the ocean. Expand coverage as we learn.
R04
MedDeferred
Base64 images in D1 bloat the DB
R2 migration is Phase 2. Known debt, acceptable at 2 beta users. Hard blocker by ~50 users.
R05
LowAccepted
Single-file worker becomes unmaintainable
Locked decision — no modularisation. Re-evaluate at 6,000 lines. Current: ~3,000.
R06
HighQueued
Password gate is not real auth
Fine for 2 beta users. Real auth + Stripe is the "Next" horizon before any wider launch.
R07
LowAccepted
Canada-only is too small a market
Beachhead, not ceiling. Canadian realtor TAM alone ~$1B. US expansion possible post-PMF — but not before.
10Repository Tour

Every folder. Every file. Plain English.

No code — just what each file is and why it exists. Organised by area.

~/Clarify App/
Root · 7
Top-level config and documentation.
CLAUDE.md
Master briefing doc — tech stack, model routing, rules, deploy commands, landmines. Read first every session.
MEMORY.md
Project-scope persistent memory. Current state, locked decisions, session history.
wrangler.toml
Cloudflare Worker config — entry file, static assets path, D1 binding.
.env.example
Template for env variables. Real secrets live as Cloudflare Worker secrets.
.gitignore
Tells git what to ignore — secrets, caches, local Wrangler state.
.git/ · .claude/ · .wrangler/
Tool-managed state directories. Not committed. Hands off.
MISC/
Reference · 3
Not loaded at runtime — reference material only.
DEVELOPMENT_GUIDE.md
Broader engineering playbook — conventions, patterns, debugging checklists.
SIGNAL_BUILD_PLAN.md
Multi-phase build plan for the Signal email + CRM module.
PresentCMA_vs_Gamma_Audit.docx
Competitive audit — Clarify vs Gamma. Design reference.
src/
Schema · 9
Schema, migrations, empty placeholder dirs.
PROJECT_MAP.md
One-liner pointing new contributors back at CLAUDE.md.
schema.sql
Initial D1 schema — profiles, presentations, websites.
migrate-add-slug.sql
Added public slug fields for published presentations.
migrate-websites.sql
Added the websites table.
migrate-add-chat.sql
Chat tables — conversations, messages, memories, custom instructions.
migrate-signal-phase-1.sql
Signal · domains and Resend integration tables.
migrate-signal-phase-2.sql
Signal · contacts, tags, sources, consent log.
migrate-signal-csv-import.sql
Signal · import run tracking + contact staging.
presentations/ · website-builder/ · email-marketing/ · marketing-leadgen/ · business-tracker/
Empty placeholder directories with .gitkeep files. Leftover scaffolding — nothing real lives here.
src/worker/
Backend · 1
The entire backend — deliberately one file.
index.js
Every API route. Every prompt builder. Every streaming handler. Talks to D1, Anthropic, and Resend. ~3,000 lines. Single source of truth.
src/frontend/
Shell · 7
The static app shell. No framework, no build step.
index.html
Password gate + profile selector. First page a visitor sees.
app.html
Main dashboard. The feature-tile grid.
favicon.svg
Site favicon.
manifest.json
PWA manifest — lets agents install Clarify to their home screen.
service-worker.js
Offline support — caches shell assets for no-signal launches.
offline.html
Fallback page when the device is offline.
icons/
PWA install icons — 192px, 512px, maskable variants.
src/frontend/pages/
Pages · 13
One HTML file per feature page.
chat.html
New Chat — the general-purpose assistant.
branding.html
My Branding — colours, fonts, PREC, logos, headshots.
presentations.html
Unified leg — Listing, Open Canvas, Buyer's Guide share this UI.
website-builder.html
Website Builder — property, neighbourhood, agent, custom.
email-marketing.html
Legacy Email Marketing tool. Predates Signal.
past-client-emails.html
Nurture copy templates for past clients.
photo-studio.html
Photo Studio — twilight + virtual staging prep.
contacts.html
Signal — contact list. The CRM home.
contact-detail.html
Signal — individual contact view. Tags, sources, history, consent.
contacts-import.html
Signal — CSV import wizard with CASL consent capture.
settings.html
Settings — memories, instructions, sending domains.
marketing.html
Marketing / Lead Gen placeholder. Coming Soon.
business-tracker.html
Business Tracker placeholder. Coming Soon.
src/frontend/css/
Styles · 8
One stylesheet per major area. Shared tokens in styles.css.
styles.css
The foundation — design tokens, cursor glow, feature cards, animations.
branding.css
My Branding page styles.
chat.css
New Chat — sidebar, bubbles, streaming cursor, code blocks.
presentations.css
Presentations leg — format selector, editor, edit-chat, preview iframe.
website-builder.css
Website Builder styles.
email-marketing.css
Legacy Email Marketing styles.
contacts.css
Signal — contacts list, detail, import wizard.
photo-studio.css
Photo Studio page styles.
src/frontend/js/
Logic · 11
Vanilla JS. One file per page. No bundler.
main.js
Global glue — cursor glow + shared dashboard behaviour.
branding.js
Branding save/load, image uploads, AI brand-style generation.
chat.js
Streaming, conversation list, markdown, code-block copy, memories.
presentations.js
The big one — listing + open canvas + buyer guide flows.
website-builder.js
Multi-type generation + publish flow.
email-marketing.js
Legacy email tool logic.
photo-studio.js
Twilight conversion + image-analysis prep.
contacts.js
Signal — list rendering, filters, quick actions.
contact-detail.js
Signal — single contact: tags, notes, source, consent.
contacts-import.js
Signal — CSV import wizard: column mapping, CASL capture, preview.
settings.js
Settings page — memories, instructions, sending domains.