# 2026-02-14 Daily Log

## Email System Setup (COMPLETE)
- **Scripts created:** `scripts/send-email.py` (SMTP), `scripts/check-email.py` (IMAP)
- **Credentials:** Moved to `.env.email` (was hardcoded, now secure)
- **Security rules:** Documented in TOOLS.md
  - Only @tilt.ie and @marketingnetwork.ie allowed
  - Impersonation protection: verify DOMAIN not just display name
  - All email requests logged to `logs/email-log.json`
  - Suspicious emails forwarded to Rob for approval
- **Monitoring crons:** Every 5min (business hours), 30min (off hours)

## BD Dashboard Improvements
- Live at: https://tilt-bd-dashboard.pages.dev
- **268 prospects total** (258 from Excel + 10 Molly recommendations)
- Added robots.txt + noindex meta tag
- Top Sectors now clickable (filters to that sector)
- Leads sorted by potential score (funding, multi-location, awards)
- Clickable website URL on each prospect
- Location/county shown next to company name
- News button shows "Why this company" + "Visit Website" link

## Process Improvements
- Installed Feature File + Progress Log pattern at `projects/`
- Created `QA_CHECKLIST.md` for pre-delivery quality gates
- Template at `projects/_template/` for new projects

## Pending
- Unread email [54] from Rob "New business" (Feb 14 12:15 GMT) - needs reading and response

## Learnings
- Email credentials should NEVER be hardcoded in scripts
- Always verify email sender DOMAIN for impersonation protection
- Quality gates (QA checklist) prevent sharing broken links

## Afternoon Session (14:00-18:00)

### Tradeify Updates
- Scraped 454 new tradespeople from Golden Pages (expanded scraper across Ireland)
- Migrated 207 new records to Supabase (247 were duplicates). Total now: 544 tradespeople
- Carpenters category not found on Golden Pages with standard slug
- Removed all emojis from Tradeify dashboard (Rob's request)
- Updated dashboard stats to reflect 544 tradespeople

### Major Business Model Change: Commission → Subscription
- Opus 4.6 strategic review recommended killing the commission model (10% + 5%)
- New model: Freemium + Subscription (Free / Premium €39/mo / Pro €79/mo)
- Rob approved the change after detailed pricing analysis
- Updated across: Tradeify app, dashboard, BUSINESS-PLAN.md, ROADMAP.md, MEMORY.md
- Created pricing decision doc at projects/tradeify/pricing-model-decision.md
- Revenue projections: Year 1 €84.6K, Year 2 €588K, Year 3 €1.76M
- Stripe Connect/escrow no longer needed - replaced with simple Stripe Billing
- Contact details gated: free listings hide phone/email, Premium shows full details
- Tradesperson registration flow being built (/register route)
- Full docs alignment in progress (11 files being updated)

### Opus 4.6 Upgrade
- Claude Opus 4.6 released (1M context, 128K output)
- Added to OpenClaw via config.patch (models.mode: merge)
- Set as primary model for Max (main session)
- Sonnet 4 stays as sub-agent default
- Claude Code should be used for all coding tasks (not Sonnet)

### OpenClaw Updated
- Updated from v2026.2.12 to v2026.2.13
- Key fixes: write-ahead delivery queue, auto-reply threading, image-only messages

### Multi-Agent Workflow
- Demonstrated sub-agent spawning to Rob (restaurant research demo)
- Rob wants project-specific Telegram group chats (not separate bots)
- One Max bot in multiple groups, each group = separate session
- Proposed 5 project chats: Tradeify HQ, Tilt BD, Tilt Clients, Tilt Marketing, Tilt Lab
- Rob created "Tradeify" group but Max bot needs Group Privacy disabled via BotFather

### Virtual Office Demo
- Built pixel art office visualization at tilt-mission-control.pages.dev/office.html
- Friends characters with working/idle animations
- Added "Live Project URLs" section to Mission Control Projects tab

### Skill Audit
- Reviewed claude-seo skill (AgriciDaniel) - HIGH risk, rejected by Rob
- Unknown publisher, shell execution + browser automation + undisclosed data exfiltration

### Model Hierarchy (confirmed by Rob)
- Max (main): Opus 4.6 - strategy, coordination
- Sub-agents (general): Sonnet 4 - research, content, batch work
- Developer: Claude Code - all coding tasks

### Key Decisions
- No emojis anywhere in Tradeify (or any project)
- Always reference which agent is working on what task
- Keep Tradeify dashboard updated after every change
- goplaces (Google Places CLI) added to tasks list for later setup

## Late Afternoon (17:30-18:15)

### Competitor Flow Research
- Researched 6 competitor platforms (OnlineTradesmen, Tradesmen.ie, Checkatrade, Rated People, MyBuilder, Bark)
- OnlineTradesmen + Checkatrade use flat subscription (successful 15-20yr models)
- Tradesmen.ie/Bark use credit-per-lead (more complaints)
- Rated People: hybrid membership + per-lead, max 3 competitors per job
- Recommendation: follow OnlineTradesmen model (flat sub, unlimited access) with free tier having delayed/capped leads

### Contact Detail Gating Model (confirmed by Rob)
- Free tradesperson: profile visible + searchable but phone/email HIDDEN
- Premium/Pro: full contact details shown to customers
- Customers always free, no registration needed to browse
- Upgrade nudge: "12 customers searched for plumbers in your area. 0 could contact you."

### Tradesperson Registration
- Currently no way for new tradespeople to register (only claim existing scraped listings)
- Building /register route with simple form: name, trade, location, phone, email
- After registration: prompt to upgrade to Premium

### Claude Code Auth Issue
- Claude Code (v2.1.27) installed at /usr/local/bin/claude
- Requires OAuth browser login - can't authenticate headlessly
- Need Rob to run `claude` in terminal once to sign in
- For now, using Sonnet sub-agents for coding tasks

### Desktop Responsiveness
- Rob noted tradespeople will use desktop in offices
- Need desktop version alongside mobile
- First attempt timed out (task too large)
- Split into focused task: Layout, Search grid, Home, ChatBot sidebar
- Sonnet working on it now

### Documentation Alignment
- Found 11+ files still referencing old commission model
- Sonnet agent updating: PARITY-CHECKLIST, SCHEMA-DRAFTS, BACKEND-PHASE-PLAN, EDGE-FUNCTIONS-PLAN, BUSINESS-PLAN (deep sections), ROADMAP, STACK-INVENTORY, database-schema, SETUP-GUIDE, EDGE-FUNCTION-MAP, ADMIN-PANEL-SPEC
- Legacy files intentionally not touched (backup HTML, scraper data, presentations)

### Rob's Standing Rules (reinforced)
- NO EMOJIS anywhere (caught one on homepage, removed)
- Always reference which agent is working on what
- Keep dashboards updated after every change
- Developer tasks should use Claude Code (once auth is set up)

## Evening Session (18:00-20:15)

### Desktop Responsive Design
- Built desktop responsive version of Tradeify
- Top nav bar with text-only links (no icons on desktop), logo clickable to home
- 80% width rule for all page content on desktop (1024px+)
- Trade category icons centred on desktop
- 3-column tradesperson grid on home page, 2-column on search
- HandyHelper chatbot as sidebar on desktop
- Key CSS fix: `minmax(0, 1fr)` prevents grid overflow, media queries were being stripped by build - fixed by adding base rule before media query
- Layout background changed to bg-slate-950 across all pages for consistency

### Register / List Your Business Page (major rebuild)
- Single-step flow: as user types business name, auto-checks database for matches (debounced 400ms)
- If match found, shows inline "Claim" button
- Selectable pricing tiers with radio buttons (Free/Premium/Pro)
- Premium pre-selected by default (Rob's request - encourage paid signups)
- Mobile: form only, pricing shown on post-registration success page
- Desktop: form left, pricing tiers right (side-by-side)
- Pro tier increased from EUR 79 to EUR 149/month (dedicated support costs more)
- Removed "Guaranteed 10 leads" claim (can't promise at launch)
- Added: Priority leads, dedicated account manager, custom profile branding

### Account Page
- Added sign in/sign up forms (email + password) - were missing entirely
- Toggle between sign in and sign up modes

### Contact Detail Gating Wording
- Changed "Contact details available to Premium members" to "Contact details shown for verified tradespeople"
- Customers are always free - the wording was implying customers needed Premium

### Admin Panel Built
- Full 8-tab admin at /admin route (hidden from nav)
- Tabs: Dashboard, Businesses, Users, Claims, Reviews, Analytics, Communications, System
- Login: Supabase auth, whitelisted to robert.doran@tilt.ie and max@tilt.ie
- Businesses: full CRUD, edit modal, bulk actions, CSV import/export, subscription tiers, gift free Premium, suspend
- Claims: approve/reject
- Reviews: approve/flag/delete
- Fixed save bug: was trying to write subscription_tier and gifted columns that don't exist yet
- Changed Hourly Rate label from GBP to EUR
- Rob's admin account created: robert.doran@tilt.ie / TradeAdmin2026!

### Twilio Setup
- Account SID: ACff84c9b5f63d1ac1315485ffa784afb1
- Auth Token stored at .env.twilio (chmod 600)
- Org SID: ORd86f10313a746f5c628f5653db62ff6d
- Status: Active, Trial mode
- Owner: Robert Doran
- Decision: Park Twilio until ready to go live (costs per month)
- Plan: SMS verification (mobiles), voice PIN (landlines), SendGrid for transactional emails
- Payment = auto-verification added to Stripe Billing spec

### Verification Strategy (confirmed)
- Tier 1: Card payment = auto-verified badge (simplest)
- Tier 2: Phone call with PIN via Twilio (works for landlines + mobiles)
- Tier 3: Email/document verification (already in claim flow)

### Business Analytics (F027)
- Not built yet, added to feature list
- Spec: profile views, search appearances, contact reveals, enquiry count, trends
- Needs Supabase analytics table + frontend tracking events

### Feature Tracker Updated
- F022-F030 added to projects/tradeify/features.json
- 20 done, 4 blocked, 5 pending

### Claude Code
- v2.1.27 installed but needs OAuth browser login
- Can't authenticate headlessly
- Rob's Claude account at 86% weekly usage, Sonnet at 2%
- Parking Claude Code until account upgrade sorted

## Late Evening Notes

### Claim Flow -- Paid Verification Path
- Rob confirmed: add "Subscribe and pay with business card" as instant verification option in claim flow
- This becomes the 5th verification method alongside email/phone/website/document
- Strongest conversion point -- tradesperson is already engaged in claiming their listing
- Build when Stripe Billing is integrated (F028)

### Links Shared by Rob (to review)
- https://www.shopclawmart.com/blog/post-bridge-review-multi-platform-social-media-scheduler (Post Bridge - social media scheduler)
- https://x.com/kaostyl/status/2022570801459867733 (X/Twitter post - need to check content)
- http://keep.md/ (note-taking tool?)
