Coaching Hub

Coaching Hub

A Self-Hosted CRM for Retail Sales Coaching

The Problem

Retail sales coaching tools assume you’ll adopt their framework. Every employer runs a different sales process, different competencies, a different rating scale, and when you change jobs, your coaching history and method don’t come with you. I wanted something where the framework itself is portable, and rep data stays where it belongs: per employer, exportable, deletable.

The Core Decision

The coaching framework is data, not code. Sales stages, competencies, rating scales, and session templates are all rows in the database, editable from the UI, never constants baked into the app. Change employers and you export your playbook as JSON, import it into a new instance, and keep your habits. Company changes its methodology? You edit it. No redeploy needed. The AI drafting feedback gets the framework as context too, so its output speaks the company’s actual language instead of generic sales advice.

What It Does

Every session scores a rep against the active playbook’s competencies, on that playbook’s own rating scale. Freeform notes still exist, but scored history is what actually turns coaching into trend data instead of a pile of prose.

Commitments work the same way session to session: what a rep agreed to do, with a due date, and the next session opens by showing what’s still open. Most coaching fails at follow-through, not at the advice itself, so that’s the part I built the tool around.

Before a conversation, the app pulls together a pre-session brief: open commitments, weakest and most-improved competencies, what got said last time. Competency trends compare recent ratings against earlier ones per rep, so “is this actually landing?” has an answer instead of a hunch. Raw notes plus a linked call transcript feed an AI-drafted summary, feedback, and recap, tailored to the rep’s own coaching profile (motivators, learning style, what’s worked before) and grounded in their open commitments.

Upload a company’s playbook as a PDF and the AI extracts stages, competencies, rating scale, and session templates directly, through forced schema extraction rather than free-text parsing that hopes the format holds up. On outcomes, I’m cautious on purpose: it imports per-rep metrics like attach rate, units, or NPS and gives a directional read on whether a coached competency and a metric are moving together. That’s explicitly not a correlation claim. With one manager’s sample size, being honest about the limits of the data matters more than a confident-looking number.

It’s also installable as a PWA, and offline-safe by design: cached assets never include page content, so a coaching record about a named employee can never get served stale from a signed-out browser.

Design

A deliberate visual identity, not a template. A serif for the coach’s own words, a monospace for anything AI-generated or measured, so the reader can always tell a human’s note from a machine’s draft at a glance. AI-generated feedback renders as its own distinct memo style, tinted background, a data-label notch, specifically so it can never get mistaken for the coach’s own writing.

Built & Deployed

Self-hosted on my own server, behind Traefik, with real in-app authentication and IP-aware login throttling. Every coaching session mirrors to a plain file on disk alongside the database, so the data outlives the app. Pushes to the main branch rebuild and redeploy the container automatically, verified against its own health check before the deploy counts as done.

FastAPI, SQLModel (SQLite), Jinja2, Alembic, Docker, Traefik, Anthropic / OpenRouter, GitHub Actions (self-hosted runner)