Boulder County Dryer Vent Booking
Reserve la limpieza de conductos de secadora en Boulder County mediante MCP ($129/$169). Confirmación en 1 día hábil.
Servidor MCP alojado
npx add-mcp 'https://keeps-pty-ultimately-payroll.trycloudflare.com/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
Boulder County Dryer Vent
Sitio público de marketing y embudo de reservas para Boulder County Dryer Vent (nunca "Co."). HTML/CSS/JS estático sin dependencias, construido por un pequeño script de Node y publicado en GitHub Pages.
En vivo: https://bouldercountydryervent.com/ · Consulta STATUS.md para el estado del despliegue.
Stack
- HTML plano, una hoja de estilos (
src/static/css/site.css), dos scripts pequeños (site.js,book.js). Sin framework, sin paquetes npm. scripts/build.mjs(cero dependencias, Node ≥ 20) renderiza plantillassrc/pages/*.mjscon datos desrc/data/site.mjsendist/.- Diseño: el sistema "Industry" de la exportación de Claude Design — Barlow Condensed sobre Barlow, marcos de plano con marcas de esquina
+, brasa#E8632B/ tinta#1F2A37/ arena#F6F1EA. - Despliegue:
.github/workflows/pages.ymlcompila en cada push amainy publicadist/(fuente de Pages = GitHub Actions). El dominio personalizado está configurado en Settings → Pages del repositorio; no se necesita archivoCNAMEpara despliegues con Actions. No cambies los registros MX/SPF/DKIM/DMARC de IONOS.
Desarrollo local
node scripts/build.mjs
python -m http.server 8787 -d dist
Abre http://localhost:8787/. Cualquier servidor estático apuntando a dist/ funciona.
Dónde vive cada cosa
| Cambio | Archivo |
|---|---|
| Teléfono, correo, dirección, horario, entidad legal | src/data/site.mjs → site |
| Precios, tarjetas de precio, nota de llenado de ruta | src/data/site.mjs → prices, priceCards |
| Ciudades, códigos postales, texto por ciudad, posiciones de pines en el mapa | src/data/site.mjs → towns |
| Preguntas frecuentes, pasos del servicio, advertencias, barra de confianza | src/data/site.mjs |
| Dónde se entregan los formularios de reserva/contacto | src/data/site.mjs → forms.endpoint (ver abajo) |
| Baliza de analítica propia | src/data/site.mjs → analytics.endpoint (colector Ava /hit; vacío = desactivado) |
Enlaces de navegación, encabezado, pie de página, banda CTA, <head> / schema | src/templates/layout.mjs |
| Marcado de páginas | src/pages/*.mjs |
| Publicaciones del blog | src/content/blog/*.md (frontmatter: title, slug, date, category, readTime, image, imageAlt, description) |
| Fotos | src/static/img/ (fotos de servicio) y src/static/img/cities/ (paisajes urbanos con licencia — ver CREDITS.md) |
Rutas
/, /dryer-vent-cleaning/, /pricing/, /book/, /areas/, /areas/{city}-co/, /blog/, /blog/{slug}/, /reviews/, /about/, /contact/, /legal/terms/, /legal/privacy/, /credits/, /agents/, 404.html, sitemap.xml, robots.txt.
Las rutas simples /terms/ y /privacy/ redirigen a las páginas /legal/.
Las URLs heredadas /{city}-co-dryer-vent-cleaning/ redirigen a las páginas /areas/.
Flujo de reservas y formularios
/book/ es un flujo de tres pasos: dos preguntas de elegibilidad → precio publicado ($129 estándar, $169 techo / segundo piso / recorrido de más de ~15 pies) → solicitar una hora. No hay servidor, por lo tanto:
- Predeterminado (
forms.endpointvacío): enviar la solicitud de reserva o el formulario de contacto compone un correo asite.emailen el dispositivo del visitante con todos los campos completados, y la pantalla de confirmación muestra el resumen de la solicitud más el número de teléfono como respaldo. - Recomendado: crea un endpoint de formulario gratuito (Formspree o similar), pega la URL en
forms.endpointy reconstruye. Las solicitudes se envían entonces como JSON y llegan a tu bandeja de entrada sin que intervenga la aplicación de correo del visitante. - Espacios de cita reales:
book.jsya renderiza botones de espacio cuandowindow.BCDV.slotsno está vacío. Conectaslotsensrc/templates/layout.mjs(el objetocfg) a una fuente de horarios real cuando exista. Hasta entonces, el flujo muestra el estado honesto de calendario vacío.
Precios
| Precio | Cuándo |
|---|---|
| $129 | Estándar — terminación en pared lateral a nivel del suelo, recorrido de menos de ~15 pies |
| $169 | Difícil — terminación en techo o segundo piso, recorridos largos o con curvas |
| $109 / año | Plan anual después de la primera visita |
| $99 | Llenado de ruta — solo operaciones, nunca en el sitio público |
Teléfono en todas partes: (866) 494-6590. NAP del cliente: 6395 Gunpark Dr, Suite J, Boulder, CO 80301.
Legal
Frost River Capital, LLC d/b/a Boulder County Dryer Vent. Identificador de nombre comercial 20268139028. Avisos: 2369 S. Trenton Way Suite P, Denver, CO 80231. ava@frostrivercapital.com. Cancelación con ≥ 24 h: reembolso. Cancelación con < 24 h: crédito por 90 días.
Reglas de contenido
- Sin reseñas, calificaciones, conteos de reseñas ni biografías de propietarios inventados.
/reviews/y la banda de reseñas del inicio se mantienen honestas hasta que los clientes escriban. - Sin horarios de cita de relleno. El calendario está vacío hasta que exista capacidad real.
- El blog es solo educación para el cliente.