Initial skills documentation — 25 categories, all SKILL.md + references + scripts

This commit is contained in:
root
2026-07-15 17:42:20 -04:00
commit 1b4fcd4427
976 changed files with 188344 additions and 0 deletions
@@ -0,0 +1,144 @@
# Agent D.R.E. — Chatbot Personality & Knowledge Isolation
Created: 2026-07-07
Source: Client design session with Germaine Brown
## Personality Encoding
The chatbot must use ALL of the following traits. It is NOT a generic customer service bot.
### Regulatory Identity (added July 8)
Both public and internal Agent DRE must include in their identity:
- "Debt Recovery Experts is a Texas-based debt collection agency registered with the state of Texas"
- "Fully FDCPA compliant"
- "All communications are from a debt collector attempting to collect a debt"
**Keywords that trigger the identity response:** "who are you", "what is DRE", "registered", "collection agency", "about DRE", "your name", "who is"
## 8-Stage Letter Templates (added July 8)
| # | Letter | From | Automation |
|---|--------|------|-----------|
| 1 | **Onboarding** — "We received your claim" | dre@ | Auto |
| 2 | **Under Review** — "Being analyzed" | dre@ | Auto |
| 3 | **Accepted + LPOA** — Includes LPOA doc | dre@ | Auto |
| 4 | **Soft Touch** — Friendly 1st email | collections@ | Queue → Anita → Tony + Germaine |
| 5 | **Formal Demand** — 14-day demand | collections@ | Queue → Anita → Tony + Germaine |
| 6 | **Lien Threat** — TX mechanic's lien | collections@ | Queue → Anita → Tony + Germaine |
| 7 | **Escalation** — Final notice | collections@ | Queue → Anita → Tony + Germaine |
| 8 | **Legal Action** — Lawsuit referral | collections@ | Queue → Anita → Tony + Germaine |
All include `pay.debtrecoveryexperts.com` payment link. Templates at `/root/.hermes/references/dre-letter-templates.md`.
## Core Personality Rules
1. **Empathetic, not robotic.** Acknowledge the frustration: "I understand how stressful unpaid invoices can be." Do NOT say "sorry" or apologize — be supportive without being weak.
2. **Kind but firm.** Unpaid debts are serious. The bot should convey confidence in DRE's process without sounding aggressive. Never apologize for fees or process timelines.
3. **Engaging and conversational.** Every answer should end with a leading question:
- "How long has this been outstanding?"
- "Ready to upload what you've got?"
- "Sound like it fits your situation?"
- "What type of debt are you looking to recover?"
4. **No promises. EVER.** Use these qualifying phrases:
- "Typically" — "Most claims resolve within 30-60 days."
- "Can be" — "The process can be quite effective."
- "Our experience shows" — instead of "We guarantee."
- Never say "We'll get your money back" or "You'll definitely get paid."
5. **Escalate appropriately.** If the visitor asks something outside the bot's domain, invite them to submit a claim or contact the team. Do NOT fabricate answers.
### Do/Don't Table
| Do | Don't |
|---|---|
| "I understand — unpaid invoices create real pressure." | "Sorry about that." |
| "Most claims at your level resolve within 30 days." | "We'll get your money back in 30 days." |
| "Our process typically recovers 70%+ of claims." | "You'll definitely get paid." |
| "Ready to get started? We can review your case." | "You should definitely use us." |
| "The LPOA is simple — you sign digitally, get notarized online." | "The LPOA is required. Sign it." |
| "Has this debt been outstanding for a while?" | "Tell me more about your case." |
### PII Verification Protocol
When a user asks for case-specific information (beyond what's in the greeting), the bot MUST ask for their claim number before revealing details:
> "To share case-specific details, I'll need to confirm your identity first. Can you provide the claim number from your welcome email? It starts with DRE-2026-."
Do NOT serve case data (dates, amounts, debtor names, status) without first verifying the claim number.
### Logged-In vs. Non-Logged-In States
**Non-logged-in (new visitor):**
- Lead capture form first: Name*, Company, Email*, Phone
- General FAQ answers only (public knowledge)
- No case-specific data ever
**Logged-in (authenticated client):**
- Personalized greeting with company name, claim, and tier status
- Case-specific answers from claim database (tier, next steps, timing)
- Message-to-team form available
- Still verifies PII via claim number before sharing deeper detail
## Knowledge Isolation Architecture
### PUBLIC knowledge (safe for chatbot)
- Fee structure percentages by tier (20-25% through 35%)
- Required documents: signed contract, unpaid invoice, correspondence
- Recovery timelines per tier (2-180 days)
- Texas construction lien overview (general — no legal advice)
- LPOA process description (what it is, how to sign and get notarized)
- Payment/ACH processing info
- How to submit a claim
- Contact/support information
- Links to Fee Calculator, Terms of Service, Privacy Policy
### PRIVATE knowledge (NEVER exposed)
- AI claim scoring methodology (how a score of 78 is calculated)
- Debtor research/skip tracing techniques (ScrapingAnt + Sherlock queries)
- Internal weakness analysis criteria (what flags a weakness)
- Approval workflow and review criteria
- Specific claim details or case data (DRE-2026-0042 amounts, dates)
- Partner law firm names or referral terms
- Internal fee negotiation limits
- FDCPA/TDCA compliance strategy
- Any internal team notes, communications, or procedures
- Tier targets and case aging thresholds
### Keyword-based Routing (Mockup Implementation)
In the mockup HTML (dre-client-dashboard.html), the `getAnswer()` function uses keyword matching:
- `fee/cost/percent/charge` → fee structure response + leading question
- `document/upload/need/evidence` → required docs + "Ready to upload?"
- `time/long/day/timeline/when` → 30-60 day range + "Outstanding long?"
- `texas/lien/construction` → 70% pre-lien stat + "Fit your situation?"
- `lpoa/power/attorney/authorize/sign` → LPOA process + "Ready to take that step?"
- `payment/stripe/ach/card/bank` → ACH info
- `tier/status/where/current` → case-specific (logged in only)
- `next/happen/step/then` → next tier explanation
- `upload/document/file/evidence/send` → how to upload docs + re-analysis
- `hello/hi/hey` → greeting + qualifying question
- `claim number/my number/specific/case details` → PII verification request
- Fallback → offer to submit claim or explain process
## Lead Capture Priority
Lead capture MUST happen before any answers for non-authenticated visitors. Rationale: if the user walks away after getting their answer, DRE still captured a lead. Data fields stored: name (required), company, email (required), phone. In production, this feeds a CRM notification.
## Message-to-Team Form
Subject dropdown options:
1. Question about my claim
2. New information about the debtor
3. Payment received / want to stop recovery
4. Update my contact info
5. Complaint or concern
6. Other
Message body is free text. On send, the message is logged to the case file and the team receives a notification. A confirmation bubble appears in chat.
@@ -0,0 +1,49 @@
# DRE Claim Audit Trail
## What Gets Tracked
Every edit to a claim submission is recorded with four fields:
- **What** changed (field name, old value → new value)
- **Who** made the change (username or "System")
- **When** (timestamp)
- **Why** (optional note field)
## Color Coding
- **Amber/gold** — DRE team edit (e.g. "John (DRE) changed Amount: $12,000 → $12,450")
- **Blue** — System action (e.g. "System changed Status: Submitted → AI Review")
- **Purple** — AI re-analysis triggered by new documents (e.g. "System re-analyzed claim — Score: 78 → 82 ⬆")
- **Green** — Client action (e.g. "Robert Smith created claim")
## Edit Scope
- Open claims ONLY — closed claims are read-only
- Document uploads trigger AI re-analysis but are not "edits" in the audit trail sense (they appear in the timeline instead)
- Change reason field is optional for DRE team edits; auto-populated for system changes
## When Re-analysis Fires
1. New document uploaded by client
2. Claim amount edited by DRE team
3. Claim status changed
Each re-analysis event records: previous score → new score, reason, and timestamp. The score delta is visible in both the case timeline and the change history.
## Data model
```json
{
"claim_id": "DRE-2026-0042",
"entries": [
{
"timestamp": "2026-07-08T10:15:00-04:00",
"actor": "John (DRE)",
"actor_type": "team",
"field": "amount",
"old_value": "$12,000",
"new_value": "$12,450",
"reason": "Corrected from invoice"
}
]
}
```
## Enforcement
- Open claims: allow edits, track every change
- Closed claims: read-only — no edits permitted
- Audit trail included in DRE Internal Binder on case close
@@ -0,0 +1,18 @@
# DRE Email Configuration
## Mailboxes
All hosted on MXroute (heracles.mxrouting.net). Outgoing relayed through mail.germainebrown.com:2525.
| Address | Display Name | Purpose |
|---------|-------------|---------|
| hello@debtrecoveryexperts.com | Debt Recovery Experts | General inquiries, sales |
| collections@debtrecoveryexperts.com | Debt Recovery Experts | Debtor-facing: demands, payment links |
| dre@debtrecoveryexperts.com | Debt Recovery Experts | Client-facing: status updates, DocuSeal, fee receipts |
## Credentials (stored in ~/.hermes/.env as DRE_EMAIL_*)
- IMAP: heracles.mxrouting.net:993 (SSL)
- Direct SMTP: heracles.mxrouting.net:587 (STARTTLS) — may reject from our IP
- Relay SMTP: mail.germainebrown.com:2525 (works for all sending)
- Password: M8ke.Money.Honey!
@@ -0,0 +1,20 @@
# DRE Email Inbox Integration
## Mailboxes
- dre@debtrecoveryexperts.com — Client-facing (status, LPOA, DocuSeal)
- collections@debtrecoveryexperts.com — Debtor-facing (demand letters, payment links)
Server: heracles.mxrouting.net:993 (MXroute)
Password: M8ke.Money.Honey! (same for both)
## Poller
/root/.hermes/scripts/dre-mail-poller.py — Python stdlib, no deps
- Polls every 60s via cron
- Reads UNSEEN messages, leaves as UNSEEN
- Writes to /var/www/internal/data/dre-mails.json (JSON array, 500 max)
- Deduplicates by mailbox:UID
- Logs to /var/log/dre-mail-poller.log
## Portal Integration
- JSON endpoint: internal.debtrecoveryexperts.com/data/dre-mails.json
- Inbox UI: internal.debtrecoveryexperts.com/inbox.html (dark theme, expandable cards)
@@ -0,0 +1,31 @@
# DRE Email Inbox Page Pattern
## Data Source
Emails served from `/var/www/internal/data/dre-mails.json`, populated by `dre-mail-poller.py` (cron every 60s).
Each record:
```json
{
"id": "dre:1234",
"mailbox": "dre",
"from": "client@example.com",
"to": "dre@debtrecoveryexperts.com",
"subject": "Question",
"body_preview": "Hi...",
"body": "Full body...",
"date": "2026-07-08 09:30:00",
"claim_match": "DRE-2026-0142",
"is_read": false
}
```
## Inbox Page UI
- **Stats:** Total count, unread (dre), unread (collections)
- **Filters:** Search (sender/subject/body), mailbox toggle (All / Client / Debtor)
- **Email rows:** Status dot (amber=unread, gray=read), mailbox badge (dre=blue, collections=amber), sender, subject, date, claim badge, expand button
- **Expanded:** Full body, mark-as-read, claim link
- **Refresh button:** Re-fetches `/data/dre-mails.json`
## Agents
- **Internal Agent DRE** (letter queue sidebar) — knows DRE is a Texas-registered debt collection agency, FDCPA compliant. Responds to "who are you", "what is DRE", "are you registered", "collection agency".
- **Public Agent DRE** (portal intake form) — same identity info. First interaction says "Texas-registered debt collection agency".
@@ -0,0 +1,62 @@
# DRE Fee Structure — Proposed for Tony
## Standard Fee Schedule
### Tier 1 — Soft Touch (automated email + payment link)
| Claim Amount | DRE Fee | Client Receives |
|---|---|---|
| $1,000 $5,000 | 25% (min $250) | 75% |
| $5,000 $15,000 | 22% | 78% |
| $15,000+ | 20% | 80% |
*Includes: email demand, Stripe ACH payment link, 14-day response window*
### Tier 2 — Formal Demand (certified mail via LetterStream)
- Flat 30% across all claim amounts
- Client receives 70%
*Includes: Tier 1 + certified letter, 15-day demand notice, proof of delivery*
### Tier 2.5 — Lien Threat (construction claims only)
- 30% if pre-lien notice resolves it (DRE-led)
- 30% + attorney filing fee if actual lien filed
### Tier 3 — Escalation (final notice + intensive contact)
- Flat 33% across all claim amounts
- Client receives 67%
*Includes: Tier 1-2 + final demand, skip tracing, enhanced debtor research*
### Tier 4 — Legal Action (referral to partner law firm)
| DRE referral fee | Law firm litigation fee | Client receives |
|---|---|---|
| 10% | 25% | 65% |
*DRE handles: case file prep, document transfer, client communication*
*Law firm handles: filing, court appearances, judgment enforcement*
## Example — $15,000 Claim
| Scenario | DRE Fee | Client Gets | Timeline |
|---|---|---|---|
| Tier 1 (email) | $3,300 (22%) | $11,700 | 2-14 days |
| Tier 2 (certified) | $4,500 (30%) | $10,500 | 15-30 days |
| Tier 3 (final notice) | $4,950 (33%) | $10,050 | 30-60 days |
| Tier 4 (litigation) | $1,500 (10%) + $3,750 (firm) | **$9,750** | 60-180 days |
## Out-of-Pocket Costs (passed to debtor or deducted from proceeds)
| Cost | Amount | When |
|---|---|---|
| Online notarization (LPOA) | ~$25-35 | Per claim |
| Identity verification | ~$4 | Per signer |
| Certified mail | ~$8.34 | Per letter |
| Court filing fees | ~$250-400 | Tier 4 only |
## Questions for discussion with Tony
1. Flat 30% across all tiers vs tiered rates?
2. Minimum fee floor ($250)?
3. Volume discounts for repeat clients?
4. Payment processing fees passed to debtor?
@@ -0,0 +1,42 @@
# DRE Letter Templates — 8-Tier Workflow
## AUTOMATED (Items 1-3) — sent from dre@ automatically based on claim status
### 1. Initial Onboarding — "We've Received Your Claim"
### 2. Under Review — "Your claim is being reviewed"
### 3. Accepted + LPOA — Includes LPOA attachment link + notarization instructions
Each contains: Claim ID, debtor name, amount, payment link (pay.debtrecoveryexperts.com), next steps.
## QUEUED (Items 4-8) — require authoring + dual approval
Anita authors/edits → submitted for approval → Tony + Germaine both approve → sent from collections@
### 4. Soft Touch (Tier 1) — Friendly reminder email
### 5. Formal Demand (Tier 2) — 14-day demand with escalation warnings
### 6. Lien Threat (Tier 2.5) — Texas mechanic's lien notice, 10-day cure
### 7. Escalation (Tier 3) — Final notice before legal action
### 8. Legal Action (Tier 4) — Lawsuit referral notice
All queued letters include FDCPA disclosure: "This communication is from a debt collector attempting to collect a debt. Any information obtained will be used for that purpose."
### Payment Link Requirement
Every letter template and mock letter **must** include this line immediately before the FDCPA disclosure:
```
Payment can be made at: https://pay.debtrecoveryexperts.com
```
See `references/letter-queue-payment-links.md` for the full pattern including the Anita notification bar that fires on new draft creation.
Full templates at /root/.hermes/references/dre-letter-templates.md
## Stage-to-Template Mapping for "+ New Letter" Modal
Client stage → available templates:
- soft-touch → formal-demand
- formal-demand → lien-threat, escalation
- lien-threat → escalation, legal-action
- escalation → legal-action
- legal-action → (none — handled by counsel)
@@ -0,0 +1,131 @@
# DRE Portal — Technical Specifications
## Internal working document — July 2026
### Claim Numbering
- Format: `DRE-YYYY-NNNN` (e.g. DRE-2026-0001)
- Auto-generated on claim submission
### Client ID
- Format: `CLT-YYYY-NNNN` (e.g. CLT-2026-0001)
- Generated on account creation
### Closed Case Binders
On case close, two PDF binders are auto-generated:
**Binder 1 — DRE Internal:**
DRE-YYYY-NNNN_CLOSED_DRE.pdf
Includes: intake, evidence, AI analysis, AI debtor research, AI weakness analysis,
internal notes, signed/notarized LPOA, certified mail receipts, communication log,
settlement, fee disclosure, payment confirmation
**Binder 2 — Client Package:**
DRE-YYYY-NNNN_CLOSED_Client.pdf
Includes: claim summary, signed/notarized LPOA, settlement/payment confirmation,
fee statement. EXCLUDES: AI analysis, debtor research, internal notes.
**Evidence Archive:**
DRE-YYYY-NNNN_evidence.zip — original uploaded documents
### Full Workflow
#### Phase 1 — Intake
- Client submits claim at debtrecoveryexperts.com
- Intake form fields: your info (name, business, email, phone) → debtor info (business, contact, email, phone, address) → claim details (amount, description, state, debt type) → document upload
- Terms of Service signed via DocuSeal
- Turnstile bot protection (invisible mode, Cloudflare)
- Claim auto-numbered and enters DRE queue
#### Phase 2 — AI Review
- AI Claim Analysis (Claude Opus 4.7) → score + weakness report
- AI Debtor Research (ScrapingAnt + Sherlock + TX SoS) → skip tracing, asset scan, legal history
- Team reviews → Approve / Request More Docs / Reject
- Additional docs uploaded mid-process trigger AI re-analysis with score delta tracked
#### Phase 3 — Legal Setup
- LPOA sent to client via DocuSeal
- Client signs → notarized via Proof (online RON)
- DRE now authorized to collect
#### Phase 4 — Tiered Recovery
- Tier 1: Soft Touch — email + ACH link (Day 1-5)
- Tier 2: Formal Demand — certified mail via LetterStream (Day 7-14)
- Tier 2.5: Lien Threat — pre-lien notice for construction claims (Day 15-21)
- Tier 3: Escalation — final notice (Day 21-30)
- Tier 4: Legal Action — referral to partner law firm (Day 30+)
- 4-step tier progress indicator on client dashboard (visual circles with labels, colored by completion)
#### Phase 5 — Settlement
- Payment collected via Stripe ACH
- DRE fee deducted per tier schedule
- Costs deducted (notary, certified mail, filing fees)
- Balance disbursed to client
- Case closed → two binders generated
### Fee Structure (proposed)
- Tier 1: 20-25%
- Tier 2: 30%
- Tier 2.5: 30% (+ attorney if lien filed)
- Tier 3: 33%
- Tier 4: 10% DRE referral + 25% law firm
### Search & Document Retrieval
Cases are searchable in the portal via database fields:
- Claim number, client name, debtor name, amount, status, date range
- Tags (e.g. "construction", "lien filed", "litigated", "debtor paid Tier 2")
- Key flags from AI analysis
On case close, PDF text is extracted and stored in the database for full-text search.
Future: Paperless-ngx if volume exceeds 500+ cases.
### Audit Trail (Change Tracking)
Any edit to a claim submission is tracked with a full history:
- What field was changed (old value → new value)
- Who made the change (user name or "system" for automated updates)
- When the change was made (timestamp)
- Why the change was made (optional note field)
The audit log is visible in the DRE internal dashboard under each claim. Edits allowed on open claims only. Closed claims are read-only. Audit trail included in the DRE Internal Binder on case close.
Color coding in audit log:
- DRE team changes: amber/gold
- System changes: blue
- Client actions: green
### Document Upload During Recovery
Clients can upload additional documents at any point during the active recovery process via their portal. Each upload can include a reason/context note. When new docs arrive, the AI automatically re-analyses the claim and updates the score. The re-analysis event is logged in both the timeline and the change history with the score delta (e.g. "Score: 78 → 82").
### Repeat Clients
Clients create an account on first claim. On return:
- ToS already on file (signed once)
- Client info pre-filled on new claims
- Dashboard shows: active cases, past cases with outcomes, payment history
- Can download their own case binders
- Optional loyalty pricing after 3+ claims (e.g. 25% vs 30%)
### Client Portal View (after login)
- Active Cases: claim number, debtor, amount, current tier with 4-step progress indicator
- Past Cases: claim number, debtor, amount, outcome (Recovered / Uncollectible) with Download button
- [Submit New Claim] button
- [Download Case Binders] for closed cases
- [Payment History] — all disbursements received
### Approval Workflow
When a DRE team member clicks "Approve & Continue", the partner (Tony) receives a notification to acknowledge. The case holds at approval step until both partners have signed off. The approval status indicator appears in the header nav amber badge.
### Turnstile Anti-Bot
Form uses Cloudflare Turnstile (invisible mode). Site key and secret key stored in `.env`. Privacy policy includes Turnstile Privacy Addendum reference.
### Debtor Research Sources
- LinkedIn (via ScrapingAnt headless Chrome)
- Public property records
- Texas Secretary of State business search (status, registered agent, officers, filing compliance)
- Court records / legal history
- Asset scans
- Output: sources found, estimated revenue, assets, prior judgments, risk assessment
### Required Services
- DocuSeal: ✅ deployed at sign.itpropartner.com
- Proof.com: ❌ need account (online notarization)
- LetterStream: ❌ need account (certified mail)
- Stripe Connect: ❌ need keys (ACH payments)
- Law firm partner: ❌ need referral agreement (litigation)
@@ -0,0 +1,16 @@
# DRE Roles & Systems Guide — Email Pattern
When sending the DRE systems guide to Germaine, Tony, or Anita:
1. Build the email body as inline-styled HTML by hand in Python
2. Use `<table cellpadding="5" cellspacing="0" border="0">` with explicit inline styles
3. Structure: H2 title, HR divider, H3 per-person sections, HR, H3 systems sections with tables, HR, Quick Reference table
4. Append `{closing}` as `<p><em>{closing}</em></p>` between body and signature
5. Append Sho'Nuff signature with random title, base64 image, red HR
Key content sections:
- Per-person role description (Anita read-only, Tony full admin, Germaine full admin)
- Three systems: CRM (crm.debtrecoveryexperts.com, magic link), Portal (public pages), Email (collections@, dre@, hello@)
- Quick reference table: Where to log in, login method, who can approve, client access
Send to g@germainebrown.com with BCC. Tony's email: browo955@yahoo.com. Anita's: anitabrownwrites@gmail.com.
@@ -0,0 +1,24 @@
# DRE Systems & Roles Guide
## Access Levels
- **Germaine** — Full admin: claims, debtors, CRM, portal, approvals
- **Tony** — Full admin (same rights as Germaine): claims, debtors, CRM, portal, approvals
- **Anita** — Read-only: can view claims/debtors/case progress, no approvals or changes
## Portal Tiers
| Tier | URL | Auth | Content |
|---|---|---|---|
| Public | portal.debtrecoveryexperts.com | None | debt-recovery.html, dre-fee-calculator.html, dre-pay.html |
| Internal | internal.debtrecoveryexperts.com | Basic auth | dre-dashboard.html, dre-client-dashboard.html, dre-case-aging.html |
## Email
| Address | Purpose |
|---|---|
| hello@debtrecoveryexperts.com | General inquiries |
| collections@debtrecoveryexperts.com | Debtor-facing demands, payment links |
| dre@debtrecoveryexperts.com | Client-facing status, DocuSeal, fee receipts |
All display as "Debt Recovery Experts". SMTP relay via mail.germainebrown.com:2525.
@@ -0,0 +1,60 @@
# DRE Session Reference — July 7, 2026
Major DRE portal build session. Everything below was established, corrected, or re-confirmed.
## New Features Added
- **Client dashboard:** Summary cards, active/past claims with outcome badges, recovery stats, disbursement history
- **Tier progress indicator:** 4-step visual (Soft Touch → Demand → Escalate → Legal) with colored circles and centered labels
- **Debtor payment page** (`dre-pay.html`): standalone page for phone-in payments, claim number + name + amount + Turnstile → Stripe
- **Fee calculator** (`dre-fee-calculator.html`): live calculation, 4 tiers side-by-side with color-coded borders
- **Case aging dashboard** (`dre-case-aging.html`): days in tier vs target, color-coded alerts, stalled case action banner
- **SMS notification system:** Twilio integration planned for client tier updates and debtor text-to-pay
## Corrections Made
- **Email formatting:** Raw markdown email rejected as "terrible" — rebuilt as hand-crafted inline HTML with proper tables, signature, and Sho'Nuff closing. USE HTML EMAIL WRITING from `send-shonuff.py` always.
- **Client form flow:** First section must be "Your Information" (claimant), then "Debtor Information" — not debtor first.
- **Document upload:** Remove placeholder document examples from the mockup — leave empty until actual uploads happen.
- **Approval workflow:** Germaine + Tony are approvers. Anita is read-only. Hourly reminders for pending approvals.
- **Mobile-responsive:** All client-facing pages already mobile-friendly (Tailwind mobile-first), but pay.html needed no additional work — it was already single-column.
## Site Key Credentials
- Turnstile site key: `0x4AAAAAADxaB0Bik1bqx_CA`
- Turnstile secret key: `0x4AAAAAADxaB0zXHHGhM9TGusYKs8VEen8` (saved to ~/.hermes/.env)
- Privacy policy updated with Cloudflare Turnstile Privacy Addendum reference
## Fee Structure (confirmed)
| Tier | DRE Fee |
|------|---------|
| 1 — Soft Touch | 20-25% |
| 2 — Formal Demand | 30% |
| 2.5 — Lien Threat | 30% (+ attorney if filed) |
| 3 — Escalation | 33% |
| 4 — Legal Action | 10% DRE + 25% law firm |
## Hosted Pages
All under `app.itpropartner.com/`:
- `/dre-dashboard.html` — DRE internal claims queue (dark theme)
- `/dre-client-dashboard.html` — Client portal after login
- `/debt-recovery.html` — Claim intake form (ScrapingAnt style)
- `/dre-pay.html` — Debtor payment page
- `/dre-fee-calculator.html` — Fee calculator
- `/dre-case-aging.html` — Case aging dashboard
## Services Configured on Core (cross-session scope)
- **SearXNG**: Docker on port 8888 (localhost), JSON API, unlimited self-hosted search
- **DocuSeal**: Docker on port 3000, proxied via Caddy on sign.itpropartner.com
- **Caddy**: Routes sign.itpropartner.com, core.itpropartner.com, app.itpropartner.com with auto TLS
- **Ollama**: Systemd service, llama3.2:3b loaded, port 11434
- **MySQL tunnel**: autossh persistent tunnel to wphost02:3306 on port 33060
- **Firecrawl**: API key configured, 1000 credits/mo
- **ScrapingAnt**: API key configured, 10000 free credits, JS rendering enabled
## Email Correction
Bounced email to germaine@anitabrown.co — account doesn't exist. Correct address for Anita is anitabrownwrites@gmail.com. The Cartagena itinerary was re-sent to the correct address.
@@ -0,0 +1,33 @@
# DRE Website Content — WordPress
## Compiled July 7, 2026
7 pages built for debtrecoveryexperts.com WordPress site. See `dre-session-jul7.md` for portal specs and corrections history.
### Pages & Structure
| Page | Key Content |
|------|-------------|
| **Homepage** | Hero (Get Paid What You're Owed), 3-step process, Why DRE (5 reasons), Recovery Stats (70%+ pre-litigation), CTA |
| **How It Works** | 5-phase workflow (Intake → AI Review → Legal Setup → Tiered Recovery → Settlement), timeline table |
| **Fee Structure** | Tier 1: 20-25%, Tier 2: 30%, Tier 2.5: 30%, Tier 3: 33%, Tier 4: 10%+25%. $15K example table. Out-of-pocket costs |
| **Construction Liens** | Texas mechanic's lien process, deadlines (3mo residential, 4mo commercial), required docs |
| **About** | Texas-based B2B collection, co-owned Germaine + Tony Brown, 4 values |
| **FAQ** | 13 Q&As across General/Fees/Process categories |
| **Contact** | Placeholder for phone/email/address |
### Key Brand Decisions
- **Logo:** Concept C — Industrial Separated. D (amber) | R (slate) | E (amber). Full subtitle: "DEBT RECOVERY EXPERTS" in small caps.
- **Palette:** Navy (#0f172a), Amber (#f59e0b), Slate (#e2e8f0). Matches the ScrapingAnt-style portal theme.
- **Typography:** Inter sans-serif. Bold 800 for D/E, Bold 700 for R.
- **Favicon:** Amber square with white "D" (48x48px).
- **CTA placements:** Home hero + footer, bottom of every page.
### Integrations
- **Fee Calculator:** Link to `app.itpropartner.com/dre-fee-calculator.html`
- **Agent DRE Chatbot:** Floating amber chat bubble on intake page (`debt-recovery.html`) — answers fees, process, docs, timelines
- **DocuSeal:** LPOA signing at `sign.itpropartner.com`
- **Portal:** Client dashboard at `core.itpropartner.com/capabilities/dre-client-dashboard.html`
### Full content text is in the email sent Jul 7, 2026 to g@germainebrown.com with subject "DRE Website Content — Ready for WordPress"
@@ -0,0 +1,52 @@
# IMAP Email Migration Pattern
Source-to-destination IMAP migration using Python stdlib (imaplib). Used for migrating email accounts from SiteGround to MXroute.
## Known Hosts
| Provider | IMAP Host | Port |
|----------|-----------|------|
| SiteGround | c1113726.sgvps.net | 993 |
| MXroute | heracles.mxrouting.net | 993 |
| germainebrown.com | mail.germainebrown.com | 993 |
| iCloud | imap.mail.me.com | 993 |
## Pattern
```python
import imaplib, ssl
ctx = ssl.create_default_context()
# Connect old
old = imaplib.IMAP4_SSL(OLD_HOST, 993, ssl_context=ctx, timeout=15)
old.login(email, old_pw)
# Connect new
new = imaplib.IMAP4_SSL(NEW_HOST, 993, ssl_context=ctx, timeout=15)
new.login(email, new_pw)
# Get folder list
for line in old.list()[1]:
decoded = line.decode()
# IMAP list format: (flags) "." "foldername"
# Extract the last quoted segment
parts = decoded.split('"')
folder = parts[-2] if len(parts) >= 2 else decoded.split()[-1]
# Copy messages
for uid in uids:
r = old.fetch(uid, "(RFC822)")
if r[0] == "OK" and isinstance(r[1][0], tuple):
new.append(target_folder, None, None, r[1][0][1])
```
## Pitfalls
- **SiteGround folder list is nonstandard** — subfolders show as `INBOX.Trash`, `INBOX.Sent`, etc. but the LIST response uses `"."` as separator. Parse carefully — there are many redundant `.` entries. Only folders with actual content (INBOX.Trash, INBOX.Sent, etc.) are real.
- **Timeout on large folders** — 60s is not enough for 100+ messages. Set terminal timeout to 300 for full migration.
- **Duplicate on retry** — if a migration is interrupted and restarted, messages get appended twice. No built-in dedup during copy. Mapped folders (Trash, Sent) may show 2x expected count after retry. Clean up via MXroute webmail.
- **Folder name mapping** — SiteGround uses dotted hierarchy (INBOX.Trash), MXroute uses flat names (Trash). Map explicitly per account.
- **MXroute folder creation** — `new.create("Trash")` works for flat names but can fail if the folder already exists (catch and pass).
- **MXroute LIST response** may show 6 `.` entries with no content — these are cursor entries, not actual folders. Filter them out with `if fname == ".": continue`.
- **SiteGround LIST `%` pattern may error** — `list('', 'INBOX.*')` returns BAD on SiteGround. Use `list()` with no pattern and parse the full response.
- **List response parsing is provider-specific** — the HMXroute format is `(flags) "." Trash` (simple), while SiteGround is `(flags) "." "INBOX.Trash"` (quoted). Use `rsplit('"', 2)` for max compatibility across providers.
@@ -0,0 +1,85 @@
# Letter Queue — Payment Link & Anita Notification Pattern
## Overview
The DRE letter queue page (`/var/www/internal/letter-queue.html`) is an all-in-one HTML+JS internal tool for authoring, approving, and sending demand letters. This reference documents two cross-cutting additions applied to every letter template and the authoring workflow.
## Payment Link Placement
**Every letter template and mock letter must include** the payment URL before the FDCPA disclosure:
```
Payment can be made at: https://pay.debtrecoveryexperts.com
```
The line goes **immediately before** the FDCPA disclosure:
```
This communication is from a debt collector attempting to collect a debt.
```
### Templates affected (in `templateContent` map)
- `formal-demand` — already had link
- `lien-threat` — already had link
- `escalation` — already had link
- `legal-action`**was missing**, added via patch
### Mock letter data affected (in `letters` array)
All 4 mock entries had the link appended during the 2026-07-08 update. The link lives inside the template content string so the composer textarea reflects it immediately when a user selects a letter.
## Anita Notification Bar
When a new draft is created via the **"+ New Letter" modal** (i.e., `selectTemplate()` fires), show an amber alert bar below the nav bar:
### HTML structure
```html
<div id="anitaNotification" class="anita-notification hidden" role="alert">
<span>✏️ Anita — a new letter draft is ready for your review and authoring.</span>
<button class="close-btn" id="anitaNotifClose" aria-label="Dismiss">&times;</button>
</div>
```
### CSS
```css
.anita-notification {
display: flex; align-items: center; gap: 0.75rem;
background: #fbbf24; color: #1a1a1a;
padding: 10px 24px; font-size: 0.875rem; font-weight: 500;
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}
.anita-notification .close-btn { margin-left: auto; background: none; border: none; color: #1a1a1a; cursor: pointer; font-size: 1.25rem; opacity: 0.6; padding: 0 4px; line-height: 1; }
.anita-notification .close-btn:hover { opacity: 1; }
.anita-notification.fade-out { opacity: 0; transition: opacity 0.5s ease-out; }
```
### JS function
```js
let anitaNotifTimer = null;
function showAnitaNotification() {
if (!anitaNotification) return;
if (anitaNotifTimer) { clearTimeout(anitaNotifTimer); anitaNotifTimer = null; }
anitaNotification.classList.remove('hidden', 'fade-out');
anitaNotifTimer = setTimeout(() => {
anitaNotification.classList.add('fade-out');
setTimeout(() => {
anitaNotification.classList.add('hidden');
anitaNotification.classList.remove('fade-out');
}, 500);
}, 15000);
}
anitaNotifClose.addEventListener('click', () => {
if (anitaNotifTimer) { clearTimeout(anitaNotifTimer); anitaNotifTimer = null; }
anitaNotification.classList.add('hidden');
});
```
### Hook point
In `selectTemplate()` (inside the New Letter modal flow), call `showAnitaNotification()` right after the new letter object is pushed to the `letters` array — before `selectLetter(newId)`.
## Re-applying these patterns
When duplicating the letter queue page or adding new mock data / templates:
1. Every `templateContent` entry **must** end with `\n\nPayment can be made at: https://pay.debtrecoveryexperts.com\n\nThis communication is from a debt collector attempting to collect a debt...`
2. The Anita notification bar element must exist below `<nav>` but above `<main>`.
3. `showAnitaNotification()` must be called in `selectTemplate()` after creating a new letter entry.
@@ -0,0 +1,33 @@
# Online Notary Research for DRE (Jul 2026)
## The problem
DRE needs LPOA notarized online (Texas RON). Must be API-accessible for automation. Every online notary API is sales-gated — none offer self-service API keys on monthly plans. This is standard industry practice due to identity verification / compliance requirements.
## Shortlist comparison
| Service | Pay-as-you-go | Monthly | Per-notary | API availability | Reviews | Texas? | Security |
|---------|--------------|---------|------------|-----------------|---------|--------|----------|
| **OneNotary ✅** | **$0/mo, $25/session** | ~$49-65/mo | $25 (bulk cheaper) | Sales-gated but verified developer portal exists | 5.0/5.0 (3,222 Trustpilot) | ✅ Dedicated TX page, TX-licensed notaries | SOC 2, ISO 27001, MISMO |
| **BlueNotary** | $0/mo, $25/session | **$37/mo (2 docs incl)** | ~$15/additional | Sales-gated — no public docs, API button loops to integrations page | 4.7/5.0 (1,100+ Trustpilot) | Likely but unverified | Not confirmed |
| **Proof.com** | $25/mo Pro | $25/mo Pro | $25/session | API locked to Premium tier ($$$, no public price) | Enterprise sales | ✅ | Enterprise-grade |
| **OnlineNotary.net** | $19.95/signer | **$30/mo (API+webhooks)** | $15/signer | Claimed but **zero public documentation** | 33 reviews only, **Scam Detector: Medium-Risk**, no BBB profile | Unverified | Not confirmed, hours 9AM-2AM only |
## Key findings
- **Every online notary API is sales-gated.** None offer self-service API key generation on monthly plans.
- **OnlineNotary.net is HIGH RISK** — claimed 1,500+ reviews but only 33 on Trustpilot, no BBB profile, medium-risk scam detector rating, and their "API" has zero public documentation (no developer portal, no endpoints, no docs anywhere).
- **OneNotary is the clear winner** — 5.0/5.0 from 3,222 reviews, 45,000+ virtual notaries, SOC 2 / ISO 27001, dedicated Texas RON compliance page, verified developer portal at dev.onenotary.us.
- **BlueNotary is a good second choice** — $37/mo with 2 docs included is competitive, but API access is unconfirmed on that plan.
## Recommended approach for DRE
| Phase | Method | Cost to DRE | Automation level |
|-------|--------|-------------|-----------------|
| **First 10-20 claims** | Manual OneNotary link — client clicks, gets notarized in ~15 min, no account needed | $25/claim (passed to debtor) | Manual (1 step) |
| **After volume justifies** | Contact OneNotary sales for API docs → integrate via dev.onenotary.us | $0/mo or ~$49-65/mo depending on plan | Fully automated |
For 10 claims/month at $25/session: $250/mo. At BlueNotary's $37/mo + ~$15/additional: ~$157/mo. The $93/mo difference is negligible for legal document handling — **prioritize reliability over price**.
## Files
- `/root/onenotary-research-report.md` — Full OneNotary deep dive
- `/root/dre-onlinenotary-research.md` — OnlineNotary.net vs OneNotary comparison
@@ -0,0 +1,27 @@
# Online Notary Provider Research for DRE
Researched Jul 7, 2026. Goal: find a RON provider with API access for automated LPOA notarization at reasonable cost for a debt recovery company (~10 claims/mo, single signer per session).
## The Problem
Every online notary API is sales-gated. None offer self-service API keys or public documentation on a monthly plan. This is standard industry practice due to identity verification, KBA, and compliance requirements — they vet each integration before releasing API docs.
## Options Compared
| Provider | Pay-as-you-go | Monthly Plan | API Access | Reviews | Texas OK | Notes |
|----------|--------------|-------------|-----------|---------|---------|-------|
| **OneNotary** | $25/session, **$0/mo** ✅ | ~$49-65/mo | ✅ Sales-gated but has dev portal (dev.onenotary.us) | 5.0/5.0 — 3,222 reviews (Trustpilot) | ✅ Dedicated TX page, SOC 2 / ISO 27001 | **RECOMMENDED** |
| **BlueNotary** | $25/session | **$37/mo** (2 docs incl, ~$15/additional) | ⚠️ Sales-gated, no public docs, "See API Docs" button loops to integrations page | 4.7/5.0 — 1,100+ reviews | Not confirmed | Acceptable backup |
| **Proof** | $25/session | $25/mo (Pro, no API) · $90+/mo (Premium, API) | ✅ On Premium only ($90+/mo) | Established brand | ✅ | Too expensive for API |
| **NotaryCam** | Custom only | Custom | ✅ Enterprise | Established | ✅ | Overkill for DRE |
| **OnlineNotary.net** | $19.95/signer | **$30/mo** (API, $15/additional signer) | ✅ Claimed on $30/mo plan | **RED FLAGS:** Only 33 reviews, no BBB profile, rated "Medium-Risk" on Scam Detector, 9AM-2AM hours (not 24/7) | Not confirmed | ❌ SKIP |
## Recommendation
**OneNotary pay-as-you-go at $0/mo and $25/session** for the first batch of claims. No monthly commitment. When volume warrants, contact sales for API access (they confirmed a developer portal exists). Cost of $25/claim is passed to the debtor as an out-of-pocket cost.
## Sources
- Trustpilot ratings verified via searches
- Scam Detector rating for OnlineNotary.net: Medium-Risk, 54.6/100 trust score
- ScrapingAnt could not scrape pricing pages due to JS rendering
- BBB: OneNotary has profile; OnlineNotary.net has no BBB profile at all
@@ -0,0 +1,86 @@
# DRE Portal — Live URLs and Access
## Internal Portal
Accessible via Cloudflare Access SSO (email domain: germainebrown.com, yahoo.com).
| Page | URL | Notes |
|------|-----|-------|
| Home | https://internal.debtrecoveryexperts.com/ | Landing with nav cards |
| Claims Dashboard | https://internal.debtrecoveryexperts.com/dre-dashboard.html | Case management |
| Case Aging | https://internal.debtrecoveryexperts.com/dre-case-aging.html | Aging analysis |
| Letter Queue | https://internal.debtrecoveryexperts.com/letter-queue.html | Draft/approve/send letters |
| Inbox | https://internal.debtrecoveryexperts.com/inbox.html | Incoming mail viewer |
| Analytics | https://internal.debtrecoveryexperts.com/dre-analytics.html | AI scores + metrics |
| Client View | https://internal.debtrecoveryexperts.com/dre-client-dashboard.html | Client reference (light theme) |
## Public Portal
| Page | URL | Notes |
|------|-----|-------|
| Claim Submission | https://portal.debtrecoveryexperts.com/ | New client intake |
| Login | https://portal.debtrecoveryexperts.com/login.html | SSO via Cloudflare Access |
## CRM
| Page | URL | Notes |
|------|-----|-------|
| TwentyCRM | https://crm.debtrecoveryexperts.com/ | Full CRM via Cloudflare Access |
## Tech Stack
- **Server:** Core (netcup KVM, 152.53.192.33)
- **Web server:** Caddy (reverse proxy + file server)
- **Internal pages:** /var/www/internal/ (dark theme, persistent nav)
- **CRM:** Docker Compose (TwentyCRM server + worker + PostgreSQL + Redis)
- **Email data:** /var/www/internal/data/dre-mails.json (polled every 60s)
## File structure
```
/var/www/
├── internal/ ← DRE internal portal pages
│ ├── index.html
│ ├── dre-dashboard.html
│ ├── dre-case-aging.html
│ ├── letter-queue.html
│ ├── inbox.html
│ ├── dre-analytics.html
│ ├── dre-client-dashboard.html
│ └── data/
│ └── dre-mails.json ← Generated by IMAP poller
├── capabilities/ ← Public-facing portal
│ ├── debt-recovery.html
│ └── login.html
└── static/ ← Shared assets
└── shonuff-signature.svg
```
## Nav structure (all internal pages)
Home, Claims, Aging, Letters, Inbox, Analytics
The nav is identical on every page (only the active link changes). Dark theme pages use `class="nav-link"` with amber active state. The client dashboard is light themed.
## Caddy config
```caddy
internal.debtrecoveryexperts.com {
root * /var/www/internal
try_files {path} {path}.html /index.html
file_server
}
portal.debtrecoveryexperts.com {
handle /api/* {
reverse_proxy 127.0.0.1:3001 # TwentyCRM
}
root * /var/www/capabilities
try_files {path} {path}.html /index.html
file_server
}
crm.debtrecoveryexperts.com {
reverse_proxy 127.0.0.1:3001 # TwentyCRM
}
```
@@ -0,0 +1,55 @@
# DRE Portal Mockups — Reference Index
All mockups live at `/root/portal-mockup/` and are served via Caddy at `https://app.itpropartner.com/`.
## Customer-Facing Pages
| Page | Purpose | Design Notes |
|------|---------|-------------|
| `debt-recovery.html` | Claim intake form | Split-screen: dark gradient (navy→amber) brand left, clean white form right. Form order: Your Info → Debtor Info → Claim Details → Docs → Terms → Turnstile → Submit. Upload area empty until files selected. Turnstile invisible mode. |
| `dre-client-dashboard.html` | Client portal after login | White theme, summary cards top, active claim with tier progress indicator (4-step flex column: circles + labels centered below + connecting lines), past claims table with outcome badges, right sidebar with submit button + stats + disbursements. **Agent D.R.E chat widget** embedded as fixed bottom-right amber bubble. |
| `dre-pay.html` | Debtor payment landing page | Minimal single-column card. Fields: Claim/Invoice #, Full Name, Amount. Turnstile. "Continue to Payment" button → Stripe checkout. Trust signals (Secure, ACH, Receipt). No navigation, no clutter. |
| `dre-fee-calculator.html` | Live fee calculator | Input amount in any currency, see all 4 tiers side-by-side showing "You receive" and "DRE fee" at each tier. Color-coded cards (green→blue→amber→red). Live JavaScript recalculation on input change. |
## Internal DRE Pages (dark theme, #0f172a background)
| Page | Purpose | Sections |
|------|---------|----------|
| `dre-dashboard.html` | Internal claims queue + claim detail | Claims table (score, status, age), claim detail card with action buttons, recovery progression timeline (tiered), case timeline (event stream), change history (audit log), AI analysis panel (score gauge + factor bars + weakness text + risk flags), debtor research panel (ScrapingAnt + Sherlock results + TX SoS data), case comparison stats. |
| `dre-case-aging.html` | Case aging dashboard | Summary cards (active/avg age/on-track rate), table: claim/debtor/amount/tier/age in tier/target/status, stalled alert banner, SMS notification status card. Targets: Tier 1=5d, Tier 2=7d, Tier 3=10d. |
| `dre-pay.html` | Debtor payment page | Minimal single-column: claim/invoice #, full name, amount, Turnstile → Stripe. No navigation. Trust signals. |
| `dre-fee-calculator.html` | Live fee calculator | Input amount, see all 4 tiers side-by-side. Color-coded cards. JavaScript live recalculation. |
## Approval Workflow UI
- Approve & Continue button has hover tooltip explaining dual-approval workflow
- Pending approvals shown in header nav as amber badge: "● 1 Pending Approval" with hover detail
- Status in claims table: "Pending Germaine ✓", "Pending Tony ✓", "Acknowledged"
- Anita has read-only view — approver-only elements hidden
## Color Schemes
| Context | Theme | Card bg | Border accent | Text |
|---------|-------|---------|--------------|------|
| Customer | White (#f8fafc bg, white cards) | #ffffff | Blue/amber | Gray-900 headers, gray-500 body |
| Internal | Dark (#0f172a bg) | #1e293b | #334155 | Gray-300 body, amber/blue/green for status |
| Debtor pay | Light (#f8fafc) | White card | Gray-200 | Gray-900, amber CTAs |
## ScrapingAnt-Inspired Layout (used on debt-recovery.html)
```
Left (50%): Gradient navy → amber, logo, tagline, feature icons with descriptions, trust footer
Right (50%): Clean white form max-w-md centered vertically
Mobile: Single column, brand info collapses to top header
```
## Agent D.R.E Chat Widget (embedded in dre-client-dashboard.html)
Three states:
1. **Lead capture** (non-logged-in visitor) — 4 fields (Name*, Company, Email*, Phone), submit unlocks chat
2. **Logged-in greeting** — "Welcome back, {Company}! Your claim against {Debtor} is in {Tier N}. I'm Agent D.R.E."
3. **Conversation** — FAQ buttons + free-text input + message team form
Personality: empathetic, engaging with leading questions, no promises, never shares internal methods. Knowledge isolation documented in debt-recovery-workflow skill.
Message team form: subject dropdown + free text + send/cancel buttons. Logs to case file, notifies team.
@@ -0,0 +1,57 @@
# Session Highlights — 2026-07-07
## Infrastructure Completed
- Server renamed to "core", hostname set
- WireGuard tunnel to home CCR (10.77.0.2), keyless SSH
- autossh persistent tunnel to wphost02 MySQL (systemd service, auto-recover)
- Caddy reverse proxy with auto HTTPS for 3 subdomains: sign, core, app
- Tailscale Serve restored for portal access
- All mockups accessible at app.itpropartner.com/
## New Services Deployed on Core
- DocuSeal — self-hosted document signing (sign.itpropartner.com)
- SearXNG — self-hosted meta search engine (localhost:8888)
- Ollama — local LLM service (llama3.2:3b, systemd auto-start)
- MySQL MCP server — Python stdio protocol, autossh tunnel
## API Stack
- Firecrawl — web search & extraction (1K credits/mo free)
- ScrapingAnt — JS rendering via headless Chrome (10K free, $19 for 100K)
- Cloudflare — DNS:Edit + Registrar:Admin (12 zones)
- SearXNG — unlimited self-hosted search (no API key)
- DocuSeal — document signing API + web UI
- admin-ai — DeepSeek + Anthropic + OpenAI models
## DRE Portal Complete Mockups
| Page | URL | Theme |
|------|-----|-------|
| Claim intake | debt-recovery.html | Split-screen (navy→amber + white form) |
| Client dashboard | dre-client-dashboard.html | Light, summary cards, tier progress |
| Internal dashboard | dre-dashboard.html | Dark, AI analysis, change history |
| Case aging | dre-case-aging.html | Dark, stalled-case tracking |
| Debtor payment | dre-pay.html | Minimal, no nav |
| Fee calculator | dre-fee-calculator.html | Live tier-by-tier calculation |
| Capabilities | capabilities.html | Hover tooltips on all elements |
## Client-Facing Enhancements
- Fee calculator widget on intake form
- Client can upload additional docs during recovery
- AI re-analysis on new document upload (score delta in timeline)
- Tier progress indicator (4-step: circles + centered labels + connecting bars)
- SMS notification slot (Twilio, not connected yet)
- Change history/audit trail on every claim
- Case aging dashboard (red/amber/green days-in-tier)
## DRE Workflow Completed
- Full 6-phase workflow documented (intake through dual-binder closure)
- 4-tier recovery + lien tier 2.5 for construction
- Dual approval workflow (Germaine + Tony must both sign off)
- Anita is read-only
- Hourly approval reminders via no_agent cron
- Compliance manual (22 sections), ToS, Privacy Policy — all drafted
## Model Failover
- Multi-tier chain: DeepSeek → Claude Opus → DeepSeek Flash → local Llama 3.2
- Ollama systemd service for local fallback
- Daily model health check (8 AM, no_agent)
- Memory limits doubled (10K chars agent, 5K chars user)
@@ -0,0 +1,69 @@
# Session Highlights — 2026-07-07b (afternoon)
## Debt Recovery Workflow — Key Additions
### Payment & Billing
- Every debtor touchpoint includes a **Stripe ACH payment link** — email, certified letter, text-to-pay, and phone-in payment portal
- Xero can be added later for accounting (Stripe integration is seamless)
- Debtors can pay in installments via Stripe
### Fee Calculator
- New mockup: `dre-fee-calculator.html` — live 4-tier side-by-side comparison
- Input any amount, see what client receives and DRE fee at each tier immediately
- Cards color-coded: green (Tier 1) → blue → amber → red (Tier 4)
- One-time build for the site, no ongoing API costs
### Case Aging Dashboard
- New mockup: `dre-case-aging.html` — monitors stalled cases
- Color-coded: green (on track), amber (approaching limit), red (past target)
- Targets: Tier 1 = 5 days, Tier 2 = 7 days, Tier 3 = 10 days
- Stalled cases show alert banner with escalation action link
### Agent D.R.E Chatbot — Authentication & Messaging
**Three states:**
1. **Lead capture** (non-logged-in): Name, Company, Email*, Phone. Required before Q&A.
2. **Logged-in greeting**: "Welcome back, {Company}! Your claim against {Debtor} is in {Tier}."
3. **Conversation**: FAQ + message-to-team form.
4. **PII verification trigger**: If asked for case-specific details (claim number, case details), require claim number from welcome email to verify before sharing.
**Message team form:** Subject dropdown (Question about claim, New debtor info, Payment received, Update contact, Complaint, Other) + free text + Send/Cancel. Logs to case file.
**Knowledge isolation rules enforced:** Public vs private (scoring methodology, skip tracing, weakness criteria, approval workflow, partner names, strategy docs all PRIVATE).
### AI Re-Analysis on Document Upload
- When client uploads new document, AI re-scores the claim automatically
- Score delta tracked in timeline: "Score: 78 → 82 ⬆"
- Logged in change history as System event with reason "New docs uploaded"
- Re-analysis is per-claim, not per-client
### Two-Binder System Finalized
- DRE Internal: Full record with AI analysis, internal notes, all docs
- Client Package: Claim summary, LPOA, settlement, fee statement — NO AI analysis or research
- Archive: `DRE-YYYY-NNNN_evidence.zip` with original uploads
- Client can download from portal after case close
### Professional Touches Added
- Post-closure survey (auto-sent)
- Referral tracking (5% off next claim)
- Settlement agreement templates in DocuSeal
- Automated compliance checkers before each communication
- One-click case notes (every action auto-logs to timeline)
- Batch small claims under $2K
- SMS notifications to clients (Twilio slot)
- Text-to-pay for debtors
### CRM & Infrastructure
- Anita's Gmail app password flow: instructions sent, waiting for her to email her Gmail app password
- Tony reminder sent for Telegram bot setup
- Bounce fix: re-sent Cartagena itinerary to correct address (anitabrownwrites@gmail.com)
### Notary Research (ongoing)
- Proof.com Premium plan needed for API — estimate ~$90-150/mo
- OneNotary alternative has REST API, likely lower per-doc pricing
- Subagent dispatched to research OneNotary API docs and Proof Premium pricing
### API Keys Dashboard
- New table in capabilities page: vendor, masked key, usage, status
- 7 keys tracked: Firecrawl, ScrapingAnt, Cloudflare, admin-ai, SMTP, DocuSeal, Turnstile
- Hover tooltips with credit limits and service descriptions
@@ -0,0 +1,80 @@
# TwentyCRM Custom Object & Field Setup (DRE)
## Deployment
- Installed at `/root/docker/twenty/` via Docker Compose
- Access: `https://crm.debtrecoveryexperts.com`
- API key: `TWENTY_CRM_API_KEY` in `~/.hermes/.env`
- Metadata API endpoint: `POST https://crm.debtrecoveryexperts.com/metadata`
- GraphQL endpoint: `POST https://crm.debtrecoveryexperts.com/graphql`
- REST endpoint: `GET/POST/DELETE https://crm.debtrecoveryexperts.com/rest/{object-name}`
## Critical Config
- `SERVER_URL` in `.env` must be set to the public domain, not `localhost`
- `REACT_APP_SERVER_BASE_URL` must be passed to the `server` container (copy from `SERVER_URL`)
- Port mapped: `3001:3000` in docker-compose (not 3000 directly)
## Custom Objects Created for DRE
### Claims
ID: `0c6808cf-b5e8-4f39-8c4f-6dc6b7d029f3`
Fields: claimNumber (TEXT), claimAmount (NUMBER), debtType (TEXT), currentTier (TEXT), status (TEXT), state (TEXT), dateFiled (DATE), aiScore (NUMBER), description (TEXT)
### Debtors
ID: `bac887ba-22a9-46fe-b988-e1985ee19b29`
Fields: businessName (TEXT), contactName (TEXT), email (TEXT), phone (TEXT), address (TEXT), businessType (TEXT), notes (TEXT)
### Payments
ID: `bde74e7b-b1c2-48eb-be5b-f3ea2207873c`
Fields: paymentAmount (NUMBER), paymentDate (DATE), paymentMethod (TEXT), dreFee (NUMBER), costsDeducted (NUMBER), netToClient (NUMBER)
### Case Notes
ID: `176736a7-6d3b-4129-ac03-67cea102d618`
Fields: content (TEXT), timestamp (DATE)
## Field Creation (GraphQL Metadata API)
```graphql
mutation {
createOneField(input: {
field: {
name: "fieldName", label: "Field Label", type: TEXT,
objectMetadataId: "uuid-of-object"
}
}) { id name }
}
```
## RELATION Field Creation
```graphql
mutation {
createOneField(input: {
field: {
name: "debtorRelation", label: "Debtor", type: RELATION,
objectMetadataId: "source-object-uuid",
relationCreationPayload: {
type: "MANY_TO_ONE",
targetObjectMetadataId: "target-object-uuid",
targetFieldLabel: "Related Field Label",
targetFieldIcon: "IconBriefcase"
}
}
}) { id name }
}
```
## Relationship Creation Status
- Claim → Debtor: MANY_TO_ONE ✓ (confirmed working)
- Payment → Claim: via UI (API needs different payload format)
- Case Note → Claim: via UI
## Deleting Default Data
- Objects via REST: `DELETE https://crm.debtrecoveryexperts.com/rest/{object-name}/{id}`
- Workflows: `DELETE https://crm.debtrecoveryexperts.com/rest/workflows/{id}`
- Two default workflows deleted: "Create company when adding a new person" and "Quick Lead"
## Common Pitfalls
- RELATION type fields need `relationCreationPayload` at the field level
- Field types use UPPERCASE enum names without quotes in GraphQL
- Use `objectMetadataId` NOT `objectId`
- REST endpoints are plural: `/rest/workflows`, `/rest/companies`
- API key is workspace-scoped — one key per workspace
- Portal/UI login and API login are separate sessions
@@ -0,0 +1,72 @@
# TwentyCRM Deployment for DRE
## Server
- Host: Core VPS (netcup, 8C/15G, Debian 13)
- URL: https://crm.debtrecoveryexperts.com
- Deploy: Docker Compose under /root/docker/twenty/
- Port: 3001 (mapped from container port 3000)
## Docker Compose Stack
- twenty-server (NestJS backend)
- twenty-worker (BullMQ async worker)
- twenty-db (PostgreSQL 16)
- twenty-redis (Redis cache)
## Env Vars (/.env in project dir)
- `SERVER_URL` MUST be set to the public URL (e.g. https://crm.debtrecoveryexperts.com)
- `REACT_APP_SERVER_BASE_URL` MUST match `SERVER_URL` — injected into frontend build at runtime
- `ENCRYPTION_KEY` generated on first deploy
- `PG_DATABASE_PASSWORD` set on first deploy
## API Access
- API key stored in ~/.hermes/.env as `TWENTY_CRM_API_KEY`
- GraphQL endpoint: POST https://crm.debtrecoveryexperts.com/graphql (standard queries)
- Metadata endpoint: POST https://crm.debtrecoveryexperts.com/metadata (schema mutations)
- REST endpoint: POST https://crm.debtrecoveryexperts.com/rest/{object}
## Custom Objects Created (DRE Data Model)
- Claims (claim) — Claim Number, Amount, Debt Type, Current Tier, Status, State, Date Filed, AI Score, Description
- Debtors (debtor) — Business Name, Contact Name, Email, Phone, Address, Business Type, Notes
- Payments (payment) — Payment Amount, Date, Method, DRE Fee, Costs Deducted, Net to Client
- Case Notes (caseNote) — Content, Timestamp
## Relationships (via GraphQL metadata API)
The correct mutation format uses `relationCreationPayload` inside the `field` object:
```graphql
mutation {
createOneField(input: {
field: {
name: "debtorRelation",
label: "Debtor",
type: RELATION,
objectMetadataId: "<SOURCE_OBJECT_ID>",
relationCreationPayload: {
type: "MANY_TO_ONE",
targetObjectMetadataId: "<TARGET_OBJECT_ID>",
targetFieldLabel: "Claims",
targetFieldIcon: "IconBriefcase"
}
}
}) { id name }
}
```
The `relationCreationPayload` is nested inside the `field` object, NOT at the top level of the input. This is different from what the error messages suggest.
## First-time Setup
1. Visit https://crm.debtrecoveryexperts.com
2. Click "Continue with Email" — magic link sent to inbox
3. Create workspace → admin account is the first workspace member
4. Generate API key from Settings → API Keys
## Authentication (Cloudflare Access)
- CRM is behind Cloudflare Access (proxy enabled)
- Users authenticate via email magic link through Cloudflare
- Optional 2FA (TOTP) can be enabled per-user from Cloudflare dashboard
- NOT behind Caddy basic_auth — that was removed in favor of Access
## Cost
- Software: $0 (AGPL self-hosted)
- Infrastructure: part of existing VPS
- Cloud Access: free up to 50 users