Boulder County Dryer Vent Co. — public site, booking funnel, and ops (Frost River Capital)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Documented (README)
- !No standard license detected
git clone https://github.com/RobleusCaesar/boulder-county-dryer-ventResumen de Tools
# Boulder County Dryer Vent
Public marketing site and booking funnel for **Boulder County Dryer Vent** (never "Co."). Static HTML/CSS/JS with no dependencies, built by a tiny Node script and published to GitHub Pages.
**Live:** https://bouldercountydryervent.com/ · See [STATUS.md](./STATUS.md) for deploy state.
## Stack
- Plain HTML, one stylesheet (`src/static/css/site.css`), two small scripts (`site.js`, `book.js`). No framework, no npm packages.
- `scripts/build.mjs` (zero dependencies, Node ≥ 20) renders `src/pages/*.mjs` templates with data from `src/data/site.mjs` into `dist/`.
- Design: the "Industry" system from the Claude Design export — Barlow Condensed over Barlow, blueprint frames with `+` corner marks, ember `#E8632B` / ink `#1F2A37` / sand `#F6F1EA`.
- Deploy: `.github/workflows/pages.yml` builds on every push to `main` and publishes `dist/` (Pages source = GitHub Actions). The custom domain is configured in repo **Settings → Pages**; no `CNAME` file is needed for Actions deploys. Do not change IONOS MX/SPF/DKIM/DMARC.
## Local development
```bash
node scripts/build.mjs
python -m http.server 8787 -d dist
```
Open http://localhost:8787/. Any static server pointed at `dist/` works.
## Where things live
| Change | File |
| --- | --- |
| Phone, email, address, hours, legal entity | `src/data/site.mjs` → `site` |
| Prices, price cards, route-fill note | `src/data/site.mjs` → `prices`, `priceCards` |
| Towns, zips, per-town copy, map pin positions | `src/data/site.mjs` → `towns` |
| FAQs, service steps, warnings, trust bar | `src/data/site.mjs` |
| Where booking/contact forms are delivered | `src/data/site.mjs` → `forms.endpoint` (see below) |
| First-party analytics beacon | `src/data/site.mjs` → `analytics.endpoint` (Ava collector `/hit`; empty = off) |
| Nav links, header, footer, CTA band, `<head>` / schema | `src/templates/layout.mjs` |
| Page markup | `src/pages/*.mjs` |
| Blog posts | `src/content/blog/*.md` (frontmatter: `title`, `slug`, `date`, `category`, `readTime`, `image`, `imageAlt`, `description`) |
| Photos | `src/static/img/` (service photos) and `src/static/img/cities/` (licensed town scenery — see `CREDITS.md`) |
## Routes
`/`, `/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`.
Bare `/terms/` and `/privacy/` redirect to the `/legal/` pages.
Legacy `/{city}-co-dryer-vent-cleaning/` URLs redirect to the `/areas/` pages.
## Booking flow and forms
`/book/` is a three-step flow: two eligibility questions → published price (`$129` standard, `$169` roof / second story / run over ~15 ft) → request a time. There is no server, so:
- **Default (`forms.endpoint` empty):** submitting the booking request or contact form composes an email to `site.email` on the visitor's device with every field filled in, and the confirmation screen shows the request summary plus the phone number as a fallback.
- **Recommended:** create a free form endpoint (Formspree or similar), paste the URL into `forms.endpoint`, and rebuild. Submissions are then POSTed as JSON and land in your inbox without the visitor's mail app being involved.
- **Real appointment slots:** `book.js` already renders slot buttons when `window.BCDV.slots` is non-empty. Wire `slots` in `src/templates/layout.mjs` (the `cfg` object) to a real schedule source when one exists. Until then the flow shows the honest empty-calendar state.
## Prices
| Price | When |
| --- | --- |
| **$129** | Standard — ground-floor side-wall termination, run under ~15 ft |
| **$169** | Difficult — roof or second-story termination, long or bending runs |
| **$109 / year** | Annual plan after the first visit |
| **$99** | Route-fill — **ops only**, never on the public site |
Phone everywhere: **(866) 494-6590**. Customer NAP: **6395 Gunpark Dr, Suite J, Boulder, CO 80301**.
## Legal
Frost River Capital, LLC d/b/a Boulder County Dryer Vent. Trade name ID 20268139028. Notices: 2369 S. Trenton Way Suite P, Denver, CO 80231. ava@frostrivercapital.com.
Cancel ≥ 24h: refund. Cancel < 24h: credit for 90 days.
## Content rules
- No fabricated reviews, ratings, review counts, or owner bios. `/reviews/` and the home reviews band stay honest until customers write in.
- No placeholder appointment times. The calendar is empty until real capacity exists.
- Blog is customer education only.
Lo que la gente pregunta sobre boulder-county-dryer-vent
¿Qué es RobleusCaesar/boulder-county-dryer-vent?
+
RobleusCaesar/boulder-county-dryer-vent es tools para el ecosistema de Claude AI. Boulder County Dryer Vent Co. — public site, booking funnel, and ops (Frost River Capital) Tiene 0 estrellas en GitHub y su última actualización registrada es del 2026-09-14.
¿Cómo se instala boulder-county-dryer-vent?
+
Puedes instalar boulder-county-dryer-vent clonando el repositorio (https://github.com/RobleusCaesar/boulder-county-dryer-vent) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar RobleusCaesar/boulder-county-dryer-vent?
+
Nuestro agente de seguridad ha analizado RobleusCaesar/boulder-county-dryer-vent y le ha asignado un Trust Score de 62/100 (tier: OK). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene RobleusCaesar/boulder-county-dryer-vent?
+
RobleusCaesar/boulder-county-dryer-vent es mantenido por RobleusCaesar. La última actividad registrada en GitHub es del 2026-09-14, con 1 issues abiertos.
¿Hay alternativas a boulder-county-dryer-vent?
+
Sí. En ClaudeWave puedes explorar tools similares en /categories/tools, ordenados por popularidad o actividad reciente.
Despliega boulder-county-dryer-vent en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/robleuscaesar-boulder-county-dryer-vent)<a href="https://claudewave.com/repo/robleuscaesar-boulder-county-dryer-vent"><img src="https://claudewave.com/api/badge/robleuscaesar-boulder-county-dryer-vent" alt="Featured on ClaudeWave: RobleusCaesar/boulder-county-dryer-vent" width="320" height="64" /></a>Más Tools
A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.
An AI skill that provides design intelligence for building professional UI/UX across multiple platforms.
🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman
CLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies
The fastest, litest AI Gateway. Rust core with Python SDK. Call 100+ LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]
Use Claude Code, Codex, Pi, and OpenCode (and 6 other harnesses) for free (1.3B+ free tokens) from your terminal, app, IDE, or phone, and now from the browser with native browser sessions (multi-harness + multi-model) like OpenClaw (voice supported + ToS friendly)