docs: Reorganize project documentation

- Remove outdated documentation files
- Add ARCHITECTURE.md and BACKLOG.md
- Add docs/ folder
- Update CURRENT-STATE.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
chihlasm
2026-02-03 02:24:43 -05:00
parent 7803dc4522
commit b608b0a708
10 changed files with 1275 additions and 1 deletions

405
ARCHITECTURE.md Normal file
View File

@@ -0,0 +1,405 @@
# Patherly - Architecture & Overview
> **Purpose:** Core technical reference combining project vision and technical implementation.
> **Last Updated:** February 2, 2026
---
## Table of Contents
1. [Project Vision](#project-vision)
2. [Problem Statement](#problem-statement)
3. [Solution Overview](#solution-overview)
4. [Tech Stack](#tech-stack)
5. [System Architecture](#system-architecture)
6. [Database Schema](#database-schema)
7. [API Endpoints](#api-endpoints)
8. [Data Structures](#data-structures)
9. [Security](#security)
10. [Deployment](#deployment)
---
## Project Vision
A decision tree troubleshooting application designed for MSP engineers to transform diagnostic processes into clean, professional documentation automatically.
**Tagline:** "Take the path MOST traveled"
### Success Criteria
**3-Month Goal:** Michael uses this tool for 50% of his tickets
**Key Metrics:**
- Time saved per ticket
- Documentation quality improvement
- Reduction in "what did I do?" moments
- Team adoption rate
### Target Users
**Primary:** Senior Systems Engineers at MSPs managing Windows Server, Active Directory, Citrix, networking equipment
**Secondary:**
- Junior engineers needing guided troubleshooting
- Onsite technicians following remote engineer instructions
- MSP teams wanting standardized procedures
### Key Differentiators
1. **Automatic documentation generation** - No separate note-taking step
2. **On-the-fly customization** - Add custom branches when encountering edge cases
3. **Learning system** - Tracks common paths, suggests optimizations
4. **Automation integration** - Execute PowerShell/scripts directly from decision nodes
5. **Knowledge hub** - Links to documentation, KB articles, tutorials at each step
---
## Problem Statement
MSP engineers face constant context switching between diverse technical issues (file shares, server outages, VPN failures, Active Directory problems). Each context switch:
- Takes 15-25 minutes to regain full focus
- Creates cognitive overhead and attention residue
- Contributes to burnout (research-backed)
- Makes consistent documentation challenging
- Results in lost tribal knowledge
---
## Solution Overview
An intelligent decision tree system that:
- Guides engineers through proven troubleshooting paths
- Captures decisions and notes automatically
- Generates professional ticket documentation
- Builds institutional knowledge
- Reduces cognitive load during high-stress situations
---
## Tech Stack
### Frontend
| Component | Technology |
|-----------|------------|
| Framework | React 18 + Vite + TypeScript |
| Styling | Tailwind CSS |
| State Management | Zustand (with immer + zundo) |
| Routing | React Router v6 |
| API Client | Axios |
| Offline | Service Workers + IndexedDB (planned) |
### Backend
| Component | Technology |
|-----------|------------|
| Framework | Python FastAPI |
| ORM | SQLAlchemy 2.0 (async) |
| Validation | Pydantic |
| Auth | JWT (python-jose) + bcrypt |
| Migrations | Alembic |
### Database & Storage
| Component | Technology |
|-----------|------------|
| Database | PostgreSQL 16 |
| File Storage | S3-compatible (planned) |
| Development | Docker containers |
### Hosting
| Environment | Platform |
|-------------|----------|
| Development | Local (Vite + Uvicorn + Docker PostgreSQL) |
| Production | Railway Pro |
| Domain | patherly.com (api.patherly.com for backend) |
---
## System Architecture
```
┌─────────────────────────────────────────────────────┐
│ Frontend (React) │
│ - Tree Navigation UI │
│ - Tree Editor │
│ - Session Management │
│ - Export Functionality │
└─────────────────┬───────────────────────────────────┘
│ REST API (JSON)
┌─────────────────┴───────────────────────────────────┐
│ Backend (Python FastAPI) │
│ - Authentication & Authorization │
│ - Tree CRUD Operations │
│ - Session Tracking │
│ - Export Generation │
│ - File Upload/Storage (planned) │
└─────────────────┬───────────────────────────────────┘
┌─────────────────┴───────────────────────────────────┐
│ Database (PostgreSQL) │
│ - Trees (JSONB structure) │
│ - Sessions (path tracking) │
│ - Users & Teams │
│ - Attachments Metadata │
└──────────────────────────────────────────────────────┘
```
---
## Database Schema
### Users Table
```sql
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
role VARCHAR(50) NOT NULL DEFAULT 'engineer', -- admin, engineer, viewer
team_id UUID REFERENCES teams(id),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
last_login TIMESTAMP WITH TIME ZONE
);
```
### Teams Table
```sql
CREATE TABLE teams (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
```
### Trees Table
```sql
CREATE TABLE trees (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255) NOT NULL,
description TEXT,
category VARCHAR(100),
tree_structure JSONB NOT NULL,
author_id UUID REFERENCES users(id),
team_id UUID REFERENCES teams(id),
is_active BOOLEAN DEFAULT true,
version INTEGER DEFAULT 1,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
usage_count INTEGER DEFAULT 0
);
CREATE INDEX idx_trees_category ON trees(category);
CREATE INDEX idx_trees_search ON trees USING gin(to_tsvector('english', name || ' ' || description));
```
### Sessions Table
```sql
CREATE TABLE sessions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tree_id UUID REFERENCES trees(id),
user_id UUID REFERENCES users(id),
tree_snapshot JSONB NOT NULL,
path_taken JSONB NOT NULL,
decisions JSONB NOT NULL,
started_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
completed_at TIMESTAMP WITH TIME ZONE,
ticket_number VARCHAR(100),
client_name VARCHAR(255),
exported BOOLEAN DEFAULT false
);
```
### Attachments Table
```sql
CREATE TABLE attachments (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
session_id UUID REFERENCES sessions(id),
node_id VARCHAR(100),
file_name VARCHAR(255) NOT NULL,
file_type VARCHAR(50),
file_size INTEGER,
storage_path VARCHAR(500),
uploaded_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
```
---
## API Endpoints
### Authentication
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | `/api/v1/auth/register` | Register new user |
| POST | `/api/v1/auth/login` | Login (form data) |
| POST | `/api/v1/auth/login/json` | Login (JSON body) |
| POST | `/api/v1/auth/refresh` | Refresh access token |
| GET | `/api/v1/auth/me` | Get current user |
| POST | `/api/v1/auth/logout` | Logout |
### Trees
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/api/v1/trees` | List trees (paginated) |
| POST | `/api/v1/trees` | Create tree |
| GET | `/api/v1/trees/categories` | Get unique categories |
| GET | `/api/v1/trees/search` | Full-text search |
| GET | `/api/v1/trees/{id}` | Get tree by ID |
| PUT | `/api/v1/trees/{id}` | Update tree |
| DELETE | `/api/v1/trees/{id}` | Soft delete tree |
### Sessions
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/api/v1/sessions` | List user's sessions |
| POST | `/api/v1/sessions` | Start new session |
| GET | `/api/v1/sessions/{id}` | Get session |
| PUT | `/api/v1/sessions/{id}` | Update session |
| POST | `/api/v1/sessions/{id}/complete` | Mark complete |
| POST | `/api/v1/sessions/{id}/export` | Export (md/txt/html) |
---
## Data Structures
### Tree Structure (JSONB)
```json
{
"id": "root",
"type": "decision",
"question": "Can you ping the server?",
"help_text": "Run: ping servername",
"options": [
{ "label": "Yes", "value": "yes", "next_node_id": "node_2" },
{ "label": "No", "value": "no", "next_node_id": "node_network" }
],
"children": [
{
"id": "node_2",
"type": "action",
"title": "Check service status",
"description": "Verify the service is running",
"commands": ["Get-Service -Name 'ServiceName'"],
"next_node_id": "node_3"
},
{
"id": "node_3",
"type": "solution",
"title": "Issue Resolved",
"description": "Service restarted successfully",
"resolution_steps": ["Document the fix", "Update ticket"]
}
]
}
```
### Session Decision (JSONB array item)
```json
{
"node_id": "node_1",
"question": "Can you ping the VDA?",
"answer": "yes",
"notes": "Ping successful, 2ms response time",
"timestamp": "2026-01-22T14:31:00Z",
"attachments": []
}
```
---
## Security
### Authentication
- JWT tokens: 15-minute access, 7-day refresh
- Passwords: bcrypt with cost factor 12
- Role-based access: admin, engineer, viewer
### API Security
- CORS configured for frontend origins
- Rate limiting planned
- Input validation via Pydantic
- SQL injection prevention via SQLAlchemy ORM
### Data Protection
- HTTPS in production
- Timezone-aware timestamps (UTC storage)
- Soft deletes for trees (is_active flag)
---
## Deployment
### Development Setup
```powershell
# Terminal 1: Database
docker start patherly_postgres
# Terminal 2: Backend
cd backend
.\venv\Scripts\activate
uvicorn app.main:app --reload
# Terminal 3: Frontend
cd frontend
npm run dev
```
### Production (Railway)
- **Database:** Railway managed PostgreSQL
- **Backend:** api.patherly.com
- **Frontend:** patherly.com
- **Environment:** PR environments for testing
### Key Configuration
```env
# Backend .env
DATABASE_URL=postgresql+asyncpg://user:pass@host:5432/patherly
SECRET_KEY=your-secret-key
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=15
# Frontend .env
VITE_API_URL=http://localhost:8000
```
---
## File Structure
```
patherly/
├── backend/
│ ├── app/
│ │ ├── api/v1/endpoints/ # Route handlers
│ │ ├── core/ # Config, security, logging
│ │ ├── models/ # SQLAlchemy models
│ │ └── schemas/ # Pydantic schemas
│ ├── alembic/ # Migrations
│ ├── tests/ # pytest tests
│ └── scripts/ # Seed scripts
├── frontend/
│ ├── src/
│ │ ├── api/ # API client
│ │ ├── components/ # React components
│ │ ├── pages/ # Page components
│ │ └── store/ # Zustand stores
│ └── public/
└── docs/ # Documentation
```
---
*For current project status, see [CURRENT-STATE.md](./CURRENT-STATE.md)*
*For development setup, see [QUICK-START.md](./QUICK-START.md)*
*For known issues, see [LESSONS-LEARNED.md](./LESSONS-LEARNED.md)*

455
BACKLOG.md Normal file
View File

@@ -0,0 +1,455 @@
# Backlog - Future Features & Ideas
> **Purpose:** Long-term feature ideas, "what if" concepts, and parking lot items.
> **Note:** These are brainstorm items, not committed roadmap. Evaluate based on user demand and business impact.
> **Last Updated:** February 2, 2026
---
## Table of Contents
1. [Dynamic Script Generation](#dynamic-script-generation)
2. [Beyond Service Desk - Department Expansion](#beyond-service-desk---department-expansion)
3. [Tree Collaboration & Sharing](#tree-collaboration--sharing)
4. [Integration Ideas](#integration-ideas)
5. [Mobile & Accessibility](#mobile--accessibility)
6. [Gamification & Training](#gamification--training)
7. [Advanced Analytics](#advanced-analytics)
8. [AI-Powered Features](#ai-powered-features)
9. [Parking Lot - Quick Ideas](#parking-lot---quick-ideas)
10. [Long-Term Vision](#long-term-vision)
11. [Idea Evaluation Criteria](#idea-evaluation-criteria)
---
## Dynamic Script Generation
### Concept: Trees That Generate PowerShell Scripts
Instead of just guiding a tech through troubleshooting steps, trees could COLLECT information and OUTPUT executable scripts.
**Example Scenario: New User Onboarding**
A ticket comes in: "New hire starting Monday - John Smith, Marketing department"
Traditional approach:
1. Tech manually creates AD user
2. Tech looks up which groups Marketing needs
3. Tech adds user to groups one by one
4. Tech moves user to correct OU
5. Tech documents what they did
**Script Generation approach:**
```
┌─────────────────────────────────────────────────────────────┐
│ NEW USER ONBOARDING TREE │
├─────────────────────────────────────────────────────────────┤
│ Step 1: Enter user details │
│ First Name: [John_____________] │
│ Last Name: [Smith____________] │
│ Department: [Marketing________] ▼ │
│ │
│ Step 2: Select required groups (auto-suggested by dept) │
│ ☑ Domain Users │
│ ☑ Marketing-All │
│ ☑ SharePoint-Marketing │
│ │
│ Step 3: Confirm organizational unit │
│ OU Path: OU=Marketing,OU=Users,DC=contoso,DC=com │
│ │
│ [Generate Script] │
└─────────────────────────────────────────────────────────────┘
```
**Generated Output:**
```powershell
# New User Creation Script
# Generated by Patherly - 2026-01-28 14:32
# Ticket: #12345
$Password = Read-Host -AsSecureString "Enter initial password"
New-ADUser -Name "John Smith" `
-GivenName "John" `
-Surname "Smith" `
-SamAccountName "jsmith" `
-UserPrincipalName "jsmith@contoso.com" `
-Path "OU=Marketing,OU=Users,DC=contoso,DC=com" `
-AccountPassword $Password `
-Enabled $true
# Add to groups
@("Domain Users", "Marketing-All", "SharePoint-Marketing") | ForEach-Object {
Add-ADGroupMember -Identity $_ -Members "jsmith"
}
```
**Value Proposition:**
- Eliminates manual typing errors
- Ensures consistency across techs
- Auto-documents what was done
- Reduces training time for new hires
- Script can be reviewed before execution (safety)
### Other Script Generation Use Cases
| Use Case | Inputs Collected | Output |
|----------|------------------|--------|
| User Offboarding | Username, actions to take | Disable/remove script |
| Bulk Group Changes | User list, groups | Group membership script |
| Computer Setup | Name, department, user | Deployment script |
| Network Diagnostics | Issue description | Diagnostic collection script |
| M365 License Assignment | User, license type | PowerShell for M365 |
### Technical Considerations
**New Node Type: "Input Node"**
```typescript
interface InputNode {
type: 'input';
fields: InputField[];
validation?: ValidationRules;
next_node_id: string;
}
interface InputField {
name: string;
label: string;
type: 'text' | 'select' | 'multiselect' | 'checkbox' | 'number';
options?: string[];
variable_name: string; // used in script template
}
```
**New Node Type: "Script Output Node"**
```typescript
interface ScriptOutputNode {
type: 'script_output';
script_template: string; // PowerShell with {{variable}} placeholders
language: 'powershell' | 'bash' | 'python';
documentation_template?: string;
}
```
### Safety & Compliance Features
- **Script Review Mode:** Scripts NEVER auto-execute, always presented for review
- **Audit Trail:** Log which scripts were generated and by whom
- **Template Approval:** Senior engineers review templates before publishing
- **Environment Variables:** Store org-specific values (domain name, OU paths)
### Implementation Phases
1. **Phase 1:** Basic script output with variable substitution
2. **Phase 2:** Input collection nodes with validation
3. **Phase 3:** Smart defaults (department → group suggestions)
4. **Phase 4:** Direct execution capability (Enterprise, with approval workflows)
---
## Beyond Service Desk - Department Expansion
### Concept: Department-Specific Path Libraries
The "guided decision tree" concept applies to ANY process that benefits from consistency and documentation.
**Target Departments:**
| Department | Use Cases |
|------------|-----------|
| Service Desk | Troubleshooting (current focus) |
| Sales | Quoting, assessments, discovery |
| vCIO/Consulting | Policy creation, strategic planning |
| Onboarding | Client setup, documentation gathering |
| Finance | Contract review, billing disputes |
| HR | Employee onboarding, policy acknowledgment |
### vCIO / Consulting: Policy Builder
Guide clients through policy creation with smart templates and boilerplate language.
**Example: Acceptable Use Policy Builder**
User selects sections to include:
- ☑ Computer Use Policy
- ☑ Mobile Device Policy
- ☑ BYOD Policy
- ☑ AI Usage Policy
- ☑ Remote Work Policy
**Generated Output:** Complete, formatted policy document (Word/PDF) with:
- Professional boilerplate language
- Industry-specific compliance notes (HIPAA for healthcare, etc.)
- Signature/acknowledgment section
**Policy Types to Support:**
- Acceptable Use Policy (AUP)
- Information Security Policy
- Password Policy
- Data Classification Policy
- Incident Response Policy
- BYOD Policy
- AI/Generative AI Policy
**Value Proposition:**
- vCIOs generate client policies in minutes, not hours
- Consistent, professional output
- Industry-specific compliance built-in
- Upsell opportunity: "Policy Review" as a service
### Sales: Quote Builder & Assessment Paths
Guide sales reps through discovery with consistent methodology that surfaces upsell opportunities.
**Assessment Types:**
1. **Security Assessment** - Endpoint protection, MFA, training gaps
2. **Backup Assessment** - Frequency, retention, testing procedures
3. **Hardware Assessment** - Workstation age, server infrastructure, warranties
4. **Compliance Assessment** - HIPAA, PCI, documentation status
5. **Cloud Readiness Assessment** - Migration complexity, bandwidth needs
**Generated Outputs:**
- Gap Analysis Report (client-facing)
- Quote Worksheet (internal)
- Proposal Content (client-facing)
### Client Onboarding Paths
Structured onboarding ensuring nothing is missed:
- Contact gathering (technical, billing, decision makers)
- Credentials collection (secure vault integration)
- Documentation intake (passwords, network diagrams)
- Standards configuration (naming conventions, security policies)
- Tool deployment checklist
- Handoff to service desk
**Output:** Populated documentation templates, IT Glue/Hudu import-ready data
---
## Tree Collaboration & Sharing
### Public Tree Gallery
- Users publish trees to community gallery
- Rating and review system
- "Verified" badge for quality trees
- Fork and customize
### Tree Marketplace
- Premium trees from experts
- Revenue share model (70/30)
- Subscription access to premium library
### Tree Inheritance
- Company-wide "official" trees
- Teams create local variations
- Changes can be proposed upstream
- Version control and diff viewing
---
## Integration Ideas
### PSA Deep Integration
- Create ticket from tree resolution
- Auto-populate ticket fields from session
- Link session to existing ticket
- Pull ticket context into tree suggestions
**Target PSAs:** ConnectWise, Kaseya, Autotask, ServiceNow
### RMM Integration
- Pull device info into tree context
- "This computer has X installed, skip to step Y"
- Trigger RMM scripts from tree actions
- Asset-aware troubleshooting
**Target RMMs:** Datto, ConnectWise Automate, NinjaRMM
### Documentation Integration
- Link tree nodes to IT Glue/Hudu articles
- Auto-create documentation from resolved sessions
- Sync tree content with knowledge base
### Communication Integration
- Slack/Teams notifications for escalations
- Share session summary to channel
- Request help from team within tree
---
## Mobile & Accessibility
### Mobile App (PWA Enhancement)
- Offline tree access
- Voice input for hands-free use
- Camera integration for error screenshots
- Push notifications for shared sessions
### Voice-Guided Mode
- Read steps aloud
- Voice commands to navigate
- Useful for field techs with hands busy
- Accessibility for vision-impaired users
---
## Gamification & Training
### Tech Leaderboards
- Trees completed
- Resolution time improvements
- Contribution to tree improvements
- Points and badges
### Training Mode
- Practice trees without affecting stats
- Simulated scenarios
- Quiz mode with wrong-path feedback
- Certification preparation
### Onboarding Tracks
- Structured learning paths for new hires
- Progress tracking
- Manager visibility into training progress
---
## Advanced Analytics
### Predictive Issue Alerts
- "VPN issues spike on Mondays after updates"
- Proactive notifications to prepare
- Trend forecasting
### Cost Attribution
- Estimate time spent per issue type
- Calculate cost of common problems
- ROI justification for fixes
### Comparative Analytics
- Benchmark against anonymized industry data
- "Your password reset time is 20% faster than average"
- Identify improvement opportunities
---
## AI-Powered Features
### Conversational Interface
- Chat with AI about an issue
- AI suggests relevant trees
- Natural language navigation
### Auto-Tree Generation
- Record a senior tech explaining a fix
- AI generates tree structure from transcript
- Review and publish
### Predictive Resolution
- AI predicts likely resolution before tree starts
- "Based on the description, this is probably X (85% confidence)"
- Option to jump to likely solution
### Import from Text/Documentation
- Paste existing runbook or documentation
- AI parses and creates tree structure
- Review and refine
---
## Parking Lot - Quick Ideas
*Quick-capture ideas to evaluate later:*
- [ ] Browser extension to capture screenshots into sessions
- [ ] QR codes on physical equipment linking to relevant trees
- [ ] Customer-facing trees (end-user self-service)
- [ ] Tree templates for common scenarios
- [ ] Scheduled tree reminders (monthly server maintenance checklist)
- [ ] Integration with monitoring tools (trigger tree from alert)
- [ ] Multi-language tree support
- [ ] Conditional logic based on time of day / day of week
- [ ] SLA timers visible during session
- [ ] Escalation workflows with approval chains
- [ ] Custom note formatting templates for different ticket systems
- [ ] "Options on the go" - select pre-made steps mid-tree and jump to relevant point
- [ ] Import plan function - write in text format and import as tree
---
## Long-Term Vision (Year 2+)
### Product Evolution
- Self-learning system (trees improve automatically based on usage)
- Voice-guided troubleshooting (hands-free operation)
- AR/VR support (on-site equipment identification)
- AI co-pilot (real-time suggestions during troubleshooting)
### Market Expansion
- Vertical-specific tree libraries (healthcare IT, financial services, education)
- Certification program for tree authors
- Professional services (custom tree development)
- Training and consultation services
### Platform Maturity
- 99.9% uptime SLA
- Global CDN deployment
- Advanced compliance (SOC 2, ISO 27001)
- Enterprise support tiers
- White-glove onboarding
---
## Idea Evaluation Criteria
When evaluating which ideas to pursue:
| Criteria | Weight | Questions |
|----------|--------|-----------|
| User demand | High | Are users asking for this? |
| Revenue impact | High | Will this drive upgrades or reduce churn? |
| Differentiation | Medium | Does this set us apart from alternatives? |
| Development effort | Medium | How long to build MVP? |
| Maintenance burden | Medium | Ongoing cost to support? |
| Strategic fit | Medium | Does this align with our vision? |
---
## How to Add Ideas
When adding new ideas to this document:
1. **Describe the concept** - What is it? Why would users want it?
2. **Provide an example** - Concrete scenario showing the feature in action
3. **Note technical considerations** - What would need to change?
4. **Estimate complexity** - Simple / Medium / Complex
5. **Identify dependencies** - What needs to exist first?
---
*This is a living document. Add ideas freely, evaluate periodically, and move promising concepts to GitHub Issues when ready to implement.*

View File

@@ -2,7 +2,7 @@
> **Purpose:** Quick-reference file showing exactly where the project stands. > **Purpose:** Quick-reference file showing exactly where the project stands.
> **For Claude Code:** Read this first to understand what's done and what's next. > **For Claude Code:** Read this first to understand what's done and what's next.
> **Last Updated:** January 29, 2026 > **Last Updated:** February 2, 2026
--- ---

View File

@@ -0,0 +1,414 @@
# GitHub Issues Migration Instructions
> **For Claude Code:** Use these instructions to set up GitHub Issues for Patherly
> **Repository:** github.com/patherly/patherly
> **Date:** February 2, 2026
---
## Step 1: Create Labels
Create the following labels in the repository:
| Label | Color (hex) | Description |
|-------|-------------|-------------|
| `bug` | `d73a4a` | Something isn't working |
| `feature` | `0e8a16` | New functionality |
| `enhancement` | `a2eeef` | Improvement to existing feature |
| `documentation` | `0075ca` | Documentation updates |
| `backend` | `7057ff` | FastAPI/Python work |
| `frontend` | `fbca04` | React work |
| `database` | `b60205` | PostgreSQL/schema changes |
| `priority: high` | `d93f0b` | Do this soon |
| `priority: medium` | `fbca04` | Important but not urgent |
| `priority: low` | `c5def5` | Nice to have |
---
## Step 2: Create Milestones
| Milestone | Description | Due Date |
|-----------|-------------|----------|
| Phase 2 Completion | Tree editor polish, deployment | (leave open) |
| Phase 2.5 | Personal branching, step library | (leave open) |
| Backlog | Ideas not yet scheduled | (no due date) |
---
## Step 3: Create Issues
### Phase 2 Remaining (3 issues)
**Issue 1:**
- Title: Tree Editor Validation - required fields and orphan detection
- Labels: `feature`, `frontend`, `priority: high`
- Milestone: Phase 2 Completion
- Body:
```
Add validation to the tree editor:
- [ ] Required fields validation (name, at least one node)
- [ ] Orphan node detection (nodes not reachable from root)
- [ ] Circular reference detection
- [ ] Show validation errors before save
- [ ] Prevent save if validation fails
```
**Issue 2:**
- Title: User Preferences - export format default setting
- Labels: `feature`, `frontend`, `priority: medium`
- Milestone: Phase 2 Completion
- Body:
```
Add export format preference to user settings:
- [ ] Add "Default Export Format" dropdown in settings (Markdown/Text/HTML)
- [ ] Persist preference in localStorage
- [ ] Use preference as default in export dialog
- [ ] Dark mode toggle already complete ✅
```
**Issue 3:**
- Title: Deploy to Railway - CI/CD pipeline setup
- Labels: `feature`, `priority: high`
- Milestone: Phase 2 Completion
- Body:
```
Set up production deployment on Railway Pro:
- [ ] Configure Railway project with 3 services (PostgreSQL, backend, frontend)
- [ ] Set up environment variables
- [ ] Configure custom domains (patherly.com, api.patherly.com)
- [ ] Set up PR environments for testing
- [ ] Document deployment process
```
---
### Phase 2.5 Features (15 issues)
**Issue 4:**
- Title: Step Categories - database table and seed data
- Labels: `feature`, `backend`, `database`, `priority: high`
- Milestone: Phase 2.5
- Body:
```
Create step_categories table for organizing the step library:
- [ ] Create Alembic migration for step_categories table
- [ ] Add SQLAlchemy model
- [ ] Seed default categories (Citrix/VDI, Active Directory, Microsoft 365, Networking, etc.)
- [ ] Create API endpoints for category CRUD (admin only)
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 5:**
- Title: Step Library - database schema and migrations
- Labels: `feature`, `backend`, `database`, `priority: high`
- Milestone: Phase 2.5
- Body:
```
Create step_library table for reusable troubleshooting steps:
- [ ] Create Alembic migration
- [ ] Add SQLAlchemy model with fields: title, step_type, content (JSONB), visibility, category_id, tags, ratings aggregates
- [ ] Add indexes for search and filtering
- [ ] Add step_ratings table for user ratings/reviews
- [ ] Add step_usage_log table for "Verified Use" tracking
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 6:**
- Title: Step Library - CRUD API endpoints
- Labels: `feature`, `backend`, `priority: high`
- Milestone: Phase 2.5
- Body:
```
Create API endpoints for step library:
- [ ] GET /api/v1/steps - List steps with filters (visibility, category, tags, rating)
- [ ] GET /api/v1/steps/{id} - Get step details
- [ ] POST /api/v1/steps - Create new step
- [ ] PUT /api/v1/steps/{id} - Update step
- [ ] DELETE /api/v1/steps/{id} - Soft delete
- [ ] GET /api/v1/steps/search - Full-text search
- [ ] GET /api/v1/steps/tags/popular - Popular tags
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 7:**
- Title: Step Library - rating and review system
- Labels: `feature`, `backend`, `priority: medium`
- Milestone: Phase 2.5
- Body:
```
Implement step rating and review system:
- [ ] POST /api/v1/steps/{id}/rate - Rate a step (1-5 stars + optional review)
- [ ] PUT /api/v1/steps/{id}/rate - Update rating
- [ ] DELETE /api/v1/steps/{id}/rate - Remove rating
- [ ] POST /api/v1/steps/{id}/helpful - Vote helpful (yes/no)
- [ ] GET /api/v1/steps/{id}/reviews - Get reviews
- [ ] Track "Verified Use" when step is actually used in a session
- [ ] Calculate and update aggregated ratings on step_library table
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 8:**
- Title: Add Custom Step button in tree navigation
- Labels: `feature`, `frontend`, `priority: high`
- Milestone: Phase 2.5
- Body:
```
Add ability to insert custom steps during active troubleshooting:
- [ ] Add "+ Add Custom Step" button at each decision node
- [ ] Button opens modal with two tabs: "Type My Own" and "Browse Library"
- [ ] Custom steps inserted into session only (not original tree)
- [ ] Visual indicator showing step is custom/user-added
- [ ] Custom steps included in session export
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 9:**
- Title: Custom step creation modal
- Labels: `feature`, `frontend`, `priority: high`
- Milestone: Phase 2.5
- Body:
```
Create modal for adding custom steps:
- [ ] Tab 1: "Type My Own" - form to create step (type, title, description, commands)
- [ ] Tab 2: "Browse Library" - search and select from step library
- [ ] Option to save custom step to personal library
- [ ] Validate step before insertion
- [ ] Insert step into current session
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 10:**
- Title: Step library browser component
- Labels: `feature`, `frontend`, `priority: medium`
- Milestone: Phase 2.5
- Body:
```
Create UI component for browsing step library:
- [ ] Search input with full-text search
- [ ] Category filter dropdown
- [ ] Tag filter (show popular tags as chips)
- [ ] Minimum rating filter
- [ ] Sort options (recent, popular, rating)
- [ ] Step cards showing title, type, rating, usage count
- [ ] Step preview/detail modal
- [ ] Insert button to add to session
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 11:**
- Title: User Trees - database schema
- Labels: `feature`, `backend`, `database`, `priority: medium`
- Milestone: Phase 2.5
- Body:
```
Create user_trees table for personal/forked trees:
- [ ] Create Alembic migration
- [ ] Fields: user_id, forked_from_tree_id, name, tree_content (JSONB), visibility, share_token
- [ ] Add session_custom_steps table to track custom steps per session
- [ ] Add indexes for user lookup and share token
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 12:**
- Title: Tree forking API endpoint
- Labels: `feature`, `backend`, `priority: medium`
- Milestone: Phase 2.5
- Body:
```
Create API for forking trees:
- [ ] POST /api/v1/user-trees/fork/{tree_id} - Fork an official tree
- [ ] Deep copy tree structure to user_trees
- [ ] Track lineage (forked_from_tree_id, forked_at_version)
- [ ] Increment fork_count on original tree
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 13:**
- Title: User Trees - CRUD endpoints
- Labels: `feature`, `backend`, `priority: medium`
- Milestone: Phase 2.5
- Body:
```
Create API endpoints for user tree management:
- [ ] GET /api/v1/user-trees - List user's custom trees
- [ ] GET /api/v1/user-trees/{id} - Get custom tree
- [ ] POST /api/v1/user-trees - Create new custom tree
- [ ] PUT /api/v1/user-trees/{id} - Update custom tree
- [ ] DELETE /api/v1/user-trees/{id} - Soft delete
- [ ] PUT /api/v1/user-trees/{id}/share - Update sharing settings
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 14:**
- Title: My Trees dashboard page
- Labels: `feature`, `frontend`, `priority: medium`
- Milestone: Phase 2.5
- Body:
```
Create "My Trees" page for managing personal trees:
- [ ] List user's forked/custom trees
- [ ] Show original tree reference (if forked)
- [ ] Last used date, usage count
- [ ] Quick actions: start session, edit, share, delete
- [ ] Fork button on tree detail view
- [ ] Notification when original tree updated (basic)
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 15:**
- Title: Tree sharing via link
- Labels: `feature`, `frontend`, `backend`, `priority: medium`
- Milestone: Phase 2.5
- Body:
```
Allow sharing trees via link:
- [ ] Generate unique share token for tree
- [ ] GET /api/v1/shared/{share_token} - Access shared tree (no auth required)
- [ ] Share modal with visibility options (private, link, team, public)
- [ ] Copy link button
- [ ] Option to allow/disallow forking
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 16:**
- Title: Save session as custom tree
- Labels: `feature`, `frontend`, `backend`, `priority: low`
- Milestone: Phase 2.5
- Body:
```
After completing a session with custom steps, offer to save as tree:
- [ ] POST /api/v1/sessions/{id}/save-as-tree endpoint
- [ ] Prompt user after session completion (if custom steps were added)
- [ ] Create user_tree from session path + custom steps
- [ ] Allow user to name and edit before saving
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 17:**
- Title: Admin - category management UI
- Labels: `feature`, `frontend`, `priority: low`
- Milestone: Phase 2.5
- Body:
```
Admin interface for managing step categories:
- [ ] List categories with step counts
- [ ] Create new category
- [ ] Edit category name/description
- [ ] Archive category (soft delete)
- [ ] Reorder categories (display_order)
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
**Issue 18:**
- Title: Rate/review modal after using a step
- Labels: `feature`, `frontend`, `priority: low`
- Milestone: Phase 2.5
- Body:
```
Prompt users to rate steps after using them:
- [ ] After session completion, show steps used from library
- [ ] Rating modal with 1-5 stars
- [ ] Optional written review (max 500 chars)
- [ ] "Was this helpful?" quick vote
- [ ] Mark rating as "Verified Use"
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
```
---
### Known Bugs (create as closed issues for history)
**Issue 19:**
- Title: [FIXED] DateTime timezone handling causing Internal Server Errors
- Labels: `bug`, `backend`
- State: CLOSED
- Body:
```
**Problem:** Mixing timezone-aware and timezone-naive datetime objects caused errors in session completion.
**Solution:**
- Updated all SQLAlchemy models to use `DateTime(timezone=True)`
- Changed all default datetime factories to `lambda: datetime.now(timezone.utc)`
**Files affected:** All models with timestamp fields
Fixed: January 28, 2026
```
**Issue 20:**
- Title: [FIXED] bcrypt/passlib version compatibility
- Labels: `bug`, `backend`
- State: CLOSED
- Body:
```
**Problem:** Password hashing failed with newer bcrypt versions.
**Solution:** Pin bcrypt version in requirements.txt:
- bcrypt==4.0.1
- passlib[bcrypt]==1.7.4
Fixed: January 2026
```
**Issue 21:**
- Title: [FIXED] Email validation rejecting .local domains
- Labels: `bug`, `backend`
- State: CLOSED
- Body:
```
**Problem:** Seed script failed with email validation error when using `.local` TLD.
**Cause:** email-validator library correctly rejects `.local` as reserved per RFC 6761.
**Solution:** Use standard domains like `example.com` for seed/test users.
Fixed: January 29, 2026
```
**Issue 22:**
- Title: [FIXED] httpx not installed for seed scripts
- Labels: `bug`, `backend`
- State: CLOSED
- Body:
```
**Problem:** Running seed_trees.py failed with ModuleNotFoundError for httpx.
**Solution:** Install httpx before running seed scripts:
```
pip install httpx
```
Fixed: January 29, 2026
```
---
## Step 4: Verify
After creating all issues:
1. Check that labels appear correctly
2. Check that milestones have correct issues assigned
3. Verify closed issues show in closed state
---
## Notes
- Issues 4-18 are Phase 2.5 features from PHASE-2.5-PERSONAL-BRANCHING.md
- Issues 19-22 are historical bugs documented in LESSONS-LEARNED.md (create as closed)
- Long-term feature ideas are in BACKLOG.md (not GitHub Issues yet)