InboxMate Price & Feature Change Pipeline
Announce to the user at the very start:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ InboxMate Price Change Pipeline started. First I'll audit all current pricing sources, then walk you through the change. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PHASE 0 — Classify the Change
Ask the user before doing anything else:
What type of change is this?
- A) General price change — base monthly/yearly prices are changing
- B) Campaign coupon change — only the demo-offer discount percentages/amounts are changing (Stripe coupons)
- C) Feature change — which features are included in which tier (may also involve price changes)
Which tiers are affected? (Starter / Pro / Business / All)
Wait for the user's answer before proceeding.
PHASE 1 — Audit Current State
Announce:
[1/5] Auditing current pricing across all sources...
Read ALL of the following files and extract current pricing data into a summary table. Do not skip any source. This is the single source of truth audit.
Sources to read:
| Source | File | What to extract |
|---|---|---|
| Stripe config | /Users/martinpammesberger/Documents/psquared/agenthub/server/utils/subscriptionUtils.ts |
Monthly price IDs, yearly price IDs, tier limits (maxUsers, maxAgents, maxChats, etc.), feature flags, coupon references |
| Stripe live | Use Stripe MCP list_prices for each product |
Actual live prices, verify they match config |
| App pricing modal | /Users/martinpammesberger/Documents/psquared/agenthub/app/components/InboxMatePricingModal.vue |
Displayed monthly/yearly prices, demo prices, discount labels, feature lists per tier, highlight features |
| Stripe checkout | /Users/martinpammesberger/Documents/psquared/agenthub/server/services/subscription/StripeService.ts |
Coupon logic (search for DEMO_COUPONS), which env vars are used |
| Website landing | /Users/martinpammesberger/Documents/psquared/psquared-websites/apps/inboxmate/index.html |
Displayed prices (data-price-monthly, data-price-annual), feature lists per tier card, savings notes |
| Website i18n | /Users/martinpammesberger/Documents/psquared/psquared-websites/apps/inboxmate/i18n.js |
Price strings in EN and DE, FAQ price references |
| Demo page | /Users/martinpammesberger/Documents/psquared/psquared-websites/apps/demo-inboxmate/index.html |
Demo offer prices per tier, crossed-out prices, discount labels |
| Terms (AGB) | /Users/martinpammesberger/Documents/psquared/psquared-websites/apps/inboxmate/agb.html |
Section 4 pricing, annual discount description, promotional clause |
| Help center | /Users/martinpammesberger/Documents/psquared/inboxmate-docs/user-guide/workspace/usage-and-billing.mdx |
Pricing table (monthly, annual, limits, features) |
| Comparison pages | /Users/martinpammesberger/Documents/psquared/psquared-websites/apps/inboxmate/vs-intercom.html and vs-chatbase.html |
Any hardcoded price references |
| Insight articles | /Users/martinpammesberger/Documents/psquared/psquared-websites/apps/inboxmate/insights/*.html |
Any hardcoded price references |
| Env example | /Users/martinpammesberger/Documents/psquared/agenthub/.env.example |
Coupon env var names |
Output format (always use this):
┌─────────────────────────────────────────────────────────┐
│ CURRENT PRICING AUDIT │
├──────────────────┬──────────┬──────────┬────────────────┤
│ │ Starter │ Pro │ Business │
├──────────────────┼──────────┼──────────┼────────────────┤
│ Monthly │ €__/mo │ €__/mo │ €__/mo │
│ Yearly (std) │ €__/mo │ €__/mo │ €__/mo │
│ Demo 1st year │ €__/mo │ €__/mo │ €__/mo │
│ Yearly discount │ __% │ __% │ __% │
│ Demo discount │ — │ __% │ __% │
├──────────────────┼──────────┼──────────┼────────────────┤
│ Stripe monthly │ price_.. │ price_.. │ price_.. │
│ Stripe yearly │ price_.. │ price_.. │ price_.. │
│ Demo coupon │ — │ coupon.. │ coupon.. │
├──────────────────┼──────────┼──────────┼────────────────┤
│ Max users │ __ │ __ │ __ │
│ Max agents │ __ │ __ │ __ │
│ Max chats/mo │ __ │ __ │ __ │
│ Tool calls/mo │ __ │ __ │ __ │
│ [other limits] │ ... │ ... │ ... │
├──────────────────┼──────────┼──────────┼────────────────┤
│ Key features │ list │ list │ list │
└──────────────────┴──────────┴──────────┴────────────────┘
Flag any inconsistencies between sources (e.g., website shows €X but Stripe has €Y). These must be resolved before proceeding.
PHASE 2 — Plan the Changes
Announce:
[2/5] Planning changes...
Based on the user's request and the audit:
For price changes (Type A):
- Calculate new yearly prices:
monthly × 10 / 12(round to nearest euro) - Calculate new Stripe yearly amounts:
displayed_monthly × 12(in cents) - Show a diff table: old vs new for each source
For campaign coupon changes (Type B):
- Calculate coupon amounts:
standard_yearly - demo_yearly(in cents) - Determine coupon type (fixed amount, duration: once)
- Show which Stripe coupons need creating/updating
For feature changes (Type C):
Show which features move between tiers
Generate a constraints report listing files in the agenthub repo where feature enforcement happens:
Feature Config location UI gating location Notes removeBrandingsubscriptionUtils.ts→INBOXMATE_TIERS[tier].features.removeBrandingCheck components that read this flag humanHandoversubscriptionUtils.ts→INBOXMATE_TIERS[tier].features.humanHandover... toolssubscriptionUtils.ts→INBOXMATE_TIERS[tier].features.tools... etc. Search for these patterns to find UI gating:
grep -r "humanHandover\|removeBranding\|tools\|apiAccess\|whitelabel\|contacts\|gdprMode\|scheduledTasks\|triageEnabled\|emailAutoReply\|ticketManagement\|slackEnabled\|whatsappEnabled\|mcpEnabled" app/ server/Report which files need changes and what the change would be. Do not make these changes yet — present the report for approval.
Output format (always use this):
┌─────────────────────────────────────────────────────────┐
│ PROPOSED CHANGES │
├──────────────────┬──────────────────┬────────────────────┤
│ Source │ Current │ New │
├──────────────────┼──────────────────┼────────────────────┤
│ [file/location] │ [old value] │ [new value] │
│ ... │ ... │ ... │
└──────────────────┴──────────────────┴────────────────────┘
Wait for user approval before proceeding.
PHASE 3 — Execute Changes
Announce:
[3/5] Applying changes across all sources...
Only proceed after explicit user approval.
Apply changes in this order:
3a. Stripe (if prices or coupons change)
- Create new Stripe prices via MCP (
create_price) — yearly prices areinterval: year - Create new coupons via MCP (
create_coupon) — useamount_offin cents,currency: eur,duration: once - Note: MCP connects to PROD Stripe only. Flag DEV Stripe as manual TODO.
- Record all new price IDs and coupon IDs — you need these for the next steps.
3b. Backend config
agenthub/server/utils/subscriptionUtils.ts— update price IDs, tier limits, feature flagsagenthub/server/services/subscription/StripeService.ts— update coupon env var names if changedagenthub/.env.example— update coupon env var documentation
3c. App frontend
agenthub/app/components/InboxMatePricingModal.vue— update prices, features, discount labels, highlight features
3d. Website
psquared-websites/apps/inboxmate/index.html— pricing cards (data-price attributes, feature lists, savings notes)psquared-websites/apps/inboxmate/i18n.js— EN and DE price strings, FAQ referencespsquared-websites/apps/demo-inboxmate/index.html— demo offer pricespsquared-websites/apps/inboxmate/agb.html— Section 4 pricing, promotional clausepsquared-websites/apps/inboxmate/vs-intercom.html— price referencespsquared-websites/apps/inboxmate/vs-chatbase.html— price referencespsquared-websites/apps/inboxmate/insights/intercom-alternatives.html— price referencespsquared-websites/apps/inboxmate/insights/chatbase-alternatives.html— price references
3e. Help center
inboxmate-docs/user-guide/workspace/usage-and-billing.mdx— pricing table
3f. Skills reference
psquared-skills/skills/analyse-inboxmate/SKILL.md— pricing tiers reference table
3g. Feature constraints (if Type C)
- Apply the approved changes from the constraints report (Phase 2)
Do NOT commit or push yet.
PHASE 4 — Verify
Announce:
[4/5] Verifying all changes...
Grep for old prices across all three repos to catch stragglers:
grep -r "€OLD_PRICE" psquared-websites/apps/inboxmate/ agenthub/app/ agenthub/server/ inboxmate-docs/Show a final diff summary across all repos:
cd psquared-websites && git diff --stat cd agenthub && git diff --stat cd inboxmate-docs && git diff --statPresent the verification report to the user.
Wait for final approval before pushing.
PHASE 5 — Commit & Push
Announce:
[5/5] Committing and pushing all changes...
Only after explicit "push it" or equivalent approval.
Push all repos at once:
# 1. psquared-websites
cd /Users/martinpammesberger/Documents/psquared/psquared-websites
git add [changed files]
git commit -m "feat: [description of price/feature change]"
git push origin main
# 2. agenthub
cd /Users/martinpammesberger/Documents/psquared/agenthub
git add [changed files]
git commit -m "feat: [description of price/feature change]"
git push origin main
# 3. inboxmate-docs (auto-deploys via Mintlify)
cd /Users/martinpammesberger/Documents/psquared/inboxmate-docs
git add [changed files]
git commit -m "feat: [description of price/feature change]"
git push origin main
Announce:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ All changes pushed to main across 3 repos. Deployment checklist: □ Set env vars on agenthub deployment (if new coupons) □ Create DEV Stripe prices manually (MCP is prod-only) □ Verify inboxmate.psquared.dev after Dokploy deploy □ Verify docs.inboxmate.psquared.dev (Mintlify auto-deploy) □ Verify app.psquared.dev pricing modal ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Reference: Repo Locations
| Repo | Path | Branch | Auto-deploy |
|---|---|---|---|
| agenthub | /Users/martinpammesberger/Documents/psquared/agenthub |
main | No (manual) |
| psquared-websites | /Users/martinpammesberger/Documents/psquared/psquared-websites |
main | Dokploy |
| inboxmate-docs | /Users/martinpammesberger/Documents/psquared/inboxmate-docs |
main | Mintlify (auto) |
Reference: Stripe Accounts
| Environment | Account | Access |
|---|---|---|
| Production | acct_1PeH7A2MM5yLq2OK (psquared GmbH) |
Via Stripe MCP |
| Development | acct_*Ro4DnEindd* |
Manual (Stripe dashboard) |
Reference: Env Vars for Coupons
Set on agenthub deployment:
NUXT_STRIPE_INBOXMATE_DEMO_COUPON_PRO=<coupon_id>
NUXT_STRIPE_INBOXMATE_DEMO_COUPON_BUSINESS=<coupon_id>