This page documents all major changes, features, and improvements made to thetoolboxpro.com and the Toolbox Pro platform. Most recent changes first. Migration numbers reference the Alembic revision applied during each deploy.
2026-04-29 — Location Page Content Enrichment (Migrations 87, 88)
- Migration 88: Rewrote content_json for 14 canonical location pages with neighborhood-specific prose, full 10-item services list, Why-Choose section, and 6 city-specific FAQs. Pages updated: Chandler, Phoenix, Gilbert, Mesa, Tempe, Scottsdale, Ahwatukee, Queen Creek, Paradise Valley, Sun Lakes, Apache Junction, Fountain Hills, Cave Creek, East Valley hub
- Migration 87: Fixed title tags and meta descriptions on 17 pages — Chandler title was only 24 chars (critical SEO issue); Arizona Exemption title was 100 chars (cut off in search); all major location pages got neighborhood-specific meta descriptions with city names and sub-areas
2026-04-29 — Location Page Unification (Migrations 83, 84, 85, 86)
- Migration 85: All 16 canonical location pages brought to a consistent structure (page_type=location, FAQ section, Why-Choose section, correct meta). 8 pages (Gilbert, Mesa, Tempe, Scottsdale, Ahwatukee, Queen Creek, Paradise Valley, Apache Junction) converted from page_type=seo_article to page_type=location
- Migration 85: Duplicate pages handyman-in-chandler-az and handyman-in-phoenix-az redirected to canonical URLs
- Migration 85: Fixed h1 bug: Phoenix showed 'Phoenix, AZ, AZ' — corrected. Fixed h1 bug: Chandler showed 'Chandler Premier Handyman Service' — corrected
- Migration 84: East Mesa + San Tan Valley: 170+ seo_article pages created per city (powers 'Other Services' section on location pages)
- Migration 83: Shortened double-redirect chains — handyman-services-in-gilbert/ahwatukee/tempe now point directly to canonical -az slug. East Valley added to footer Service Areas
- Migration 86: Rewrote site-changelog page entirely in English (previous version had accidentally inserted German text)
2026-04-29 — New Pages (Migrations 81, 82)
- Migration 81: Arizona Handyman Exemption guide (/arizona-handyman-exemption) — explains ARS § 32-1121, what a handyman can legally do without an ROC license, and when a licensed contractor is required
- Migration 82: East Mesa and San Tan Valley location pages created with full content (Eastmark, Cadence, Red Mountain, Las Sendas; Johnson Ranch, Encanterra, San Tan Heights)
- Migration 82: Site changelog page (this page) added to footer
- Migration 80: Fixed 8 empty location page redirect chains — all handyman-in-*-az target pages verified 200
2026-04-28 — Calendar Fixes + Live Booking Form (Migrations 79)
- Restricted ALL_SLOTS to 6 service slots (8 AM, 10 AM, 12 PM, 2 PM, 4 PM, 5:45 PM) — prevented phantom non-service-hour slots appearing in booking form
- Fixed 5:45 PM slot being silently dropped by the backend validator
- Fixed days blocked in pro portal still appearing available to customers
- Booking form: 30-second live polling for available slots and dates on all steps
- Booking form: tab-focus re-fetch — instantly refreshes when customer returns to the tab
- Booking form: guard prevents booking a slot that was just blocked mid-flow
- Calendar: blocked slots shown visually with diagonal stripe + ⛔ in all 3 portals (Pro, Admin, Partner)
- Calendar: reason input field for blocking slots (max 500 characters)
- Calendar: editable reason field inline in blocked slots table (Pro portal)
- Calendar: immediate visual refresh after block/unblock actions
- Fixed partner providers being included in platform booking availability
- Fixed phantom slots showing during API loading state in booking form
2026-04-27 — SEO: Canonical URLs + GBP Posts (Migrations 67–73)
- Migration 70: nginx www → non-www 301 redirect at HTTPS level; canonical tags set to non-www throughout all 18 Python/HTML files; footer city links corrected to canonical slugs
- GBP Posts automation: full stack — OAuth, DB tables, APScheduler cron, admin UI, 11 API endpoints (pending Google API approval)
- Fixed demo.thetoolboxpro.com media 404 (nginx location block order)
- Fixed admin JS crash on GBP 502 response
- Removed duplicate push_indexing_batch.py with hardcoded DB password
2026-04-27 — SEO: 11 Service Pages + 3 New Cities (Migrations 74–78)
- Migration 74/78: 11 new service pages — /services hub now shows 22 services in 4 groups
- Migration 75: 3 new cities: Fountain Hills, Cave Creek, Sun Lakes — each with location hub page
- Migration 75: 513 seo_article pages generated for the 3 new cities
- Migration 76: FAQ sections added to all new city pages (8 questions each)
- Migration 77: Removed all 'licensed' claims — replaced with Arizona handyman exemption language throughout
- Migration 77: Footer: 3 new city links, corrected guides URL, travel surcharge notes
2026-04-25 — Calendar Refactor (Migration 64)
- Pro + Partner portal: full calendar grid with Day / Week / Month views
- Click/drag slot selection in Day and Week view → Action Bar (Block / Unblock / Cancel)
- Tabs: 📅 Calendar · 📋 Bookings · 🕐 Availability
- Migration 64: booking_hours_mode setting: core (8–17) vs. extended (7–21)
- Removed drag-to-block bug from calendar grid
- Stripe health check 3× per day via APScheduler
2026-04-22 — Partner Subdomains + Security
- Partner subdomain provisioning: provision_subdomain.sh with nginx config + SSL + /render/ rewrite
- Dead button auto-capture stack: 4-layer system (browser extension → API → DB → admin review)
- Deploy smoke test gates (1–7) for automated verification
- _HOST_CACHE TTL reduced to prevent 404 on newly provisioned subdomains
- Gmail dot-trick attack defense
- Referral self-stacking defense
2026-04-21 — Deploy Automation
- Container auto-runs Alembic migrations on start — no manual migration step after deploy
- All new migrations use IF NOT EXISTS guards for idempotency
2026-04-19 — Infrastructure Cleanup
- Resolved 37-commit server drift — all live edits committed, single source of truth restored
- nginx symlink fix: deploy path and nginx root aligned
2019 – 2026-04-18 — Platform Foundation
- FastAPI backend, SQLAlchemy ORM, Alembic migrations, PostgreSQL
- Stripe Connect: customer deposits, pro payouts, revenue share
- Auth: JWT + cookie sessions, Google OAuth, phone verification
- Pro portal: calendar, availability, bookings, documents, invoices
- Partner portal: multi-provider management, subdomain routing
- Admin dashboard: platform settings, user management, GBP integration
- Booking SPA: thetoolboxpro.com/book — React, embedded via iframe on main site
- Mobile app: React Native (Expo removal in progress)
- Google Calendar sync: OAuth, event creation, conflict detection
- CMS: page editor, renderer, location / service / seo_article page types
Frequently Asked Questions
How do I book a service?
Book online at thetoolboxpro.com/book. Choose your service, pick a time slot, and pay a deposit to confirm. You'll receive a text confirmation and reminder.
What areas do you serve?
We serve Phoenix East Valley including Chandler, Gilbert, Mesa, Tempe, Scottsdale, Ahwatukee, Queen Creek, and Apache Junction.
Do you offer free estimates?
We provide upfront pricing before starting any job. For complex projects, we offer an on-site assessment for $65 which is applied to the job cost if you proceed.
How much does handyman service cost?
Most services start at $65. We charge per job, not per hour, so you know the price before we start — no surprise invoices.
How quickly can I get an appointment?
Same-day appointments are available with a $115 deposit. Most standard appointments are available within 1-3 business days. Book at thetoolboxpro.com/book.
Are you licensed and insured?
The Toolbox Pro LLC carries general liability insurance. We operate within Arizona's handyman exemption and can provide a certificate of insurance on request.
Do you charge by the hour or by the job?
We charge per job, not per hour. You get a fixed price upfront. This protects you from open-ended hourly billing that can escalate unexpectedly.
Can I get same-day service?
Yes. Same-day service requires a $115 deposit at booking. We'll confirm your appointment time by text. Standard bookings require only a $65 deposit.