From 87f39eb49efc65f961302f1d20a505dcf5e54fdc Mon Sep 17 00:00:00 2001 From: Alejandro Veras Date: Tue, 6 Oct 2026 12:09:26 -0400 Subject: [PATCH] Add five consulting service pages Business Optimization, Supply Chain, Cybersecurity, Education and Fractional Leadership, with copy verbatim from the content documents and the same layout as the existing service pages (shared blocks in src/service.mjs). Adds them to the Consulting menu (now two columns) and footer, restores the Consulting page links to them, and fixes a mobile overflow from card glows that were not anchored to their cards. Co-Authored-By: Claude Opus 5.5 --- README.md | 8 +- build.mjs | 2 +- src/layout.mjs | 10 ++ src/pages/business-optimization.mjs | 77 ++++++++++++++ src/pages/consulting.mjs | 9 +- src/pages/cybersecurity.mjs | 86 ++++++++++++++++ src/pages/education.mjs | 82 +++++++++++++++ src/pages/fractional.mjs | 149 ++++++++++++++++++++++++++++ src/pages/supply-chain.mjs | 77 ++++++++++++++ src/service.mjs | 132 ++++++++++++++++++++++++ static/assets/styles.css | 13 ++- 11 files changed, 638 insertions(+), 7 deletions(-) create mode 100644 src/pages/business-optimization.mjs create mode 100644 src/pages/cybersecurity.mjs create mode 100644 src/pages/education.mjs create mode 100644 src/pages/fractional.mjs create mode 100644 src/pages/supply-chain.mjs create mode 100644 src/service.mjs diff --git a/README.md b/README.md index 6c2d88b..f78fa41 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Sitio de Dylan Mazzei, Founder & Operator. HTML estático generado con un script ``` src/layout.mjs Layout compartido: , nav, footer, iconos y helpers src/pages/*.mjs Una página por archivo (texto literal del documento de contenido) +src/service.mjs Bloques compartidos de las páginas de servicios de Consulting static/ Se copia tal cual a dist/ (CSS, JS, imágenes, favicon) build.mjs Genera dist/ + sitemap.xml + robots.txt + 404.html ``` @@ -19,6 +20,11 @@ build.mjs Genera dist/ + sitemap.xml + robots.txt + 404.html | `/consulting/` | `src/pages/consulting.mjs` | | `/consulting/marketing/` | `src/pages/marketing.mjs` | | `/consulting/business-setup/` | `src/pages/business-setup.mjs` | +| `/consulting/business-optimization/` | `src/pages/business-optimization.mjs` | +| `/consulting/supply-chain/` | `src/pages/supply-chain.mjs` | +| `/consulting/cybersecurity/` | `src/pages/cybersecurity.mjs` | +| `/consulting/education/` | `src/pages/education.mjs` | +| `/consulting/fractional/` | `src/pages/fractional.mjs` | | `/contact/` | `src/pages/contact.mjs` | | `/press/` | `src/pages/press.mjs` | @@ -36,6 +42,6 @@ Importa el repo en Vercel. `vercel.json` ya define el build (`npm run build`), l ## Pendientes de contenido - **Press:** confirmar el titular exacto del artículo de Gulf Magazine y su URL (`FEATURE` en `src/pages/press.mjs`). -- **Páginas fuera del alcance actual:** Playbook, Poetry, Fractional Roles, Business Optimization, Supply Chain, Cybersecurity y Education no forman parte del sitio. Sus secciones se muestran sin botón; si se crean esas páginas, se añade el botón con su texto original del documento. +- **Páginas fuera del alcance actual:** Playbook y Poetry no forman parte del sitio. Sus secciones se muestran sin botón; si se crean esas páginas, se añade el botón con su texto original del documento. - **Calendario:** poner el link real de agenda en `SITE.calendar`. - **Formulario de contacto:** hoy abre el cliente de correo con el mensaje prellenado. Para recibirlo directo hay que conectar un servicio (Formspree, Resend, etc.). diff --git a/build.mjs b/build.mjs index f62d166..815054a 100644 --- a/build.mjs +++ b/build.mjs @@ -7,7 +7,7 @@ import { page, eyebrow, btn } from './src/layout.mjs'; const root = dirname(fileURLToPath(import.meta.url)); const out = join(root, 'dist'); -const pages = ['home', 'about', 'portfolio', 'consulting', 'marketing', 'business-setup', 'contact', 'press']; +const pages = ['home', 'about', 'portfolio', 'consulting', 'marketing', 'business-setup', 'business-optimization', 'supply-chain', 'cybersecurity', 'education', 'fractional', 'contact', 'press']; await rm(out, { recursive: true, force: true }); await mkdir(out, { recursive: true }); diff --git a/src/layout.mjs b/src/layout.mjs index f28c72e..172b849 100644 --- a/src/layout.mjs +++ b/src/layout.mjs @@ -95,6 +95,11 @@ const NAV = [ { label: 'Consulting', desc: 'Find the Real Problem. Then Fix the Right One.', href: '/consulting/', icon: 'compass' }, { label: 'Marketing & AI Search', desc: 'Get Found Where Attention Is Moving.', href: '/consulting/marketing/', icon: 'search' }, { label: 'Business Setup', desc: 'Start With Fewer Expensive Mistakes.', href: '/consulting/business-setup/', icon: 'building' }, + { label: 'Business Optimization', desc: 'Find What Growth Made Messy.', href: '/consulting/business-optimization/', icon: 'gauge' }, + { label: 'Supply Chain', desc: 'Know What Happens Before It Reaches the Customer.', href: '/consulting/supply-chain/', icon: 'truck' }, + { label: 'Cybersecurity', desc: 'Find the Exposure Before Someone Else Does.', href: '/consulting/cybersecurity/', icon: 'shield' }, + { label: 'Education', desc: 'Make the Strategy Survive the Classroom.', href: '/consulting/education/', icon: 'edu' }, + { label: 'Fractional Leadership', desc: 'When the Business Needs an Owner, Not Another Recommendation.', href: '/consulting/fractional/', icon: 'users' }, ], }, { label: 'Press', href: '/press/' }, @@ -160,6 +165,11 @@ function footer() {
  • Consulting
  • Marketing & AI Search
  • Business Setup
  • +
  • Business Optimization
  • +
  • Supply Chain
  • +
  • Cybersecurity
  • +
  • Education
  • +
  • Fractional Leadership
  • diff --git a/src/pages/business-optimization.mjs b/src/pages/business-optimization.mjs new file mode 100644 index 0000000..e877cd6 --- /dev/null +++ b/src/pages/business-optimization.mjs @@ -0,0 +1,77 @@ +import { icon } from '../layout.mjs'; +import { heroBlock, coversBlock, whoBlock, deliveryBlock, operatorBlock, faqBlock, closingBlock, faqSchema } from '../service.mjs'; + +const faqs = [ + ['How is business optimisation different from hiring a fractional COO?', ['Business optimisation is a defined diagnostic and improvement engagement.', 'A fractional COO takes ongoing ownership of an operating function. If the diagnostic shows that the business needs continuing operational leadership rather than a focused optimisation sprint, we can discuss whether a fractional role makes more sense.']], + ['Will AI automation replace my staff?', ['That is not the assumption.', 'We look for work that is repetitive, manual, slow, or unnecessarily dependent on people before deciding whether AI or another form of automation belongs there.', 'Sometimes technology is the answer. Sometimes the process itself needs to change first.']], + ['My business is small. Is optimisation premature?', ['Not necessarily.', 'Optimisation becomes useful when operational friction is affecting margin, time, customer experience, decision-making, or the founder’s ability to focus.', 'Company size alone does not determine that.']], + ['What do you need from me to start?', ['Enough access to understand how the business actually operates.', 'Depending on the diagnostic, that can include financial information, software and vendor costs, team structure, existing processes, reporting, and conversations with the people closest to the work.']], +]; + +const visual = `
    ${icon('brace')}operations.log
    +
    $ find the friction→ time→ margin→ visibility→ unnecessary founder attention$ prioritise the fixes✓ what deserves attention first✓ what can wait$ make it lighter
    `; + +export default { + path: '/consulting/business-optimization/', + title: 'Business Optimisation Consulting | Dylan Mazzei', + description: 'Business optimisation consulting for founders focused on margins, processes, team structure, AI automation, reporting, and operational efficiency.', + schema: [faqSchema(faqs)], + body: + heroBlock({ + id: 'bo-hero', + crumb: 'Business Optimization', + kicker: 'BUSINESS OPTIMIZATION CONSULTING', + h1: 'Better Operations Create Better Businesses.', + lead: 'Revenue can grow while margins tighten, processes multiply, teams get harder to manage, and the founder somehow ends up with more on their plate.', + paras: [ + '*That doesn’t always mean the business needs more sales.', + 'Sometimes it needs a closer look at where the money, time, people, and decisions are going.', + 'My teams and I find the friction, determine what is actually creating it, and make the business easier to operate as it grows.', + ], + visual, + }).replace('