"Build and operate high-converting B2B service company websites for agencies managing multiple clients. Use for: local service businesses (recovery, towing, legal, HVAC, security, logistics, etc.) targeting institutional or commercial clients. Covers the full agency lifecycle: PRD intake, design brainstorm, AI image generation, component build, Google Maps, lead capture form, CRM integration (HubSpot, GoHighLevel, Salesforce, Pipedrive, Zapier), UTM lead tracking, GA4/Meta Pixel/GTM analytics, multi-client project management, and client handoff."
Resources
49Install
npx skillscat add ottoo3x-star/seven-skin-7 Install via the SkillsCat registry.
B2B Service Website — Agency Framework
Builds high-converting, visually polished websites for local/regional service companies and manages the full agency lifecycle: from client intake through CRM hookup, lead tracking, analytics, and monthly reporting.
Primary KPIs: Form submissions (repo/service orders) and inbound phone calls.
Workflow Overview
- Agency Setup — Register client, establish project naming, configure secrets
- Intake — Extract all brand, content, CRM, and tracking info from the client PRD
- Design — Brainstorm 3 approaches, select one, commit fully
- Images — Generate 4 AI images in parallel before writing any code
- Build — Scaffold all 13 components in order
- Tracking — Add UTM capture, conversion events, and analytics pixels
- CRM — Upgrade to full-stack if needed, wire form to CRM and email
- Polish — Mobile CTA bar, scroll animations, map
- Deliver — Checkpoint, publish, client handoff
Step 0: Agency Project Setup
Before starting any client work, establish the project identity:
Client slug: lowercase-hyphenated, e.g. done-rite-recovery, apex-hvac
Static assets path: /home/ubuntu/webdev-static-assets/{client-slug}/ — isolate each client's images here before uploading to CDN.
Agency client registry: Maintain /home/ubuntu/agency-clients.md with one row per client (slug, name, domain, status, CRM, checkpoint ID). Update after every delivery.
Read references/agency-workflow.md for the full multi-client project structure, white-labeling setup, and delivery modes (one-time vs. retainer vs. landing page sprints).
Step 1: Intake Checklist
Extract from the client PRD. Fields marked † are required for CRM/tracking setup.
| Category | Field | Example |
|---|---|---|
| Identity | Company name | Done Rite Recovery Services |
| Identity | Industry vertical | recovery / hvac / legal / logistics |
| Contact | Phone (formatted + digits-only) | (708) 418-4315 / 7084184315 |
| Contact | info@company.com | |
| Contact | Address | 3056 E 170th St, Lansing, IL |
| Brand | Primary color | Signal red / navy / cobalt |
| Content | Hero headline | "Fast, Compliant Vehicle Recovery..." |
| Content | Trust bar items (4 max) | 25+ Years · Licensed · CFPB · 24/7 |
| Content | Services list (6 max) | Name + 1-sentence description |
| Content | Differentiators (5 max) | Fleet, tech, certifications, coverage |
| Content | Testimonials (3) | Quote + author + company |
| Coverage | Service area cities | For map + footer |
| Coverage | Google Maps URL | Business listing URL |
| CRM† | Platform | HubSpot / GHL / Salesforce / Zapier |
| CRM† | Lead notification email | Where to send new lead alerts |
| Tracking† | GA4 Measurement ID | G-XXXXXXXXXX |
| Tracking† | Meta Pixel ID | 15-digit number |
| Tracking† | GTM Container ID | GTM-XXXXXXX (optional) |
| Tracking† | Call tracking number | CallRail forwarding number |
Step 2: Design Brainstorm
After webdev_init_project, create ideas.md with 3 distinct design approaches. Each must define: Design Movement, Color Philosophy (OKLCH values), Layout Paradigm, Typography System, Signature Elements, and Animation style.
Select ONE approach and state it to the user. Document the chosen style at the top of every component file.
Anti-patterns: purple gradients, excessive rounded corners, uniform card grids, Inter-only typography, centered hero layouts.
Read references/design-patterns.md for proven palettes, font pairings, and layout paradigms by industry vertical.
Step 3: AI Image Generation
Generate 4 images in a single parallel call before writing any components.
| Slot | Content | Ratio | Usage |
|---|---|---|---|
| Hero | Fleet/equipment at night, dramatic lighting, city backdrop | 16:9 | Hero background |
| Technology | Key tech close-up (LPR, equipment, tools) | 4:3 | Why Us section |
| Facility | Aerial/wide shot of facility, lot, or office | 16:9 | Storage/About section |
| Agent/Team | Professional staff portrait, cinematic | 3:4 | Contact panel background |
Prompt formula: [subject] + [environment/time] + [lighting style] + [mood] + [camera angle] + [quality descriptors]
Store CDN URLs immediately. Use .webp variants in all <img> tags.
Step 4: Component Build Order
Build in this sequence (matches PRD scroll flow):
index.css— brand tokens, fonts, utility classes (.btn-primary,.section-label,.pulse-dot)index.html— Google Fonts link, meta description, analytics pixel scriptsNavbar.tsx— sticky dark, logo, nav links, phone + CTAHeroSection.tsx— full-bleed image, headline, trust badges, animated stat countersSocialProofSection.tsx— testimonials, trust stats bar, CTA stripServicesSection.tsx— service cards grid (6 max), scroll reveal, CTA stripWhyUsSection.tsx— differentiator bullets, stacked images, CTA stripStorageSection.tsx— full-bleed facility image with overlay contentCoverageSection.tsx— Google Maps + service area list, CTA stripContactSection.tsx— split-panel lead capture form with success stateFooter.tsx— address, phone, links, compliance badges,pb-16 lg:pb-0StickyMobileCTA.tsx— mobile-only sticky bottom bar (phone + form)Home.tsx— assemble all sections, calluseUTM()hook
Read references/component-specs.md for detailed layout, conversion patterns, and code snippets for each component.
Step 5: Conversion Patterns (Apply on Every Build)
CTA repetition: Dark panel strip with primary CTA button at the bottom of every major section.
Phone number: In navbar (desktop), hero, contact panel, footer, and mobile sticky bar. Always href="tel:DIGITSONLY". Add onClick={() => trackPhoneClick(phone)} from lib/trackConversion.ts.
Form fields: Company Name, Contact Name, Phone, Email (required), Asset Info, Last Known Location, Notes. Show a success confirmation state after submission.
Trust signals: Compliance/certification badges in hero trust bar AND footer. Use Shield, CheckCircle, Award, Clock from lucide-react.
Stat counters: Animate on scroll-into-view using IntersectionObserver. See useCountUp hook in references/component-specs.md.
Step 6: UTM Tracking Setup
Add hooks/useUTM.ts and call useUTM() in Home.tsx to capture and persist UTM parameters in sessionStorage on page load. Merge stored UTM data into every form submission payload.
Add lib/trackConversion.ts with trackFormSubmission() and trackPhoneClick() functions that fire to GA4, Meta Pixel, and GTM dataLayer simultaneously.
Read references/lead-tracking.md for the full hook implementation, source attribution logic, phone call tracking (CallRail/DNI), lead scoring, and session replay setup.
Step 7: Analytics Pixels
Add tracking scripts to client/index.html based on client's provided IDs:
- GA4:
gtag.jsscript with Measurement ID — markgenerate_leadand phone click as Key Events - Meta Pixel: Standard pixel with
PageViewon load,Leadon form submit,Contacton phone click - GTM: Replace direct scripts with GTM container if client manages their own tags
Store all IDs as VITE_ prefixed secrets in Settings → Secrets.
Read references/analytics-setup.md for full script snippets, GTM trigger configuration, Conversions API (server-side), and the monthly client reporting template.
Step 8: CRM Integration
Decision: Does the client need real form delivery (email + CRM sync)?
- Yes → Run
webdev_add_feature("web-db-user")to unlock backend routes and database - Zapier only → No upgrade needed; fire a
fetchPOST to the Zapier webhook URL from the frontend
After upgrading, create the leads table (schema in references/crm-integration.md), add a POST /api/leads backend route that: saves to DB → sends email notification → syncs to CRM asynchronously.
Supported CRM platforms: HubSpot, GoHighLevel, Salesforce (Web-to-Lead), Pipedrive, Zapier webhook.
Read references/crm-integration.md for platform-specific API code, the Resend email notification pattern, lead deduplication logic, and the native-form-vs-embed decision guide.
Step 9: Google Maps Integration
Use the built-in MapView from @/components/Map.tsx — no API key needed.
import { MapView } from "@/components/Map";
const handleMapReady = (map: google.maps.Map) => {
map.setCenter({ lat: LAT, lng: LNG });
map.setZoom(10);
new google.maps.Marker({ position: { lat: LAT, lng: LNG }, map });
new google.maps.Circle({
map, center: { lat: LAT, lng: LNG }, radius: 80000,
strokeColor: "#DC2626", fillColor: "#DC2626", fillOpacity: 0.08,
});
};
<MapView onMapReady={handleMapReady} className="w-full h-full" />Step 10: Delivery & Handoff
- Run
webdev_save_checkpointwith a message listing all implemented sections and integrations - Verify the client handoff checklist in
references/agency-workflow.md(content, technical, conversion, delivery) - Attach
manus-webdev://{version_id}in the result message - Update
/home/ubuntu/agency-clients.mdwith the new client row - Suggest 3 next steps: connect CRM (if not done), update placeholder content, publish via the Publish button
Reference Files
| File | When to Read |
|---|---|
references/design-patterns.md |
Step 2 — design brainstorm (palettes, fonts, layouts) |
references/component-specs.md |
Step 4 — building any of the 13 components |
references/agency-workflow.md |
Step 0 — project setup, multi-client management, handoff checklist |
references/crm-integration.md |
Step 8 — CRM platform code, DB schema, email notifications |
references/lead-tracking.md |
Step 6 — UTM hooks, conversion events, call tracking, lead scoring |
references/analytics-setup.md |
Step 7 — GA4/Pixel/GTM scripts, client reporting, KPI benchmarks |