v7.40.0
Split the old combined “Greenbits / Cova” funnel bucket into two separate paths, so each prospect gets the right story.
Changelog
Every user-impacting change to CannAgent, in reverse chronological order. 535 shipped versions across 33 ship days. Internal refactors + build-gate fixes don’t make this list — they’re in the codebase if you want them.
2 shipson June 19, 2026 · most recent ship day
Why a public changelog
Most cannabis-POS competitors hide the cadence — quarterly press releases, marketing-copy patch notes, fluffy “new and improved” framing. We surface what shipped + when so operator evaluators can see the actual pace. We run this list by hand; if a version is on it, an operator can verify it landed in production.
v7.40.0
Split the old combined “Greenbits / Cova” funnel bucket into two separate paths, so each prospect gets the right story.
v7.39.0
Fixed a factual error and sharpened the Greenbits comparison.
v7.38.0
Homepage cutover band is now POS-agnostic — dropped the Greenbits-specific framing.
v7.37.0
Honesty fix on the demo copy: the homepage line claimed the 30-minute walkthrough runs 'on a live register that rang a real sale this morning' — but the demo isn't conducted on the actual production register, so that wasn't accurate.
v7.36.0
Demo request now asks for your state cannabis license number, and it's required.
v7.35.0
Homepage polish on the little product-mock cards in each section — the spot where a prospect's eyes actually land.
v7.34.0
About page: changed the headline from 'Built by operators.
v7.33.0
Plain-language sweep across the public site.
v7.32.0
Homepage product visuals: gave every feature frame on the homepage a real, hand-built coded mock (the same treatment v7.31.0 gave the hero), replacing the empty 'not pictured' placeholders.
v7.31.0
Homepage hero: replaced the empty 'not pictured' placeholder above the fold with a real, hand-built 'morning board' product visual.
v7.30.4
Homepage review fixes (expert panel): CCRS proof point reworded to operator-in-the-loop (“we build the weekly CSV + reconcile it before you file”) so it doesn’t imply automatic state filing; the “Since 2010” credential now reads “our own…
v7.30.3
Homepage polish: the product-frame placeholders now read as an intentional labeled “preview” of each screen instead of “screenshot capturing,” so the page looks finished while the real captures are being reshot.
v7.30.2
Homepage: temporarily swapped the product screenshots for clean labeled placeholders while we reshoot current captures — the prior demo shots had stale/buggy data.
v7.30.1
Homepage copy: anonymized the store count in the hero subline (no specific store-count in customer copy per the standing rule) — kept the operator-built WA-cannabis-retail credential.
v7.30.0
New homepage — the world-class redesign is live.
v7.29.25
Marketing (feature landing pages): completed the catalog through the feature-page engine. /features/vendor-portal (vendors self-serve orders/payments/fill-rate/1099s; sample-cap + license-lapse gated), /features/cash-discipline (every ti…
v7.29.24
Marketing (feature landing pages): shipped the operational core through the feature-page engine. /features/slang-pos — the register built for a cannabis floor (cash-first, vertical-ID at the cart, manager-PIN, soft-confirm), positioned o…
v7.29.23
Marketing (feature discovery): the new standout pages were only reachable by direct URL — added a 'Feature deep-dives' card grid to /features ('Came in for one thing? Start there.') that links to every dedicated page (the two hand-built…
v7.29.22
Marketing (feature landing pages): shipped the back-office trio through the feature-page engine — the half of a dispensary the register doesn't touch, which the competitive research confirmed no mainstream cannabis POS does natively. /fe…
v7.29.21
Marketing (feature landing pages): added two more standout pages through the feature-page engine. /features/dutchie-cutover — for operators putting off a POS switch, or pushed off a retiring Greenbits — leads with the rehearsed, phased p…
v7.29.20
Marketing (feature landing pages): shipped a data-driven standout-page engine so every feature can get its own competitor-aware landing page built for a prospect who arrived FOR that one thing.
v7.28.0
🧾 Four more of the back-office systems we actually run are now on the modules page — bookkeeping, §280E cost classification, CCRS traceability, and the Dutchie cutover plan.
v7.27.0
✅ Waste-log copy now matches exactly what the product enforces.
v7.26.0
🏠 Homepage now leads with what only CannAgent does — not the register every POS already has.
v7.25.0
🔌 New Integrations page — see exactly what CannAgent ties into, and start with just one connection.
v7.24.48
💵 Refreshed the AI-readable pricing facts (llms.txt + llms-full.txt) to match the current Standard / Co-Pilot / Sovereign tiers — $399 / $699 / $1,199 per location, single-store list, with the per-register meter and the multi-location per-store rate.
v7.24.46
📐 Brought the CannAgent-vs-Dutchie comparison page into the same airy spacing rhythm as the rest of the site — the four sections now breathe with the site-wide vertical scale instead of the older tighter padding.
v7.24.45
♿ Respect “reduce motion” everywhere.
v7.24.44
📦 Led with the inventory standouts.
v7.24.43
🎨 Finished carrying the design refresh across every public page: the comparison pages (vs Dutchie / Treez / Flowhub / Divvy / Logik / Enlighten and the integrators comparison), the feature and use-case pages, the product pages (Cannabis…
v7.24.42
🎨 Carried the design refresh onto the rest of the site: the Modules, Compare, and Demo pages now use the same 3-tier muted-text scale and the calmer card treatment introduced in v7.24.41, so the whole site reads consistently instead of…
v7.24.41
🎨 Front-end design refresh: tightened the whole top of the site — nav, hero, homepage, and footer — for a calmer, more scannable read.
v7.24.36
💬 Blaze handles pushback more like a real operator now — and treats 'I don't know' as a strength, not a stumble.
v7.24.35
💬 Blaze can now float a rough monthly price and flag a demo request mid-chat — without ever quoting a binding number.
v7.24.24
💬 Blaze (the website chat assistant) now leads with a helpful answer and keeps the people behind CannAgent private.
v7.24.0
💵 New pricing across the site — three tiers, real numbers, and a Founding Operator offer.
v7.21.0
🎨 Real artwork on the homepage — the line-of-business grid and the hero now carry custom generated graphics instead of bare text.
v7.18.0
✨ Homepage spacing + type polish — one consistent rhythm top to bottom.
v7.17.0
💵 The tailored demo now answers "what does this cost" right on each card.
v7.16.0
🎯 Tailored demo is now meeting-ready — quick-pick presets, in-the-room controls, and a grid grouped the way an owner thinks.
v7.15.1
✨ Tailored-demo polish: the greyed cards a prospect isn't shown now read as "More," not "Locked." Per a sales-copy review, a greyed-out module in a live demo should say "here's what else we do," not "you don't have this" — so the badge o…
v7.15.0
🎛️ New "Tailored demo" tool for sales meetings — show a prospect only the modules they came to see, then reveal the rest live.
v7.14.4
🗣️ Marcus now says the company name as two clear words — "Canna Agent" — instead of running it together.
v7.14.3
📋 The /demo form now gates on a few qualifying details — register count + your current stack.
v7.14.0
🚪 Homepage now opens up the 7 lines of business as their own entry points (Doug 2026-06-02).
v7.13.1
🔄 Consolidated persona/competitor/discovery/compliance/comms hotfix-batch.
v7.13.0
📤 Phase vQ3 — quote-send + accept flow (Discovery→Quote→Account lifecycle).
v7.12.0
🆕 Phase vQ2 — quote substrate (Discovery→Quote→Account lifecycle).
v7.10.0
📬 Riley persona (inbound email) shipped + SupportWidget retired.
v7.9.5
📣 /co-pilot customer-lifecycle section rewritten — was wrong-audience SaaS sales funnel, now matches the dispo owner's actual customer journey.
v7.9.0
💬 Marcus chat (text channel) LIVE on cannagent.ai.
v7.8.0
📥 General-purpose inbound email triage queue at /admin/triage.
v7.7.5
📊 Marcus voice-agent visibility dashboard LIVE at /admin/marcus/voice.
v7.4.5
📞 CannAgent AI voicemail line LIVE — Marcus persona on +1 855-695-CANN (855-695-2266).
v7.4.2
💰 Divvy rate precision: $119 → $131.55/store/mo.
v7.4.1
🛠️ Vendor name fix + Divvy operator-rate anchor.
v7.4.0
🎨 Marketing surface refresh — matrix improvements · calculator rewrite · /features long-scroll · two wedge feature pages (strain-intel + native-menu) · /vs/posabit sharpened.
v7.3.0
🛡️ Marcus defense arc — pre-activation oversight ships (D1+D2+D3).
v7.2.0
🤖 Marcus auto-send activated + /admin/marcus dashboard live.
v7.1.0
🎨 Website refresh — 3 ships (Ship A · Ship B · Ship C) shipping the v7.0.0 tier substrate to the public site.
v7.0.0
🎯 Autonomous CannAgent productization — substrate ship (Marcus + 3-tier offering + cadence engine + pipeline visibility).
v6.999964.0
🛒 Path A Phase 1a — customer-facing funnel UI (feature-flag-gated).
v6.999963.0
🇺🇸 WA-only v1 launch — state filter on tenant onboarding + funnel + outreach.
v6.9940.0
🛡️ Batch 12 — 3 P0/P1/P2 fixes from broader lead-flow audit (post-batch-11 fresh-eyes review).
v6.9880.0
📨 Batch 9 — CAN-SPAM physical-address footer on 6 commercial email templates + rate-limit per-tag bucket + sentinel-string SSoT unification.
v6.9840.0
📨 Batch 8 — RFC 8058 List-Unsubscribe one-click compliance + ?fromProspectId=<uuid> preview-from-real-prospect mode.
v6.9820.0
🛡️ Compliance hotfix — Doug-name leak in all 12 drip-cadence steps + de-anonymizing cold-outbound opener (sister-port to v6.9800.0's G1/G2/G3 + big-prospect-email sweep).
v6.9800.0
📨 Joel-flow first-real-lead polish — flip Doug-sig to team-voice across the entire pre-conversion funnel, rebuild the big prospect-facing email to match the E1/G1 design system, add CAN-SPAM footer.
v6.9760.0
📨 Batch 5 — kill the post-demo-14d drip Step 0 same-day double-send + add pricing hooks to the 2 remaining drip cadences + render the /unsubscribe terminal page in the preview surface.
v6.9720.0
🛡️ Public-surface anonymous-operator sweep — sister-port of v6.9620.0's /about + homepage clean to ~20 more pages site-wide.
v6.9700.0
💰 Pricing-positioning batch + AI cache layer — 5 changes from a paired expert-review pass on the new /admin/leads/preview surface (v6.9660.0 made the full customer-facing email lifecycle legible in one place for the first time; an AI-ar…
v6.9680.0
🚨 HOTFIX — G2 pricing auto-reply mispriced the product to every prospect who emailed asking about pricing.
v6.9620.0
👤 /about + homepage retuned to anonymous-operator credential frame.
v6.9300.0
✉️ Cold-funnel cleanup pass — E1/G1 prospect emails revamped + missing /audit/welcome conversion page shipped + email-capture CTA copy synced.
v6.9160.0
🎯 Sprint 1 Lane T-5 — Cold-funnel landing page at /audit (8 NEW files + schema.ts append).
v6.8860.0
✨ Customer-copy polish batch — 404 body + /demo mailto + /demo/thanks spacing (Expert 1 Group D + B.3 + Expert 2 Item #7). 3-deliverable batch from the customer-copy + journey-UX audits dispatched 2026-05-23.
v6.8260.0
⏱️ /admin/inbound — Per-source processing latency p50/p95/p99 (insights-analyst dashboard Chart 4 — CLOSES the spec).
v6.8240.0
🩺 /admin/inbound — Error class breakdown by source × tenant (insights-analyst dashboard Chart 3).
v6.8220.0
📊 /admin/inbound — Queue depth by age (insights-analyst dashboard Chart 2).
v6.8200.0
🟢 /admin/inbound — Pipeline Status verdict tile (insights-analyst dashboard spec top-strip).
v6.8060.0
🎯 2-site partial-index ON CONFLICT fix — SQLSTATE 42P10 closure (the 'fixed for good' Doug-mandate).
v6.7920.0
🧹 /integrators-comparison follow-up — 3 self-contradictory notesShort rows downgraded + regression-guard pins lifted to SSoT primitives.
v6.7880.0
🧹 /integrators-comparison safety hotfix — two misleading rows removed + editorial disclosure added.
v6.7610.0
🛰️ Compliance-Diff Agent v2.0 — public RSS feed + Doug-ack-gated permalink pages.
v6.7590.0
🛰️ NEW Compliance-Diff Agent (brainstorm bet #4) — daily fetch + diff + Claude-summarize of cannabis-regulator pages. /admin/regulator-changes surfaces operator-language summaries of substantive changes to WSLCB / OLCC / METRC / MED / C…
v6.7510.0
🎯 Customer-1 dress-rehearsal admin action at /admin/launch/dress-rehearsal (recovered from overloaded sub-agent run).
v6.7480.0
👥 Sales-role Ship 3 of 3 — /admin/sales-queue + /admin/users editor + export-gate enforcement across 25 CSV/dump endpoints + Clerk-bootstrap of users rows + Vercel cron expire-pending-actions.
v6.7440.0
📅 Lead-flow Ship E — Calendly webhook + demo_bookings + Demo show rate KPI light-up.
v6.7400.0
📊 Lead-flow Ship D — /admin/lead-flow-dashboard 7-KPI tile grid.
v6.7380.0
🚨 Lead-flow Ship C — stuck-lead detection + Doug-escalation queue.
v6.7360.0
📨 Lead-flow Ship B — 3 auto-response templates + inbound-webhook dispatcher.
v6.7340.0
📨 Lead-flow Ship A — inbound-reply webhook + AI intent classifier + drip-unblock (load-bearing fix from synthesized lead-flow plan).
v6.7320.0
🎙️ /admin/tenants-cp/[id] mint-form copy polish (communications-expert audit closure) — paired with inv-App v415.365 banner-side polish on the same magic-link arc.
v6.7300.0
📥 NEW /api/inbound-email route — Joel-shape automatic-capture pipe (DORMANT until Doug flips DNS).
v6.7210.0
🎯 Per-tenant filter on /admin/inbound for customer-1 cutover-day triage (Sunday 2026-05-23).
v6.7200.0
🔗 NEW magic-link tenant-customer invite mint surface — /admin/tenants-cp/[id] 'Mint magic-link invite' section + mintTenantInviteAction + src/lib/invite-token.ts — Doug 2026-05-21 customer-1 unblock.
v6.7190.0
🆘 Joel Swenson incident closer — manual-add lead path now runs the same polished follow-up chain the public /demo form does. 2026-05-21 a real prospect (Joel Swenson) emailed Doug at doug@cannagent.ai instead of using the website form.
v6.7150.0
New marketing surface — /integrators-comparison.
v6.6905.0
🧭 NAV ADD — inv-App push history under Inbound dropdown (closes discoverability gap on v6.6865.0 + v6.6885.0).
v6.6885.0
🔁 Retry button on /admin/inv-app-push-history — Phase 3 action layer for the v6.6865.0 read-only history page.
v6.6865.0
📤 NEW /admin/inv-app-push-history — operator view of tenant-pushes to inv-App (Phase 2 of the customer-1 cutover, sister of inv-App's v411.645 /admin/inbound/manifest-imports queue).
v6.6825.0
📋 NEW /admin/escalations admin surface — reads the agent_escalations table the v6.6785.0 cron-watchdog (and other agent flows) write to (Doug 2026-05-19 "keep grinding this forward" /loop iteration).
v6.6705.0
🔁 GA4 auth REVERTED service-account → OAuth refresh-token (Doug 2026-05-18 after expert agent diagnosis).
v6.6685.0
🛠️ /admin/analytics ConfigBanner footer copy updated — reflects the 2026-05-18 service-account JSON refactor (Doug screenshot of stale banner referencing 4 OAuth env vars).
v6.6665.0
🔄 GA4 auth refactored from OAuth refresh-token → service-account JSON (one-shot fix per Doug 2026-05-18).
v6.6645.0
🩺 /admin/analytics GA4 error-message accuracy fix — page was misleading operators about which env var to fix.
v6.6625.0
🩺 /admin/cron-status data source fixed — page now agrees with /api/health (Doug 2026-05-17 screenshot: all 4 listed crons showing STALE/never-fired despite /api/health reporting them healthy).
v6.6605.0
🎨🛠️ Backend chrome polish — AdminSidebar + AdminBreadcrumb upgraded on every /admin page (Doug 2026-05-17 'also do backend' follow-up to v6.6585 marketing-page polish).
v6.6585.0
🎨 Feature-landing page polish — 6 pages now ride the same visual system as the homepage (Doug 2026-05-17 'keep dialing the UI in cannagent').
v6.6565.0
🩺📨 NEW /api/admin/diag/drip-audit — surfaces drip enrollment + send history in one curl (Doug 2026-05-17: 'send me a copy of the email that was sent out. who was it sent to? state?').
v6.6545.0
🛑🔌 HARD KILL SWITCH on /api/cron/send-due-drips — drip-send is now env-gated, defaults to OFF (Doug 2026-05-17: "absolutely stop all outgoing campaigns" + "we are not live").
v6.6525.0
🛑📨 Auto-enrollment of state-registry imports into the cold-outbound-21d drip REMOVED (Doug 2026-05-17: "we are not ready to be soliciting anyone" + "automatically contacting them is crazy"). v6.6395 wired importLicenseesAsLeads() to ca…
v6.6505.0
🧹💰 Payroll-audit item #10: stale-pricing-reference cleanup across 4 files — every payroll number now consumes the ADD_ONS SSoT or the corrected cannabis-vertical industry midpoint, no more pre-2026-05-16 numbers baked into customer-facing math.
v6.6485.0
⚠️💰 Two payroll-audit fixes in one push: (1) orange SANDBOX banner on every /admin/payments/* page when the master switch is ON and PAYMENTS_SANDBOX_MODE=true (audit item #3) + (2) corrected Gusto cannabis-tier rate in the all-in-one-we…
v6.6465.0
🔗📂 Related Licenses card on lead detail + 'from registry' badge on leads list (polish from Doug 2026-05-17 'keep polishing' + the two earlier asks: 'make sure imports have a solid place to land + keep up with this account over time' +…
v6.6445.0
🛡️ Reverse-disbursement now requires a two-tap arm-then-fire confirm (audit item #5, lowest-rated action surface ⭐⭐ → ⭐⭐⭐⭐⭐).
v6.6425.0
🤖📦 AI Inventory Pack — NEW combo add-on at $399/location/mo flat (Doug 2026-05-16: "ai reorder, smart inventoy, vmi package $399" + "flat" + "per store, discount for 2 or more stores").
v6.6395.0
📨 State-registry bulk-import now auto-enrolls every imported prospect in the cold-outbound-21d drip cadence (Doug 2026-05-17 "can we get an auto cadence set up for the emails").
v6.6385.0
💲 /pricing/calculator cut over to the @/lib/pricing SSoT — every add-on price now propagates the moment Doug edits ADD_ONS.
v6.6365.0
🔍📞 Apollo email + phone enrichment LIVE (Ship B — Doug 2026-05-17 "b is fine").
v6.6345.0
👥💵 People Ops Pack — NEW combo add-on at $79/location/mo (Doug 2026-05-16: "hr comno 79").
v6.6325.0
🗺️📞🎯 WA leads now importable + phone + business-name in state-registry preview + /admin/today tiles clickable.
v6.6285.0
💵 Payroll Portal repriced — $35/employee/mo flat (Doug 2026-05-16 call: "gusto is $40 per person per month, we will be $35").
v6.6265.0
🎓 Sales-agent onboarding Ship 2a — <AgentDailyStrip> chrome on every /admin page during the 7-day ramp (PLAN_SALES_AGENT_ONBOARDING_2026_05_16.md).
v6.6185.0
🎓 Sales-agent onboarding Ship 1b — full 5-step day-0 wizard at /admin/welcome (PLAN_SALES_AGENT_ONBOARDING_2026_05_16.md, replaces the Ship 1a stub).
v6.6105.0
📊 NEW /admin/analytics — GA4 traffic dashboard for cannagent.ai (Doug 2026-05-16: 'a dashboard on cannagent would be nice').
v6.6085.0
🪦 Customer-facing /privacy page — HTML named entities → Unicode (regression-audit finding 2026-05-16).
v6.6065.0
🛡️ Admin shell leaking to unauthenticated visitors on /admin/leads/login — sidebar + breadcrumb + ⌘K palette all bail on /login routes (Doug 2026-05-16 screenshot).
v6.6005.0
⌨️ /admin ⌘K command palette — jump anywhere in 75+ admin pages with two keystrokes (Ship 5 of consolidation arc).
v6.5985.0
🧭 /admin home consolidation — Ships 2+3 batched: tab strip across 4 views (Home · Today · Pipeline · Inbox) + 'On deck' counter strip with 5 deep-link cells.
v6.5965.0
🔥 Retailers in /admin/licenses are now clickable PROSPECTS — notes + touch log + warmth tracking (Doug 2026-05-15 directive).
v6.5945.0
🎨 /admin shell — sidebar + breadcrumb + footer wrap every admin page (Ship 1 of consolidation arc).
v6.5925.0
🕒 Cron dispatcher — cross-stack port from inv-App v405.365 / VRG v9.7.158 (fixes 13 of 18 silently-dropped Vercel crons).
v6.5905.0
🏪 WA retailer scrape now ingests BOTH WSLCB sources — closes the ~40-retailer gap Doug flagged ("there are nearly 650 retailers in 2026").
v6.5885.0
🔓 isOwner() now honors password-fallback (single-admin posture) — fixes v6.5865.0 gate locking Doug out.
v6.5765.0
🔗 Conversion funnel rows on /admin/leads/funnel now click through to filtered /admin/leads cohort views (CRMf).
v6.5725.0
🗓️ Customer-1 launch deadline countdown now env-driven (was hardcoded 2026-05-23 — the fictional Bell Family date). /admin/readiness was rendering 'Deadline: Sat, May 23, 2026 · 9 days remaining' on Doug's operator dashboard.
v6.5705.0
🪤 Comparison → /demo preselect drift fixed — VALID_CURRENT_TOOLS whitelist now derives from CURRENT_TOOL_OPTIONS SoT (was hardcoded at 7 entries, missing 6 rivals).
v6.5665.0
🔗 Cross-stack rival-coverage parity wired for greenbits + springbig (closes the arc-guard gap from v6.5645.0). v6.5645.0 added the 2 rivals to lib/competitors.ts + the static-build picked them up for /compare/[slug] — but the cross-stac…
v6.5645.0
📊 Two new rival comparison pages — /compare/greenbits + /compare/springbig (closes the segment-B/C gap from v6.5585.0 readiness pass #1).
v6.5525.0
💰 Founding-100 launch promotion — pulled setup fees from /pricing + landed an amber limited-time banner (Doug 2026-05-14 'we should pull off the set up for now / maybe we advertise for a limited time no set up no hardware costs').
v6.5505.0
💲 Pricing rebalance — Rewards & Loyalty $75 → $299/loc/mo + Online Menu $99 → $199/loc/mo (Doug 2026-05-14 spot-check on /pricing).
v6.5265.0
⚡ 2 high-impact perf wins from vercel:performance-optimizer audit — Hero H1 LCP fix + /migrate-from-dutchie force-dynamic removal.
v6.5185.0
🚪 /migrate-from-dutchie — landing page expanded with Greenbits sunset + Springbig distress callouts + 3 Q3 2026 roadmap commitments (P0.1 of PLAN_COMPETITIVE_TAKEDOWN_EXECUTION_2026_05_13.md).
v6.5165.0
✍️ Customer-facing copy polish via communications-expert — 8 micro-copy fixes across 4 files.
v6.5065.0
🐛 Sister-bug sweep round 3 — 2 more inline firstName duplicates + nullish-coalescing-vs-OR fallback trap.
v6.5045.0
🐛 Sister-bug sweep — 3 more prospect.name empty-string sites surface as Thanks, . / Hey , / private to at Acme to prospects.
v6.5025.0
🐛 Drip cron — empty prospect.name no longer renders 'Hey ,' to prospects.
v6.5005.0
🏷️ Coaching detail page header — routed through dealLabel(snapshot) for SoT consistency.
v6.4985.0
🏷️ Final UUID-as-label fix — /admin/today quick-log deal dropdown.
v6.4965.0
📧 Digest emails — UUID-as-label fix continues into Mitch's daily + Doug's Friday-weekly emails.
v6.4945.0
🏷️ Sales-workspace UUID-as-label sweep — 7 SQL-direct sites get JOIN to prospect_inquiries + dealLabel().
v6.4925.0
🏷️ Sales-workspace UUID-as-label fix — DealSnapshot now carries dispensaryName + prospectName.
v6.4605.0
⏪ REVERT v6.4565 send.subdomain code-default flip back to apex — sister of inv v401.405 revert tonight. inv's 23:21 UTC error proved the trap: send.<apex> DNS records exist but the subdomain isn't registered as a separate verified domain…
v6.4565.0
🪤 Cross-stack sister-port from inv v401.285 Jensine welcome-email root cause — RESEND_FROM code default flipped from bare apex (noreply@cannagent.ai) → verified Resend subdomain (noreply@send.cannagent.ai).
v6.4325.0
🛡️ NEW arc-guard check-duplicate-brand-title — cross-stack port from glw+scc; caught 1 real offender at port time + fixed in same ship.
v6.4265.0
📧 Preheader-span port extended to 3 sister transactional emails — demo-approval + onboarding-slip + onboarding-day-of all get inbox-preview improvements.
v6.4245.0
📧 Onboarding welcome email gets role="presentation" on layout table + hidden preheader span — closes CANNAGENT_DESIGN_PARITY_AUDIT rows 10 + 11 in one ship.
v6.4045.0
🐦 Twitter/X share-card title now cascades from per-page openGraph.title — fixes generic-title bug on /privacy + /terms + 3 other pages.
v6.4025.0
💰 PricingCalculator dropdown gains 4 missing POS platforms — Meadow / POSaBIT / Korona POS / BioTrack.
v6.4005.0
🐛 Tier-2 live-call objections drift fix — sister-port of v6.3985 to the OTHER per-deal surface.
v6.3985.0
🐛 Tier-1 pre-call brief drift fix — BioTrack + Korona POS prospects were getting GENERIC content instead of competitor-specific.
v6.3965.0
🗺️ /admin/system-health Critical-crons section gets subset-scope label + cross-link.
v6.3945.0
🗺️ /admin/cron-status scope clarified — header was misleading ("each cron") but page only covers 4 of 12 crons.
v6.3925.0
🧭 /how-it-works wrapped in canonical site shell — adds <Aurora /> + <Nav /> + <Footer /> to the flagship onboarding-journey page. 🔴 high-impact finding from CANNAGENT_DESIGN_PARITY_AUDIT_2026_05_11.md row 1: prospects landing on /how-i…
v6.3905.0
🔗 Footer sister-site links www-prefixed — cannagent.ai → Green Life + SCC now hit canonical hostname directly.
v6.3865.0
🖼️ OG images shipped for /privacy + /terms — closes the social-card gap on the legal-content routes.
v6.3825.0
🗺️ /admin/help rebuild — 15 → 47 surfaces across 9 sections (doctrinal-drift fix).
v6.3805.0
🛡️ Silent-return fix on 2 leads-action wrappers — recordActivity + logCallTouchpoint.
v6.3785.0
🗺️ /admin/sales-workspace nav-map gap-fill — 5 missing sales surfaces added across 3 sections + 1 new section.
v6.3765.0
🛡️ PII-leak gate widening round 3 + 6 sister-class fixes — template-literal err.message interpolation pattern now caught at gate level.
v6.3745.0
📜 /privacy + /terms pages SHIPPED — closes the cannagent.ai 404 gap on both legal-content routes.
v6.3725.0
🛡️ Silent-fail sister-port to 3 /admin/payments/* action files + reviewer-caught open-redirect hardening — 17 silent return; paths now surface via redirect-with-err.
v6.3705.0
🛡️ Silent-throw sister-port to /admin/demo-tokens — 6 throw paths now surface via ?token_err=<code>.
v6.3665.0
🐛 Cross-org half-ship sweep — 4 more silent redirect-with-param paths surfaced (v6.3625 + v6.3645 + v6.3665).
v6.3605.0
🐛 Banner rendering completed on /admin/support/[id] + /admin/tenants — v6.3545 + v6.3565 follow-ups.
v6.3585.0
🐛 v6.3525 follow-up — drip-control banner rendering completed on /admin/leads/[id].
v6.3565.0
🛡️ Silent-save sister-port to removeTenantAction — 3 failure paths now surface via ?tenant_err=<code>.
v6.3545.0
🛡️ Silent-save sister-port to support form-actions — replyToTicketAction + markTicketStatusAction.
v6.3525.0
🛡️ Silent-save sister-port to 4 drip form-actions — pauseAssignmentFromForm / unpauseAssignmentFromForm / unsubscribeAssignmentFromForm / triggerDripStepNowFromForm.
v6.3445.0
🐛 Timezone off-by-one fix on 2 date-formatting sites — prospect demo-approval email + /admin/leads/calendar grid header.
v6.3205.0
🚨 CRITICAL — 6 production-path INBOUND_SECRET_* env vars were UNDOCUMENTED.
v6.3165.0
🚧 Store-count framing sweep — round 5 + 'Both stores' regex gap closed.
v6.3145.0
🏢 Legal-entity drift fix round 2 — PUBLISHER constant + parentOrganization graph corrected from 'Sureel AI' to 'Sureel Ventures LLC'.
v6.3125.0
🏢 Legal-entity drift fix — SITE_LEGAL_NAME + Footer + /about + security.txt corrected from 'Sureel AI product' framing to 'Sureel Ventures LLC' parent entity.
v6.3105.0
🚧 Store-count framing sweep — round 4 + hyphenated-form regex gap closed.
v6.3085.0
🛡️ /admin/leads silent-save sister-bug sweep — 13 server actions migrated to redirect-with-err (Option A, Doug greenlit).
v6.3065.0
🚨 CRITICAL — /api/cron/send-due-drips was NEVER wired into vercel.json — auto-drip campaigns have never fired in production.
v6.3005.0
🛡️ PII strip on Resend error messages — cross-port from cannabis-web Twilio-PII fix (scc v21.505 + glw v29.705).
v6.2985.0
🛡️ Resend silent-failure defense — cross-port from inv 2026-05-08 incident, 5 send sites across 3 files newly defended.
v6.2965.0
🚧 Store-count framing sweep — round 3 + arc-guard gap closed.
v6.2945.0
🛡️ SITE_URL canonical resolver hardened from env || fallback to allow-list defense — cross-port from inv 2026-05-09 prod-impact incident.
v6.2925.0
🚧 Brand-voice cross-port from cannabis web 2026-05-05 sweep — 3 apologetic-copy violations cleaned in cannagent.
v6.2905.0
🚧 Store-count framing sweep — round 2. v6.2865 arc-guard regex used \bWashington\b longhand only; first-run was clean but only because the regex didn't probe the abbreviated WA form.
v6.2865.0
🚧 Store-count framing sweep — 6 customer-facing violations of Doug 2026-05-09 rule (feedback_cannagent_no_store_count_until_80) cleaned.
v6.2845.0
🐛 Silent data-loss bug fix in setNextAction — CallWrapButtons' 💤 → custom-date chip was wiping Mitch's existing nextAction text.
v6.2805.0
🚨 llms-full.txt sibling-drift fix — sister-class to v6.2785.
v6.2785.0
🚨 llms.txt state-coverage drift fix — markets section out-of-sync with src/lib/states.ts SoT.
v6.2665.0
🚨 neon.tech → neon.com stale-URL fix on /admin/leads — Neon Database migrated to a new TLD; neon.tech now returns 308 → https://neon.com/.
v6.2645.0
🚨 www.cannagent.ai 307→308 redirect SEO upgrade — sister-class fix of v6.2625.
v6.2625.0
🚨 www.cannagent.co TLS cert provisioned via Vercel — closes a brand-protection gap that's been dead since cannagent.co was added to Vercel ~21h ago.
v6.2485.0
🚨 HOTFIX — v6.2305 broke every Vercel prod build for 40+ minutes.
v6.2065.0
🐛 Setup-fee waiver bug — buildQuote() returned setupFeeCents: 400000 + firstInvoiceTotalCents: 89700 + 400000 even though the line item correctly showed WAIVED ($0).
v6.1785.0
✏️ /quote/[token] expired-link copy fix — two small fixes in one line.
v6.1745.0
📊 /admin/segments page renders the v6.1725 segmentByFitTier 5th-dimension cohort.
v6.1725.0
📊 NEW 5th-dimension segmentation: segmentByFitTier in cohort-segment.ts + wired into /api/admin/segments.csv.
v6.1685.0
📊 /api/leads/export.csv — NEW fit_score + fit_max_score + fit_tier columns appended to the trailing edge of the CSV.
v6.1645.0
🎯 Kanban tie-breaker uses fit-tier — when two /admin/leads Pipeline cards share a due-date (most commonly when both are NULL — fresh imports with no next-action set), the higher-fit-tier card floats above the lower one inside the same column.
v6.1625.0
🎯 Prospect-fit chip on the /admin/leads Table-view rows (mirrors v6.1605 kanban-card chip) + SSoT lift of fitChipClass to @/lib/prospect-fit.
v6.1605.0
🎯 Prospect-fit chip on kanban cards (/admin/leads Pipeline section) — PipelineBoardClient.tsx ClickableCard now computes scoreProspectFit from the prospect row + renders a small uppercase-mono tier chip (hot emerald / warm amber / cool…
v6.1585.0
🎯 /admin/sales-kit — NEW 'Closer talk-track' section wires sales-talk-track.ts (the zero-consumer lib audit caught it).
v6.1565.0
🔗 Homepage Explore strip — added /migrate-from-dutchie between Compare + Use cases.
v6.1545.0
🎯 UI wiring for v6.1525 timeline axis — OperatorSnapshotPanel accepts optional timeline?: string | null prop + threads it through to scoreProspectFit.
v6.1485.0
🚨 /admin/sales-kit — NEW 'When to escalate to Doug' section completes the v6.1405 wiring of OBJECTION_HANDLER (the escalateToDoug field was the last unrendered piece).
v6.1465.0
🪪 Operator Snapshot — mirrored into the ProspectDrawer's Detail tab. v6.1445 shipped the panel on /admin/leads/[id] (full-page deep-work surface); the drawer is the high-frequency surface where Mitch flicks between leads from the kanban so the panel needs to ship there too.
v6.1445.0
🪪 Operator Snapshot Phase 1 LIVE — three-chip panel pinned at top of /admin/leads/[id] (PLAN_OPERATOR_SNAPSHOT_2026_05_10.md).
v6.1405.0
🎯 /admin/sales-kit wired to consume the v6.1305 + v6.1325 + v6.1385 structured libs — Mitch's bookmark URL now renders the full operator-facing reference inline.
v6.1365.0
🔗 Discovery wiring for /migrate-from-dutchie (v6.1345) — three internal-link surfaces added to close the orphan-page gap.
v6.1345.0
🚀 NEW /migrate-from-dutchie landing page — customer-facing migration pitch targeting Dutchie 4/20-outage refugees + operators considering Flowhub's parallel 'Zero-downtime migration' messaging.
v6.1025.0
🎙️ Two voice-rewrites from past-saturation communications-expert agent review (Doug 'have an expert review cannagent' → comms-expert returned 3 🔴 voice violations + 5 🟡; shipping the top 2 here, queueing 3rd in /CODE/CannAgent/MITCH_C…
v6.0985.0
✏️ Full-page lead detail (/admin/leads/[id]) — inline edit-mode mirror of the drawer fix (v6.0745.0).
v6.0925.0
📅 Date-filter sweep round-4 — 2 more sister admin pages ported per v6.0825 audit.
v6.0865.0
📅 Date-window filter sweep round-3 — 2 more sister admin pages ported per v6.0825 audit findings: (1) /admin/transition-log 30d / 90d / all (default 30d, matching historical baseline; expands view to a quarter or all-time when Doug wants a longer transition history).
v6.0785.0
📅 Date-window filter SWEEP closes the FOLLOWUP from v6.0725 — 3 sister admin pages ported to the ?window=...|all operator-controlled pattern (sister of v6.0625 lost-reasons + v6.0725 quotes).
v6.0745.0
✏️ ProspectDrawer Detail tab — inline edit mode (Doug 2026-05-10 'no way to edit' screenshot).
v6.0725.0
📅 /admin/quotes 30d / 90d / all date-window filter — sister-ports v6.0625's /admin/lost-reasons pattern to the quote-lifecycle page.
v6.0625.0
📅 /admin/lost-reasons now supports a 30d / 90d / all date-window filter.
v6.0505.0
🔁 NEW per-row '🔁 Re-issue 14d token' button on /admin/quotes for expired + email_failed rows.
v6.0485.0
⌛ NEW 'expired' QuoteStatus + 5th KPI tile on /admin/quotes.
v6.0405.0
🎯 NEW 'Viewed quote, not accepted' cohort on /admin/today.
v6.0345.0
🔄 markDiscoveryCovered now auto-advances pipelineStage demo_scheduled → demo_done.
v6.0225.0
🔄 markOnboardingMilestone now auto-advances pipelineStage to 'live' when every milestone is done.
v6.0185.0
🗓️ Touchpoint log on /admin/leads/<id> now bundles an optional follow-up reminder.
v6.0065.0
🎙️ Touchpoints in /admin/inbox unified feed + arc-guard pin tests.
v6.0045.0
🎙️ Quick touchpoint log on /admin/leads/<id> — Doug 2026-05-10 'anything we sent or talked about.' Timeline already captures automated events (resend:* email lifecycle, outbound_link_opened, quote_viewed, demo_token_auto_issued, drip:se…
v6.0025.0
🐛 /admin/leads/calendar — 4 inline <form action={async(fd)=>{await markAppointment(fd)}}> patterns silently swallowed the {ok:false, error:'...'} return shape.
v6.0005.0
🎯 Doug 2026-05-10 'each opportunity should have its own dedicated page' — the page DID already exist at /admin/leads/<id> (full timeline, drips, quote URLs + emails, support tickets, onboarding milestones, AI scope, send timestamps), bu…
v5.9985.0
🖱️ Doug 2026-05-10 'make these clickable' batch: (1) Conversion-funnel snapshot rows on /admin/leads/reports + /admin/funnel each stage row is now a Link to /admin/leads?stage=<stage> — click any stage to drill into the cohort.
v5.9945.0
⚔️ Valhalla rename round 2 — 4 more user-visible 'Leads' labels caught in wider sweep + renamed. /admin/standup nav link ('Leads' → 'Valhalla'), /admin/sales-evals back-link ('← Leads' → '← Valhalla'), /admin/states-monitor back-link (sa…
v5.9885.0
⚔️ Renamed /admin/leads UI label to Valhalla per Doug 2026-05-10 ask 'instead of Leads call it Valhalla'.
v5.9865.0
🛡️ Sister arc-guard: cross-stack state-coverage parity. states.ts had 24 states (the StateSlug union) but STATE_REGULATORS had only 16 + DemoRequestForm STATES picker had 15 — so a Maine / Rhode Island / Connecticut / Vermont / Minnesot…
v5.9805.0
📝 DemoRequestForm currentTool picker + scope-generator TOOL_WEAKNESSES now both cover all 9 rivals.
v5.9785.0
📊 ROICalculator now covers all 9 rivals + embeds on every /vs/<slug> page.
v5.9765.0
⚔️ NEW /vs/biotrack comparison page + matching BioTrack entry in lib/competitors.ts.
v5.9605.0
📋 Three new FAQ entries surfacing real-prospect objections that were live in the drip + recap templates but had no /faq answer: (Migration) ‘We’re locked into a contract with our current POS — does that block a cutover?’ — answers paral…
v5.9565.0
💼 Mitch quote-time discretion — per-register override + per-add-on rate override.
v5.9505.0
💰 Setup-fee waiver — Doug 2026-05-10 §8 #3 answer: 'waive it for new customers until July 1'.
v5.7585.0
Homepage stat strip: drop store-count tile ('2 stores live on this code today' → '→ built by an operator who closed his own till last night').
v5.6065.0
🧹 /demo page copy stale-reference cleanup.
v5.5905.0
📧 Mirror the v5.5825 phased-rollout explainer into both prospect-facing emails so prospects who only read the email (not the /demo/thanks page) still get the staging context.
v5.5825.0
🗺️ /demo/thanks rewritten for the auto-token reality + NEW phased-rollout section.
v5.5785.0
🎟️ Auto-issue demo token on /api/demo-request submit — Doug 2026-05-10: 'lets work the demo into onboarding, once they get to that spot it notifies me they are ready for a demo. lets also allow it to create them a demo token.' NEW src/l…
v5.3325.0
🧹 schema.org Offer JSON-LD now emits Standard tier only — closes the JSON-LD layer of the /pricing model-drift arc (v5.3245 fixed visible meta-description).
v5.3245.0
🧹 /pricing meta-description aligned with v4.855 Standard pricing model.
v5.3205.0
🧹 Round-9 sister copy cleanup — closed the last 'Dogfood' label leak in src/lib/comparison.ts:116.
v5.2565.0
🧹 Customer-copy sweep — closed the post-v5.925 leak of store-count + dogfood framing across 16 files.
v5.1255.0
💬 NEW customer-support widget — floating bottom-right Support button on every public page → expands to a modal form (name / email / message / optional screenshot URL).
v5.865.0
🧹 Round-4 customer-copy cleanup — sister of v5.745/v5.785 dogfood-scrub rounds. 5 surfaces missed by prior rounds: (1) /about team h2 still framed Doug+Mike+Jack as 3 people ("Operators run the shops.
v5.505.0
📅 NEW Tier 3 of Mitch sales-call assistant arc — Sales Calendar at /admin/leads/calendar.
v5.245.0
🐛 ADMIN-VISIBLE BUG — 📧 Send post-demo recap button on /admin/leads/[id]/call (Tier 2 Mitch live-call page, v5.085) silently did nothing.
v5.085.0
📞 NEW Tier 2 Mitch sales-call assistant — /admin/leads/[id]/call.
v4.925.0
💼 NEW Tier 1 Mitch sales-call assistant — /admin/leads/[id]/brief.
v4.895.0
🚨 PROSPECT-VISIBLE BUG — decodeNamedEntities in src/lib/changelog-summary.ts had no-op regex patterns (literal-Unicode → literal-Unicode = nothing happens). 5 rules broken: replace(/—/g, "—") was meant to decode —, replace(/–/g, "–") fo…
v4.665.0
🏖️ CA Option B + master plan + Doug-solo + 2-stores sweep + date-jitter sweep.
v4.615.0
🐛 Entity-bug round 2 (sister of v4.595) — 4 more real prospect/admin-visible bugs found by widening the JS-string entity sweep beyond just lines: [...] array contexts.
v4.595.0
🐛 PROSPECT-VISIBLE BUG — numeric HTML entities in JS string literals were rendering literally.
v4.500.0
🪒 Setup-payoff cards: tighten gap + padding — Doug 2026-05-09 /loop tick 45.
v4.490.0
🪒 H1 size shrunk one notch — Doug 2026-05-09 /loop tick 47.
v4.480.0
🪒 Proof bar tile padding p-4 md:p-5 → p-3 md:p-4 — Doug 2026-05-09 /loop tick 46.
v4.460.0
🪒 Closing CTA section + paragraph margin trim — Doug 2026-05-09 /loop tick 44.
v4.450.0
🪒 Hero + Setup-payoff vertical-rhythm trim — Doug 2026-05-09 /loop tick 43.
v4.175.0
🐛 HTML-entity sweep round 2 — 15 JSX-text sites across 8 files (sister of v3.770 fix on StandardPlusAddOns).
v4.155.0
🪒 Hero orb shrunk again 260 → 200 / 180 → 140 — Doug 2026-05-09 /loop continuing. v3.605 already shrunk the NeuralMesh orb 360→260 desktop / 240→180 mobile.
v4.120.0
🪒 Drop Audit: intro from verify chips — Doug 2026-05-09 /loop continuing.
v4.110.0
🪒 Setup-payoff card #1 body 18w → 16w — Doug 2026-05-09 /loop continuing.
v4.075.0
🪒 Setup-payoff card #2 body 19w → 17w — Doug 2026-05-09 /loop continuing.
v4.060.0
🪒 Setup-payoff eyebrow 9w → 7w — Doug 2026-05-09 /loop continuing.
v4.030.0
🪒 Setup-payoff card #2 title 9w → 6w — Doug 2026-05-09 /loop continuing.
v4.020.0
🪒 Demo CTA paragraph 31w → 25w — Doug 2026-05-09 /loop continuing.
v3.985.0
🪒 Hero subhead 26w → 18w — Doug 2026-05-09 /loop continuing.
v3.975.0
🪒 Proof bar tiles → clickable — Doug 2026-05-09 /loop continuing.
v3.945.0
🪒 Verify chips intro tightened — Doug 2026-05-09 /loop continuing.
v3.935.0
🪒 Tighten Hero top padding + Setup-payoff section — Doug 2026-05-09 /loop continuing.
v3.900.0
🧹 Doug 2026-05-09: “take out any reference to Mike on the website.” Mike Ion was repositioned from partner to consultant on 2026-05-06 (memory project_sureel_partners_to_consultants_2026_05_06); the team page already collapsed to Doug-s…
v3.870.0
🐛 Demo button arrow wrap + page gaps — Doug 2026-05-09 (image feedback): “fix the demo button and close the gap” / “gaps down the page”.
v3.855.0
👤 Doug-solo posture — per Doug 2026-05-09 directive (“no partners”) the customer-facing partner surfaces drop Mike Ion + Jack Piza.
v3.845.0
👤 Doug-solo posture — per Doug 2026-05-09 directive (“no partners”) the customer-facing partner surfaces drop Mike Ion + Jack Piza.
v3.825.0
🪒 Aurora animation OFF — Doug 2026-05-09 still “too busy” after v3.795.
v3.795.0
🪒 Setup-payoff card #2 body 26w → 19w — Doug 2026-05-09 still “too busy” after v3.785.
v3.785.0
🪒 Setup-payoff card #3 dropped — Doug 2026-05-09 still “too busy” after v3.755.
v3.770.0
🐛 Customer-facing bug fix on /pricing — StandardPlusAddOns.tsx (v3.740) had two HTML-entity escape codes in JSX text that would render literally to prospects: no “basic” tier missing the parts you actually need (Standard-tier card body)…
v3.755.0
🪒 Setup-payoff h2 trim — Doug 2026-05-09 still “too busy” after v3.720.
v3.740.0
💲 Public /pricing page migrated to Standard + add-ons (iter 9 of pricing-rework arc, 2nd of 14 legacy PRICING_TIERS consumers).
v3.720.0
🪒 Closing CTA tighten + drop FadeIn staggers — Doug 2026-05-09 still “too busy” after v3.710.
v3.710.0
🪒 Hero single-CTA discipline — Doug 2026-05-09 still “too busy” after v3.700.
v3.700.0
🪒 Slow Aurora animation — Doug 2026-05-09 still “too busy” after v3.670.
v3.670.0
🪒 Tighten Hero subhead + drop tech-grid — Doug 2026-05-09 still “too busy” after v3.640.
v3.640.0
🪒 Drop decorative eyebrows — Doug 2026-05-09 still “too busy” after v3.605.
v3.605.0
🪒 Drop StickyCTA + shrink Hero orb — Doug 2026-05-09 still “too busy” after v3.595.
v3.595.0
🪒 Background-noise pare — Doug 2026-05-09 still “too busy” after v3.560 (page now 5 sections, Hero only orb + 4 text/CTA elements).
v3.560.0
🪒 Hero internals pare — Doug 2026-05-09 still “too busy” after v3.555 (page now down to 5 sections).
v3.555.0
🪒 Fold VerifyOurStoryStrip into closing CTA — Doug 2026-05-09 still “too busy” after v3.530 grid-rhythm break.
v3.530.0
🪒 Break the grid rhythm — Doug 2026-05-09 still “too busy” after the v3.460→v3.520 prune chain.
v3.500.0
🪒 Pain ↔ Promise merge — Doug 2026-05-09 still “too busy” after v3.460/v3.465/v3.490.
v3.490.0
🪒 Hero pare — Doug 2026-05-09 still “too busy” after the v3.460 page prune + v3.465 proof-bar.
v3.465.0
📊 Homepage proof-bar — inserted a 4-tile system-depth strip immediately after TrustStrip so the WHY-this-isn’t-Dutchie beat hits before the prose Pain section instead of after it.
v3.460.0
🪒 Homepage prune — Doug 2026-05-09: “cannagent front page is too busy… move some of the things like pricing to their own page, front page focus on schedule demo.” Cut from 14 sections to 7.
v3.454.0
🚨 Demo emails — every prospect demo-request + demo-approval email shipped a 404 CTA button because the CALENDAR_URL fallback was hardcoded to https://calendly.com/doug-cannagent/30min (a placeholder URL that never existed on Calendly — curl -I returns HTTP 404 today).
v3.438.0
🎨 /vendor-portal now ships its own OG image.
v3.415.0
🚨 SEO orphan-page bug — 5 SEO-targeted feature-keyword landing pages had ZERO internal links from any hub page. /cannabis-pos / /inventory-automation / /compliance-automation / /loyalty-rewards / /vendor-portal sit at sitemap priority 0…
v3.413.0
🐛 /changelog page leaked literal entity tokens — the /changelog page rendered <rival> / "text" / — as visible text tokens because React text nodes don’t decode HTML entities (per memory feedback_changelog_html_entities_convention)…
v3.389.0
🐛 Social SEO — /careers/<slug> missing article:published_time + article:author + /case-studies/<slug> missing article:author.
v3.387.0
🐛 SEO — 6 of 8 /vs/<rival> pages missing Product JSON-LD, so Google could not surface them as pricing rich-snippets in SERP. /vs/treez + /vs/flowhub had Product LD with PRICING_TIERS offers (v3.376 pattern); /vs/dutchie + the 5 RivalDee…
v3.385.0
🐛 RSS feed — /changelog/rss.xml double-escaped HTML entities into literal — / ’ tokens in subscriber feeds (Feedly / NetNewsWire / Inoreader).
v3.383.0
🐛 SEO sister of v3.376 — Offer.url anchors #solo #multi #enterprise didn’t exist on /pricing.
v3.382.0
🐛 SEO — Article schema on /case-studies/[slug] referenced 404 image URL.
v3.378.0
🐛 SEO — /cities/[slug] missing Service JSON-LD (sister of /states/[slug] which already had it).
v3.376.0
🐛 SEO — Product schema on /compare/[slug] + /states/[slug] missing offers (sister of v3.375 SoftwareApplication fix).
v3.375.0
🐛 SEO — SoftwareApplication offers schema was Google-invalid, so pricing rich-snippets never surfaced in SERP.
v3.369.0
🐛 SEO sister-trim — 3 more over-cap titles fixed, including the absolute worst (/compare at 129 chars, with literal · CannAgent · CannAgent duplicate-suffix bonus).
v3.367.0
🐛 SEO — 4 worst over-60-char titles trimmed (Google SERP cap).
v3.365.0
🐛 SEO — og:locale + og:site_name dropped on 43 pages by Next 16’s openGraph cascade-replace.
v3.364.0
🐛 Sister of v3.343 — Footer was missing /vs/meadow.
v3.363.0
🐛 SEO sister-sweep — 6 more pages over Google’s 160-char description cap that v3.358 missed.
v3.360.0
🐛 84 more entity sites in 13 .tsx files — the v3.351-v3.352 sweep covered changelog.ts + .ts data files + page-level metadata strings, but missed entities INSIDE TS string literals in .tsx page bodies (e.g. title: "‘Hey, what did we sell of yours?’ is a 12-email thread.").
v3.359.0
🐛 Sister of v3.358 — mid-word truncation in dynamic-route descriptions. v3.358 changed slice(0, 200) → slice(0, 155) on case-studies/careers/states slug routes to fit Google’s SERP cap, but raw .slice(155) cuts mid-word producing ugly p…
v3.358.0
🐛 SEO — 9 pages with meta descriptions over Google’s ~160-char SERP cap, the worst at 421 chars.
v3.357.0
🐛 69 ASCII apostrophes in 5 customer-facing data files swept to Unicode U+2019.
v3.356.0
🐛 a11y — Nav links missing aria-current="page" on the active route.
v3.352.0
🐛 Sister-sweep round of v3.351 — 163 more entity sites across 39 files.
v3.351.0
🐛 2,025 HTML entities in changelog.ts rendered LITERALLY on /changelog — — / ’ / ‘ / “ / ” etc. were displaying as the source text instead of the intended em-dashes + curly quotes.
v3.349.0
🐛 [object Object] rendered on /use-cases/multi-location-chains — the comparison row ‘Source-of-truth for orders’ rendered the literal text [object Object] in the CannAgent column.
v3.348.0
🐛 Duplicate id="main-content" on 18 pages — layout.tsx wraps all children in <div id="main-content" class="contents"> (the global skip-link target), AND 18 per-page files independently set id="main-content" on their own <main> or <article>.
v3.347.0
🐛 Sister of v3.346 — /use-cases/[slug] per-slug OG image was being suppressed.
v3.346.0
🐛 Generic OG image alt on all 24 /states/[slug] pages — the per-state OG image renders state-specific (huge state abbr + regulator acronym + state-specific headline), but og:image:alt was the constant string ‘CannAgent for your state’ from the opengraph-image.tsx export.
v3.344.0
🐛 JobPosting JSON-LD broken for Google for Jobs — 2 spec violations on /careers/[slug].
v3.342.0
🐛 Sister of v3.341 — broken /compare/cannagent Link in RivalDeepDive footer (renders on all 8 /vs/[rival] pages).
v3.340.0
🐛 Sister-sweep round 2 of v3.339 — 7 more pages with duplicate · CannAgent · CannAgent titles.
v3.339.0
🐛 17 pages with duplicate · CannAgent · CannAgent titles — Next 16 layout title.template = "%s · CannAgent" was appending the suffix to page-level titles that already ended with CannAgent.
v3.338.0
🐛 NEW /vs/meadow data-driven page — meadow was in COMPETITORS (lib/competitors.ts:248) + had /compare/meadow (200) + was cross-referenced from another rival’s weakness array (see /compare/meadow), but /vs/meadow was 404.
v3.336.0
🐛 a11y/HTML-validity — Logo SVG hardcoded id="cannagentLogoGrad" + id="cannagentLogoGlow" for its <defs> (gradient + filter).
v3.335.0
🚨 858 markdown bold sites in guides.ts rendering literally as asterisks on every /guides/[slug] page.
v3.334.0
🐛 Markdown bold rendering literally on /trust — trust pillar bullets contained Per-store database, not multi-tenant. style markdown emphasis, but consumer at src/app/trust/page.tsx:113 renders {b} as plain text.
v3.333.0
🌐 SEO — /compare/[slug] dynamic route deferred from v3.332.
v3.332.0
🐛 5th cascade-arc round — 8 more pages with twitter cascade-default.
v3.331.0
🐛 10 MORE static landing pages missing per-page twitter blocks — sister sweep round 4 of the metadata-cascade arc.
v3.330.0
🐛 5 INDEX pages also missed twitter blocks (and /cities missed og:image entirely).
v3.329.0
🐛 Twitter cards on the remaining 3 dynamic routes (cities + careers + use-cases).
v3.328.0
🐛 Sister sweep of v3.327 — /cities/<slug> + /careers/<slug> ALSO missing og:image meta tag (same dynamic-route cascade gap).
v3.327.0
🐛 Sister of v3.286 metadata-cascade on dynamic routes — /case-studies/<slug> + /guides/<slug> were emitting NO og:image meta tag at all.
v3.326.0
🐛 2 more 0-byte OG routes caught by sister-audit using the new v3.325 recipe (memory feedback_satori_zero_byte_debug_recipe). /diagnostic/opengraph-image + /status/opengraph-image were silently shipping empty PNGs — same multi-child + boxShadow combo as v3.323+v3.325.
v3.325.0
🚨 ROOT CAUSE FOUND for the 3 zero-byte OG routes (/trust + /how-it-works + /changelog).
v3.323.0
🐛 Fix /changelog/opengraph-image 0-byte render — Satori does NOT support box-shadow.
v3.322.0
🚨 Two OG-image routes returning 0 bytes — /modules/opengraph-image and /trust/opengraph-image were silently shipping empty PNGs to Twitter/Facebook/LinkedIn social-share crawlers.
v3.320.0
🌐 SEO — og:image dimensions + alt missing on 12 pages from the v3.286 fix.
v3.319.0
🌐 SEO — sister-fix to v3.286 + v3.295 + v3.313 metadata-cascade trio. og:site_name + og:locale missing on the homepage (and presumably 49+ other pages that override openGraph).
v3.318.0
📱 PWA install criteria full coverage — v3.317 added 512×512 but missed 192×192.
v3.317.0
📱 PWA manifest icon coverage — Chrome Lighthouse PWA audit requires a 512×512 icon for the ‘Install’ button to appear on Android + for splash screens to render.
v3.316.0
🐛 v3.315 fixed /apple-touch-icon.png redirect (now 307 → 5837 bytes) but /favicon.ico still returned 200 + 0 bytes.
v3.315.0
🐛 v3.309 + v3.310 redirect-routes never actually redirected — /favicon.ico, /apple-touch-icon.png, /apple-touch-icon-precomposed.png were returning HTTP 200 with 0-byte body + image/vnd.microsoft.icon content-type (Vercel default favicon placeholder).
v3.314.0
♿ Sister-fix to v3.307 — homepage h1 had a mashed-word reading bug: screen readers + Google’s text extraction announced ‘The OS that runsyour dispensary.’ (no space between ‘runs’ and ‘your’).
v3.312.0
🎨 NEW <meta name="color-scheme" content="dark"> — tells browsers the site is dark-themed so native form controls + scrollbars render with dark-theme colors instead of light defaults.
v3.311.0
📱 NEW src/app/manifest.ts — web app manifest (Next 16 file convention, generates /manifest.webmanifest).
v3.310.0
📱 iOS home-screen icon coverage — sister-fix to v3.309 favicon.
v3.309.0
🐛 /favicon.ico 404 fix — modern browsers read <link rel="icon" href="/icon"> from the HTML head + fetch src/app/icon.tsx’s satori-generated PNG correctly, but many legacy surfaces still probe /favicon.ico first: Google Search results fa…
v3.308.0
♿ Sister-fix to v3.307 — src/components/ThinkingTrace.tsx:25 had the same useState("") SSR-empty pattern as TypewriterText.
v3.307.0
🚨 Critical SEO + a11y fix — homepage <h1> was rendering ‘The OS that your dispensary.’ (empty middle) for SSR / crawlers / no-JS users / screen readers because TypewriterText.tsx initialized useState("").
v3.306.0
🌐 SEO — sister-fix to v3.304 + v3.305 round 3.
v3.305.0
🌐 SEO — sister-fix to v3.304 on 3 dynamic routes. /states/[slug] /case-studies/[slug] /guides/[slug] all rendered titles like CannAgent for Washington · WSLCB-aware POS · CannAgent (CannAgent appearing twice) because their generateMetad…
v3.304.0
🌐 SEO — redundant · CannAgent suffix removed from 4 page titles where the brand name was already explicitly in the title, causing visible double-branding on Google SERPs + browser tabs (e.g.
v3.303.0
🐛 Title encoding bugs — 2 customer-facing pages had HTML entities or ASCII apostrophes in their metadata.title field, which Next 16 escapes when emitting the <title> tag.
v3.302.0
🌐 SEO — meta-description length sweep on 7 pages over Google’s 160-char SERP truncation cap.
v3.301.0
♿ a11y — heading-hierarchy fix in Footer.
v3.300.0
♿ a11y — 2 form-control labels missing on customer-facing surfaces.
v3.298.0
♿ a11y + SEO — the 4 data-driven /vs/<rival> pages (cova / korona / blaze / posabit) had zero <h1> elements.
v3.297.0
♿ Accessibility fix — the WCAG 2.4.1 skip-to-content link in src/app/layout.tsx (line 118: <a href="#main-content" className="skip-link">) was rendering on every page, but the id="main-content" target only existed on 4 pages (/error, /changelog, /quote/[token]).
v3.295.0
🐦 Twitter card per-page sweep round 2 — sister-fix to v3.294. 9 more pages (6 static feature pages + 3 dynamic per-slug routes) were inheriting homepage default twitter:title on every social share.
v3.294.0
🐦 Twitter card per-page polish on /vs/<rival> — 7 comparison pages were inheriting the homepage default twitter:title (“CannAgent — Cannabis POS + Back Office in One System”) on every social share, even though their openGraph already de…
v3.292.0
🌐 Fix two stale state-regulator URLs — Rhode Island + Delaware.
v3.291.0
🚨 Conversion-killing bug — ‘Request a demo’ CTAs on 5 feature landing pages were linking to /quote which 404s (no /quote route exists; only /quote/[token] parametric route for signed quote acceptance).
v3.286.0
🐛 Metadata-cascade SEO bug class — 12 pages were shipping imageless social-share previews.
v3.285.0
🐛 Final entity-render sweep — src/lib/guides.ts (~643 entity sites across 5000+ lines of long-form guide content) swept to Unicode.
v3.284.0
🐛 Sister-fix to v3.280 + v3.282 — entity-render bug class swept across src/lib/pipeline.ts (4 sites: helper field on cutover-milestone array, rendered as {m.helper} plain text on /cutover + /admin/leads/[id] + /admin/sales-kit + /admin/…
v3.282.0
🐛 Sister-fix to v3.280 — src/lib/trust.ts had 6 HTML entity apostrophes (’) in the “If we go down: your register doesn’t” trust pillar, rendering literally as register doesn’t to users on /trust (React text-node escape: the source…
v3.280.0
🐛 Fix — HTML entity apostrophes in src/lib/states.ts were rendering literally on /states/[slug] pages. state.lead, state.builtIn[], and state.dogfood.copy flow into JSX as plain text ({state.lead}); React text nodes do not decode HTML e…
v3.275.0
📍 AZ state page sharpened — 5/5 featured-state sharpen series complete (WA v3.255 + NJ v3.260 + MI v3.265 + CO v3.270 + AZ v3.275).
v3.270.0
📍 CO state page sharpened — 4th in the v3.255+v3.260+v3.265 featured-state polish series.
v3.265.0
📍 MI state page sharpened — sister-ship to v3.255 WA + v3.260 NJ.
v3.260.0
📍 NJ state page sharpened — sister-ship to v3.255 WA.
v3.255.0
📍 WA state page — sharpened with audit-survivor framing + vendor-sample auto-ring as the headline differentiator (Doug 2026-05-08 marketing positioning).
v3.235.0
📍 NEW state-marketing tier system — marketStatus: "featured" | "coming-soon" | "later" field added to StateData in src/lib/states.ts.
v3.190.0
🎯 Hero stat-strip — pulled the “● 2 Stores Live” pulsing-emerald badge per Doug 2026-05-08.
v3.185.0
🚀 NEW 4 feature-keyword landing pages — completing the blaze.me-pattern initiative kicked off in v3.180 (/cannabis-pos prototype).
v3.180.0
🚀 NEW /cannabis-pos feature-keyword landing page — first prototype in Doug 2026-05-08 blaze.me-pattern landing-page initiative.
v3.175.0
v3.175 — SEO Build #2c — WA-only city landing pages + legal-defense footer on /vs/[rival].
v3.174.0
v3.174 — HowTo schema on /how-it-works (SEO Build #2b).
v3.168.0
v3.168 — SEO Build #2 (FAQPage JSON-LD on /pricing).
v3.167.0
v3.167 — ONBOARDING TRACKER Ship 3 (prospect-facing tracker + slip-detection cron + day-of email).
v3.166.0
v3.166 — SEO: related-guides internal-linking system.
v3.165.0
v3.165 — ONBOARDING TRACKER Ship 2 + funnel-copy polish.
v3.164.0
v3.164 — ONBOARDING TRACKER Ship 1 (schema + capture).
v3.163.0
v3.163 — FUNNEL POLISH: redundancy + extra-info sweep across homepage, /demo, /pricing per Doug ask 2026-05-08 (“take out reduncies and extra info”).
v3.138.0
v3.138 — /operators namespace landing page + sitemap entry.
v3.120.0
v3.120 — DISCOVERABILITY for the Payroll API docs page. v3.119 shipped the docs but only Doug knew the URL; this ship makes them discoverable.
v3.119.0
v3.119 — OPERATOR-FACING API DOCS PAGE for the staff crypto-payroll integration.
v3.95.0
v3.95 — pricing rebalance + Dutchie per-register correction.
v3.94.0
v3.94 — homepage marketing pass + new 9-layer stack-cost calculator.
v3.90.0
v3.90 Customer-facing 'Doug' name sweep — round 2.
v3.89.0
v3.89 ROICalculator now mounted on /vs/treez + /vs/flowhub.
v3.70.0
v3.70 BetaCutoverBanner extends to /demo.
v3.68.0
v3.68 /admin/outreach/opens campaign-filter drilldown.
v3.66.0
v3.66 /admin today-snapshot picks up magic-link opens.
v3.55.0
v3.55 ROI strip on every data-driven /vs/<rival> page (cova / korona / blaze / posabit).
v3.52.0
v3.52 De-personalization sweep + new hero tagline.
v3.49.0
v3.49 license# field wired end-to-end on /demo form (closes the in-flight item from AGENT_BOARD).
v3.46.0
v3.46 BetaCutoverBanner with go-live date + scarcity factor — Doug 2026-05-07: 'we should put that cannagent is in test with a few select stores, go live date is June 1, request your demo now to be ready for June 1 go live date' + 'create a scarcity factor'.
v3.44.0
v3.44 /demo/thanks rewritten for admin-gated flow (Ship 8 of /CannAgent/PLAN_DEMO_FLOW.md).
v3.42.0
v3.42 NEW /demo/walkthrough — flow-shaped daily-ops walkthrough for prospects already in the demo.
v3.41.0
v3.41 NEW data-driven /vs/<rival> deep-dive pages for Cova / Korona / BLAZE / POSaBIT — Doug 2026-05-07 (‘cova, corona, blaze are some competitors + posabit’). 4 new conversion-target routes mirror the /vs/dutchie /vs/treez /vs/flowhub p…
v3.38.0
v3.38 Discovery wiring for /calculator/stockout + /wins — v3.37 shipped both routes orphaned (in sitemap, but no in-page links). v3.38 wires them into the funnel: (1) Footer PRODUCT_LINKS gains Where we win (→ /wins) between Case studies…
v3.37.0
v3.37 NEW conversion surfaces — /calculator/stockout + /wins.
v3.25.0
v3.25 POSaBIT added as competitor + homepage vs the field callout.
v3.23.0
v3.23 Marketing copy round 1 — drop owner-uses-it / 2-stores / how-it-was-built / sale-to-minor framing across 5 customer-facing surfaces.
v2.76.0
v2.76 /trust Open Graph share-card chip now matches the v2.75 dogfood/customer split — was hardcoded Dogfood case studies / N live like the strip + cards before v2.75.
v2.75.0
v2.75 Verify-trio case-studies chip + /trust card now stay honest after first arms-length customer lands.
v2.50.0
v2.50 Stale ‘23-state’ references caught up post v2.40 Ohio ship — three places held the old count. /states/opengraph-image.tsx alt text + subhead + doc-comment all said ‘23 markets / 23 states’; bumped to 24. src/lib/guides.ts cross-lin…
v2.46.0
v2.46 /states index metadata + bottom-CTA copy caught up to v2.40 reality.
v2.42.0
v2.42 VerifyOurStoryStrip dropped onto /compare — the multi-vendor matrix between the big 8-category × ~50-feature CompareMatrix and the closing ‘Request a demo’ CTA. /compare makes ~50 specific claims about CannAgent vs 7 rivals; the st…
v2.41.0
v2.41 /faq gets a top-of-page verify-before-you-ask strip — different visual treatment than the bottom-of-page VerifyOurStoryStrip shipped on /trust + /vs/* + /pricing + /about + /how-it-works + landing because /faq is question-driven not pitch-driven.
v2.40.0
v2.40 NEW state — Ohio (DCC + METRC + Issue 2 medical-conversion topology).
v2.37.0
v2.37 VerifyOurStoryStrip dropped onto /how-it-works between the onboarding-FAQ section and the closing ‘Request a demo’ CTA.
v2.36.0
v2.36 VerifyOurStoryStrip dropped onto the landing page — between the use-cases grid and the closing ‘Request a demo’ CTA.
v2.35.0
v2.35 OG-image coverage closes — /cutover + /use-cases + freshens /states.
v2.31.0
v2.31 NEW Open Graph images for /case-studies + /guides.
v2.30.0
v2.30 Re-check cadence disclosure surfaced on every /states/[slug] page.
v2.27.0
v2.27 NEW Open Graph images for /trust + /status — completes the trust-signal triad of share-cards started in v2.26 (/changelog).
v2.26.0
v2.26 NEW Open Graph image for /changelog — every social share of the page now renders a preview tile with the LIVE user-impacting ship count + ship-day count + latest version number.
v2.21.0
v2.21 STATUS_ROADMAP on /status caught up with reality.
v2.16.0
v2.16 RSS feed for the public changelog at /changelog/rss.xml.
v2.12.0
v2.12 VerifyOurStoryStrip dropped onto /about between the ‘Why we built it’ section and the FAQ embed. /about is the founder-story page; the prospect’s implicit question reading it is ‘is this person legit, or is this another cannabis-Sa…
v2.10.0
v2.10 /states index grouped by track-and-trace system + per-state monitoring-cadence field added (preps cron infra).
v2.07.0
v2.07 Footer version chip wired live to CHANGELOG[0] — was hardcoded v0.97.0 · sample-data seed script with safety gate for 100+ ships, presenting a different version on every page footer than what the deploy was actually running.
v2.06.0
v2.06 VerifyOurStoryStrip dropped onto /pricing — between the FAQ-embed section and the closing ‘Request a demo’ CTA.
v2.05.0
v2.05 /states index metadata caught up with reality — title + description + Open Graph fields all said ‘10 markets covered’ while the live page rendered cards for all 23 states (data-driven from STATE_SLUGS, so the body was correct but the metadata was 13 ships behind).
v2.02.0
v2.02 Verify our story strip extracted to a shared component + dropped onto all 3 /vs/* comparison pages.
v2.01.0
v2.01 /trust gets a Verify our story proof section — the page lists 8 trust pillars + sub-processors + auditable actions but never told a skeptical operator WHERE to check the claims.
v2.00.0
v2.00 NEW state — Montana (CCD + METRC + 20% adult-use + green-county/red-county opt-in topology).
v1.96.0
v1.96 Public /changelog reorganized — entries now grouped by ship-day with a count chip, replacing the flat one-card-per-version list.
v1.95.0
v1.95 NEW state — Alaska (AMCO + METRC + per-ounce wholesale excise + no state sales tax).
v1.92.0
v1.92 Stale-roadmap copy retired across the public surface — automated probes have actually been live since v1.46/v1.51 but four files still claimed they were ‘on the roadmap’ or ‘shipping next’.
v1.91.0
v1.91 Cron-firing health surfaced on /admin/setup.
v1.90.0
v1.90 NEW state — Delaware (OMC + METRC + 15%-flat adult-use, no state sales tax).
v1.86.0
v1.86 Funnel-audit follow-through — wired /admin hub to surface the work shipped this session.
v1.85.0
v1.85 NEW state — Minnesota (OCM + METRC + HF 100 multi-tier license + lower-potency hemp-edible lane).
v1.80.0
v1.80 NEW state — Vermont (CCB + METRC + 20% combined adult-use stack + Act 164 multi-tier license topology).
v1.75.0
v1.75 NEW state — New Mexico (CCD + BioTrack→METRC transition + 12% excise → 18% by 2030).
v1.70.0
v1.70 NEW state — Rhode Island (CCC + METRC + 20% combined adult-use stack).
v1.65.0
v1.65 NEW state — Maine (OCP + METRC + 10% adult-use / medical-exempt + caregiver framework).
v1.60.0
v1.60 NEW state — Connecticut (DCP + METRC + potency-tier excise per mg THC).
v1.55.0
v1.55 NEW state — Oklahoma (OMMA + METRC + medical-only + ~2,000 retail licenses).
v1.51.0
v1.51 Funnel-audit Tier-2 #2 (status read-out) — /status renders live-probe rollup above the manually-curated component list.
v1.50.0
v1.50 NEW state — Maryland (MCA + METRC + 9% adult-use sales tax + medical-exempt).
v1.45.0
v1.45 NEW state — Arizona (AZDHS + Prop 207 + 16% MET + dual-license vertical-integration).
v1.41.0
v1.41 Funnel-audit Tier-2 #1 + Tier-3 #2 — inline ROI calculator strip on the landing page.
v1.40.0
v1.40 NEW state — Nevada (CCB + METRC + tourist-density single-transaction limit).
v1.37.0
v1.37 Funnel-audit Tier-1 #4 (deferred-now-shipped) — Stripe removed from homepage TrustStrip.
v1.36.0
v1.36 Funnel-audit Tier-2 #6 — /guides index grouped by kind with anchor-jump nav.
v1.35.0
v1.35 Funnel-audit Tier-2 — ‘If we go down’ trust pillar + /blog→/guides redirect.
v1.34.0
v1.34 Funnel-audit Tier-2 — comparison→demo pre-fill + Doug-direct-email escape hatch.
v1.33.0
v1.33 Funnel-audit Tier-1 fixes — text-only conversion-friction wins per PLAN_FUNNEL_AUDIT_2026_05_07.md.
v1.32.0
v1.32 NEW guide /guides/cannabis-dispensary-multi-store-scaling. 7-min operator-scaling deep-dive on what breaks going from 1 dispensary to 2 to 3. 1→2 isn’t 2x the work — it’s 5-7x for the first 90 days as ad-hoc decisions become proces…
v1.31.0
v1.31 NEW guide /guides/cannabis-demand-forecasting-discipline. 7-min operations + analytics deep-dive on the 4 demand patterns most operators ignore: weekly cycle (Friday 2.0-2.4x peak / Tuesday 0.5-0.7x valley), monthly cycle (1st + 15…
v1.30.0
v1.30 NEW guide /guides/cannabis-dispensary-website-conversion. 6-min marketing + UX playbook on the third pillar of cannabis dispensary online presence (after GBP and SMS/email).
v1.29.0
v1.29 NEW guide /guides/cannabis-dispensary-lease-negotiation. 8-min real-estate + finance deep-dive on the single highest-stakes contract a dispensary owner signs.
v1.28.0
v1.28 NEW guide /guides/cannabis-dispensary-security-robbery-prevention. 7-min security + safety playbook on the robbery-prevention discipline beyond cameras.
v1.27.0
v1.27 NEW guide /guides/cannabis-menu-display-merchandising. 6-min merchandising playbook on the highest-frequency margin lever in a dispensary — the case is the silent-sell, eye-level products move 4-7x more units than low-shelf, multip…
v1.26.0
v1.26 NEW guide /guides/cannabis-dispensary-opening-day-first-30-days. 8-min new-store playbook on the highest-stakes 30 days a cannabis operator runs.
v1.25.0
v1.25 NEW guide /guides/cannabis-google-business-profile-wac-advertising. 7-min marketing + compliance playbook on the highest-leverage marketing surface a cannabis dispensary has.
v1.24.0
v1.24 NEW guide /guides/cannabis-dispensary-ada-compliance. 6-min compliance + legal-exposure playbook on the federal exposure most cannabis operators forget.
v1.23.0
v1.23 NEW guide /guides/cannabis-holiday-rush-operations. 7-min operations playbook for 4/20, Greenwednesday (day before US Thanksgiving), Christmas Eve, 7/10, NYE, holiday-weekend Saturdays — the 6 days that do 3-5x normal volume in the same store with the same staff.
v1.22.0
v1.22 NEW guide /guides/cannabis-coa-reading-discipline. 6-min compliance + receiving playbook on the document a WSLCB inspector pulls first when something goes wrong.
v1.21.0
v1.21 NEW guide /guides/cannabis-edibles-customer-education-at-register. 6-min customer-experience playbook on the 60-second register education that prevents the bad-trip-to-ER pipeline.
v1.20.0
v1.20 NEW guide /guides/cannabis-shrink-reduction-discipline. 6-min loss-prevention playbook on the six places shrink hides ranked by $-impact: receiving short-counts (#1 30-40%), manual adjustments without paper trail (#2 20-25%), emplo…
v1.19.0
v1.19 NEW guide /guides/cannabis-state-traceability-reconciliation-discipline. 7-min compliance-ops playbook on the daily/weekly/monthly cadence that catches POS-vs-physical-vs-state drift in hours instead of weeks.
v1.18.0
v1.18 NEW guide /guides/cannabis-budtender-hiring-rubric. 6-min playbook on hiring the $20/hr employee who is, on any given shift, a state-licensed-product gatekeeper + ID-verifier + 5-figure-cash handler + WSLCB-front-line.
v1.17.0
v1.17 NEW guide /guides/cannabis-280e-tax-reality. 7-min deep-dive on the line item that doesn’t exist on any other retail business’ P&L: IRC 280E disallows ordinary deductions for any cannabis business (federal tax computes against gros…
v0.93.0
v0.93 nineteenth /guides article — ‘Multi-state vs. multi-store same-state — the actual decision’. 7-min operational deep-dive that connects the existing /states/[slug] per-state landing pages to a real operator decision: when does same-…
v0.88.0
v0.88 /cutover — public companion to the v0.84 internal milestone tracker.
v0.85.0
v0.85 eighteenth /guides article — ‘Cannabis loyalty program — earn rates that don’t bankrupt the margin’. 7-min operational deep-dive on a topic Doug runs daily at Green Life + SCC.
v0.78.0
v0.78 seventeenth /guides article — ‘Industry / heroes / medical discounts — verification cadence + audit-trail’. 5-min compliance playbook on WAC 314-55-095.
v0.77.0
v0.77 sixteenth /guides article — ‘Cannabis banking — keeping the account open, not finding one’. 7-min operational deep-dive on BSA / AML discipline.
v0.75.0
v0.75 fifteenth /guides article — ‘Cannabis recall — the first four hours’. 7-min compliance playbook covering the operator-side response when a lab fails / WSLCB issues an advisory / vendor pulls a lot.
v0.70.0
v0.70 fourteenth /guides article — ‘Cold outreach to another licensee — operator-to-operator courtesy + the actual rules’.
v0.57.0
v0.57 thirteenth /guides article — ‘When the register goes offline — what survives, what doesn’t’. 6-min operational deep-dive on cannabis POS local-first architecture.
v0.50.0
v0.50 twelfth /guides article — 'WSLCB unannounced inspection — the first 60 seconds'. 5-min compliance playbook, fresh angle beyond the diagnostic catalog.
v0.48.0
v0.48 eleventh /guides article — 'Cannabis surveillance — retention monitoring and incident timelines'. 7-min compliance + ops deep-dive that maps to the LAST TWO unmapped diagnostic pain catalog items in a single guide: manual_video_retention + staff_review_4hr_footage.
v0.47.0
v0.47 tenth /guides article — 'Cannabis loyalty data without losing a single point'. 6-min customer-data deep-dive that maps to diagnostic pain loyalty_data_loss.
v0.46.0
v0.46 ninth /guides article — 'LeafLink + cannabis vendor invoices: kill manual entry'. 6-min inventory playbook that maps to diagnostic pain manual_invoice_entry.
v0.45.0
v0.45 public /changelog — surfaces ship velocity to operator evaluators.
v0.44.0
v0.44 eighth /guides article — 'Cannabis pickup flow — stop babysitting the online-orders queue'. 7-min ops deep-dive that maps to diagnostic pain online_orders_babysit.
v0.43.0
v0.43 case-study cross-links — tightens the conversion loop so prospects on /diagnostic see proof links to the dogfood case studies that ran the same plays in production.
v0.42.0
v0.42 seventh /guides article — 'Cannabis payroll inside the POS — Form 941 next to till data'. 8-min back-office deep-dive that maps to diagnostic pain payroll_disconnected.
v0.41.0
v0.41 /case-studies — operator-side outcomes from production.
v0.40.0
v0.40 sixth /guides article — 'WSLCB compliance: coded gates vs operator-handed'. 7-min compliance explainer that maps to diagnostic pain wslcb_chat_alerts ('we hear about WSLCB rule changes from the operator group chat').
v0.39.0
v0.39 fifth /guides article — 'Vendor reliability and the math of reorder'. 9-min inventory deep-dive that maps to two diagnostic pains simultaneously: vendor_reliability_memory + stockout_blackbox.
v0.38.0
v0.38 fourth /guides article — 'Manager write-ups that survive labor-law review'. 8-min people-ops deep-dive that maps directly to diagnostic pain writeup_voided.
v0.37.0
v0.37 /pricing/calculator vs-current-POS delta panel — high-conversion improvement that surfaces the savings (or honest cost-up) against the operator's existing POS bill.
v0.34.0
v0.34 /careers AI-first pivot per PLAN_SALES_AI_FIRST.md (Doug verbatim 2026-05-06: 'we will let ai guide this process and make it intuitive, seamless and impressive for onboarding new customers' / 'all support etc will be handled direct…
v0.33.0
v0.33 third /guides article — 'Cash discipline at a cannabis dispensary: variance, escalation, audit'. 7-min operations deep-dive that maps directly to two pain catalog items in /diagnostic (till_close_30min + cash_variance_unflagged). 7 sections + 5 takeaways.
v0.32.0
v0.32 second /guides article — 'Picking a cannabis POS: the 7-question scorecard'.
v0.24.0
v0.24 diagnostic discoverability — surface /diagnostic where prospects actually land. v0.21 shipped the diagnostic, v0.22 shipped the calculator, v0.23 wired the demo handoff — but the homepage Hero + /pricing top still pointed exclusive…
v0.23.0
v0.23 /diagnostic + /pricing/calculator → /demo handoff wired.
v0.22.0
v0.22 /pricing/calculator — interactive tier picker.
v0.21.0
v0.21 /diagnostic — pain-points self-quiz CTA.
v0.20.0
v0.20 /careers page + WA territory sales roles.
v0.19.0
v0.19 /guides scaffold + first seed article — long-form playbook surface for SEO compounding + operator-language content.
v0.18.0
v0.18 +New Jersey state landing page — completes the 6-state slug union (was reserved in StateSlug type since v0.12).
v0.17.0
v0.17 /status platform-health page — retires the 'v0.14 roadmap' disclosure on /trust pillar 6 by actually shipping the surface, not just promising it.
v0.16.0
v0.16 +Oregon + Michigan state landing pages — extends /states/* SEO surface from 3 (WA/CO/CA) to 5.
v0.15.0
v0.15 /vs/flowhub bespoke comparison page — completes the top-3 head-to-head trio (Dutchie / Treez / Flowhub).
v0.14.0
v0.14 /vs/treez bespoke comparison page.
v0.13.0
v0.13 /trust posture page — security + compliance + audit + sub-processors.
v0.12.1
v0.12.1 chrome + OG follow-up to v0.12 per-state ship.
v0.12.0
Per-state SEO landing pages — /states index + /states/wa, /states/co, /states/ca.
v0.10.0
Patent-protection redaction pass (Lane 1 of 4 parallel lanes).
v0.9.2
Deep UX polish pass.
v0.9.0
Customer-facing journey page at /how-it-works — two URL-driven paths (?path=switching for prospects on Dutchie/Treez/Flowhub/Cova/BLAZE; ?path=new-dispensary for first-time-POS opens).
v0.8.0
Sprint 8 — SALES sprint.
v0.7.0
v0.7 polish sprint — ROI math + cost-of-waiting + per-route OGs + CSV export + deploy checklist.
v0.6.0
Sprint 6 — use cases. v0 site is now feature-complete (20 routes total per build, +4 from Sprint 5).
v0.5.0
Sprint 5 — polish + persistence.
v0.4.0
Sprint 4 — comparison + pricing + form hardening.
v0.3.0
Sprint 3 — conversion path.
v0.2.0
Sprint 2 — module surface. src/lib/modules.ts authored: 10 named modules (Slang POS, Cash Discipline, Brapp Inventory, Vendor Portal, AI Reorder Assistant, Customer Engagement, Compliance Vault, People Operations, Payroll Stack, System H…
v0.1.0
Sprint 1 — site shell.
Want to see how it actually runs in production? Read how operator stores run on it or request a demo.
Subscribe in your RSS reader: /changelog/rss.xml · machine-readable JSON: /api/changelog.json