SEO Client Workflow — Skill (/seo-client) + Intake Auto-Ingest SEO Client Workflow — Layers 2+3 Architecture Status: Active (2026-06-03) Driver: Asmir SEO partner clients (first = Smoke House Hadžići) MCs: #102865 (skill), #102866 (intake ingest) Owner: Skillforge (docs), CodeCraft (ingest), FlowForge (launchd) Architecture Overview The SEO client workflow is structured in 3 layers: Layer 1: SEO Readiness Portal tool — local/cloud dual-mode audit, GBP/local-first for no-website clients (MC #102861, see GBP/Local-First Audit Mode ) Layer 2: /seo-client skill — generates 5 Bosnian DRAFT deliverables from intake Layer 3: Intake auto-ingest — parses inbound email into portal workspace Layer 2: /seo-client Skill Location ~/.claude/skills/seo-client/SKILL.md Purpose Given a client SEO intake (from SEO Readiness Portal workspace data OR pasted partner email), produce 5 review-ready DRAFT deliverables in Bosnian. Never auto-send. All outputs are local drafts under /tmp/alai/seo-client// for human review before delivery. Inputs Portal workspace: /path/to/portal/.data/workspace.json (client, site, intake objects) Pasted intake email: numbered questionnaire text (like Asmir partner emails) Email ID: --email-id (fetches via email-inbox.js , read-only) Deliverables (5 Bosnian DRAFTS) gbp-content.md — GBP optimization content: Business description (max 750 chars, keyword-rich, natural BS) Primary + 2-3 secondary categories (from GBP taxonomy) Suggested attributes (wheelchair accessible, parking, etc.) 3-5 sample GBP posts (seasonal offers, service updates, local events) Review-ask template (polite, brief, BS) competitor-benchmark.md — Competitor analysis: For each competitor (up to 3): GBP completeness, review count/rating, categories, notable strengths Client gap analysis + quick wins Actionable recommendations Note: No live GBP API scraping (Phase 10+); manual research or intake-provided competitor URLs client-report.md — Client-facing SEO readiness report (BS): Executive summary (current status + top opportunity) Goals (from intake: target location, priority services, conversion action) Current status table (Technical SEO, On-page, Content, Local SEO, Conversion — RAG status) Top findings (P0/P1/P2 prioritized) Recommended action plan (Week 1-2, Month 1, Month 2-3) What we need from client (access, approvals, content) Measurement (KPIs: organic traffic, GBP interactions, contact forms) Disclaimer: SEO does NOT guarantee ranking/traffic Evidence grounding: portal audit findings (if website exists) or GBP checklist (if GBP-first mode) client-email-draft.md — Draft client email (BS): Subject line suggestion Summary: what was reviewed, top findings Immediate asks: missing access, info gaps, priorities Next steps: what ALAI/partner will do after client responds Disclaimer: readiness review only, no ranking/traffic guarantee Mark as DRAFT — never auto-send owner-gbp-claim-guide.md — Step-by-step GBP claim + add-ALAI-as-Manager guide (BS): Go to business.google.com Search for business name + location Claim existing listing (if unclaimed) Verify ownership (postcard/phone/email) Complete profile: hours, photos, services, description Add ALAI/partner as Manager (Settings → Users → Add user, role: Manager) Notify ALAI/partner when access granted Screenshot placeholders: [Screenshot: GBP claim button] Guardrails No ranking/traffic guarantees: forbidden words enforced ( ranking|traffic|guarantee|guaranteed|first page|top results ) Drafts only: all outputs are local files; NO auto-send, NO email trigger Optional Lexicon BS check: route to Lexicon (Dževad Jahić) for linguistic QA if requested MAX TURNS: 30 (skill execution timeout) No fabricated metrics: no Search Console/Analytics data without verified access No hardcoded competitor data: always from intake or prompt user Workflow Modes GBP_FIRST mode: no website detected ( intake.hasWebsite === false OR site.canonicalUrl empty) Focus: owner-gbp-claim-guide.md as P0 deliverable Skip website-specific audit findings All deliverables optimized for GBP WEBSITE_AND_GBP mode: website exists Run portal audit: npm run audit -- --client Parse audit findings for client report evidence Include both website + GBP recommendations Evidence Bundle On completion, creates /tmp/alai/seo-client//DELIVERABLES-MANIFEST.md with: File checklist (all 5 deliverables) Validation: PASS (no forbidden words) Linguistic QA: PENDING | REVIEWED_BY_LEXICON Approval: PENDING_HUMAN_REVIEW Next steps: human review required before client delivery Registration Registered in ~/.claude/skill-registry.db : - Name: seo-client - Triggers: /seo-client, "seo client workflow", "process seo intake", "generate seo deliverables", "asmir seo tip" - Domain: seo-operations - Level: 3 - Max Turns: 30 - Status: active Layer 3: Intake Auto-Ingest Location ~/business/ALAI-Holding-AS/products/SEO-Readiness-Portal/scripts/ingest-intake-email.ts Purpose Parse inbound client SEO intake email (numbered questionnaire format) and append a DRAFT Client+Site+Intake record to the portal workspace. Idempotent via ingest ledger. Read-only email access; no email send. Usage # Ingest specific email by ID npm run ingest:intake -- --email-id # Scan pending ACTION emails (list only) npm run ingest:intake -- --scan # Dry-run mode (no writes) npm run ingest:intake -- --email-id --dry-run # Auto-run audit after ingest (deferred; not implemented in current draft) npm run ingest:intake -- --email-id --run-audit Workflow Email fetch: Shell-out to node ~/system/tools/email-inbox.js show (read-only, no network calls) Parse: Extract numbered intake fields: Business name, location, services, languages Target markets (local/regional/national) Competitors (names or URLs) GBP status (claimed/unclaimed, manager access yes/no) Website status (has website yes/no, URL if yes) Analytics/Search Console status Priority services, conversion goals Workspace append: Create draft Client, Site, Intake objects: client.status = "lead" intake.status = "submitted" intake.hasWebsite = inferred from question "Do you have a website?" site.canonicalUrl = empty if no website (triggers GBP-first mode in skill) Idempotency: Dedup by source email ID via .data/ingest-ledger.json : Schema: { schemaVersion: 1, updatedAtUtc, ingestedEmailIds: { [emailId]: { emailId, clientId, siteId, intakeId, ingestedAtUtc } } } If email ID already in ledger → skip (NOOP) Output: JSON summary to stdout: Email ID, client ID, site ID, intake ID Client name, status, target markets Site domain (or "no website — GBP/local mode") Intake status, hasWebsite, gbpClaimed, gbpManagerAccess, priorityServicesCount, competitorsCount Guardrails DRAFT only: status = "lead"/"submitted" — no active/onboarded promotion No audit auto-run: unless --run-audit flag (not implemented; manual run via portal) No email send: read-only email access, no outbound mail No production mutation: writes only to local workspace file ( .data/workspace.json ) + ledger Launchd Wrapper (Deferred) Template at scripts/launchd/com.alai.seo-intake-ingest.plist : - NOT installed (manual trigger for now) - When enabled: periodic scan for ACTION emails, auto-ingest eligible intake questionnaires - Safe + logged (writes to ~/logs/seo-intake-ingest.log ) End-to-End Flow Intake email arrives (from Asmir or direct client) → tagged ACTION by email-inbox.js rules Layer 3 ingest: npm run ingest:intake -- --email-id → creates draft client in portal workspace Portal GBP audit: CEO or automated task runs audit (Layer 1) → evidence collected Layer 2 skill: /seo-client generates 5 Bosnian DRAFT deliverables CEO review: human reviews drafts at /tmp/alai/seo-client// Send: CEO or agent manually copies content to client email / BookStack client page Limitations / Deferred Live GBP API: Google OAuth + Places API deferred pending CEO approval (Phase 10+) Launchd not installed: manual trigger for intake ingest (no auto-scan yet) No auto-send: all deliverables require human review gate No Search Console/Analytics API: access verification deferred Single language: Bosnian (BS) only; EN/DE deferred No BookStack page auto-creation: manual copy-paste for client-facing docs Related Documentation Layer 1: GBP/Local-First Audit Mode SEO Operations Playbook: ~/business/ALAI-Holding-AS/sales/seo-automation/SEO-OPERATIONS-PLAYBOOK.md Client Report Template: ~/business/ALAI-Holding-AS/sales/seo-automation/seo-client-report-template.md Bosnian Linguistic QA: ~/system/rules/bosnian-linguistic-validation.md Evidence MC #102865: /seo-client skill authored at ~/.claude/skills/seo-client/SKILL.md MC #102866: Intake ingest script at scripts/ingest-intake-email.ts Test fixture: Asmir email #8792 (Smoke House Hadžići) Skill registration: ~/.claude/skill-registry.db Status: DRAFT (no deploy, no auto-send, no production data mutation)