SKILL.md
InboxMate Ecosystem Reference
Use this skill to understand the InboxMate product, its architecture, outreach pipeline, and how to query data across systems.
Architecture
InboxMate is a module (chatwidget) within the AgentHub platform — a full-stack Nuxt 3 + Supabase + Socket.IO SaaS.
Repos & Key Files
| Repo | Purpose | Key Files |
|---|---|---|
| agenthub | Full-stack app (InboxMate + AgentHub) | server/api/mcp.post.ts (demo MCP), app/pages/demo.vue (demo page), server/utils/scraping.ts (Tavily/Firecrawl), server/utils/subscriptionUtils.ts (tiers), app/components/InboxMatePricingModal.vue |
| notification-service | Email drafts, templates, funnel analytics | src/routes/drafts.ts (draft CRUD), src/routes/stats.ts + frontend/pages/funnel.vue (funnel) |
| psquared-websites | Marketing sites | apps/inboxmate/ (inboxmate.psquared.dev), apps/psquared/ (psquared.dev) |
| psquared-skills | Pipeline skills | skills/ directory |
URLs
| Service | URL |
|---|---|
| InboxMate app | app.psquared.dev (chatwidget module) |
| Demo pages | demo.inboxmate.psquared.dev/?id=<demoId> |
| Marketing site | inboxmate.psquared.dev |
| Company site | psquared.dev |
| Notification admin | notifications.psquared.dev/drafts |
| CRM | crm.psquared.dev |
| Analytics | ackee.psquared.dev |
Demo Pipeline
/find-leads [N] → CRM companies + people (German B2B, UWG-compliant)
↓
/inboxmate-batch-demo → Demos created, opportunities at SCREENING/PENDING_REVIEW
↓
/review-demos → demoStatus: OK_TO_SEND or NEEDS_FIX
↓
/fix-demos → Fixes applied, reset to PENDING_REVIEW
↓
/plan-campaign → CRM campaign created, opportunities linked with shared deadline
↓
/setup-email-drafts → Email drafts at notifications.psquared.dev/drafts
↓
Human review + send → demoStatus: SENT, outreachSentAt timestamped
↓
/check-outreach-status → Follow-up drafts created (5+ days after send)
↓
/check-demo-analytics → Pipeline health report (Ackee + CRM)
↓
/refurbish-demos → Upgrade knowledge for campaign demos (clear + re-scrape via MCP)
CRM State Machine (Twenty CRM)
Opportunity.demoStatus
| Status | Meaning |
|---|---|
PENDING_REVIEW |
Demo built, awaiting QA |
OKTOSEND |
QA passed, ready for outreach |
NEEDS_FIX |
QA failed, needs corrections |
SENT |
Initial outreach email sent |
FOLLOWUPSENT |
Follow-up email sent |
SKIPFAULTYWEBSITE |
Website unreachable/broken |
SKIP_IRRELEVANT |
Company not a fit |
SKIPPED |
Generic skip |
DISQUALIFIED |
Permanently excluded |
Opportunity.demoType
| Value | Meaning |
|---|---|
CHATBOT (or null = legacy) |
Personalized chatbot demo (/inboxmate-demo) |
INBOX |
Demo-Postfach: seeded pre-triaged inbox (/inboxmate-inbox-demo), email-product outreach. CRM view "InboxMate Email Outreach" filters on this. |
Opportunity.stage
| Stage | Meaning |
|---|---|
NEW |
Fresh lead, no outreach |
SCREENING |
Outreach phase |
MEETING |
Responded / call scheduled |
PROPOSAL |
Quoted or decision-maker demo |
CUSTOMER |
Paying customer |
Campaign Structure
Campaigns group opportunities into sendable batches with shared offerExpiresAt and offerText. Created by /plan-campaign, consumed by /setup-email-drafts.
How to Query Each System
CRM (Twenty) — GraphQL
- Endpoint:
https://crm.psquared.dev/graphql - Auth:
Authorization: Bearer $PSQUAREDCRMTOKEN - Key objects:
companies,people,opportunities,campaigns,tasks,notes
Example — list opportunities in a campaign:
query {
opportunities(filter: { campaignId: { eq: "CAMPAIGN_ID" } }) {
edges { node { id name stage demoStatus demoUrl } }
}
}
Supabase (AgentHub DB)
- Project:
fevtfywriufbqnvbgyrm - Tool:
mcp__pluginsupabasesupabase__execute_sql - Key tables:
demopages,agents,knowledge,knowledgebucketitems,knowledgebucket_chunks,chats,messages,accounts
Example — find chats on demo agents:
SELECT dp.company_name, c.id as chat_id, c.created_at,
(SELECT count(*) FROM messages m WHERE m.chat_id = c.id) as msg_count
FROM demo_pages dp
JOIN chats c ON c.agent_id = dp.agent_id
ORDER BY c.created_at DESC
Ackee Analytics — GraphQL
- Endpoint:
https://ackee.psquared.dev/api - Auth:
Authorization: Bearer $ACKEE_TOKEN - Demo domain ID:
4bdddc8c-11d9-4d7e-ab94-aeb7866f0bb2 - CTA event ID:
0f037f1c-c2c0-4205-b90d-3cb9bf66f9c2
Example — get demo page views:
query {
domain(id: "4bdddc8c-11d9-4d7e-ab94-aeb7866f0bb2") {
statistics { views(interval: MONTHLY, type: UNIQUE) { count } }
facts { viewsMonth viewsToday activeVisitors }
}
}
Notification Service — REST
- Base URL:
https://notifications.psquared.dev - Auth (admin):
Authorization: Bearer $BEARER_TOKEN - Auth (drafts only):
Authorization: Bearer $EMAILDRAFTONLY_BEARER
Key endpoints:
GET /drafts?status=SENT&pageSize=50— list sent emailsGET /drafts/:id— read full email (html_body, variables, subject)POST /drafts/create— create draft from templatePOST /drafts/send— send drafts{ draftIds: [...] }GET /stats/funnel— full conversion funnel dataGET /drafts/campaigns— list CRM campaigns with draft counts
InboxMate MCP — JSON-RPC
- Endpoint:
https://app.psquared.dev/api/mcp - Auth:
Authorization: Bearer $NUXTMCPDEMO_TOKEN - Protocol: JSON-RPC 2.0
Key tools:
clear_bucket— remove all items from a knowledge bucketscrapeandbuild_knowledge— scrape URLs via Tavily, create knowledge items with real sourceUrlscreateagent,updateprompt,updatewidgetstyle,publish_agentcreateknowledgebucket,addtobucket,set_knowledgecreatedemopage,updatedemopage,listdemos,getdemocreateinboxdemo,updateinboxdemo— Demo-Postfach (type='inbox': seeded pre-triaged inbox, no agent)listbucketitems,listknowledge,getknowledge
Key Metrics
| Metric | Source | How to check |
|---|---|---|
| Demo page views | Ackee | Query demo domain statistics |
| CTA clicks | Ackee | Query CTA event |
| Emails sent | Notification service | GET /drafts?status=SENT |
| Chat interactions | Supabase | chats JOIN demopages on agentid |
| Pipeline funnel | Notification service | GET /stats/funnel |
| Hot leads | CRM | Opportunities with stage > SCREENING |
| Campaign status | CRM + Notification service | Campaigns + draft counts per campaign |
Environment Variables
All in /Users/martinpammesberger/Documents/psquared/claude-overlord-folder/.env:
| Variable | Service |
|---|---|
PSQUAREDCRMTOKEN |
Twenty CRM GraphQL |
NUXTMCPDEMO_TOKEN |
InboxMate MCP endpoint |
NUXTTAVILYSEARCHAPIKEY |
Tavily web scraping |
EMAILDRAFTONLY_BEARER |
Notification service (draft creation) |
NOTIFICATIONSSERVICEBEARER_TOKEN |
Notification service (admin) |
ACKEE_TOKEN |
Ackee analytics |
Pricing Tiers (credits model, since 2026-06)
Note: If prices change, this table must be updated. The /price-change skill handles pricing updates across all touchpoints — make sure this file is included in the update list.
Model: pay per Postfach (mailbox) + AI credits (chat reply 1, email draft 2, tool call/scrape/PDF 1; setup & rule-based sorting free). Manual invoicing — no Stripe checkout.
| Tier | Price | Postfächer | Credits/mo | Notes |
|---|---|---|---|---|
| Free | €0 | 0 (chatbot only) | 50 | widget funnel |
| Starter | €49/mo (monthly only) | 1 (extra €19) | 500 | full email automation from here |
| Pro | €129/mo · €107 yearly | 3 (extra €15) | 2,500 | API+MCP, marketplace; demo discount → €86 first year |
| Business | ab €349/mo, custom | 15+ | 10,000+ | custom integrations (first incl.), white-label, SLA; demo offer €199 first year |
Top-ups: €9/€8 per 1,000 (Starter/Pro), instant grant, invoiced afterwards. All paid plans 14-day free trial, no credit card.
Knowledge System
Agents use RAG (vector search) over knowledge buckets:
- Each bucket contains knowledge items (text entries with
sourceUrl) - Items are chunked and embedded for vector similarity search
- When the agent's
searchKnowledgetool is called, it returns matching chunks WITH theirsourceUrl - The widget UI shows sources as clickable links in citations
To upgrade knowledge quality: clearbucket → scrapeandbuildknowledge with real page URLs → publish_agent