- index.html: JSON-LD Organization + Services ItemList schema, Plausible
Analytics, canonical link
- app.jsx: dynamic document.title + meta description/OG per hash route;
service detail routing (services/:id → ServiceDetailPage)
- pages.jsx: ServiceDetailPage with hero, metric, use cases (3 per
service), process timeline, highlights, and CTA; registered on window
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Testimonials section on home page (4 client quotes with service tags)
- Pricing page (#/pricing) — 3 tiers: Starter $499 / Growth $1499 / Enterprise custom
- Blog page (#/blog) — 4 articles with full content and category tags
- Nav: Services | Pricing | Blog | Timeline | Contact (conversion-focused)
- Contact form now POSTs to dashboard API (real email via Resend)
- PricingPage + BlogPage exposed as window globals
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Live Demo button appears when svc.demo exists,
View Repo button appears when svc.repo exists.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kept HEAD version: active link highlighting + #/ hash routes
Discarded origin: simpler version without active states
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- mergeServices() maps API data (demoUrl, gitRepo, isActive) onto local static data
- sessionStorage cache (5 min TTL) like nav links
- GitHub button becomes a link when gitRepo is set
- Falls back to PORTFOLIO_DATA.services if API is unavailable
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Merge mobile-responsive hamburger nav with dynamic API links
- Add ChatboxWidget from dashboard public API
- Nav fetches links from /api/public/links with sessionStorage cache
- Chatbox checks business hours, proxies to AI via dashboard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add ChatboxWidget component (src/chatbox.jsx) with business hours check
- Update nav.jsx to fetch links dynamically from /api/public/links
- Wire ChatboxWidget into app.jsx
- Add chatbox.jsx script tag to index.html
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>