Roadmap & Ship Log

Built in the open. Vote on cards inside the app (Settings → Roadmap) — votes steer what ships next. ← back to Cultivar

Ship activity

One square per day · darker green = more shipped that day

AUGSEPOCTNOVDECJANFEBMARAPRMAYJUNJUL
MONWEDFRI

🔨 In progress / review 106

Built — being verified live before it's marked shipped.

SEO
VPD page 100x + strain-slug 404 recovery
/learn/vpd-chart rebuilt as the niche's best VPD resource: interactive VPD calculator (leaf-temp offset, per-stage color verdict), how-to-dial-in steps, raise/lower guidance, 10-Q FAQ targeting query variants, CTR title, FAQ+HowTo+WebApp schema. Strain route now 301-redirects old name-only slugs to the breeder-suffixed slug (recovers all 124 GSC 404s, verified). Backfill script caches strain images locally (backfill_strain_images.mjs).
Moat
Community Strains: parent pickers + edit + admin
Strain form now has two parent typeaheads (pick from DB or type new; unknown parents auto-created on save so lineage resolves). Grower edits propagate to the community mirror. Founder dashboard gets a Strains tab to approve/reject/delete/edit submissions. Server: /admin/community-strains + /admin/community-strain.
Bug
Ended Plants: no more readings or drift pushes
Ended grows (Died/Culled/Harvested) kept their old stage, so the hourly Govee poll kept writing readings to them and the daily cron pushed VPD-drift/heartbeat notifications about dead plants. Excluded conditions.ended plants from pollGoveeSensors, the notification cron (activePlants), and /heartbeat-now.
Moat
Community Strains Pipeline (Phase 2)
Novel grower crosses now auto-join a shared community strain library. New PB collection community_strains (setup_fields_v10.mjs); saveStrain mirrors any non-DB strain (status approved, slug-deduped, no user toggle); server keeps a 60s in-memory cache merged into /strain-search + strainBySlug so community strains are searchable AND get a /learn/strain page with a 'Community' badge. Auto-list moderation: prune junk in PB admin (set status=rejected). node --check + esbuild clean. NEXT: founder admin moderation card in FounderModal; breeder-page live-grow highlights.
SEO
Strain Page 100x Redesign
learnShell strain template reworked: breeder now beside strain name in title + H1; scannable hero fact-chip strip (type/flower/THC/yield/cross); real grow journals hoisted from the footer to the top (the unique content); CTA hierarchy (green=start journal, amber=seeds disclosed, sand outline=diagnose); FAQ collapsed to <details>; 6 intro variants keyed on slug hash (was 3) to kill AI-generated sameness. Pedigree tree already present. Validated node --check. Community-strain template + badge deferred to strain_pipeline phase 2.
UX
Grow Film + Public Page Polish
Film frames no longer crop (contain fit); film and lightbox close on click-outside, Esc, and the mobile back button; public-page photo strip enlarged; 'Watch her grow' made sex-neutral.
UX
Sage Popup Chat + Height Graph + Sticky Chart Timeframe
Sage now docks as a Gmail-style popup (lower right, minimizes to a pill, remembers state) instead of eating a sidebar column; the env chart gains a Height metric (from height check-ins, feeds the Growth grade); chart metric + timeframe persist across every plant.
Features
Account Card in Settings
Growers can now see and edit their profile from Settings: display name inline, email change via PocketBase confirm-link flow, password reset email.
UX
Logbook Declutter + Photo Nudge
ALL sensor/space readings (incl. [Tent] sync logs) now fold into the collapsed auto-readings row; log-type filter persists across plants; the Photo button turns solid with a 'Nd ago' badge when the last photo is 5+ days old.
UX
Grow Console Layout Pass (founder feedback)
Sage dock is now collapsible on desktop (persisted); plant summary reads wide instead of columnar; env chart spans the full canvas; hero photo drag-to-recenter; Sync-now restored on the promax plant page; action buttons never overflow; lone garden space fills the width; needs-attention card explains WHY.
Onboarding
GrowDiaries Import Tool
Paste a public GrowDiaries diary link in Settings: layered parser (JSON-LD, embedded state, HTML heuristics) imports weeks, notes and photos as a completed grow. 3/day cap, preview before import.
UX
Mobile: Back Closes Modals + Help Pill Overlap
Android back button now closes the open modal (kanban admin included) instead of leaving the page; floating help pill hidden on coach view where it covered the chat send button.
SEO
Strain Page SEO/GEO Enrichment (15k pages)
Bing flagged thin content. Every strain page now renders a generated intro, type-aware growing guide, FAQ with FAQPage JSON-LD, and related-strains-from-breeder links - all from the DB, per-slug phrasing variation, zero LLM cost. ~60 words to 400+.
Engagement
Push + Digest + Founder Brief Revival
Root cause: hourly cron early-returned when push_subs.json was empty, silently killing daily tips, heartbeat, weekly digest AND founder brief. Digest/brief moved above the gate; push_subs self-heals from .bak; client re-registers its subscription on every boot; founder brief now emailed + pushed on generation.
Infrastructure
Corruption-Resilience Wave (kanban self-heal + Caddyfile guard + storage alerts)
kanban.json reads now self-heal from a last-good .bak (fixes the empty /updates regression class); Caddyfile guard timer validates + restores from a canonical copy on the USB disk every 5 min; hourly storage sentinel pushes an alert to admins at >=85% full. Root-caused to thin-storage truncation (3rd incident).
Other
Promax v3.1: auto day-cycle landing + geo °F/°C, gauge ideal-zones + directional advice (no more 'out of range'), Logbook rename + type icons + auto-sensor consolidation, hero lightbox, LifeArc est-harvest, breeder+parent links, settings 2-col, reset-password real flow, help-pill dedupe
Other
Fix latent SettingsViewPro crash (missing track.js imports)
Other
Pro Max v2 — 'living reading' redesign rebuilt from scratch (landing, garden, plant, settings)
Growth
The Bridge: strain pages <-> live journals
Every /learn strain page now lists real published Cultivar journals of that strain; every public grow links back to its strain guide (in-app + crawlable /share OG). Fixed the relation-filter bug (strain.name) that would have left all 3k pages empty.
AI
Loop #10: Outcome Eval-Harness COMPLETE
Closed harvests now carry coach advice samples from that grow window; brief judges advice-vs-outcome harshly each Monday. The loop only Cultivar can run — nobody else has outcomes.
AI
Loop: SEO Traffic Pulse
Hits on /learn, /share, /updates, /disclosures counted (30d window, hourly flush); brief reports top-12 pages + "what content to make next". The content engine measures itself.
AI
Loop: UI Crashes Self-Report
Both error boundaries send crash messages to /track (k:err persisted w/ msg); weekly brief counts + ranks them and flags the top crash. Bugs file themselves.
UX
Favicon = Real Logo
SVG logo favicon on app + all server-rendered pages (learn/updates/disclosures) — no more mystery checkmark.
AI
LLM Known-Good Models Persist
lastGood/recent (max 3) survive proxy restarts (llm_recent.json); all 3 clickable-to-switch in LLM settings.
Admin
A/B Founder Toggle
Visit /?ab=a or /?ab=b (logged out) to force+persist a landing variant for review.
UX
Share Page: Stage Days in Timeline + Linked Grows
Timeline rows show "Flower d12" chips; "N other public grows" header scrolls to the linked grid.
Growth
Strain Pages: Full Data + Lineage Links
Pages now show yield/THC/CBD/harvest window/environment; 1,304 parent links + 388 descendant lists hyperlinked (🧬 Explore the family) — internal link graph for SEO + browsing.
Bug
Mobile: Equipment Refresh + Error Toast
Equipment/garden added to hash-route whitelist (pull-to-refresh no longer bounces to garden); error toasts wrap at 92vw instead of running offscreen.
Growth
Explore Gallery Rebuilt
/?explore works again: public no-login grid of published grows (cover, strain, stage, yield blurb) w/ signup CTAs — restored from the lost server-only R40 version, now in git.
UX
Roadmap Page Rebuilt
/updates: fixed-cell ship graph (labeled, no drifting), vote counts (▲N) on cards, working category filters, clean responsive grid, sections labeled In-progress/Planned/Suggested/Shipped.
UX
Card Elevation Depth
Subtle inset highlight + drop shadow on cards (theme-aware) — hierarchy without heavier borders.
UX
Motion as Feedback
New log entries slide into the timeline; vitals action buttons compress on tap. Decoration-free per design brief.
UX
Plant-Page Vitals Bar (sticky)
"How is she doing?" in one glance: photo · name · Day N/stage (Fraunces) · live VPD chip w/ ok/warn dot · env grade letter · 📏 rate/wk · one-tap Water/Feed/Photo. Sticky w/ blur, mobile-tuned, hidden actions on ended plants.
UX
Claude-Style Affiliate Footnote
"ad" marker removed from links; tiny footnote appears under the chat composer ONLY while the latest coach reply contains a paid link, linking to /disclosures. Clean chat, adjacent disclosure.
Monetization
Affiliate Power Config
Custom link template field (amazon/amzn.to domains only, {q} placeholder, auto-appends tag) alongside tag + % slider. the founder: paste your Associates tag/link — it was not recoverable from prior chats.
UX
Disclosures Page + Clean-Chat Affiliate
In-chat disclosure sentence removed; links carry a tiny superscript "ad" marker → /disclosures (affiliate, privacy-in-plain-words, AI transparency, beta terms). Apple-style: product clean, legal on its own page.
UX
Coach Messages Render Markdown Links
mdBold now renders [text](url) as safe links (nofollow sponsored noopener) alongside bold.
Monetization
Amazon Affiliate System (was never built — only carded)
Admin card in Founder dashboard: enable toggle, Associates tag, 0-100% link-rate slider, 30d click stats + top terms. Coach linkifies max ONE product term per reply via /go/amzn redirect (click-logged, 5MB-rotated) with FTC disclosure line. rel=sponsored. Conversions live in the Associates dashboard.
UX
Auth UX: Multi-Tab Sync + Keep-Me-Signed-In
Logout/login in one tab now applies to ALL tabs (storage listener — PB SDK does not watch storage); token refreshes propagate; "Keep me signed in" checkbox (default ON) on both landings — off = session-only auth; sign-out clears the session marker.
Docs
Plan v6 Addendum: Build Burst + Hobby→Business Track
Dated addendum: flywheels 1-8 shipped, constraint = distribution; LLC/EIN/Stripe/S-corp trigger ladder (not legal advice).
Growth
Environment Grade on Public Grow Pages
Server computes stage-aware VPD grade (≥3 readings) for published grows; share page shows the A-F chip + % in band. The moat, visible to every visitor.
DevOps
Deploy-Gate Fixtures for New Analytics
test_render dataPlant now carries heights + pH logs (incl. out-of-range) — HeightTrend + Logging/pH grade rows exercised at every deploy.
AI
Harvests in Weekly Brief
Founder brief ctx includes harvests_closed_30d (strain/weight/grade) — first plumbing for the outcome eval-harness.
Growth
/learn Now 12 Reference Pages
+harvest-timing (trichomes), +light-schedules, +training-guide (LST/topping/SCROG w/ auto-safety column). All JSON-LD, sitemap, llms.txt.
Analytics
UTM Campaign Attribution
First-touch UTM captured client-side (cv-utm), rides every event; /founder-stats topUtm per unique session; 🏷 Campaigns line in funnel card. Tag every forum/Reddit link ?utm_source=X.
Bug
Client Silent-Catch Sweep
120 empty catch blocks across 20 files now console.warn — client failures visible in replays/console at last.
Admin
Rage-Click Auto-Triage
/replay-list scans rrweb clicks (3+ same-node <2.5s = 🔥), cached per file; flagged sessions sort to top with badge.
Performance
Service-Worker Asset Cache
Cache-first for hashed /assets/* + icons (instant repeat loads); navigations/API always network — no stale-app risk; old caches purged on activate.
Growth
VPD Calculator Page
/learn/vpd-calculator: interactive calc w/ °F/°C + leaf-temp offset + stage readout; WebApplication JSON-LD; sitemap + llms.txt.
Analytics
A/B Readout in Founder Dashboard
founder-stats computes sessions+signups per landing variant; funnel card shows 🧪 conversion line.
Growth
/learn: Deficiency, pH, Dry-Cure Pages
Three more citable reference pages w/ Article JSON-LD, cross-linked, in sitemap + llms.txt.
Growth
3,029 Programmatic Strain Pages
/learn/strain/{slug} + A-Z library from StrainDB facts ONLY (name/breeder/type/flowering/lineage — no scraped prose, sanitized) + grow-target bands + app CTA. All in sitemap. The long-tail SEO engine.
Growth
llms.txt for LLM Crawlers
Site orientation file pointing AI crawlers at citable reference pages + public grow sitemap.
Growth
AI-Citation /learn Library
Server-rendered /learn/vpd-chart + /learn/autoflower-schedule + index: crawlable factual tables w/ FAQPage/Article JSON-LD, in sitemap at 0.9. Built to be the source Google AI Overviews + ChatGPT/Claude cite.
Security
P2 Hardening Batch
12MB body limit scoped to 4 routes (was global); coach_ratings 5MB rotation; rating dedupe.
DevOps
Pre-Deploy Integrity Scan
deploy.ps1 now aborts on NUL bytes or export-mismatch (the SettingsView P0 class) before anything ships.
Performance
Speed Pass #1
Caddy zstd/gzip + immutable asset caching; font preconnect; 7 admin modals lazy-loaded (boot bundle -14%, splits into on-demand chunks).
Analytics
Named Funnel Events
logEvent() layer: signup-auth, plant-add, log-saved, coach-send, harvest-closed, share-open — structured stream for AI mining; counts feed the weekly founder brief.
Growth
New Landing Page + A/B Test
LandingView2: signup form IN the hero (zero clicks), grade-card proof, honest FAQ, sticky mobile CTA. 50/50 rotation vs classic; variant rides on every tracked event; weekly brief reports the split.
Growth
FIX: Root OG/Meta Tags
logmygrow.com now unfurls properly (og:title/desc/image, journal-first title + description).
Bug
FIX: One-Tap Logs Mislabeled
Timeline showed "Quick log" instead of Water/Feed; title now falls through to real type.
Bug
P0 FIX: SettingsView Fatal Export
export default Settings (undefined) would have white-screened the app on next deploy; fixed + scan carded.
Growth
Share Prompt at Harvest Close
Closing the harvest report opens the share card once per plant (positive-moment-only rule). Never repeats.
AI
Heartbeat Photo Prompts
Coach heartbeat sees daysSincePhoto per plant; stale 7+ days = valid "snap a progress photo" push. Keeps the photo timeline dense.
Integrations
HA Copy-Paste Recipe
Equipment → Home Assistant now includes a ready automation + rest_command YAML with your webhook URL prefilled. Any HA-visible sensor bridges in.
Bug
BUG: SwitchBot polled with Govee key
Hourly poll + heartbeat passed goveeKey to all providers — SwitchBot/AC Infinity bindings now resolve their own credential (providerKey).
Integrations
AC Infinity Sensor Sync (beta)
UIS controllers via unofficial cloud API: login in Equipment, link controller to a space, temp/RH/VPD flow into the journal hourly + Sync now. Read-only — we never touch controller settings.
DevOps
Auto Ship-Log Draft
Every deploy appends its commit message to shiplog_draft.md — Monday ship log becomes a 5-minute edit.
AI
Win-Back Push (max 2 ever)
Previously-active grower silent 5-13 days gets ONE push naming their plant and day; lifetime cap 2, respects heartbeat opt-out.
AI
Coach Answer Ratings (👍/👎)
Thumbs on every coach reply; stored w/ question+answer context; weekly founder brief now clusters downvotes and proposes a system-prompt fix.
AI
Self-Improving Weekly Brief
Monday 8am cron: LLM digests week's feedback + funnel into ranked improvement actions; Founder dashboard card w/ Regenerate.
Admin
Funnel Bot Filter
/track drops bot/headless/script user-agents — founder funnel now counts humans only.
Security
SECURITY: /stripe-checkout Hardened
Identity from verified token (body.userId ignored) + STRIPE_PRICE_IDS env whitelist.
Analytics
Logging + pH Grades in Report Card
Report card gains Logging consistency (days-with-entries %, 30d) and pH discipline (% in medium-aware range) bars — env-grade family grows.
UX
One-Tap Quick Log (plant page)
Water/Feed buttons now log INSTANTLY (repeat last entry, earn credit, tap entry to edit) — modal only as fallback. Square-style fewer clicks.
Feature
Weekly Email Recap Toggle
Settings → Preferences On/Off for the Monday email digest (prefs.emailDigest).
Analytics
Growth Card on Plant Page
📏 Growth card: latest height, +X in/wk rate (21-day window), sparkline of all height check-ins. First member of the growth-grade family.
Security
Security Audit v2 Fixes
/kanban write now admin-only (was open!); /health no longer leaks config/system instructions; VAPID keys moved to env.
Feature
Weekly Garden Email Digest
Monday email recap (plants, log count, VPD) via SMTP; opt-out pref. Dormant until SMTP creds + nodemailer installed on proxy.
Feature
Height Check-ins in Every Log
Optional height (in/cm) on any log entry; shows in timeline; heartbeat coach prompts a weekly measurement when stale 7+ days.
Growth
Plan-v5 Board Sprint (10 selected)
① Cross-device chat FIXED (root cause: /my-chats returned all-time history into a week-partitioned chat AND leaked advisor/[feedback] lines — now week-scoped + filtered). ② Onboarding nudge banner for skipped-intake empty gardens. ③ Govee Platform API: already migrated (stale card). ④ Proactive env-drift push alerts (server stage bands, worst offender, 1/user/day). ⑤ Monday weekly-recap push replaces heartbeat that day. ⑥ TZ-aware: covered by learned habit-hour (computeNudgeHours). ⑦ Grower profile -> structured USER.md sections. ⑩ Reddit_Launch_Kit.md (mod DMs, Builders Request, reply discipline, ship-log, do-not list). ⑧ obj feedback btn + ⑨ replay overhaul remain on board.
DevOps
Seam Map Cleanup: Dead Code + SettingsView Extraction
Legacy Garden component (dead since Spaces shipped) deleted; SettingsView extracted to views/ with auto-scanned dependency imports; ErrorBoundary two-layer setup confirmed intentional (root in main.jsx + view-level in App); EnvChart/CoachTips dup warnings resolved as false alarms (already extracted, re-export only). App.jsx 1801->1675 lines. Deploy tagging added (-Tag param, CT git tag, rollback hint).
Core
Ship-Faster Sprint (10 board items)
Stripe webhook: unverified duplicate deleted — signature-verified handler now actually receives events. PB collection-rules audit script runs on every deploy (flags public writes, missing owner scoping, user enumeration — the #1 open security item, automated). Coach core identity = master gardener + plant doctor + grow-room engineer reading the JOURNAL first. api.js silent catches now log. Stale localStorage swept on boot. Landing: humble trust strip + "gets smarter every cycle". Founder users list paging. Community lock links the public gallery. (Sidebar collapse, replay delete/bookmarks, ringfenced admin: found already shipped by parallel agents.)
Core
REAL Sensor Integrations: SwitchBot + Home Assistant + Disk Meter
SwitchBot: official OpenAPI v1.1 (HMAC-signed) — token+secret connect, live meter discovery (Meter/MeterPlus/Hub 2/MeterPro), bind-to-space via the provider registry so manual sync, hourly poll, and heartbeat all flow automatically. Home Assistant: real webhook (secret-token URL generated in-app, validated/clamped payload, writes readings+env to journal, multi-space aware). Kasa honestly "soon" (real cloud auth is flaky — carded). All mock endpoints DELETED. Founder dashboard gains 💾 Data Drive meter (/disk-stats: USB capacity bar + pb_data/photos/replays/analytics breakdown). Tailscale carded for deploy-from-anywhere.
Trust
Pre-Launch Truth Audit + Plan v5 Corrections
Landing feature cards now claim ONLY shipped features (journal-first order; canopy/timelapse/CO2 vaporware removed; "trained on thousands" -> "reads YOUR journal"); Kasa/SwitchBot/HA integrations were MOCKS with fake "Successfully authenticated!" theater — badges honest ("soon"), fake auth replaced with roadmap-vote message, mock endpoints left unrouted in prod; /admin/* Caddy route added (2 admin modals were broken in prod); Plan v5 amended with founder corrections: journal-first identity, humble security posture until internal hardening, sensors-as-core-context.
Product
Inline 'request' buttons + replay hardening + heatmap removed
ObjFeedback component: tiny dashed "💬 request" chip that expands to a one-line ask -> feedback collection kind:object_request tagged [sensors]/[integration]/[daily-plan] — placed on Equipment Hub header, the Request-an-Integration card (whose button was DEAD — did nothing when clicked), and under Today's plan. Replay: rrweb player CSS injected (mouse cursor was invisible + wrapper could collapse = white-page look), final flush now keepalive+pagehide so the last seconds before a visitor leaves survive. Heatmap fully removed (HeatCanvas, HeatmapModal, /track-summary endpoint, Caddy route) — replay is the movie view the founder wanted; funnel tracking untouched. Also fixed mojibake arrows in Equipment Hub.
Growth
Landing + Share pages: masterful pass
LANDING: hero rewritten journal-first ("The grow journal that knows your grow"), beta chip now carries the first-200-free-for-life offer (it had been lost in the truth audit), CSS-drawn product mock in the hero (journal entries + live VPD sparkline + coach tip — no screenshots to go stale, sample data clearly product demo), new How-It-Works 3-step section (60-second start, mid-grow OK), founders-deal line at final CTA. SHARE PAGE: timeline now reads chronologically (was newest-first — stories read forward), journal-proof stat chips (days/entries/waterings/feedings/readings/photos — all real counts from the journal), "Through the weeks" horizontal photo gallery with day badges + lightbox, Genetics lineage card (name/generation/parents/type — the ancestry moat made visible), CTA reframed: "This page is just a grow journal ... it builds itself as you log" (dropped the unprovable "only grow log that..." claim). OG unfurls verified already live via /share/g/:id.
Security
Security Round 1: secrets out of git, headers, vault privacy, blocking rules gate
1) Root password REMOVED from deploy.ps1 (was hardcoded 10x in a committed file) -> gitignored .deploy.env (+.example); ROTATION STILL REQUIRED since old password is in git history + chats. 2) Caddy security headers on every response: nosniff, X-Frame-Options, Referrer-Policy, Permissions-Policy, HSTS, Server header stripped (CSP carded separately - inline-style app needs careful rollout). 3) /community-vault PRIVACY FIX: was aggregating EVERY strain including private vaults; now only strains attached to a PUBLISHED grow enter the public aggregate. 4) PB rules audit now BLOCKS deploys on criticals (public writes/missing owner scoping) instead of warn-only. 5) 34 silent catch(e){} in server.js now log to journald - the "silent failure" class from the June audit. 6) Enumeration review: /grower-grows + /community-grows + /public-grow confirmed published-only, opaque fields. ALSO: VPD/env card moved to TOP of plant page (founder request - it is the #1 check-in reason).
Product
Admin: Users/Feedback tab split + richer feedback triage
FounderModal: funnel + disk meter stay pinned on top; Users and Feedback are now tabs (with live counts). Feedback tab upgraded for beta triage: full list (was capped at 20), each item shows who sent it + date + country, and has a delete button. Object-request chips land here tagged.
Security
CSP shipped in Report-Only mode
Content-Security-Policy-Report-Only header added in Caddy: self-only defaults, allows CF insights, Google fonts, inline styles (app architecture), Amazon device img. Blocks NOTHING yet - logs violations to browser console. Promote after a clean week (csp_promote card).
UX
PPM beside pH in simple watering log
Simple Water/Flush view now captures PPM next to pH (was Feed-only).
UX
Photo-forward plant page + garden cards
Latest logged photo = plant-page hero + garden grid thumbnails.
Analytics
Env chart stage analytics (avg + time-in-range)
EnvChart now shows per-lifecycle-stage averages and % time-in-ideal-band for the active metric (VPD/Temp/RH), color-coded. Outcome-quality signal; great for show-off.
UX
Light Mode theme toggle
White/light palette via :root[data-theme=light] in index.css (green accent kept). Settings Appearance toggle; persisted to users.prefs.theme + localStorage; no-flash apply in main.jsx; cross-device via profile effect.
Bug
Replay v2 (Core Replayer) + Self-Healing Recordings + Heatmap Diagnostics
Player rebuilt on rrweb core Replayer (auto-scaled iframe, play/pause/1-2-4x speed) — the Svelte wrapper was the white-screen culprit; recordings now emit a fresh full snapshot every 2min so a lost first batch can no longer orphan a session (cause of the unplayable 703-event session); heatmap now SAYS what is wrong (HTTP errors shown, zero-data explains the day/screen/device filter). Plant ✕ restyled: top-left, fully opaque, smaller, overlapping the card corner. CT git: replays/ + analytics/ must be gitignored.
Hardware
Govee Device Picker (replace blind first-pick)
New /api/govee-devices lists the whole account; /api/govee-sync now reads a bound {device,model}; Settings picker persists prefs.goveeDevice; EnvModal Cloud Sync sends it. Back-compat fallback to first sensor. Fixes wrong-sensor reads on multi-device accounts.
Engagement
Activity-Time Daily Nudges
Daily-plan push now fires 1h before each grower's habitual (modal) log hour, computed daily from recent logs in server-local time (timezone-agnostic). Also fixed a latent bug: the old 9am nudge was dead code behind an `if hour!==10 return` guard.
Feature
Grow Environment Field (indoor/outdoor/greenhouse)
Lean Track A: environment stored on garden.setup.environment (no migration), 3-way toggle in Space settings, non-indoor chip on space card, fed into coach + Today's Plan context. Weather/frost/EnvChart-outdoor deferred to full Track A.
Onboarding
Onboarding Funnel v2
Community locked until first real plant ("your grow is the ticket in" + Add-plant CTA); intake completion lands in the Coach with persona greeting + two starter paths (💬 coach my setup / 📷 diagnose a photo); plant ✕ corner menu (archive-with-data / move-to-space / delete-forever w/ double confirm); signup keeps instant access for THAT session only — returning unverified users are signed out, auto re-sent the verification email, and gated at login. Access Codes hidden while free beta is on. SSR gate css fix (externals match subpaths).
Onboarding
Coach Personas + Chat Scroll + Replay Fix
Intake now includes "Pick your coach's personality" (Old-Timer / Lab Coat / Chill Buddy / Straight Shooter — tone only, never accuracy); coach voice respects it. Chats scroll to the TOP of the newest message. Replay player white-page fixed (CSS was dynamically imported = no-op in prod; now static) + clear message when a session lacks a full snapshot.
AI
Advisor: Expand Mode + Strategic Memory
⛶ toggle grows the advisor to near-fullscreen (persisted). Every 8 exchanges the conversation folds into app_config.advisor_memory (decisions, positions, experiments, numbers, open questions — 80-line cap) which is injected into every future session: the advisor now remembers strategy across months.
Analytics
🎬 Session Replay (Self-Hosted rrweb)
Watch real visitors like you're over their shoulder: rrweb records (ALL INPUTS MASKED at record time, cv-no-track opt-out honored, no canvas), batches to /replay (3MB/session, 40MB/day caps, 14-day auto-prune on the USB). Settings → Session Replays lists sessions with a built-in player. Built BEFORE community posting per founder request.
Growth
Autoflower Path + First-200 Lifetime + Feedback Loop
Coach & Today's Plan now know which plants are autos (no flip advice, compressed-clock priority, age-based feeding) via strain seedType. Landing: "First 200 beta growers: free for life" chip (grant executes at P3 flip from users.created order — no code needed now). Settings gains a prominent Send Feedback button (existing in-app FeedbackModal). Founder dash shows per-user AI calls today.
Bug
Wide Modals + Canonical app_config
All wide popups now kanban-width (min 1100px). Vision-model persistence suspect found: client and server read app_config UNSORTED — with a duplicate record they could read different rows; both now sort by created (oldest = canonical) and the modal warns if strays exist. Backup drill PASSED (restore verified, data.db intact).
AI
Floating Business Advisor Pill
💼 pill follows co-founders/admins across every screen; the advisor reads the business-plan brief, live funnel metrics, AND the visible text of the current page ("What's weak on this page?" works). Removed from FounderModal (now global). pb.js made SSR-safe — fixes the render-smoke window crash that blocked the last deploy.
Analytics
Deep Funnel (Geo/Device/Screens) + Business Advisor
Funnel adds visitor countries (Cloudflare CF-IPCountry header per event — no IPs stored, privacy intact), device split, top screens. New 💼 Business Advisor chat in Founder Dashboard: world-class SaaS BD coach persona grounded in the full business plan brief + LIVE funnel metrics, admin-only via existing /coach (system override is admin-gated). Persisted locally, one-concrete-action-per-answer style.

🗺 Planned 56

community
/updates roadmap: left/right scroll arrows, not just pause/play
analytics
Environment report card by stage — merge VPD-by-stage into the report card w/ stage/total pill selectors
Features
Plant Sex / Phenotype Tracking
Track male/female/unsexed per plant (feeds the cross-breeding roadmap). Public-page copy already made sex-neutral pending this.
Onboarding
More Importers (Grow with Jane, Bud, CSV) + Request-an-Importer
Beyond GrowDiaries: Grow with Jane and Bud app exports, a generic CSV + photo-folder importer as the universal fallback, and a 'request an importer' link that logs the source growers ask for.
UX
Edit Reading Logs as Structured Fields
Reading logs store temp/RH/VPD in data{} (the chart reads that, not the note). LogModal should surface those fields when editing a Reading so growers aren't editing display-only note text.
Onboarding
Photo-Folder Import
Drop a folder of dated photos -> a grow with the photos timeline (EXIF/file-date ordered). Pairs with the CSV importer for the full spreadsheet-grower migration.
UX
IPM Page Overhaul
Founder: page needs a rethink now that Pest/Disease/Spray log types are retired from the picker. Direction: IPM becomes program + photo-diagnosis centric — weekly inspect rhythm with one-tap 'inspected, all clear', Sage photo diagnosis as the primary door, issues tracked as notes/photos with severity chips, field guide kept. History view should read notes/photos, not dedicated types.
Coach
Revive OpenRouter Free Rotation
Free rotation (callWithFreeRotation) worked, then died — likely the free-model catalog drifted or account-wide free quota (50/day without $10 balance) exhausted. Diagnose via /test-llm + LLM journal on the live box; refresh the seed pool; the $10 balance (~1000/day) remains the real fix.
Coach
Streaming Coach Replies (SSE)
OpenRouter supports token streaming — the proxy currently buffers whole replies. Add SSE pass-through on /coach + incremental render in the chat so Sage types in real time.
Other
Outdoor spaces: weather API as env source (open-meteo, free, no key) — auto-log daily temp/RH for outdoor gardens + frost alert push
Other
LLMModal redesign — one card per job (Chat/Vision/Background/Advisor), each: provider pill + model input + test button + last-good line; collapse the prose; move system-prompt editor behind its own tab
Other
Photo gallery/booth on plant + public pages (growers browse late-flower/harvest pics)
Other
/updates ship-grid still broken: day-of-week labels, proper grid shading, ship log items missing
Other
Redesign remaining surfaces: PublicGrow/share, Community, Explore, /updates, /learn under promax system
Other
Founder disk meter (USB pb_data) not visible in promax settings — StorageCard shows browser storage, not server disk; surface /admin disk stat in promax admin tab
Other
BUG: 'Sharpen your coach' (DataCapturePrompts) not working — investigate handler chain
Other
BUG: Note title lost — repro path likely voice/space-activity create (LogModal save path verified correct)
Other
LogModal: log to whole garden (default) vs single plant toggle
Other
Weekly email recap never sends — install nodemailer + SMTP_* env in proxy systemd drop-in (digest is a silent no-op without it)
Other
Garden page TRUE redesign (still too familiar) — canopy board concept, not restyled cards
Growth
Resume StrainDB Crawl
StrainDB/master_scraper.py + crawler_queue.txt ready; overnight run → rerun JSON generator (facts only, no prose/pics — copyright).
Brand
Logo Premium Iteration
the founder wants more professional than current sprout mark. Ask direction: monogram / botanical line-art / custom wordmark — then iterate with her screenshots.
Bug
Kanban Admin: the founder Reports Issue
Unspecified — ASK the founder to describe/screenshot, then fix.
Bug
Local LLM Discovery Broken
/scan-local should sweep subnet for 11434 (multiple hosts) then list models per host. the founder reports not finding. Debug with her on-network.
Bug
openrouter/free Rotation Failing
Concrete :free models work; the openrouter/free meta-model errors. Next agent: capture exact error via /test-llm, consider defaulting live-chat to lastGood instead of openrouter/free.
DevOps
Local-vs-Server Source Diff
SettingsView export, ExploreGallery, InviteCard placement all diverged. One-time diff of CT100 /opt/cultivar/build/app/src vs local git to find remaining drift.
DevOps
Deploy Completion Sentinel
plink silently truncated the remote block once (false success). Add final REMOTE-DONE echo + PS check that it appeared, else FAIL.
Security
CSP: Hash Inline Scripts
Add sha256 hashes for the theme/track inline scripts, then promote CSP from report-only.
Brand
Professional Logo
Replace 🌱 emoji with a designed mark (SVG, dark+light variants, favicon set).
Growth
Rebuild Explore Gallery
ExploreGallery existed only in the diverged server copy — never in local git. Rebuild /?explore public gallery from /community-grows in local source.
UX
Roadmap Page Overhaul
/updates: show votes on cards, clickable theme filters that actually filter, labeled grid w/ fixed borders, ship-log separated from board. the founder repro notes 2026-07.
Integrations
AC Infinity Live-Login Test
One real-account verification of the new provider post-deploy.
Growth
Ship log -> public changelog auto-section
Weekly ship log currently manual post. Add a pinned “this week” section to /changelog from the same markdown so site visitors see momentum.
Growth
Founder weekly digest push
Monday recap exists for growers; founder version: signups, activations, feedback count, disk %, top source. One push, Monday 9am.
Product
Autoflower-aware Today’s Plan copy
Coach knows autos; Today’s Plan copy still stage-generic in places. Compressed-clock priorities + no flip advice for autos (plan v5 niche).
Security
Triage first blocking rules-audit run
check_rules.mjs now BLOCKS deploys on criticals. First real deploy may surface findings — triage each: fix rule in PB admin, or consciously allowlist in the script.
Growth
FreeDiagnose -> signup conversion tracking
Landing hero drives to free diagnosis; funnel does not attribute which signups came from it. Tag sid, surface in founder funnel as a source row.
Tech Debt
server.js seam 1: extract routes/sensors.js
First split per God_File_Seam_Map: Govee/SwitchBot/HA provider registry + polling into own module. Server is ~2k lines.
Security
Turn on email verification (SMTP)
Beta users currently unverified. Configure PB SMTP (founder task: pick provider), enforce instant-verification flow already built client-side.
Security
Promote CSP from Report-Only to enforced
Report-Only header ships with next deploy. Watch browser consoles ~1 week for violations (esp. PWA/service worker + photo URLs), tighten policy, then rename header to Content-Security-Policy.
Product
Nav overhaul phase 1: collapsible sidebar + breadcrumb
THE NEXT MAJOR. Claude-style collapsible sidebar, top-bar breadcrumb, extract Coach/Garden views per God_File_Seam_Map.md while restructuring. Apple/Dyson/Google bar. Dedicated session, full context.
DevOps
Tailscale for deploy-from-anywhere
Install Tailscale on the Proxmox host + founder devices so [internal-host] (deploy.ps1 target) is reachable securely off-LAN. 10-minute setup next time at home.
Security
BUG (pre-monetization): duplicate /stripe-webhook
Two handlers registered (line ~668 unverified + ~1460 signature-verified). Express serves the FIRST — the secure one is dead code. Delete the unverified handler before live Stripe keys. Zero user impact during beta.
DevOps
Backup Restore Drill
tar -tzf + test restore to /tmp. An unverified backup is a hope. Audit §6.
DevOps
Render-Smoke Test w/ Fixture Plants
Mount App against fixtures (imported/ended plant, zero-log plant, empty garden) in happy-dom; assert no throw. Would have caught today's white page. Audit §5.
DevOps
PB Schema Manifest + Drift Check
Commit db_schema.json; deploy diffs it vs live collections via admin API. Kills the silent-field-drop bug class (beta_mode, vision_*, 3 strikes). Audit §1.
Reliability
React ErrorBoundary around main view
One render bug currently white-screens the whole app (proven today). ~30 lines, highest-leverage reliability fix. Audit §1.
Security
SECURITY: Rotate PB Admin PW + OpenRouter Key
Both appeared in past session history. Rotate before public traffic.
Launch
CRITICAL: logmygrow.com SSL via Cloudflare Tunnel
Apex shows 'not secure' — visitors bounce at the browser warning before seeing the app. Add logmygrow.com (+www) as Tunnel public hostnames -> http://[internal-host]:80, proxied DNS, SSL mode Full. THE likely zero-signups cause.
DevOps
App.jsx Decomposition (Stage 2)
Extract modals, views, and components into separate files. Stages 2-6 of the refactor plan.
Monetization
Coach Product Suggestions (Affiliate)
Coach naturally suggests GRAS, grower-recommended gear via Amazon links with referral tag when relevant — never pushy, no 'featured product' UI.
Intelligence
Grow IQ Benchmarking
Aggregate strain × environment → outcome data. Show growers how they compare to peers on the same genetics.
Feature
PDF Export of Grow Logs
Clean formatted PDF export of an entire grow cycle for sharing or archival.
AI
Coach Personas (pick your mentor)
Town-AI-style intake step: choose a coach personality (e.g. Old-Timer, Lab Coat, Chill Buddy, Straight Shooter) -> stored in prefs, injected into the system prompt alongside admin instructions. Cheap to build (prompt-only), high felt-personalization. Needs care: personas must never override accuracy or the admin coaching rules.
DevOps
Sync Kanban board
Sync the local Kanban board updates.
Feature
Clone / Pollen Tracking
Distinct lifecycle for clones (no germination, trace back to mother). Pollen collection and targeted pollination events.

💡 Suggested 49

Community + founder ideas. Vote in-app to promote them.

Other
Outdoor grower mode — weather API for env readings, frost alerts, sunrise/sunset
Other
Routine templates — save 'my feed day' as one-tap macro (mix + feed + note)
Other
Multi-photo upload in one log (photo dumps after tent day)
Other
Calendar view — feeds/waterings/stage dates/IPM due on a month grid
Other
Offline logging (PWA queue) — tents have bad wifi; log offline, sync on reconnect
Other
FreeDiagnose end-CTA: 'Save this plant / Continue this chat' framing
Other
/learn pages: match promax formatting, denser information layout
Other
'Works best when you connect…' product recs via /go/amzn short links on equipment/coach surfaces
Other
Equipment page build-out (much more)
Other
IPM tab: pest/mold/mildew advisor, user-defined routine, accountability nudges
Other
Breeder Library beside Strain Vault + full StrainDB browse/add (connect-the-dots) + random explore rail
Admin
Power-User Admin Config Everywhere
Every knob configurable: heartbeat hour/caps, win-back thresholds, credit values, burst limits, digest day/hour, rage-click sensitivity, AFF_TERMS product map editor — one admin Config panel backed by JSON files like affiliate.json.
UX
Facelift Lanes (nav-overhaul session)
One-dominant-element rule, type scale, whitespace budget, green=status-only color discipline, elevation tones, motion-as-feedback, Tesla dashboard prototype behind beta toggle. Brief: Design_Ideas_2026-07-05.md.
Growth
Google Search Console + Bing Webmaster
Submit sitemap in both (Bing feeds ChatGPT browsing). 10 minutes, free, mandatory.
Infrastructure
Verify SMTP Signup Flow On Record
Add to clean-device funnel walk checklist; update known-issues.
Polish
Messaging-House Copy Pass
Align remaining "family tree" copy to journal-first during nav overhaul.
DevOps
Unify Admin Gates
One requireAdmin helper instead of two check styles.
Security
Encrypt Provider Creds at Rest
goveeKey/sbKey/acKey (incl. AC Infinity password) plaintext in prefs; server-side encryption.
AI
Coach Outcome Eval-Harness
On harvest close, compare coach advice given during the grow vs outcome grade; monthly accuracy note in the founder brief. Only possible with our outcome-labeled data.
Monetization
Paid Tier: Growth Analytics Pack
Behind beta toggle: growth-rate score, feed discipline grade, strain-vs-community benchmark, premium harvest report.
Admin
Founder Analytics v2 (bot filter)
Filter bots (UA + no-JS heuristics) from funnel, click-path + bounce views per page, UTM capture into track.js.
Integrations
Mars Hydro iControl Watch
No public API (app-only, RJ12 ecosystem). Recommend users bridge via Home Assistant webhook today; revisit when iControl opens up.
Analytics
Feed/pH Discipline Grade
Letter grade for pH-in-range % and feed cadence vs medium norms. Third member of the report-card family.
Analytics
Growth Rate Score (like the env grade)
Stretch/growth-rate letter grade from height check-ins vs strain/stage norms; sparkline on plant page + share card stat.
Security
Promote CSP from Report-Only
After a week of clean console reports, switch Content-Security-Policy to enforcing.
Security
Rotate VAPID Push Keys
Old private key lives in git history. Generate new pair, set VAPID_* env, resubscribe clients.
Community
Follow growers / gardens / plants (feed)
Network-effect engagement: follow public growers/gardens/plants, a 'following' feed of new photos/harvests/updates, optional follow notifications. Needs a follows collection + feed query. Complements the business plan's show-off surfaces & community challenges (P2 engagement, not P1).
Admin
Session replay overhaul + remove dead heatmap
Replay: skip-idle button, show current URL/page, clearer play/stop state, clickable timeline. Heatmap is non-functional -> remove once replay is solid.
Bug
BUG: chat history not syncing across devices
Coach chat persisted to localStorage cv-chat-{userId} + chats collection but does not appear on other devices. Investigate server-side chats sync/load.
AI
Grower & Garden profile overhaul (USER.md style, 200-line cap)
AI-generated Grower Profile = only about the grower; Garden Profile = only about the garden. Never mix. Each capped at 200 lines, durable facts.
UX
Nudge incomplete onboarding next session
If a user hasn't finished all onboarding steps, prompt them to complete it on their next visit.
AI
Coach name inline-edit on Coach page + identity in LLM
Move coach-name edit out of Settings to a tiny pencil on the Coach page. Send the coach name to the LLM on EVERY call so it OWNS the name and adapts, alongside onboarding persona — a SOUL.md-style identity.
Hardware
Migrate Govee to Platform API (openapi.api.govee.com)
Legacy developer-api.govee.com/v1/devices has documented gaps listing H5xxx BLE/Wi-Fi thermo-hygrometers. New Platform API (Govee-API-Key header, /router/api/v1/user/devices + /device/state) returns sensors reliably. Needed for the device picker to actually surface most users' sensors.
Engagement
Timezone-aware water reminders
Water reminders still fire at a fixed 10am SERVER time -> can hit users at 3am local. Apply the same activity-hour/timezone logic now used for daily nudges.
Growth
Grower invite / referral loop
Public subs ban tool promo (r/microgrowery declined). Build organic distribution: share-your-grow already exists -> add 'invite a grow buddy' with a reward-credit incentive on both sides.
Feature
Full Track A: Open-Meteo weather + frost
Promote environment to a real column (schema v10), add /weather (Open-Meteo, no key), location picker, frostRisk/dli helpers, cron weather writer, EnvChart outdoor rendering. Serves the ignored outdoor-cannabis segment.
Monetization
Grow Recipes Marketplace (alpha)
Power users package env targets + feed schedule + training calendar as importable recipes; revenue share turns them into stakeholders.
Monetization
Seed Bank / Gear Affiliate Links
Vault + coach already name genetics & gear; add disclosed 'where to get it' links. Neutral-platform version of the BudLabs funnel.
Monetization
Harvest Report One-Off Purchase ($4-7)
Sell the premium PDF at the peak-pride moment even to free users — tests willingness-to-pay BEFORE the beta toggle flips. Lowest-effort first revenue.
Marketing
Static Landing + app. Subdomain (LATER)
For now the auth screen IS the landing (photo-first hero). Revisit a separate marketing page at apex + app.logmygrow.com when running ads/SEO — not before.
Marketing
Founder Reddit/Forum Launch Kit
3 post templates (r/microgrowery etc.): diagnosis screenshot + 'built this' story + public grow link. Post AFTER Step D checklist is done and the funnel walk passes.
Platform
SMTP via Resend/Mailgun Free Tier
Then flip REQUIRE_EMAIL_VERIFICATION=true. Also unlocks password reset + weekly digest emails.
Marketing
Public Changelog Page
Feed from kanban Done column. 'We ship weekly' as marketing + the trust signal this audience checks before committing their grow logs.
Trust
Data Export (CSV/JSON)
Promised prominently in the business plan ('take your data') and unbuilt — now a trust/credibility gap. One settings button, two formats.
Monetization
Pricing-Abandonment Nudge
If a user opens pricing then leaves, show a friendly 'not ready to jump in with both feet? earn AI coaching now by…' re-engagement CTA.
Feature
NFC/QR Scan-to-Log
Tap phone to NFC tag on plant to open its profile and log instantly.
Monetization
Stripe Billing Integration
Live payment processing for Pro and Cultivator premium tiers.
Monetization
Reverse Trial (120-day auto-Pro)
New signups auto-start with full Pro features for one grow cycle (~120 days), then gracefully downgrade.
Monetization
Founding Member Program
First 500 signups get Lifetime Pro at $99 + Founding Grower badge + direct feedback channel.

✅ Shipped 45

Analytics
Session Replay (rrweb, self-hosted)
Watch real user sessions like a movie — cursor, scrolling, clicks. rrweb is MIT-licensed and self-hostable (fits the privacy architecture: first-party only, opt-out honored). Storage-heavy; revisit after pb_data relocation. — DONE: pb_data relocated to flash storage.
Infra
Relocate pb_data before scaling (HIGH)
pb_data ~92% full on CT 100. Move to USB/larger volume before onboarding waves, or writes start failing. — DONE: pb_data relocated to flash storage.
DevOps
CRITICAL: Relocate pb_data (92% full)
Full disk corrupts SQLite. External USB before any promotion. — DONE: pb_data relocated to flash storage.
DevOps
pb_data → Dedicated USB + Nightly Backups
Database relocated to dedicated flash drive (bind-mounted into CT 100, uid-mapped for unprivileged container); nightly 3:15am tar rotation to the host internal disk. Existential disk risk retired. Host root also freed (14G HA backup relocated path provided).
Security
SECURITY: PB Collection Rules Audit
users update rule must block role/plan/ai_credits self-edits; users CREATE rule must block role/plan injection; chats create rule must enforce [email protected].
Bug
Add app_config.beta_mode Field
Root cause of broken beta toggle: field doesn't exist, PB drops the write. One-time PB Admin field add.
DevOps
App.jsx Decomposition (Stage 3: leaf components)
Shell/Row/Stepper/TopBar/etc to components/. Then Stage 4 modals (~1,800 lines).
Business
Business Plan v4 (Full Rewrite)
Three-posture sequencing (Adoption → Habit/Data → Monetize) with the beta toggle as the documented switch; competition hardened into 4 operating edges; full monetization ladder incl. side-hustle rungs (harvest-report one-off, affiliates, recipes marketplace, sensor bundles, challenges) and the year-2 breeder data-licensing endgame. Replaces v3 + addendum (2 fewer files).
Onboarding
Hero Product Preview (Show, Don't Tell)
Auth screen now shows a live-styled Today's Plan + coach-diagnosis preview built from the app's own UI — no screenshot asset to maintain, always matches the product.
DevOps
WORKFLOW.md — File/Git/Deploy System
One source of truth (local git), Claude project = docs only, code attached per-chat, data-safe deploy procedure, git cadence + tags, runtime files gitignored on CT 100.
Business
Business Plan v3.1 Addendum
Plan reviewed vs shipped product: staleness corrected, 90-day adoption-first operating thesis added, beta toggle documented as the monetization switch, funnel-integrity rule added, metrics tightened.
Onboarding
Open-Beta Instant Signup (verification gate optional)
CORRECTION: SMTP was configured & working (Resend) — earlier 'black hole' diagnosis came from a stale doc. Change kept on merit: signups now land directly in the app (one less drop-off step); verification email still sends best-effort; flip REQUIRE_EMAIL_VERIFICATION=true in AuthScreen to restore the gate anytime.
Analytics
Usage Heatmaps (DIY, Self-Hosted)
Sampled %-coordinate tracking → /track JSONL (5MB/day cap) → admin-only /track-summary → Usage Heatmap viewer in Settings (per screen/day/breakpoint). Opt-out toggle in Preferences. Zero new infra, zero PII.
Monetization
🌱 Reward Credits (Server-Enforced)
+1/log, +1/photo (cap 5/day), +5/harvest (once per plant). Server verifies ownership/freshness/dedupe; wallet ceiling 25; /coach spends credits past the daily allowance server-side. test_credits.js guards it all.
Security
SECURITY: Signup Role/Plan Guard
Client no longer sends role/plan on signup; PB defaults own them. VERIFY PB create rule blocks role/plan injection.
Engagement
9am Daily-Plan Push Nudge
Morning push to subscribed users: 'Your plan is ready' → opens garden.
Community
Share-a-Diagnosis Loop
One-tap native share / clipboard card after every photo analysis. Diagnosis in, share out.
Onboarding
Photo-First Landing Hero
AuthScreen leads with 'Snap a photo, get an instant diagnosis' — the acquisition wedge.
AI
Today's Plan (Daily Ranked Actions)
Garden tip upgraded to 2-3 ranked daily actions with check-offs, day-cache, tap-to-coach walkthrough. The habit engine.
Bug
Beta Plant Caps Wired (12/36)
Free beta users no longer paywalled at 1 plant; AI bulk-add capped too.
Security
SECURITY: /coach Server-Verified Auth
PB token verified server-side; anonymous 401; plan/role from PB not client; provider/model overrides admin-only; test_security.js added.
DevOps
App.jsx Decomposition (Stage 2: useCoach)
Coach state extracted to hooks/useCoach.js; runtime-beta aware; counter syncs on reload. App.jsx 4,076 → ~3,250.
Hardware
Govee Cloud API Integration
API key stored in users.prefs.goveeKey; Cloud Sync in EnvModal; /api/govee-sync proxy endpoint.
Platform
Web Push Notifications
Service worker, VAPID keys, /push-subscribe /push-unsubscribe /push-test endpoints; toggle in Settings.
Monetization
Stripe Webhook Skeleton
/stripe-checkout and /stripe-webhook endpoints in place. Needs live keys.
SEO
Public Leaderboards / SEO Pages
/leaderboard endpoint + strain-keyed SEO pages for organic traffic.
DevOps
Git Version Control
Automated git commits on deploy with changelog tracking.
DevOps
In-App Kanban Board
Crowdsourced roadmap board with voting for all logged-in users.
UX
Roadmap & Share Page Polish
4-column kanban board, collapsible changelog, premium public share page redesign.
UI
Collapsible Sidebar
Claude-style collapsible sidebar with icon/hover states.
UX
Hash Routing
Survive page reload/back-button via URL hash router.
UX
Resilient Intake & Skip Setup
Make intake skip safe and infer temperature unit from locale.
Bug
Timeline Photo 404s
Fix PB file URL generator path formatting for photos.
UX
Derived VPD Ideal Bands
Derive ideal VPD from temp/RH to prevent contradictions.
AI
AI Grow Coach
Context-aware AI coach with photo diagnosis, grow memory, citation, daily counter.
Feature
Public Share Pages
Shareable public grow pages with QR codes and community feed.
Feature
Spaces / Tents (Gardens)
Multiple grow spaces per user with independent environments, embedded plant cards, inline env steppers.
Core
Structured Activity Logging
11 log types (Water/Feed/Flush/Foliar/Spray/Pest/Disease/Transplant/Defoliation/Stage/Note), Simple/Advanced toggle, health 1-5, photos.
UX
Life Arc & Stage Dates
Segmented progress bar from stage_dates with STAGE_TYPICAL fallback. Harvest countdown.
Core
Premium Harvest Report
Full harvest/cure capture with premium analytics report at cycle end.
Core
Strain Vault & Genetics
Full genetics tracking: generation, lineage, I/S split, seeds-made date, photo. Locked when plant links.
Community
Community Vault & Grows
Anonymized aggregate strain stats + public community grows feed.
Monetization
Upgrade Modal (Pro vs Cultivator)
Clear pricing modal with Pro $69/yr vs Cultivator $29/mo, promo-code link.
Admin
Founder Dashboard
Manage users/roles, premium codes, LLM settings, notification bubble for new feedback.
Platform
PWA + Data Export
Installable PWA manifest + JSON data export.