feat: Complete backend and docs rebrand from Patherly to ResolutionFlow

Update APP_NAME, OpenAPI metadata, log messages, root endpoint response,
model docstrings, seed script comments, README heading, and CLAUDE.md
branding references. Frontend rebrand was completed in PR #26; this
covers everything else.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Michael Chihlas
2026-02-04 00:41:22 -05:00
parent 29c1bcd204
commit 83df48291a
11 changed files with 364 additions and 18 deletions

View File

@@ -0,0 +1,346 @@
# Complete Rebrand: Patherly → ResolutionFlow
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
**Goal:** Replace every remaining "Patherly" reference in the codebase with "ResolutionFlow" so the brand is consistent across frontend, backend, docs, and comments.
**Architecture:** The frontend rebrand is already complete (PR #26). This plan covers the backend (config, API metadata, log messages, model docstrings, seed scripts), the root README, and CLAUDE.md. No database schema changes — the database name `patherly` and Docker container `patherly_postgres` stay as-is (infrastructure identifiers, not user-facing brand).
**Tech Stack:** Python/FastAPI backend, Markdown docs
---
## Scope Summary
| Area | Files | Type of Change |
|------|-------|---------------|
| Backend config | `config.py` | APP_NAME value |
| Backend API | `main.py` | OpenAPI metadata, log messages, root endpoint |
| Backend models | `user.py`, `category.py`, `step_category.py` | Docstring/comment text |
| Seed scripts | `seed_data.py`, `seed_trees.py` | Comments and print output |
| Root docs | `README.md` | Full rewrite of heading and tagline |
| Project context | `CLAUDE.md` | Update branding table and env var example |
**NOT changed** (infrastructure identifiers):
- Database name `patherly`, Docker container `patherly_postgres`
- Repository directory name `patherly/`
- Production URLs `app.patherly.com` / `api.patherly.com`
- Railway service name `patherly`
- File paths like `C:\Dev\Projects\patherly`
---
### Task 1: Backend Config — APP_NAME
**Files:**
- Modify: `backend/app/core/config.py:8`
**Step 1: Update APP_NAME**
Change line 8 from:
```python
APP_NAME: str = "Patherly"
```
to:
```python
APP_NAME: str = "ResolutionFlow"
```
**Step 2: Verify no other references in config.py**
Search `config.py` for "Patherly" — should return 0 matches after the edit.
---
### Task 2: Backend API — main.py
**Files:**
- Modify: `backend/app/main.py:21,28,33,47,74`
**Step 1: Update startup log (line 21)**
```python
# FROM:
logger.info("Starting Patherly API server...")
# TO:
logger.info("Starting ResolutionFlow API server...")
```
**Step 2: Update shutdown log (line 28)**
```python
# FROM:
logger.info("Shutting down Patherly API server...")
# TO:
logger.info("Shutting down ResolutionFlow API server...")
```
**Step 3: Update OpenAPI description (line 33)**
```python
# FROM:
description="Patherly - Take the path MOST traveled. Guided troubleshooting with automatic documentation.",
# TO:
description="ResolutionFlow - Take the path MOST traveled. Guided troubleshooting with automatic documentation.",
```
**Step 4: Update CORS comment (line 47)**
```python
# FROM:
# PLUS the explicit allowed_origins list (for custom domains like app.patherly.com)
# TO:
# PLUS the explicit allowed_origins list (for custom domains like app.resolutionflow.com)
```
Note: The actual CORS origin values in `config.py` are correct as-is (they use the real domain). This is just a comment.
**Step 5: Update root endpoint response (line 74)**
```python
# FROM:
"message": "Patherly API",
# TO:
"message": "ResolutionFlow API",
```
**Step 6: Run backend tests**
Run: `cd backend && python -m pytest -x -q`
Expected: All tests pass (no test references "Patherly" in assertions)
**Step 7: Commit**
```bash
git add backend/app/core/config.py backend/app/main.py
git commit -m "feat: Rebrand backend config and API metadata to ResolutionFlow"
```
---
### Task 3: Backend Model Docstrings
**Files:**
- Modify: `backend/app/models/user.py:53`
- Modify: `backend/app/models/category.py:19`
- Modify: `backend/app/models/step_category.py:18`
**Step 1: Update user.py docstring (line 53)**
```python
# FROM:
"""Returns True if user is a global (Patherly) admin."""
# TO:
"""Returns True if user is a global (ResolutionFlow) admin."""
```
**Step 2: Update category.py docstring (line 19)**
```python
# FROM:
- Global (team_id=NULL): Created by Patherly admins, visible to all
# TO:
- Global (team_id=NULL): Created by ResolutionFlow admins, visible to all
```
**Step 3: Update step_category.py docstring (line 18)**
```python
# FROM:
- Global (team_id=NULL): Created by Patherly admins, visible to all
# TO:
- Global (team_id=NULL): Created by ResolutionFlow admins, visible to all
```
**Step 4: Commit**
```bash
git add backend/app/models/user.py backend/app/models/category.py backend/app/models/step_category.py
git commit -m "docs: Update backend model docstrings from Patherly to ResolutionFlow"
```
---
### Task 4: Seed Scripts
**Files:**
- Modify: `backend/scripts/seed_data.py:3,409,461`
- Modify: `backend/scripts/seed_trees.py:5,3437`
**Step 1: Update seed_data.py docstring (line 3)**
```python
# FROM:
Seed data script for Patherly decision trees.
# TO:
Seed data script for ResolutionFlow decision trees.
```
**Step 2: Update seed_data.py print output (line 409)**
```python
# FROM:
print("\n[*] Patherly Database Seeder")
# TO:
print("\n[*] ResolutionFlow Database Seeder")
```
**Step 3: Update seed_data.py argparse description (line 461)**
```python
# FROM:
parser = argparse.ArgumentParser(description="Seed the Patherly database with example trees")
# TO:
parser = argparse.ArgumentParser(description="Seed the ResolutionFlow database with example trees")
```
**Step 4: Update seed_trees.py docstring (line 5)**
```python
# FROM:
This script populates Patherly with realistic troubleshooting decision trees
# TO:
This script populates ResolutionFlow with realistic troubleshooting decision trees
```
**Step 5: Update seed_trees.py argparse description (line 3437)**
```python
# FROM:
description="Seed the Patherly database with MSP/SMB troubleshooting trees"
# TO:
description="Seed the ResolutionFlow database with MSP/SMB troubleshooting trees"
```
**Step 6: Commit**
```bash
git add backend/scripts/seed_data.py backend/scripts/seed_trees.py
git commit -m "docs: Update seed script references from Patherly to ResolutionFlow"
```
---
### Task 5: README.md
**Files:**
- Modify: `README.md` (full update)
**Step 1: Update README heading and tagline (lines 1-2)**
```markdown
# FROM:
# Patherly
> Take the path MOST traveled.
# TO:
# ResolutionFlow
> Take the path MOST traveled.
```
**Step 2: Search the rest of README for "Patherly"**
The README is a legacy planning doc from early in the project. It doesn't reference "Patherly" elsewhere in the body text. Only the heading needs updating.
**Step 3: Commit**
```bash
git add README.md
git commit -m "docs: Update README heading from Patherly to ResolutionFlow"
```
---
### Task 6: CLAUDE.md — Branding Table and Env Var
**Files:**
- Modify: `CLAUDE.md:25,236`
**Step 1: Update branding table (line 25)**
The branding table row for Backend APP_NAME should now reflect the change:
```markdown
# FROM:
| Backend (FastAPI, env vars, APP_NAME) | Patherly |
# TO:
| Backend (FastAPI, env vars, APP_NAME) | ResolutionFlow |
```
**Step 2: Update env var example (line 236)**
```bash
# FROM:
APP_NAME=Patherly
# TO:
APP_NAME=ResolutionFlow
```
**Step 3: Update CORS comment references (lines 471, 476)**
These reference `app.patherly.com` which is the current production URL. Keep as-is — they're accurate infrastructure references, not brand names.
**Step 4: Commit**
```bash
git add CLAUDE.md
git commit -m "docs: Update CLAUDE.md to reflect backend rebrand to ResolutionFlow"
```
---
### Task 7: Final Verification
**Step 1: Search entire codebase for remaining "Patherly" references**
Run: `grep -r "Patherly" --include="*.py" --include="*.ts" --include="*.tsx" --include="*.md" --include="*.html" --include="*.css" --include="*.json" .`
**Expected remaining matches (all legitimate):**
- `CLAUDE.md` — only in the branding table context rows (repo name, database, URLs) and historical rebrand description
- `REBRAND-IMPLEMENTATION-GUIDE.md` — historical guide documenting the rebrand process
- `docs/plans/2026-02-04-complete-rebrand.md` — this plan file itself
**No matches should appear in:**
- `backend/app/**/*.py`
- `frontend/src/**/*`
- `README.md`
**Step 2: Run frontend build**
Run: `cd frontend && npm run build`
Expected: Build succeeds with no errors
**Step 3: Run backend tests**
Run: `cd backend && python -m pytest -x -q`
Expected: All tests pass
**Step 4: Push**
```bash
git push origin main
```
---
## Risk Assessment
**Risk: Backend tests break after APP_NAME change**
- Likelihood: Low — no tests assert on APP_NAME or the root endpoint message
- Mitigation: Run `pytest` after Task 2
**Risk: Production deployment affected**
- Likelihood: None — APP_NAME only affects OpenAPI metadata and log messages
- Mitigation: Railway auto-deploys on merge, no config change needed (APP_NAME is a code default, not an env var override)
**Risk: `.env` file has `APP_NAME=Patherly` hardcoded**
- Note: The `.env` file may override the code default. If so, update `.env` to `APP_NAME=ResolutionFlow` locally. Railway env vars may also need updating in the dashboard.
- This plan updates the code default. The `.env` file and Railway dashboard are manual steps flagged below.
## Manual Steps (Not in Git)
1. **Local `.env`**: If `backend/.env` has `APP_NAME=Patherly`, update to `APP_NAME=ResolutionFlow`
2. **Railway Dashboard**: If `APP_NAME` is set as an env var in Railway, update it there too
3. **Domain rename** (future): If/when `patherly.com``resolutionflow.com`, update production URLs in CLAUDE.md, config.py CORS, and Railway settings