Skip to content

Clients

Lazer's client engagements. Each client has its own subdirectory containing all engagement-specific material — onboarding, architecture, integrations, runbooks, incidents, references — plus a clients/ subdirectory for that client's own clients (the end customers Lazer's client serves).

Active engagements

  • Avoca — voice-agent platform for auto-service shops. AutoOps CRM integration. Sandy's primary engagement.
  • EAS — EAS Tire & Auto, the auto-service enterprise Avoca answers for. Avoca's client, not Lazer's; promoted to a sibling tree because it's the engagement's centre of gravity and the tenant/platform split only works if both halves are first-class.

Pattern

The /clients/<lazer-client>/ directory holds everything Lazer-client-specific. Inside it:

  • onboarding/, architecture/, concepts/, how-to/, reference/, incidents/, solutions/, proposals/ — engagement material at the Lazer-client level.
  • crms/<crm>/ — CRM-specific material (e.g., AutoOps, HouseCall Pro).
  • integrations/ — non-CRM integrations.

The tenant exception

A Lazer-client's own client normally lives at /clients/<lazer-client>/clients/<their-client>/. EAS is the deliberate exception: it sits at /clients/eas/ because separating platform from tenant is the organising idea of the Avoca engagement, and nesting the tenant three levels deep would bury it.

Three layers, two trees:

LayerWhere
Avoca platform (CRM-neutral)/clients/avoca/
AutoOps integration (the vendor contract — survives a tenant change)/clients/avoca/crms/autoops/
EAS tenant (shops, team ids, credentials, prompt, reports)/clients/eas/

The test for which tree a fact belongs in: would it still be true if EAS churned and a different AutoOps shop signed?

Anything that's truly cross-client (patterns, methodologies, Lazer-side practices not tied to a specific engagement) lives at the toolkit root, not under /clients/.