From 0bae347e65f7c6674830bf6823bc0b04a3143383 Mon Sep 17 00:00:00 2001 From: Eric Jungbauer Date: Thu, 19 Mar 2026 17:44:41 -0600 Subject: [PATCH] =?UTF-8?q?Initial=20project=20scaffold=20=E2=80=94=20plan?= =?UTF-8?q?,=20branding,=20and=20wiki=20access=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLAUDE.md | 46 ++ CLAUDE_ACCESS_PROMPT.md | 67 ++ Forward_Assist_Plan.html | 1633 ++++++++++++++++++++++++++++++++++++++ MASTER_PROMPT.md | 146 ++++ 4 files changed, 1892 insertions(+) create mode 100644 CLAUDE.md create mode 100644 CLAUDE_ACCESS_PROMPT.md create mode 100644 Forward_Assist_Plan.html create mode 100644 MASTER_PROMPT.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..d1bd849 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,46 @@ +# CLAUDE.md — Forward Assist Project Context + +## What Is This + +> *Project concept pending — to be defined in initial planning session.* + +## Source of Truth + +- **Wiki:** https://wiki.jfamily.io — Forward Assist collection has full PDR, changelog, feature ideas +- **Wiki API:** `Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT` +- **Collection ID:** `d1f85b19-030d-4a39-a6fd-317d6825fdfe` + +## Before Making Changes + +1. Read the PDR on the wiki for architecture and design decisions +2. Check the Changelog on the wiki for recent changes +3. Update the Claude Code Log after each session + +## Key Infrastructure + +| Host | IP | Access | +|------|----|--------| +| Ragnar (Proxmox) | 192.168.1.107 | SSH root (key from MacBook) | +| HAOS | 192.168.1.140 | SSH root (key), web :8123 | +| Infrastructure LXC (104) | 192.168.1.204 | Gitea, wiki (Outline) | +| Frigate LXC (108) | 192.168.1.211 | NVR with dual Coral TPUs | +| Wiki | https://wiki.jfamily.io | Outline API | +| Gitea | http://192.168.1.204:3000 | user: eric | + +## Wiki Documents + +| Document | ID | Purpose | +|----------|----|---------| +| Master Prompt | 82ea3344-b55e-46d9-bcb6-a03eec252261 | Session context | +| PDR | f33885c7-261f-46ed-9ff9-5348615b5b2e | Full project spec | +| Claude Code Log | 7ce13c60-dc93-4af3-85ae-8e407c5ca66b | Session work log | +| User Manual | ebc0b8ea-8e4b-4e35-9817-77d31c0ed3ea | End-user docs | +| Changelog | 7a3b0ae0-3d0a-4433-aca8-e494f9fd8fa2 | Dated changes | +| ScratchPad | d15c7e5d-b6f5-4e2a-aecb-a3782f8dc694 | Informal notes | +| Bugs! | 172adb16-ca91-4005-89d4-5ff0c90221e2 | Bug tracking | +| Change Orders! | cdaff737-aa78-4d85-b28b-8745968d9294 | Design deviations | +| Feature Ideas! | 3d5e036f-33c3-4bea-b129-74e5464ed182 | Future ideas | + +## Tech Stack + +> *To be determined.* diff --git a/CLAUDE_ACCESS_PROMPT.md b/CLAUDE_ACCESS_PROMPT.md new file mode 100644 index 0000000..4942f58 --- /dev/null +++ b/CLAUDE_ACCESS_PROMPT.md @@ -0,0 +1,67 @@ +## Forward Assist — Wiki & Gitea Access + +**Wiki (Outline):** https://wiki.jfamily.io/api/ +- Auth: `Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT` +- No MCP available — use curl to Outline REST API +- Key endpoints: `documents.list`, `documents.info`, `documents.create`, `documents.update`, `documents.search`, `collections.list` +- All POST, all take JSON body, all return JSON + +### Forward Assist Collection + +- **Collection ID:** `d1f85b19-030d-4a39-a6fd-317d6825fdfe` +- **Master Prompt:** `82ea3344-b55e-46d9-bcb6-a03eec252261` +- **Project Design Reference (PDR):** `f33885c7-261f-46ed-9ff9-5348615b5b2e` +- **Claude Code Log:** `7ce13c60-dc93-4af3-85ae-8e407c5ca66b` +- **User Manual:** `ebc0b8ea-8e4b-4e35-9817-77d31c0ed3ea` +- **Changelog:** `7a3b0ae0-3d0a-4433-aca8-e494f9fd8fa2` +- **The ScratchPad:** `d15c7e5d-b6f5-4e2a-aecb-a3782f8dc694` +- **Bugs!:** `172adb16-ca91-4005-89d4-5ff0c90221e2` (child of ScratchPad) +- **Change Orders!:** `cdaff737-aa78-4d85-b28b-8745968d9294` (child of ScratchPad) +- **Feature Ideas!:** `3d5e036f-33c3-4bea-b129-74e5464ed182` (child of ScratchPad) + +```bash +# List collections +curl -s -X POST "https://wiki.jfamily.io/api/collections.list" \ + -H "Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT" \ + -H "Content-Type: application/json" -d '{}' + +# List docs in a collection +curl -s -X POST "https://wiki.jfamily.io/api/documents.list" \ + -H "Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT" \ + -H "Content-Type: application/json" \ + -d '{"collectionId": ""}' + +# Read a doc +curl -s -X POST "https://wiki.jfamily.io/api/documents.info" \ + -H "Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT" \ + -H "Content-Type: application/json" \ + -d '{"id": ""}' + +# Update a doc +curl -s -X POST "https://wiki.jfamily.io/api/documents.update" \ + -H "Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT" \ + -H "Content-Type: application/json" \ + -d '{"id": "", "text": ""}' + +# Create a doc +curl -s -X POST "https://wiki.jfamily.io/api/documents.create" \ + -H "Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT" \ + -H "Content-Type: application/json" \ + -d '{"title": "...", "text": "...", "collectionId": "", "publish": true}' + +# Create a child doc (add parentDocumentId) +curl -s -X POST "https://wiki.jfamily.io/api/documents.create" \ + -H "Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT" \ + -H "Content-Type: application/json" \ + -d '{"title": "...", "text": "...", "collectionId": "", "parentDocumentId": "", "publish": true}' +``` + +**Tip:** For long/complex markdown, use Python `urllib.request` + `json.dumps()` instead of inline curl to avoid JSON escaping headaches. + +--- + +**Gitea:** git@git.jfamily.io (SSH, port 2222) +- SSH alias configured: `ssh git@git.jfamily.io` +- Web: http://192.168.1.204:3000 (user: eric) +- API: http://192.168.1.204:3000/api/v1/ +- To generate API tokens: `ssh ragnar "pct exec 104 -- docker exec -u git gitea gitea admin user generate-access-token --username eric --token-name --scopes all"` diff --git a/Forward_Assist_Plan.html b/Forward_Assist_Plan.html new file mode 100644 index 0000000..69e1108 --- /dev/null +++ b/Forward_Assist_Plan.html @@ -0,0 +1,1633 @@ + + + + + +Forward Assist — Project Plan + + + + + +
+
★ Project Briefing ★
+ +
「 WHEN YOUR TICKETS WON'T CHAMBER 」
+
"The help desk that slaps. Literally."
AI-powered ticket management for the firearms industry.
+ +
+ + +
+
+ +
THE BRAND
+
+ Forward Assist isn't just a ticket app. It's a ticket app that knows what a forward assist actually is. + Mil-spec aesthetic. Meme-lord energy. Professional where it counts, irreverent everywhere else. +
+ +
+
+

Brand Identity

+
    +
  • Name references AR-15/M16 forward assist button — "tap it when things won't go into battery"
  • +
  • Dark, tactical aesthetic — think armory meets SaaS dashboard
  • +
  • Stencil typography (Bebas Neue) for headers — feels stamped on a pelican case
  • +
  • Monospace (JetBrains Mono) for data — like reading a mil-spec data sheet
  • +
  • Humor is baked into the UI language, not just slapped on
  • +
+
+ +
+

Tone & Voice

+
    +
  • Self-aware and irreverent — Gun Slaps "your wife's boyfriend" energy
  • +
  • Inside jokes the community gets: "send it", "LARP", "just as good", "two world wars"
  • +
  • Professional in customer-facing responses — the memes stay internal
  • +
  • Never punching down — humor is for the team, not at customers' expense
  • +
  • Think: if Garand Thumb built a SaaS product
  • +
+
+ +
+

Target Audience

+
    +
  • Small-to-mid firearms manufacturers and parts makers
  • +
  • Mil-spec / defense contractors with small sales teams
  • +
  • Gun shop owners who are terminally online
  • +
  • Anyone in the industry who's tired of Zendesk looking like a dentist's office
  • +
+
+ +
+

Competitive Edge

+
    +
  • No other ticket system speaks this language
  • +
  • AI that actually understands firearms context (parts, specs, compliance)
  • +
  • Branding that makes the team WANT to use the tool
  • +
  • Self-hosted option — these guys don't love cloud dependencies
  • +
+
+
+ + +

Color Palette — "Armory After Dark"

+

OD Green + FDE + midnight. If Magpul made a dashboard.

+ +
+
+
+
Midnight
+
#0D0D0D
+
+
+
+
Cerakote Dark
+
#1E1E1E
+
+
+
+
OD Green
+
#4A5D23
+
+
+
+
OD Light
+
#6B8C3E
+
+
+
+
FDE
+
#C4A265
+
+
+
+
Coyote
+
#8B7355
+
+
+
+
Tracer Red
+
#C0392B
+
+
+
+
Stainless
+
#E8E8E8
+
+
+ + +

UI Language — "Boring to Based"

+

Every button, label, and status is an opportunity.

+ +
+
+ Submit + + SEND IT +
+
+ Approved + + CLEARED HOT +
+
+ Rejected + + MISFIRE +
+
+ Pending Review + + IN THE CHAMBER +
+
+ Closed + + BRASS POLICED +
+
+ Urgent + + DANGER CLOSE +
+
+ New Ticket + + INCOMING +
+
+ Assigned + + ON TARGET +
+
+ Dashboard + + THE ARMORY +
+
+ Settings + + FIELD STRIP +
+
+ AI Draft + + SPOTTER CALL +
+
+ Knowledge Base + + THE MANUAL +
+
+ + +

Tagline Candidates

+ +
+
+
"When your tickets won't chamber."
+
Primary — references the literal forward assist function
+
+
+
"The help desk that slaps."
+
Secondary — double meaning with Gun Slaps reference
+
+
+
"Customer service. Full send."
+
For marketing — "send it" is universal gun meme
+
+
+
"Smack that bolt home."
+
Aggressive variant — for stickers/merch
+
+
+
"Your AI spotter never misses."
+
AI-focused — for the tech-forward pitch
+
+
+
"Steal underpants → Forward Assist → Profit"
+
Internal only — Eric knows what's up
+
+
+
+ + +
+
+ +
THE WORKFLOW
+
+ Email comes in. AI drafts a response. Human approves. Response goes out. Brass policed. That's it. No LARP required. +
+ +
+
+
+
📧
+
INCOMING
+
Customer emails sales@xyz.com (Google Workspace)
+
+ +
+

IMAP/webhook
+
+ +
+
🎯
+
TICKET CREATED
+
Auto-parsed: subject, body, sender, thread ID, attachments
+
+ +
+

immediate
+
+ +
+
🤖
+
SPOTTER CALL
+
AI reads ticket + knowledge base, drafts response
+
+ +
+

queued
+
+ +
+
+
IN THE CHAMBER
+
Draft queued for human review. Edit, approve, or reject.
+
+ +
+

approved
+
+ +
+
+
CLEARED HOT
+
Response sent via SMTP through Google Workspace
+
+ +
+

auto
+
+ +
+
🧹
+
BRASS POLICED
+
Ticket closed or awaiting reply. Thread tracked.
+
+
+
+ + +

Detailed Flow

+ +
+
+

📧 Email Ingestion

+
    +
  • Poll Google Workspace via IMAP IDLE or use Google Pub/Sub push notifications
  • +
  • Parse: sender, subject, body (HTML → plaintext), attachments, Message-ID, In-Reply-To
  • +
  • Thread detection: group by In-Reply-To / References header → same ticket
  • +
  • Dedup: ignore auto-replies, out-of-office, own outbound
  • +
  • Store raw email + parsed version
  • +
+
+ +
+

🤖 AI Draft (Spotter Call)

+
    +
  • Trigger: new ticket or new reply on existing ticket
  • +
  • Context window: ticket history + knowledge base articles + customer profile
  • +
  • System prompt: product-specific (parts catalog, lead times, compliance, specs)
  • +
  • AI provider: configurable — Claude API, OpenAI API, or local LLM (Ollama)
  • +
  • Output: draft response + confidence score + suggested category/priority
  • +
  • Draft is NEVER auto-sent — always queued for approval
  • +
+
+ +
+

⏳ Approval Queue (The Chamber)

+
    +
  • Side-by-side view: original email | AI draft
  • +
  • Inline editing: operator can modify the draft before approving
  • +
  • Actions: Cleared Hot (send as-is), Edit & Send, Misfire (reject + write manual reply), Reassign
  • +
  • Optional: auto-approve for low-risk categories (FAQ, order status) after trust is built
  • +
  • Audit trail: who approved, what was edited, when
  • +
+
+ +
+

📤 Outbound & Tracking

+
    +
  • Send via Google Workspace SMTP (appears from sales@xyz.com)
  • +
  • Maintain thread: set In-Reply-To and References headers correctly
  • +
  • Track: open status, follow-up replies auto-attach to ticket
  • +
  • SLA tracking: time-to-first-response, time-to-resolution
  • +
  • Notifications: Slack/email alerts for DANGER CLOSE tickets
  • +
+
+
+ + +

Edge Cases & Safety

+ +
+
+

Misfire Handling

+
    +
  • Rejected AI drafts are logged for model improvement
  • +
  • If AI confidence is below threshold → skip draft, flag for manual response
  • +
  • ITAR/export control keywords → auto-flag, no AI draft, human only
  • +
  • Profanity/threats in inbound → alert team immediately
  • +
+
+ +
+

Thread Intelligence

+
    +
  • Customer replies to sent response → ticket reopens automatically
  • +
  • AI sees full conversation history for context
  • +
  • Auto-merge: same customer, similar subject within 24h → same ticket
  • +
  • Customer profile builds over time: past orders, past issues, preferences
  • +
+
+
+
+ + +
+
+ +
TECHNICAL PLAN
+
+ Self-hosted on Ragnar. Docker-composed. Node.js backend because that's what we run. PostgreSQL because tickets deserve a real database. AI provider is pluggable. +
+ + +

Architecture

+ +
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ +│ Google Workspace│ │ Forward Assist │ │ AI Provider │ +│ sales@xyz.com │──IMAP──│ │──API──│ │ +│ │◄─SMTP──│ Node.js/Express│ │ Claude / OpenAI │ +└─────────────────┘ │ + Bull queues │ │ / Ollama (local)│ + │ │ └─────────────────┘ + └────────┬─────────┘ + │ + ┌─────────────┼─────────────┐ + │ │ │ + ┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐ + │ PostgreSQL │ │ React │ │ Redis │ + │ (tickets, │ │ Frontend │ │ (sessions, │ + │ emails, │ │ (dashboard)│ │ queues) │ + │ users) │ │ │ │ │ + └─────────────┘ └─────────────┘ └─────────────┘ + +All containers on Ragnar (192.168.1.107) via Docker Compose +Reverse proxy through existing Nginx Proxy Manager on HAOS
+ + +
+
+

⚙️ Backend

+
    +
  • Node.js + Express — REST API
  • +
  • Bull (Redis-backed) — job queues for email polling, AI drafting, sending
  • +
  • node-imap or imapflow — IMAP client for Google Workspace
  • +
  • nodemailer — SMTP outbound
  • +
  • mailparser — email parsing (HTML → text, attachments)
  • +
  • passport.js — local auth + optional Google OAuth
  • +
  • socket.io — real-time ticket updates in dashboard
  • +
+
+ +
+

🗄️ Database

+
    +
  • PostgreSQL 16 — primary data store
  • +
  • Prisma ORM — schema management + migrations
  • +
  • Tables: users, tickets, messages, ai_drafts, approvals, knowledge_base, email_accounts
  • +
  • Full-text search on ticket subject + body (pg_trgm)
  • +
  • Redis — sessions, Bull queues, rate limiting, real-time pub/sub
  • +
+
+ +
+

🎨 Frontend

+
    +
  • React + Vite — SPA dashboard
  • +
  • TailwindCSS — utility-first styling with custom "Armory" theme
  • +
  • React Router — client-side routing
  • +
  • TanStack Query — server state management
  • +
  • Socket.io client — live ticket updates
  • +
  • Dark mode only — this is the way
  • +
+
+ +
+

🤖 AI Layer

+
    +
  • Pluggable provider interface — swap without code changes
  • +
  • Claude API (recommended) — best at nuanced, professional responses
  • +
  • OpenAI API — GPT-4o as fallback
  • +
  • Ollama (local) — for air-gapped / cost-conscious setups
  • +
  • Knowledge base: product catalog, FAQ, past responses fed as context
  • +
  • Confidence scoring: low confidence = skip auto-draft
  • +
+
+ +
+

🐳 Infrastructure

+
    +
  • Docker Compose on Ragnar (Proxmox LXC or VM)
  • +
  • Containers: app, postgres, redis, (optional: ollama)
  • +
  • Reverse proxy: Nginx Proxy Manager on HAOS (192.168.1.140)
  • +
  • Domain: tickets.xyz.com or fa.xyz.com
  • +
  • SSL via Let's Encrypt through NPM
  • +
  • Backups: pg_dump cron → local + offsite
  • +
  • Git repo: git@git.jfamily.io:eric/forward-assist.git
  • +
+
+ +
+

👥 Multi-User & Roles

+
    +
  • Admin — full access, manage users, configure AI, manage knowledge base
  • +
  • Operator — view tickets, approve/reject AI drafts, send replies
  • +
  • Viewer — read-only dashboard access (for managers/owners)
  • +
  • Ticket assignment — round-robin or manual
  • +
  • Activity log — who did what, when
  • +
  • Per-user notification preferences
  • +
+
+
+ + +

Core Data Model

+ +
users tickets messages +├── id (uuid) ├── id (uuid) ├── id (uuid) +├── email ├── ticket_number (FA-001) ├── ticket_id → tickets +├── name ├── subject ├── direction (inbound/outbound) +├── role (admin/op/viewer) ├── status ├── from_email +├── password_hash ├── priority ├── body_text +└── created_at ├── assigned_to → users ├── body_html + ├── customer_email ├── message_id (email) +ai_drafts ├── customer_name ├── in_reply_to +├── id (uuid) ├── created_at ├── attachments (jsonb) +├── ticket_id → tickets ├── updated_at └── created_at +├── message_id → messages ├── resolved_at +├── draft_text └── sla_due_at knowledge_base +├── confidence ├── id (uuid) +├── provider (claude/gpt) approvals ├── title +├── model ├── id (uuid) ├── content +├── status (pending/ ├── ai_draft_id → ai_drafts ├── category +│ approved/rejected) ├── user_id → users ├── embedding (vector) +├── approved_by → users ├── action (approve/reject) └── updated_at +├── approved_at ├── edited_text +└── created_at └── created_at email_accounts + ├── id (uuid) + ├── email_address + ├── imap_host / smtp_host + ├── credentials (encrypted) + └── polling_interval
+ + +

Build Phases

+ +
+
+

🔫 Phase 1 — "First Round Downrange"

+
    +
  • Docker Compose setup (Node + Postgres + Redis)
  • +
  • Email ingestion: IMAP polling → ticket creation
  • +
  • Basic dashboard: ticket list, detail view, manual reply
  • +
  • User auth (local, 2-3 users)
  • +
  • Thread tracking (replies attach to existing tickets)
  • +
  • SMTP outbound through Google Workspace
  • +
+

+ Goal: Working ticket system. No AI yet. Prove the plumbing works. +

+
+ +
+

🤖 Phase 2 — "Spotter Online"

+
    +
  • AI integration: pluggable provider (Claude/OpenAI/Ollama)
  • +
  • Auto-draft on new tickets + new replies
  • +
  • Approval queue UI (side-by-side, edit, approve/reject)
  • +
  • Knowledge base CRUD + vector search for context
  • +
  • Confidence scoring + auto-skip for low confidence
  • +
  • Audit trail for all AI actions
  • +
+

+ Goal: AI drafts responses. Humans stay in the loop. Trust builds over time. +

+
+ +
+

💅 Phase 3 — "Full Send"

+
    +
  • Full branding pass — Armory theme, all the fun UI language
  • +
  • Real-time updates (Socket.io)
  • +
  • SLA tracking + dashboards + metrics
  • +
  • Notification system (Slack, email alerts)
  • +
  • Customer profiles + history
  • +
  • Auto-approve rules for trusted categories
  • +
+

+ Goal: Production-ready. Looks amazing. Your buddy actually wants to use it. +

+
+ +
+

🚀 Phase 4 — "Sustained Fire" (Future)

+
    +
  • Multi-inbox support (sales@, support@, returns@)
  • +
  • ITAR/compliance flagging
  • +
  • Canned responses library
  • +
  • Customer-facing portal ("check my ticket status")
  • +
  • Reporting: response times, AI accuracy, volume trends
  • +
  • Mobile-responsive / PWA
  • +
+

+ Goal: Scale it. Maybe other shops want this too. 👀 +

+
+
+
+ + +
+
+ +
APP MOCKUP
+
+ What the dashboard could look like. Dark mode only. Mil-spec meets modern SaaS. The kind of app that makes Zendesk look like it was designed by someone who's never touched a rifle. +
+ + +
+
+
+
+
+ Forward Assist — The Armory +
+
+
+
+
+

FORWARD ASSIST

+ ticket command center +
+
+ 🎯 The Armory +
+
+ In The Chamber + 3 +
+
+ 📋 All Tickets +
+
+ 📖 The Manual +
+
+ 👥 Operators +
+
+ 🔧 Field Strip +
+
+
+
EJ
+
+
Eric J.
+
ADMIN
+
+
+
+
+ +
+
+

THE ARMORY

+
+ + +
+
+ +
+
+
Incoming Today
+
12
+
+
+
In The Chamber
+
3
+
+
+
Cleared Hot Today
+
8
+
+
+
Danger Close
+
1
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TicketSubjectCustomerStatusPriorityAge
FA-0042Need lead time on BCG batch order (500 units)Mike T. — Tier 1 DefenseDANGER CLOSECritical4h
FA-0041AI draft ready: Return policy for cerakote defectSarah K. — Sportsman's SupplyIN THE CHAMBERHigh6h
FA-0040AI draft ready: Barrel threading specs questionJim R. — PersonalIN THE CHAMBERMedium8h
FA-0039Invoice request for PO #7734Dave L. — Patriot Arms LLCIN THE CHAMBERLow1d
FA-0038Confirmed: Gas block alignment specs sentChris M. — AR PerformanceCLEARED HOTMedium1d
FA-0037Wholesale pricing inquiry — dealer applicationTom B. — Liberty FirearmsINCOMINGHigh2h
+
+
+
+
+ + +

Approval Queue — "The Chamber"

+

Side-by-side: what the customer said vs. what the AI wants to say. You're the final trigger pull.

+ +
+
+
+
+
+ Forward Assist — In The Chamber (3 pending) +
+
+ +
+
+
+ FA-0041 + Return policy for cerakote defect +
+ IN THE CHAMBER +
+
+
+

📧 Customer Email

+

+ Hi,

+ I received my order of 50 buffer tubes last week and about 8 of them have cerakote flaking near the threads. + These are going into builds for a local PD contract so I need them right. Can I get replacements sent out ASAP? + Happy to send photos.

+ Thanks,
+ Sarah K.
+ Sportsman's Supply +

+
+
+

🤖 AI Draft (Spotter Call)

+
CLAUDE-3.5-SONNET • CONFIDENCE: 92%
+

+ Hi Sarah,

+ Sorry to hear about the cerakote issue on those buffer tubes — that's not the standard we hold ourselves to, especially on a LE contract build. +

+ Go ahead and send photos to this email and we'll get 8 replacements shipped out priority. No need to return the defective ones — toss 'em in the parts bin or send them back at our expense, your call. +

+ I'll flag this batch for QC review on our end. If you need anything else to keep that PD build on schedule, let me know. +

+ — [Your Name] +

+
+
+
+ + + +
+
+ +
+
+
+ + +
+ + + + + + + diff --git a/MASTER_PROMPT.md b/MASTER_PROMPT.md new file mode 100644 index 0000000..5cf3450 --- /dev/null +++ b/MASTER_PROMPT.md @@ -0,0 +1,146 @@ +==NOT PART OF PROMPT: DO NOT USE THIS WITHOUT THE TECHNICAL KNOWLEDGE TO UNDERSTAND WHAT IT DOES!== + +## Who I Am + +I'm Eric (eric@ejattorney.com). I'm building **Forward Assist** as a personal project. I work from a MacBook Pro M1 with SSH keys for most major servers on the network. + +**My preferences:** Brief, direct answers. No stuffy/formal language. "Humanized" writing — conversational, not corporate. Less is more. Don't over-explain unless I ask for details. + +**Writing voice:** When drafting any documents, wiki pages, communications, or written content, Claude writes as me (Eric) — first person. Use "I", "we", "our", not "you" or "the user." The output should read like I wrote it myself. + +--- + +## What Forward Assist Is + +> *To be defined — project concept pending initial planning session.* + +--- + +## Architecture + +> *To be defined.* + +--- + +## Tech Stack + +> *To be determined.* + +--- + +## Infrastructure + +### Relevant Servers + +| Server | IP | Role | +|--------|----|------| +| Ragnar (Proxmox host) | 192.168.1.107 | Hypervisor — runs all LXCs/VMs | +| Home Assistant (Ares) | 192.168.1.140 | Automation hub, HA OS | +| Infrastructure LXC (104) | 192.168.1.204 | Gitea, wiki (Outline), other infra | +| Frigate LXC (108) | 192.168.1.211 | NVR with dual Coral TPUs | + +### Access + +| Service | Access Method | +|---------|---------------| +| Ragnar SSH | `ssh ragnar` (key-based, root) | +| Home Assistant Web | http://192.168.1.140:8123 or https://home.jfamily.cloud | +| Home Assistant SSH | Key-based, root | +| Home Assistant CLI | `hass-cli` (env vars in ~/.zshrc) | +| Gitea Web | http://192.168.1.204:3000 (user: eric) | +| Gitea SSH | `ssh git@git.jfamily.io` (key-based, alias in ~/.ssh/config) | +| Gitea API | http://192.168.1.204:3000/api/v1/ | +| Wiki (Outline) | https://wiki.jfamily.io | +| Wiki API | https://wiki.jfamily.io/api/ (Bearer: ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT) | + +### Network Context + +- **Main LAN:** 192.168.1.0/24 (J-Home) +- **IoT VLAN:** 192.168.4.0/24 (J-IoT, VLAN 4) +- **Protect VLAN:** 192.168.30.0/24 (J-Protect, VLAN 30) +- **Gateway:** UDM-SE (192.168.1.1) + +--- + +## Git Repo + +> *To be created once project concept is defined.* + +**Gitea:** git@git.jfamily.io (SSH, port 2222) +- Web: http://192.168.1.204:3000 (user: eric) +- To generate API tokens: `ssh ragnar "pct exec 104 -- docker exec -u git gitea gitea admin user generate-access-token --username eric --token-name --scopes all"` + +### File Manifest + +| File | Purpose | +|------|---------| +| `CLAUDE_ACCESS_PROMPT.md` | Wiki & Gitea access details | +| `CLAUDE.md` | Quick-reference project context for Claude Code | +| `MASTER_PROMPT.md` | This file — full session context | + +### Working Directory (Mac) + +`/Users/jungbauerfamily/Library/Mobile Documents/com~apple~CloudDocs/Claude Working Folder/Forward Assist/` + +--- + +## Documentation — Wiki Is the Source of Truth + +**Wiki collection:** Forward Assist (https://wiki.jfamily.io) + +**Wiki API base:** `https://wiki.jfamily.io/api/` +**Auth header:** `Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT` +**Collection ID:** `d1f85b19-030d-4a39-a6fd-317d6825fdfe` + +### Wiki Documents + +| Document | ID | Purpose | +|----------|----|---------| +| Master Prompt | 82ea3344-b55e-46d9-bcb6-a03eec252261 | Session context (this file mirrors it) | +| Project Design Reference (PDR) | f33885c7-261f-46ed-9ff9-5348615b5b2e | Full project spec | +| Claude Code Log | 7ce13c60-dc93-4af3-85ae-8e407c5ca66b | Session-by-session work log | +| User Manual | ebc0b8ea-8e4b-4e35-9817-77d31c0ed3ea | End-user documentation | +| Changelog | 7a3b0ae0-3d0a-4433-aca8-e494f9fd8fa2 | Dated change entries | +| The ScratchPad | d15c7e5d-b6f5-4e2a-aecb-a3782f8dc694 | Informal notes/workspace | +| Bugs! | 172adb16-ca91-4005-89d4-5ff0c90221e2 | Bug tracking (child of ScratchPad) | +| Change Orders! | cdaff737-aa78-4d85-b28b-8745968d9294 | Design deviations (child of ScratchPad) | +| Feature Ideas! | 3d5e036f-33c3-4bea-b129-74e5464ed182 | Future ideas (child of ScratchPad) | + +### Wiki Update Rule + +Any time changes are made to the project, Claude MUST update the relevant wiki documentation: + +- **Changelog** — Log what changed and when +- **PDR** — Update if architecture or technical design changed +- **Claude Code Log** — Log session work +- **Bugs!** — Track any issues discovered +- **Change Orders!** — Log any deviations from the PDR +- **Feature Ideas!** — Capture new ideas that come up during work + +### Wiki API Quick Reference + +```bash +# List docs in collection +curl -X POST "https://wiki.jfamily.io/api/documents.list" \ + -H "Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT" \ + -H "Content-Type: application/json" \ + -d '{"collectionId": "d1f85b19-030d-4a39-a6fd-317d6825fdfe"}' + +# Update a document +curl -X POST "https://wiki.jfamily.io/api/documents.update" \ + -H "Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT" \ + -H "Content-Type: application/json" \ + -d '{"id": "", "text": ""}' + +# Create a new document +curl -X POST "https://wiki.jfamily.io/api/documents.create" \ + -H "Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT" \ + -H "Content-Type: application/json" \ + -d '{"title": "...", "text": "...", "collectionId": "d1f85b19-030d-4a39-a6fd-317d6825fdfe", "publish": true}' +``` + +--- + +## Current Focus + +> *Project concept pending — awaiting initial planning session with Eric.*