Initial skills documentation — 25 categories, all SKILL.md + references + scripts
This commit is contained in:
@@ -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">×</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
|
||||
Reference in New Issue
Block a user