feat: initialize marketing site from groombook/groombook docs/
Migrated marketing site content from groombook/groombook/docs/ to this dedicated org-level GitHub Pages repo. Site will publish at groombook.github.io. Files migrated: - index.html (landing page) - mobile-groomers.html - blog/launch.html, blog/why-we-built.html - getting-started/index.html - _config.yml (updated with explicit url) Refs: GRO-195 Co-Authored-By: Paperclip <noreply@paperclip.ing> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+20
@@ -0,0 +1,20 @@
|
||||
title: Groom Book
|
||||
description: Open source, self-hostable pet grooming business management and CRM.
|
||||
url: https://groombook.github.io
|
||||
theme: minima
|
||||
plugins:
|
||||
- jekyll-seo-tag
|
||||
- jekyll-feed
|
||||
defaults:
|
||||
- scope:
|
||||
path: ""
|
||||
values:
|
||||
layout: default
|
||||
footer:
|
||||
links:
|
||||
- label: GitHub
|
||||
url: https://github.com/groombook/groombook
|
||||
- label: Issues
|
||||
url: https://github.com/groombook/groombook/issues
|
||||
- label: Discord
|
||||
url: https://discord.gg/groombook
|
||||
@@ -0,0 +1,130 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Introducing Groom Book — Launch Announcement</title>
|
||||
<meta name="description" content="We built the CRM you've been waiting for if you're tired of paper files, spreadsheets, and overpriced salon software.">
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; line-height: 1.7; color: #333; max-width: 700px; margin: 0 auto; padding: 20px; }
|
||||
header { background: #1a1a2e; color: #fff; padding: 60px 20px; margin: -20px -20px 40px; text-align: center; }
|
||||
header h1 { font-size: 2rem; margin-bottom: 15px; }
|
||||
header .date { color: #a0a0a0; font-size: 0.9rem; }
|
||||
h2 { color: #1a1a2e; margin: 40px 0 15px; font-size: 1.5rem; }
|
||||
h3 { color: #333; margin: 25px 0 10px; font-size: 1.2rem; }
|
||||
p { margin-bottom: 15px; }
|
||||
ul, ol { margin: 15px 0 15px 25px; }
|
||||
li { margin-bottom: 8px; }
|
||||
.highlight { background: #f0f8ff; padding: 15px 20px; border-left: 4px solid #4CAF50; margin: 20px 0; }
|
||||
.code-block { background: #1a1a2e; color: #fff; padding: 20px; border-radius: 6px; overflow-x: auto; font-family: 'Courier New', monospace; font-size: 0.9rem; margin: 20px 0; }
|
||||
.code-block code { color: #a0a0a0; }
|
||||
.code-block .prompt { color: #4CAF50; }
|
||||
a { color: #4CAF50; text-decoration: none; }
|
||||
a:hover { text-decoration: underline; }
|
||||
footer { margin-top: 60px; padding-top: 30px; border-top: 1px solid #eee; color: #666; font-size: 0.9rem; }
|
||||
.back-link { display: inline-block; margin-bottom: 20px; color: #666; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>Introducing Groom Book</h1>
|
||||
<p class="date">March 2026</p>
|
||||
</header>
|
||||
|
||||
<a href="../" class="back-link">← Back to Home</a>
|
||||
|
||||
<p class="highlight"><strong>We built the CRM you've been waiting for if you're tired of paper files, spreadsheets, and overpriced salon software that spies on you.</strong></p>
|
||||
|
||||
<p>Pet grooming is a $7B+ industry in the US alone. Independent groomers and small salons make up the majority of that market — yet the software options for them are genuinely terrible:</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>Legacy desktop software</strong> that costs $200/month and runs on Windows 98</li>
|
||||
<li><strong>SaaS platforms</strong> that take 30% of your booking revenue and lock you into their ecosystem</li>
|
||||
<li><strong>Generic scheduling tools</strong> never designed for the realities of grooming (breed-specific timing, coat types, anxious pets, no-show deposits)</li>
|
||||
</ul>
|
||||
|
||||
<p>We built Groom Book because we got tired of watching groomers pay through the nose for software that doesn't understand their business.</p>
|
||||
|
||||
<h2>What Groom Book Does</h2>
|
||||
|
||||
<p>Groom Book is a complete pet grooming business management and customer relationship platform — fully open source and self-hostable.</p>
|
||||
|
||||
<h3>For daily operations:</h3>
|
||||
<ul>
|
||||
<li>Appointment scheduling with calendar management for single or multi-groomer salons</li>
|
||||
<li>Client and pet profiles with grooming history, coat type, behavior notes, and preferences</li>
|
||||
<li>Service catalog with pricing, duration, and breed-specific templates</li>
|
||||
<li>Online booking portal your clients can use 24/7</li>
|
||||
<li>POS, invoicing, and receipt generation including tips</li>
|
||||
<li>Automated SMS and email reminders so you stop chasing no-shows</li>
|
||||
<li>Reporting dashboard: revenue, utilization, trends — no spreadsheets required</li>
|
||||
</ul>
|
||||
|
||||
<h3>For transparency and control:</h3>
|
||||
<ul>
|
||||
<li>Staff impersonation: managers can view the customer portal as any client, with full audit logs</li>
|
||||
<li>You own your data. Full stop.</li>
|
||||
<li>PWA — install it on your phone, works offline for the mobile groomer on the road</li>
|
||||
</ul>
|
||||
|
||||
<h2>Why Open Source?</h2>
|
||||
|
||||
<p><strong>First, trust.</strong> Groomers have been burned by SaaS companies that raise prices overnight, get acquired, or simply shut down. With Groom Book, your data lives on your server. There's no vendor lock-in, no surprise pricing changes, and no company that can pivot away from your use case.</p>
|
||||
|
||||
<p><strong>Second, customization.</strong> Every grooming business is different. Mobile groomers have different needs than salon chains. Breed specialists have different workflows than general-purpose groomers. Open source means you — or any developer you hire — can adapt Groom Book to fit your business, not the other way around.</p>
|
||||
|
||||
<h2>Tech Stack</h2>
|
||||
|
||||
<p>Groom Book is built for developers who want to self-host or contribute:</p>
|
||||
<ul>
|
||||
<li><strong>Backend:</strong> Hono (TypeScript, Node.js) — fast, lightweight, edge-ready</li>
|
||||
<li><strong>Frontend:</strong> React 19 + Vite + PWA</li>
|
||||
<li><strong>Database:</strong> PostgreSQL via CNPG + Drizzle ORM</li>
|
||||
<li><strong>Auth:</strong> OIDC via Authentik (or disable auth for local dev)</li>
|
||||
<li><strong>Infra:</strong> Kubernetes + Flux GitOps, or single-server Docker Compose</li>
|
||||
</ul>
|
||||
|
||||
<h2>Getting Started</h2>
|
||||
|
||||
<p><strong>Self-host in 5 minutes:</strong></p>
|
||||
|
||||
<div class="code-block">
|
||||
<code><span class="prompt">$</span> git clone https://github.com/groombook/groombook.git</code><br>
|
||||
<code><span class="prompt">$</span> cd groombook</code><br>
|
||||
<code><span class="prompt">$</span> docker compose up --build</code>
|
||||
</div>
|
||||
|
||||
<ul>
|
||||
<li>Web UI: <a href="http://localhost:8080">http://localhost:8080</a></li>
|
||||
<li>API: <a href="http://localhost:3000">http://localhost:3000</a></li>
|
||||
</ul>
|
||||
|
||||
<p>For production with Kubernetes, see the <a href="https://github.com/groombook/infra">groombook/infra</a> repository.</p>
|
||||
|
||||
<h2>Contributing</h2>
|
||||
|
||||
<p>We're building this for the community. PRs welcome.</p>
|
||||
<ul>
|
||||
<li>Report bugs and request features via <a href="https://github.com/groombook/groombook/issues">GitHub Issues</a></li>
|
||||
<li>Read the README for dev setup instructions</li>
|
||||
<li>Fork, branch, and open a PR — CI must pass before merge</li>
|
||||
</ul>
|
||||
|
||||
<h2>The Ask</h2>
|
||||
|
||||
<p>If you know a groomer who's been complaining about their software, send them this link.</p>
|
||||
|
||||
<p>If you're a developer who wants to contribute to a project that actually helps small businesses, we're here.</p>
|
||||
|
||||
<p>If you're a pet owner who's watched your groomer's salon use a whiteboard and a paper folder system, you now have something better to suggest.</p>
|
||||
|
||||
<footer>
|
||||
<p><strong>Links:</strong></p>
|
||||
<p>GitHub: <a href="https://github.com/groombook/groombook">https://github.com/groombook/groombook</a></p>
|
||||
<p>Infra: <a href="https://github.com/groombook/infra">https://github.com/groombook/infra</a></p>
|
||||
<p>License: MIT</p>
|
||||
<p style="margin-top: 20px; font-size: 0.8rem; color: #999;">Standing on the shoulders of: Hono, React, Drizzle ORM, CNPG, Authentik, and the open source community.</p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,154 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Why We Built Groom Book — And Why Groomers Deserve Better Software</title>
|
||||
<meta name="description" content="An honest look at the pet grooming software landscape — and why we decided to do something about it.">
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; line-height: 1.7; color: #333; max-width: 700px; margin: 0 auto; padding: 20px; }
|
||||
header { background: #1a1a2e; color: #fff; padding: 60px 20px; margin: -20px -20px 40px; text-align: center; }
|
||||
header h1 { font-size: 2rem; margin-bottom: 15px; }
|
||||
header .date { color: #a0a0a0; font-size: 0.9rem; }
|
||||
h2 { color: #1a1a2e; margin: 40px 0 15px; font-size: 1.5rem; }
|
||||
h3 { color: #333; margin: 25px 0 10px; font-size: 1.2rem; }
|
||||
p { margin-bottom: 15px; }
|
||||
ul, ol { margin: 15px 0 15px 25px; }
|
||||
li { margin-bottom: 8px; }
|
||||
.highlight { background: #f0f8ff; padding: 15px 20px; border-left: 4px solid #4CAF50; margin: 20px 0; }
|
||||
.story { background: #fff8f0; padding: 20px; border-radius: 8px; margin: 20px 0; font-style: italic; }
|
||||
.story p { margin-bottom: 10px; }
|
||||
.story .attribution { font-style: normal; color: #666; font-size: 0.9rem; }
|
||||
.code-block { background: #1a1a2e; color: #fff; padding: 20px; border-radius: 6px; overflow-x: auto; font-family: 'Courier New', monospace; font-size: 0.9rem; margin: 20px 0; }
|
||||
.code-block code { color: #a0a0a0; }
|
||||
.code-block .prompt { color: #4CAF50; }
|
||||
.comparison-table { width: 100%; border-collapse: collapse; margin: 20px 0; }
|
||||
.comparison-table th, .comparison-table td { padding: 12px 15px; text-align: left; border-bottom: 1px solid #eee; }
|
||||
.comparison-table th { background: #1a1a2e; color: #fff; }
|
||||
.check { color: #4CAF50; }
|
||||
.cross { color: #e74c3c; }
|
||||
a { color: #4CAF50; text-decoration: none; }
|
||||
a:hover { text-decoration: underline; }
|
||||
footer { margin-top: 60px; padding-top: 30px; border-top: 1px solid #eee; color: #666; font-size: 0.9rem; }
|
||||
.back-link { display: inline-block; margin-bottom: 20px; color: #666; }
|
||||
.signature { background: #f9f9f9; padding: 20px; border-radius: 8px; margin-top: 30px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>Why We Built Groom Book</h1>
|
||||
<p class="date">March 2026</p>
|
||||
</header>
|
||||
|
||||
<a href="../" class="back-link">← Back to Home</a>
|
||||
|
||||
<div class="story">
|
||||
<p>My groomer's name is Maria. She's been grooming for 22 years. She has a small salon with two chairs, a bathtub for the big dogs, and a wall of laminated breed standard cards that her mentor gave her in 2002.</p>
|
||||
<p>Maria's software? A binder with client contact info, a paper calendar on the wall, and a calculator.</p>
|
||||
<p>When I asked her why she didn't use salon software, she said: "I looked into it. It's $180 a month, it's complicated, and the one I tried locked me out of my own data when they changed pricing."</p>
|
||||
<p class="attribution">She represents thousands of independent groomers. This is for her.</p>
|
||||
</div>
|
||||
|
||||
<h2>The State of Pet Grooming Software</h2>
|
||||
|
||||
<p>If you run a salon, you basically have three options:</p>
|
||||
|
||||
<h3>1. The legacy desktop software</h3>
|
||||
<p>$150-250/month. Runs on Windows. Looks like it was designed in 2003 (because it was). Requires a dedicated computer that can't do anything else. No mobile access. No online booking. But it "works" so you stick with it.</p>
|
||||
|
||||
<h3>2. The SaaS platform</h3>
|
||||
<p>These are the Vagaro/Jill-of-All types. Monthly fees, sometimes percentage-based on bookings. They're web-based which is better. But they own your data. If you stop paying, you lose everything. Some take 15-30% of your booking revenue. They often cater to salons AND stylists AND wellness businesses — grooming is just one checkbox.</p>
|
||||
|
||||
<h3>3. Generic scheduling tools</h3>
|
||||
<p>Think Calendly, Acuity, Square Appointments. They're fine for appointments but know nothing about grooming: no breed-specific timing (a poodle trim takes different time than a Doodle shave-down), no coat type notes, no deposit handling for no-shows, no pet profile history. You're constantly working around the tool.</p>
|
||||
|
||||
<div class="highlight">
|
||||
<p><strong>Here's the thing:</strong> grooming has unique operational needs that generic software will never address well.</p>
|
||||
</div>
|
||||
|
||||
<h2>What Groomers Actually Need</h2>
|
||||
|
||||
<p>After talking to dozens of groomers, a few themes come up constantly:</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>Time by breed and coat type.</strong> A 15-pound Doodle with a shave-down takes 3x longer than a 15-pound Bichon Frise with a bath-and-brush. Generic scheduling tools don't understand this. Groomers end up double-booking or rushing.</li>
|
||||
<li><strong>Client and pet history in one place.</strong> "Oh, this dog got matted last time, I need to use a different brush" — that context needs to live in the profile. Paper files work. A whiteboard works. But when you have 200 clients and 3 groomers, you need something better.</li>
|
||||
<li><strong>Deposit handling.</strong> No-shows hurt. Charging a deposit at booking and automatically retaining it for cancellations is table stakes for any modern booking system — but most grooming software doesn't do it well.</li>
|
||||
<li><strong>Working offline.</strong> Mobile groomers — the ones who show up at your house with a van and all their tools — often work in areas with no cell signal. A PWA that works offline isn't a nice-to-have, it's essential.</li>
|
||||
<li><strong>Your data, your server.</strong> This is the big one. Groomers have watched platforms get acquired, change pricing, or shut down. Nobody wants to build their business on rented software.</li>
|
||||
</ul>
|
||||
|
||||
<h2>What We Built</h2>
|
||||
|
||||
<p>Groom Book is open source, self-hostable pet grooming business management software. It runs on your server (or your laptop, or a $20/month VPS). It does everything a small salon needs:</p>
|
||||
|
||||
<ul>
|
||||
<li>Appointment scheduling with groomer calendars</li>
|
||||
<li>Client and pet profiles with history, coat type, behavior notes</li>
|
||||
<li>Service catalog with breed-specific timing and pricing</li>
|
||||
<li>Online booking portal (24/7 client self-service)</li>
|
||||
<li>POS, invoicing, tips, receipts</li>
|
||||
<li>Automated SMS and email reminders</li>
|
||||
<li>Revenue and utilization analytics</li>
|
||||
<li>PWA — install on your phone, works offline</li>
|
||||
<li>Staff impersonation with full audit logs (for managers)</li>
|
||||
</ul>
|
||||
|
||||
<p>And because it's open source, you can hire any developer to customize it, or run it on your own infrastructure. Your data stays yours.</p>
|
||||
|
||||
<h2>The Price</h2>
|
||||
|
||||
<p>Groom Book is free. MIT license. We built it because the problem is solvable and the existing solutions are exploitative.</p>
|
||||
|
||||
<p>If you want to run it yourself, you can have it running in 5 minutes:</p>
|
||||
|
||||
<div class="code-block">
|
||||
<code><span class="prompt">$</span> git clone https://github.com/groombook/groombook</code><br>
|
||||
<code><span class="prompt">$</span> cd groombook</code><br>
|
||||
<code><span class="prompt">$</span> docker compose up --build</code>
|
||||
</div>
|
||||
|
||||
<p>If you want someone else to host it for you — managed hosting, backups, updates — that model can work too. We might build that someday. But you'll always have the option to self-host.</p>
|
||||
|
||||
<h2>Who This Is For</h2>
|
||||
|
||||
<p>Groom Book is for:</p>
|
||||
<ul>
|
||||
<li><strong>Independent groomers</strong> running a one-person shop who are tired of paper and whiteboards</li>
|
||||
<li><strong>Small salons</strong> with 2-5 groomers who can't justify $200/month for legacy desktop software</li>
|
||||
<li><strong>Mobile groomers</strong> who need offline-capable, PWA-based scheduling</li>
|
||||
<li><strong>Developers</strong> who want to contribute to software that helps small businesses</li>
|
||||
</ul>
|
||||
|
||||
<p>It's not for:</p>
|
||||
<ul>
|
||||
<li>Enterprise salon chains (yet — maybe never)</li>
|
||||
<li>Businesses that want a fully managed SaaS with 24/7 support contracts (look at Vagaro or Phorest)</li>
|
||||
</ul>
|
||||
|
||||
<h2>The Future</h2>
|
||||
|
||||
<p>We're just getting started. Groom Book v1 covers the essentials. Here's what's on the roadmap:</p>
|
||||
|
||||
<ul>
|
||||
<li>Multi-language support for international groomers</li>
|
||||
<li>SMS via Twilio (not just email reminders)</li>
|
||||
<li>Waitlist and cancellation queue</li>
|
||||
<li>Groomer commission tracking</li>
|
||||
<li>Integration with QuickBooks and other accounting tools</li>
|
||||
</ul>
|
||||
|
||||
<p>If you want to follow along: <a href="https://github.com/groombook/groombook">GitHub</a>.</p>
|
||||
|
||||
<div class="signature">
|
||||
<p>Maria — if you're reading this: I hope this helps. You deserve software that respects your time and your business.</p>
|
||||
<p>To everyone else: if you know a groomer who's been making do with a whiteboard and a binder, show them this. They have options now.</p>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<p><a href="https://github.com/groombook/groombook">View on GitHub</a></p>
|
||||
<p style="margin-top: 10px;">Groom Book — Open Source Pet Grooming Software</p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,118 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Getting Started — Groom Book</title>
|
||||
<meta name="description" content="Get Groom Book running in minutes with Docker Compose or Kubernetes.">
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; line-height: 1.7; color: #333; max-width: 800px; margin: 0 auto; padding: 20px; }
|
||||
header { background: #1a1a2e; color: #fff; padding: 40px 20px; margin: -20px -20px 40px; }
|
||||
header h1 { font-size: 2rem; }
|
||||
header a { color: #4CAF50; text-decoration: none; }
|
||||
h2 { color: #1a1a2e; margin: 40px 0 15px; font-size: 1.5rem; }
|
||||
h3 { color: #333; margin: 25px 0 10px; font-size: 1.2rem; }
|
||||
p { margin-bottom: 15px; }
|
||||
.warning { background: #fff3cd; border: 1px solid #ffc107; padding: 15px; border-radius: 6px; margin: 20px 0; }
|
||||
.warning strong { color: #856404; }
|
||||
.code-block { background: #1a1a2e; color: #fff; padding: 20px; border-radius: 6px; overflow-x: auto; font-family: 'Courier New', monospace; font-size: 0.9rem; margin: 20px 0; }
|
||||
.code-block code { color: #a0a0a0; display: block; }
|
||||
.code-block .prompt { color: #4CAF50; }
|
||||
table { width: 100%; border-collapse: collapse; margin: 20px 0; }
|
||||
th, td { padding: 12px 15px; text-align: left; border: 1px solid #ddd; }
|
||||
th { background: #f5f5f5; font-weight: 600; }
|
||||
a { color: #4CAF50; text-decoration: none; }
|
||||
a:hover { text-decoration: underline; }
|
||||
.back-link { display: inline-block; margin-bottom: 20px; color: #666; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>Getting Started with Groom Book</h1>
|
||||
<a href="../">← Back to Home</a>
|
||||
</header>
|
||||
|
||||
<p>Groom Book can be run on a single server with Docker Compose or in a production Kubernetes cluster. Choose the path that fits your needs.</p>
|
||||
|
||||
<h2>Docker Compose (Recommended for Single Server)</h2>
|
||||
|
||||
<p>The fastest way to get Groom Book running. This starts PostgreSQL, runs migrations, and serves both the API and web UI.</p>
|
||||
|
||||
<div class="code-block">
|
||||
<code><span class="prompt">$</span> git clone https://github.com/groombook/groombook.git</code><br>
|
||||
<code><span class="prompt">$</span> cd groombook</code><br>
|
||||
<code><span class="prompt">$</span> docker compose up --build</code>
|
||||
</div>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Service</th>
|
||||
<th>URL</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Web UI</td>
|
||||
<td><a href="http://localhost:8080">http://localhost:8080</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>API</td>
|
||||
<td><a href="http://localhost:3000">http://localhost:3000</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="warning">
|
||||
<strong>⚠️ Security Note:</strong> The default <code>docker-compose.yml</code> sets <code>AUTH_DISABLED=true</code> so you can explore without configuring OIDC. <strong>Disable this in any internet-facing deployment.</strong>
|
||||
</div>
|
||||
|
||||
<h3>Production Configuration</h3>
|
||||
|
||||
<p>Copy <code>.env.example</code> to <code>.env</code> and configure:</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Variable</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>DATABASE_URL</code></td>
|
||||
<td>PostgreSQL connection string</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>AUTH_DISABLED</code></td>
|
||||
<td>Set to <code>false</code> in production</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>OIDC_ISSUER</code></td>
|
||||
<td>Authentik issuer URL</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>OIDC_CLIENT_ID</code></td>
|
||||
<td>OIDC client ID</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>CORSI_ORIGIN</code></td>
|
||||
<td>Public URL of the web frontend</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2>Kubernetes (Production-Grade)</h2>
|
||||
|
||||
<p>For production deployments with high availability, see the <a href="https://github.com/groombook/infra">groombook/infra</a> repository for Kubernetes manifests and Flux GitOps configuration.</p>
|
||||
|
||||
<p>Groom Book is deployed using:</p>
|
||||
<ul>
|
||||
<li><strong>CNPG</strong> for PostgreSQL</li>
|
||||
<li><strong>Authentik</strong> for OIDC authentication</li>
|
||||
<li><strong>Flux</strong> for GitOps-managed deployments</li>
|
||||
</ul>
|
||||
|
||||
<h2>Quick Links</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/groombook/groombook">GitHub Repository</a></li>
|
||||
<li><a href="https://github.com/groombook/groombook/issues">Report an Issue</a></li>
|
||||
<li><a href="https://discord.gg/groombook">Join Our Discord</a></li>
|
||||
<li><a href="../blog/launch.html">Launch Announcement</a></li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
+199
@@ -0,0 +1,199 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Groom Book — Open Source Pet Grooming Business Management</title>
|
||||
<meta name="description" content="Free, open source, self-hostable pet grooming CRM and business management platform. Schedule appointments, manage clients, and run your salon on your own server.">
|
||||
<meta property="og:title" content="Groom Book — Open Source Pet Grooming Business Management">
|
||||
<meta property="og:description" content="Free, open source, self-hostable pet grooming CRM and business management platform.">
|
||||
<meta property="og:type" content="website">
|
||||
<link rel="canonical" href="https://groombook.github.io/groombook/">
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; line-height: 1.6; color: #333; }
|
||||
.container { max-width: 900px; margin: 0 auto; padding: 0 20px; }
|
||||
header { background: #1a1a2e; color: #fff; padding: 60px 0; text-align: center; }
|
||||
header h1 { font-size: 2.5rem; margin-bottom: 10px; }
|
||||
header p { font-size: 1.25rem; color: #a0a0a0; max-width: 600px; margin: 0 auto; }
|
||||
.hero-badge { display: inline-block; background: #4CAF50; color: #fff; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; margin-bottom: 20px; }
|
||||
.cta-buttons { margin-top: 30px; }
|
||||
.cta-buttons a { display: inline-block; padding: 14px 28px; border-radius: 6px; text-decoration: none; font-weight: 600; margin: 5px; }
|
||||
.btn-primary { background: #4CAF50; color: #fff; }
|
||||
.btn-secondary { background: #333; color: #fff; }
|
||||
.features { padding: 80px 0; background: #f9f9f9; }
|
||||
.features h2 { text-align: center; font-size: 2rem; margin-bottom: 50px; }
|
||||
.feature-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 30px; }
|
||||
.feature-card { background: #fff; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
|
||||
.feature-card h3 { color: #1a1a2e; margin-bottom: 10px; font-size: 1.1rem; }
|
||||
.comparison { padding: 80px 0; }
|
||||
.comparison h2 { text-align: center; font-size: 2rem; margin-bottom: 50px; }
|
||||
table { width: 100%; border-collapse: collapse; background: #fff; border-radius: 8px; overflow: hidden; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
|
||||
th, td { padding: 15px 20px; text-align: left; border-bottom: 1px solid #eee; }
|
||||
th { background: #1a1a2e; color: #fff; }
|
||||
tr:last-child td { border-bottom: none; }
|
||||
.check { color: #4CAF50; font-weight: bold; }
|
||||
.cross { color: #e74c3c; font-weight: bold; }
|
||||
.quickstart { padding: 80px 0; background: #f9f9f9; }
|
||||
.quickstart h2 { text-align: center; font-size: 2rem; margin-bottom: 30px; }
|
||||
.code-block { background: #1a1a2e; color: #fff; padding: 20px; border-radius: 6px; overflow-x: auto; font-family: 'Courier New', monospace; font-size: 0.9rem; margin: 20px 0; }
|
||||
.code-block code { color: #a0a0a0; }
|
||||
.code-block .prompt { color: #4CAF50; }
|
||||
footer { background: #1a1a2e; color: #fff; padding: 40px 0; text-align: center; }
|
||||
footer a { color: #4CAF50; text-decoration: none; }
|
||||
footer a:hover { text-decoration: underline; }
|
||||
.footer-links { margin-top: 20px; }
|
||||
.footer-links a { margin: 0 15px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="container">
|
||||
<span class="hero-badge">100% Open Source — MIT License</span>
|
||||
<h1>Groom Book</h1>
|
||||
<p>Open source, self-hostable pet grooming business management and CRM. No vendor lock-in. No monthly fees.</p>
|
||||
<div class="cta-buttons">
|
||||
<a href="https://github.com/groombook/groombook" class="btn-primary">View on GitHub</a>
|
||||
<a href="https://github.com/groombook/groombook/stargazers" class="btn-secondary">Star the Project</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section class="features">
|
||||
<div class="container">
|
||||
<h2>Everything You Need to Run Your Grooming Business</h2>
|
||||
<div class="feature-grid">
|
||||
<div class="feature-card">
|
||||
<h3>📅 Appointment Scheduling</h3>
|
||||
<p>Calendar management for single or multiple groomers. Drag-and-drop scheduling with automatic conflict detection.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>🐾 Client & Pet Records</h3>
|
||||
<p>Detailed profiles with grooming history, coat types, behavior notes, and preferences. Never lose a pet's information again.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>💳 Online Booking Portal</h3>
|
||||
<p>Let clients book appointments 24/7 through your own self-service portal. No more phone tag.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>💰 POS & Invoicing</h3>
|
||||
<p>Process payments, record tips, and generate receipts. Full financial tracking without spreadsheets.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>📱 PWA — Works Offline</h3>
|
||||
<p>Install on mobile devices. Perfect for mobile groomers who need access in basements, garages, and rural areas.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>📊 Reporting Dashboard</h3>
|
||||
<p>Revenue analytics, utilization trends, and business insights. Know exactly how your salon is performing.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="comparison">
|
||||
<div class="container">
|
||||
<h2>Why Groom Book?</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Feature</th>
|
||||
<th>Groom Book</th>
|
||||
<th>Legacy Software</th>
|
||||
<th>SaaS Platforms</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Self-host on your own server</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>No monthly fees</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗ ($150-250/mo)</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>You own your data</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>No booking revenue cut</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗ (up to 30%)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>PWA with offline support</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Open source & customizable</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="quickstart">
|
||||
<div class="container">
|
||||
<h2>Get Started in 5 Minutes</h2>
|
||||
<div class="code-block">
|
||||
<code><span class="prompt">$</span> git clone https://github.com/groombook/groombook.git</code><br>
|
||||
<code><span class="prompt">$</span> cd groombook</code><br>
|
||||
<code><span class="prompt">$</span> docker compose up --build</code>
|
||||
</div>
|
||||
<p style="text-align: center; color: #666; margin-top: 10px;">
|
||||
Web UI: <strong>http://localhost:8080</strong> | API: <strong>http://localhost:3000</strong>
|
||||
</p>
|
||||
<p style="text-align: center; margin-top: 30px;">
|
||||
<a href="getting-started/">Full Getting Started Guide →</a>
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="blog-preview" style="padding: 60px 0; background: #fff;">
|
||||
<div class="container">
|
||||
<h2 style="text-align: center; font-size: 2rem; margin-bottom: 30px;">From the Blog</h2>
|
||||
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px;">
|
||||
<div style="background: #f9f9f9; padding: 25px; border-radius: 8px;">
|
||||
<h3 style="margin-bottom: 10px; font-size: 1.1rem;"><a href="blog/launch.html" style="color: #1a1a2e; text-decoration: none;">Introducing Groom Book</a></h3>
|
||||
<p style="color: #666; font-size: 0.9rem; margin-bottom: 15px;">March 2026</p>
|
||||
<p style="font-size: 0.95rem;">The CRM you've been waiting for if you're tired of paper files, spreadsheets, and overpriced salon software.</p>
|
||||
<a href="blog/launch.html" style="color: #4CAF50; font-size: 0.9rem;">Read more →</a>
|
||||
</div>
|
||||
<div style="background: #f9f9f9; padding: 25px; border-radius: 8px;">
|
||||
<h3 style="margin-bottom: 10px; font-size: 1.1rem;"><a href="blog/why-we-built.html" style="color: #1a1a2e; text-decoration: none;">Why We Built Groom Book</a></h3>
|
||||
<p style="color: #666; font-size: 0.9rem; margin-bottom: 15px;">March 2026</p>
|
||||
<p style="font-size: 0.95rem;">An honest look at the pet grooming software landscape — and why we decided to do something about it.</p>
|
||||
<a href="blog/why-we-built.html" style="color: #4CAF50; font-size: 0.9rem;">Read more →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<div class="container">
|
||||
<p><strong>Groom Book</strong> — Open source pet grooming business management</p>
|
||||
<p style="color: #a0a0a0; font-size: 0.9rem; margin-top: 5px;">MIT License — You own this software, fully.</p>
|
||||
<div class="footer-links">
|
||||
<a href="https://github.com/groombook/groombook">GitHub</a>
|
||||
<a href="https://github.com/groombook/groombook/issues">Issues</a>
|
||||
<a href="https://discord.gg/groombook">Discord</a>
|
||||
<a href="blog/launch.html">Launch Announcement</a>
|
||||
<a href="blog/why-we-built.html">Why We Built</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,158 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Groom Book for Mobile Groomers</title>
|
||||
<meta name="description" content="The grooming salon that comes to you — now with software that keeps up. Offline-capable PWA for mobile pet groomers.">
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; line-height: 1.7; color: #333; max-width: 700px; margin: 0 auto; padding: 20px; }
|
||||
header { background: #1a1a2e; color: #fff; padding: 60px 20px; margin: -20px -20px 40px; text-align: center; }
|
||||
header h1 { font-size: 2rem; margin-bottom: 15px; }
|
||||
header p { color: #a0a0a0; font-size: 1.1rem; max-width: 600px; margin: 0 auto; }
|
||||
h2 { color: #1a1a2e; margin: 40px 0 15px; font-size: 1.5rem; }
|
||||
h3 { color: #333; margin: 25px 0 10px; font-size: 1.2rem; }
|
||||
p { margin-bottom: 15px; }
|
||||
ul, ol { margin: 15px 0 15px 25px; }
|
||||
li { margin-bottom: 8px; }
|
||||
.highlight { background: #f0f8ff; padding: 15px 20px; border-left: 4px solid #4CAF50; margin: 20px 0; }
|
||||
table { width: 100%; border-collapse: collapse; margin: 20px 0; }
|
||||
th, td { padding: 12px 15px; text-align: left; border-bottom: 1px solid #eee; }
|
||||
th { background: #1a1a2e; color: #fff; }
|
||||
a { color: #4CAF50; text-decoration: none; }
|
||||
a:hover { text-decoration: underline; }
|
||||
.back-link { display: inline-block; margin-bottom: 20px; color: #666; }
|
||||
.cta-section { background: #f9f9f9; padding: 30px; border-radius: 8px; margin-top: 40px; text-align: center; }
|
||||
.cta-section h2 { margin-top: 0; }
|
||||
.faq dt { font-weight: 600; margin-top: 20px; }
|
||||
.faq dd { margin-left: 0; margin-bottom: 10px; }
|
||||
footer { margin-top: 60px; padding-top: 30px; border-top: 1px solid #eee; color: #666; font-size: 0.9rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>Groom Book Goes Mobile</h1>
|
||||
<p>The same powerful grooming CRM — appointment scheduling, client records, POS, reminders — on your phone, in your van, in backyards and driveways across town.</p>
|
||||
</header>
|
||||
|
||||
<a href="./" class="back-link">← Back to Home</a>
|
||||
|
||||
<div class="highlight">
|
||||
<p><strong>Works offline. Syncs when you're back in range.</strong></p>
|
||||
</div>
|
||||
|
||||
<h2>The Mobile Groomer Problem</h2>
|
||||
|
||||
<p>You're not just a groomer. You're a receptionist, scheduler, record-keeper, and accountant — all while working out of a van.</p>
|
||||
|
||||
<p>Most grooming software assumes you have:</p>
|
||||
<ul>
|
||||
<li>Reliable WiFi</li>
|
||||
<li>A fixed location</li>
|
||||
<li>Time to sit at a desk between appointments</li>
|
||||
</ul>
|
||||
|
||||
<p>You have none of those things.</p>
|
||||
|
||||
<h3>What you're actually dealing with:</h3>
|
||||
<ul>
|
||||
<li>Appointment info on scraps of paper</li>
|
||||
<li>Client calls mid-route you can't reference</li>
|
||||
<li>Credit card processing that takes 10% of your tips</li>
|
||||
<li>No-show reminders you can't send from the road</li>
|
||||
<li>End-of-day paperwork that takes longer than the grooming</li>
|
||||
</ul>
|
||||
|
||||
<h2>How Groom Book Works for Mobile Groomers</h2>
|
||||
|
||||
<h3>1. Install the PWA</h3>
|
||||
<p>Groom Book is a Progressive Web App. Open it in your phone's browser, tap "Add to Home Screen." It looks and feels like a native app — no app store required.</p>
|
||||
|
||||
<h3>2. Take appointments offline</h3>
|
||||
<p>The full appointment calendar, client profiles, and pet records are cached on your device. Pull up Mrs. Johnson's doodle's last grooming notes while you're three miles from the nearest cell tower.</p>
|
||||
|
||||
<h3>3. Check in clients on-site</h3>
|
||||
<p>Record services performed, add notes, process payment — all while the dog is still on the table.</p>
|
||||
|
||||
<h3>4. Sync when you're back in range</h3>
|
||||
<p>When you hit WiFi or cell service again, everything syncs to your server automatically. No manual uploads. No "export and import" workflows.</p>
|
||||
|
||||
<h2>Features Mobile Groomers Actually Need</h2>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Feature</th>
|
||||
<th>Why It Matters</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>Offline calendar</strong></td>
|
||||
<td>Check tomorrow's route without cell service</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Client/pet profiles</strong></td>
|
||||
<td>Know the dog before you arrive — allergies, behavioral notes, preferred cuts</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Route notes</strong></td>
|
||||
<td>"Gate code is 4721" lives in the appointment notes, not your head</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>On-site POS</strong></td>
|
||||
<td>Process credit cards while you're there, not an hour later</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>SMS reminders</strong></td>
|
||||
<td>Reduce no-shows even for clients without app installed</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Service logging</strong></td>
|
||||
<td>Track what you did, what products used, for future reference</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Pricing</h2>
|
||||
|
||||
<p><strong>Groom Book: Free.</strong> No monthly fee. No per-groomer fee. No cut of your bookings.</p>
|
||||
|
||||
<p>Host it on a $10/month VPS, an old laptop in your van, or a Raspberry Pi. Your server, your rules.</p>
|
||||
|
||||
<p>Compare that to mobile-friendly SaaS alternatives at $150–300/month — and they still don't work offline.</p>
|
||||
|
||||
<h2>FAQ</h2>
|
||||
|
||||
<dl class="faq">
|
||||
<dt>Does it work without internet?</dt>
|
||||
<dd>Yes. The PWA caches your data locally. You can view appointments, client records, and take notes offline. Changes sync when you reconnect.</dd>
|
||||
|
||||
<dt>What if I lose my phone?</dt>
|
||||
<dd>Your data is on your server, not your phone. Install Groom Book on a new device, log in, and everything is there.</dd>
|
||||
|
||||
<dt>How do I accept credit cards?</dt>
|
||||
<dd>Groom Book includes a built-in POS. Connect a card reader (Stripe Terminal or similar) or record cash/check payments manually.</dd>
|
||||
|
||||
<dt>Can I use this alongside my existing software?</dt>
|
||||
<dd>Yes — many groomers start with Groom Book for new client intake while keeping existing systems for historical data during a transition period.</dd>
|
||||
|
||||
<dt>Do I need technical skills to set it up?</dt>
|
||||
<dd>Basic Docker knowledge is enough. <code>docker compose up</code> gets you running in 5 minutes. Full Kubernetes setup for advanced users.</dd>
|
||||
</dl>
|
||||
|
||||
<div class="cta-section">
|
||||
<h2>Ready to cut your software costs?</h2>
|
||||
<p>Groom Book is free, open source, and runs on your own server.</p>
|
||||
<p style="margin-top: 20px;">
|
||||
<a href="https://github.com/groombook/groombook" style="display: inline-block; padding: 12px 24px; background: #4CAF50; color: #fff; border-radius: 6px; text-decoration: none; font-weight: 600;">View on GitHub</a>
|
||||
<a href="getting-started/" style="display: inline-block; padding: 12px 24px; background: #333; color: #fff; border-radius: 6px; text-decoration: none; font-weight: 600; margin-left: 10px;">Getting Started Guide</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<p><a href="./">← Back to Home</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user