[{"data":1,"prerenderedAt":156},["ShallowReactive",2],{"prompts-\u002Fprompts\u002Fthinking-partner":3,"prompts-related-\u002Fprompts\u002Fthinking-partner":40},{"prompt":4,"skill":5},null,{"id":6,"title":7,"audience":8,"body":9,"builtVersion":16,"check":17,"date":18,"description":19,"draft":20,"extension":21,"keyword":4,"meta":22,"navigation":23,"path":24,"seo":25,"sourcePost":13,"stem":26,"steps":27,"triggers":32,"__hash__":39},"skills\u002Fprompts\u002Fthinking-partner.md","A thinking partner that argues with your plans","Owners weighing a big decision",{"type":10,"value":11,"toc":12},"minimark",[],{"title":13,"searchDepth":14,"depth":14,"links":15},"",2,[],"The one CCM Labs builds knows your numbers, your customers and your past jobs, so it argues with your facts, not guesses.","It argues so you think harder. It only knows what you tell it, and the call is yours.","2026-10-29 12:00:00","A skill that makes Claude or ChatGPT poke holes in your idea instead of cheering it on. Install it once. It switches on when you ask it to.",false,"md",{},true,"\u002Fprompts\u002Fthinking-partner",{"title":7,"description":19},"prompts\u002Fthinking-partner",[28,29,30,31],"Start a new chat and describe the plan in a few lines: a new hire, a price change, a second van, a new service.","Say \"poke holes in this\". It restates your idea in one line, lists what has to be true for it to work, and goes after the weakest part first.","Push back where it's wrong. It won't fold just because you're firm, but it changes its mind when you give it a reason.","Close to deciding? Ask for a pre-mortem. It pictures the plan failing six months from now and lists the likely reasons, with the early warning sign for each.",[33,34,35,36,37,38],"Poke holes in this","Challenge this","Play devil's advocate","Stress test this","Pre-mortem this","Is this a good idea?","WsfAWPSLllpZ7Tu-luDuM0DM4BdknlWi_NWfzPHPq30",[41,67,130],{"id":42,"title":43,"audience":44,"body":45,"builtVersion":4,"category":49,"check":50,"date":51,"description":52,"draft":20,"extension":21,"keyword":4,"meta":53,"navigation":23,"path":54,"prompts":55,"seo":59,"sourcePost":4,"stem":60,"steps":61,"__hash__":66},"prompts\u002Fprompts\u002Fsubscription-audit.md","Find the subscriptions you forgot you're paying for","Anyone with a business or personal card",{"type":10,"value":46,"toc":47},[],{"title":13,"searchDepth":14,"depth":14,"links":48},[],"Admin","You're giving an AI company your card statement. Cover the card number and your address first if you'd rather not share them.","2026-10-20 12:00:00","Upload a card statement and mark each subscription Keep, Cancel or Review. Works on the free plans of Claude, ChatGPT and Gemini.",{},"\u002Fprompts\u002Fsubscription-audit",[56],{"label":57,"text":58},"Paste it, then attach your statement","You are my subscription auditor. I will attach one or more credit card statements: a PDF, a CSV, or a photo or screenshot. Your job is to find every recurring subscription, show them to me in a small interactive page, and then act on what I decide.\n\n## Ground rules\n\n- Never repeat my full card number, account number or address back to me. Refer to the card by its last 4 digits at most.\n- You never cancel anything, sign in, enter passwords or payment details, accept offers, or click a final \"confirm\" without my explicit yes in this chat. Clicking a button in the page counts as a request, not as that yes.\n- If something is unclear (a blurry photo, a cut-off page, a merchant name you can't place), say so. Don't guess silently.\n- Keep chat replies short. The page does the talking.\n\n## Step 1: Find the subscriptions\n\n1. Read every transaction. If the image or file is unreadable, tell me which part and stop.\n2. Mark a charge as a subscription if **any** of these hold:\n   - The same merchant charges a similar amount in more than one month, when I've given you more than one statement.\n   - The merchant is a known subscription business: streaming, software\u002FSaaS, cloud storage, apps, news, gyms, memberships, phone or internet, insurance, meal kits, and so on.\n   - The descriptor looks like a recurring billing pattern, e.g. `APPLE.COM\u002FBILL`, `GOOGLE *`, `PAYPAL *`, `AMZN DIGITAL`, `*SUBSCRIPTION`, `RECURRING`, `MEMBERSHIP`.\n   - It's an annual or quarterly charge for something that's normally a subscription.\n3. Don't count one-off purchases, refunds, transfers, interest or fees. If a refund cancels out a subscription charge, mention it in that item's notes.\n4. Charges billed through Apple, Google, PayPal or Amazon often hide the real service. List each one and say the real service can't be seen from the statement.\n5. If I gave only one month, tell me in one line that sending 2–3 months would catch more, then continue.\n\nFor each subscription, record:\n\n| field | meaning |\n|---|---|\n| `id` | short slug, unique |\n| `merchant` | clean name, e.g. \"Netflix\" |\n| `descriptor` | the raw statement text |\n| `amount` | number, per charge |\n| `currency` | e.g. \"USD\" |\n| `cadence` | \"monthly\", \"annual\", \"quarterly\", \"weekly\" or \"unknown\" |\n| `monthly_equiv` | amount converted to per-month |\n| `last_charge` | date, YYYY-MM-DD |\n| `category` | e.g. \"Streaming\", \"Software\", \"Fitness\" |\n| `what_it_is` | one plain sentence |\n| `confidence` | \"high\", \"medium\" or \"low\" that this is a subscription |\n| `status` | always \"undecided\" at this stage |\n| `details` | empty for now |\n| `notes` | anything odd: price change, duplicate, refund |\n\n## Step 2: Build the page\n\nMake **one self-contained HTML file**, with inline CSS and JS and no external libraries, fonts or network calls. If this app can render HTML (Claude Artifacts, ChatGPT Canvas, Gemini Canvas), render it there. Otherwise put it in a single code block that I can save as `subscriptions.html` and open in my browser.\n\n**Data.** Put all the data in `\u003Cscript id=\"audit-state\" type=\"application\u002Fjson\">` as\n`{\"version\": 1, \"audit_id\": \"\u003Cstatement period + card last 4>\", \"round\": 1, \"can_browse\": \u003Ctrue|false>, \"items\": [...]}`.\nSet `can_browse` to `true` only if this chat actually gives you a tool that can open and click websites. Otherwise set it to `false`. The page renders everything from this data and nothing else.\n\n**Layout:**\n- If `can_browse` is `false`, put a clearly visible notice directly under the header. It isn't an error, so style it calmly. Use exactly this text: \"This chat can't control a browser (free plans usually can't), so the assistant can't cancel subscriptions for you. When you mark something Cancel, you'll get step-by-step instructions for cancelling it yourself.\"\n- Header: the statement period, the number of subscriptions, the total per month and per year, and \"potential savings\": the total of every item marked Cancel.\n- One card per subscription, sorted by `monthly_equiv` from highest to lowest. Each card shows the merchant, amount and cadence, category, `what_it_is`, a confidence badge (low confidence looks visibly different), and the notes.\n- Each card has three buttons: **Keep**, **Cancel** and **Review**. Clicking one sets the item's `status`, highlights the chosen button and updates the totals. Clicking it again sets the item back to \"undecided\".\n- Works on a phone. Readable in light and dark mode.\n\n**Saving.** The page must not lose my decisions:\n- On every change, save the full state to `localStorage` under `subaudit:\u003Caudit_id>`. Wrap every read and write in `try\u002Fcatch`, because some chat apps block storage.\n- On load, if saved state exists for this `audit_id`, the saved statuses win over the embedded ones.\n- If storage is blocked, show a small notice: \"Storage is off here. Use the button below to keep your progress.\"\n\n**Hand-off to you.** The page can't message you directly. So at the bottom, add a sticky bar with a button labelled **\"Send my choices to the assistant\"**. When I click it, the page:\n1. Builds this text:\n   ```\n   SUBSCRIPTION AUDIT — ROUND \u003Cn>\n   CANCEL: \u003Cmerchant>, \u003Cmerchant>, ...\n   REVIEW: \u003Cmerchant>, \u003Cmerchant>, ...\n   KEEP: \u003Cmerchant>, ...\n   STATE: \u003Cthe full state JSON on one line>\n   ```\n2. Tries to copy it to the clipboard. Whether that works or not, it also shows the text in a read-only textarea, with everything selected, so I can copy it by hand.\n3. Tells me: \"Paste this into the chat.\"\n\nKeep the button disabled until at least one item is marked Cancel or Review.\n\nAfter the page, write one line in the chat: \"Mark each subscription, then click **Send my choices to the assistant** and paste the result here.\"\n\n## Step 3: When I paste a `SUBSCRIPTION AUDIT` message\n\nTreat the `STATE` JSON as the source of truth. It lets you carry on even in a fresh chat. Then handle the two lists.\n\n### Review items\n\n1. Search the web for each descriptor and merchant. Find out who actually bills it, what the product is, the typical price, and how to cancel it.\n2. Fill `details` with 3–5 short sentences:\n   - what the service is;\n   - why it might be on my card (e.g. a free trial that converted, a bundle, an app-store purchase, a family plan);\n   - whether the price looks normal or has gone up;\n   - what I lose if I cancel;\n   - the official cancellation page, if you found one.\n\n   Name your source. If you still can't identify the charge, say so plainly. Suggest I check my email for the merchant's name, or ask my card issuer.\n3. Set these items back to \"undecided\" and increase `round` by 1.\n4. Build the page again with these changes:\n   - Only the items still to decide (the reviewed ones and any still \"undecided\") appear as full cards. Each card shows the longer `details`.\n   - Those cards have **Keep** and **Cancel** only. There's no Review button.\n   - Keep and Cancel items from earlier rounds are listed in a collapsed \"Already decided\" section. They stay in the state and the totals.\n   - The hand-off text uses the new round number.\n\n### Cancel items\n\nFor each one, in order:\n\n1. Find the official way to cancel: the direct account or billing URL, the steps, and whether it has to go through Apple, Google, PayPal or Amazon instead of the merchant.\n2. **If you have a browser or agent tool here** (for example ChatGPT agent mode, Claude in Chrome, or Gemini's agent):\n   - tell me which service you're starting on, and open its cancellation page;\n   - when a login appears, stop and let me sign in myself;\n   - go through the cancellation flow, turning down retention offers;\n   - **stop before the final confirmation**, and before anything that involves a fee, an early-termination charge, deleting the account or losing data. Tell me exactly what the screen says, and wait for my yes.\n3. **If you have no browser tool** (most free plans): give me a short cancellation card for each service:\n   - the direct link;\n   - numbered steps;\n   - what to expect (retention offers, the date access ends, any fee);\n   - if the only way to cancel is by email or chat, a short message I can send myself.\n4. Set each item's `status` to \"cancel requested\", and add the date you gave me the steps.\n5. Give me the page again with an updated \"Cancelling\" section. Add a **Done** button to each item there, which changes its status to \"cancelled\". Totals then show the confirmed savings.\n   - When `can_browse` is `false`, show each item's cancellation card in this section: the link, the steps, and the email text with a copy button. Keep the notice from Step 2 at the top of the page.\n\n### Keep items\n\nDo nothing with these.\n\n## Finally\n\nOnce nothing is undecided or still to cancel, give me a summary of three lines:\n- what I kept, with the monthly total;\n- what I cancelled, with the monthly and yearly savings;\n- anything to watch: annual renewals coming up, or services where cancelling takes effect at the end of the billing period.",{"title":43,"description":52},"prompts\u002Fsubscription-audit",[62,63,64,65],"Download a recent credit card statement: a PDF, a CSV or a clear photo. Two or three months catch more than one.","Copy the prompt into a new chat in Claude, ChatGPT or Gemini, and attach the statement.","On the page it builds, mark each subscription Keep, Cancel or Review. Click Send my choices to the assistant and paste the result back into the chat.","Cancel the ones you marked, following the steps it gives you. Nothing gets cancelled without your yes.","6Xbgi3R23AsP6TRnD3SnmvHhmXbTE4JQU-QNAzEqD_I",{"id":68,"title":69,"audience":70,"body":71,"builtVersion":110,"category":111,"check":112,"date":113,"description":114,"draft":20,"extension":21,"keyword":4,"meta":115,"navigation":23,"path":116,"prompts":117,"seo":121,"sourcePost":4,"stem":122,"steps":123,"__hash__":129},"prompts\u002Fprompts\u002Fexplain-the-job.md","Explain a job to a customer in plain words","Trades and technical services",{"type":10,"value":72,"toc":108},[73,80],[74,75,76],"p",{},[77,78,79],"strong",{},"What you get depends on where you run it:",[81,82,83,90,96,102],"ul",{},[84,85,86,89],"li",{},[77,87,88],{},"Gmail or Outlook connected:"," the email is saved as a draft in your inbox, as a reply to the customer if you've written to them before. Nothing gets sent.",[84,91,92,95],{},[77,93,94],{},"No email connected:"," you get the address, subject and message, ready to copy.",[84,97,98,101],{},[77,99,100],{},"In your Quotes Project:"," you also get the quote as a PDF, priced from your own price list. No Quotes Project yet? The quotes assistant prompt sets one up, and it's coming to the gallery soon.",[84,103,104,107],{},[77,105,106],{},"In a plain chat:"," you get the email, without the quote.",{"title":13,"searchDepth":14,"depth":14,"links":109},[],"The one CCM Labs builds writes the explanation straight from your job record, so it goes out with the quote without retyping anything.","Customer messages","Check every number and the scope before it goes out. A plain-words email with the wrong price is worse than jargon.","2026-10-16 12:00:00","Your notes make sense to you, not always to the customer. Paste your notes from the call or site visit, confirm the numbers, and get a plain-words email, plus a PDF quote if you run it in your Quotes Project.",{},"\u002Fprompts\u002Fexplain-the-job",[118],{"label":119,"text":120},"Paste it, then paste your call notes under it","You help me explain a job to a customer in plain words. I'll paste my notes from a call or site visit with them under this prompt: Granola notes, or any call or meeting notes. You write the email. I decide when it goes.\n\n## Ground rules\n\n- Never send an email and never contact my customer yourself. You only write drafts.\n- Never invent a number or a piece of scope. Every price, quantity, measurement, date and number of hours you use is either clearly in my notes or confirmed by me. Never round a number off.\n- If something in the notes is unclear, say so and ask me. Don't guess.\n\n## Step 1: Read the notes\n\nPull these from the notes:\n- the customer's name and email, if they're there\n- what the customer asked for\n- what was found\n- what the work involves\n- the options we talked about, if any\n- timing\n- anything the customer was worried about\n\nThen show me what you found as a short list.\n\n## Step 2: Confirm the numbers\n\nList every number the job depends on: prices, quantities, measurements, dates, hours. Mark each one as clear, missing, unclear, or contradicted somewhere else in the notes. Ask me to confirm or fill in every one that isn't clear, plus the customer's email if it's missing.\n\nWait for my answers before you write anything.\n\n## Step 3: Write the email\n\nWrite a short email to the customer, in plain words:\n- what we found;\n- what we'll do, and why;\n- the options, if there are any;\n- what it costs, using only confirmed numbers;\n- timing;\n- the next step.\n\nNo jargon. When a trade term is needed, explain it in a few words. A subject line, and a body of 150 words or fewer, warm and direct. Answer what the customer was worried about, if anything. Sign off with my business name, unless I give you my own name. If you'll make a quote in Step 4, say the quote is attached.\n\n## Step 4: The quote, if you're in my Quotes Project\n\nCheck whether this chat is inside my Quotes Project: a project whose instructions and files include my price list and my business details.\n\n**If it is:** make the quote as a downloadable PDF.\n- Line items come from the confirmed scope and the prices in my price list. If something isn't in the price list, ask me. Don't estimate.\n- Include my business name and details, the customer, today's date (ask me if you don't know it), a quote number if I give you one, and the total.\n- Add a valid-until date only if my Project's instructions or terms set one.\n- If you can't create files here, give me the quote as a clean, printable page I can save as a PDF from the browser's print dialog, and tell me that's what you did.\n\n**If it isn't:** skip the quote, and say in one line: \"Run this in your Quotes Project to get the quote as a PDF too.\"\n\n## Step 5: Get it into my email\n\nCheck whether this chat actually has an email tool that can create drafts, such as a Gmail or Outlook connector. Don't assume it does. If you're not sure, treat it as not connected.\n\n**If it's connected:**\n1. Show me the To address, the subject and the body first, and wait for my yes.\n2. Then create a draft. Never send it.\n   - Address it to the customer's email.\n   - If you can find an existing email thread with this customer, create the draft as a reply in that thread.\n   - If you made a PDF quote and the tool supports attachments, attach it. If it doesn't, tell me plainly that I need to attach the PDF myself.\n3. Tell me where you saved the draft, so I can find it, read it and send it.\n\n**If it's not connected:**\n1. Say so in one line.\n2. Give me the To address, the subject and the body, each in its own block so I can copy them.\n3. Add one line: connecting Gmail or Outlook to this chat lets you create the draft for me next time.\n\nIf I ask for changes, rewrite it and show me again before you touch the draft.",{"title":69,"description":114},"prompts\u002Fexplain-the-job",[124,125,126,127,128],"Run Granola (free) on the call or site visit with the customer, so the notes write themselves. Tell the customer you're taking notes, or ask first.","Copy the notes from Granola. Notes from any other call or meeting tool work too.","Paste the prompt and your notes into a new chat. Or paste them into your Quotes Project to get the PDF quote too.","Confirm any numbers it asks about. It won't guess a price, a measurement or a date.","Review the email: it's a draft in your email if Gmail or Outlook is connected, otherwise copy it. Check the PDF quote too, if you got one.","T0UwnZ2aJpmer0lY-QK-pEnOjjIclAH_8TtpDY_CwMg",{"id":131,"title":132,"audience":133,"body":134,"builtVersion":138,"category":49,"check":139,"date":113,"description":140,"draft":20,"extension":21,"keyword":4,"meta":141,"navigation":23,"path":142,"prompts":143,"seo":147,"sourcePost":4,"stem":148,"steps":149,"__hash__":155},"prompts\u002Fprompts\u002Foverdue-invoice-reminder.md","Chase an overdue invoice without the awkwardness","Any business that invoices",{"type":10,"value":135,"toc":136},[],{"title":13,"searchDepth":14,"depth":14,"links":137},[],"The one CCM Labs builds checks your invoices against your bank and drafts the reminder when one goes overdue, ready for you to approve.","It only writes drafts, so nothing goes out until you send it. You know if there's a reason they're late, and the AI doesn't.","Nobody likes asking to be paid. Paste the invoice link or attach the PDF, answer two questions, and get a reminder in the right tone, saved as a draft in your email or ready to copy.",{},"\u002Fprompts\u002Foverdue-invoice-reminder",[144],{"label":145,"text":146},"Paste it, then add your invoice link or PDF","You help me chase an unpaid invoice. I'll give you a link to the invoice (Stripe, QuickBooks, Wave, FreshBooks, Xero, Square or similar), or attach it as a PDF, a screenshot or a photo. You write the reminder. I decide when it goes.\n\n## Ground rules\n\n- Never send an email, never change the invoice, and never contact my client yourself. You only write drafts.\n- Use only what's on the invoice and what I tell you. Never invent a late fee, a deadline or a threat that isn't printed on the invoice.\n- If something is unclear or missing, say so. Don't guess.\n\n## Step 1: Read the invoice\n\nPull these from the invoice:\n- my business name, as it appears on the invoice\n- the client's name and contact email\n- invoice number\n- amount and currency\n- issue date and due date\n- days overdue, worked out from today's date (if you don't know today's date, ask me)\n- what the work was for\n- the payment link or payment methods\n- any late-fee or interest terms printed on the invoice\n\nIf the link won't open, or opens but shows no invoice details (common with payment pages that load with scripts), tell me in one line and ask for the PDF or a screenshot instead.\n\nThen show me what you found as a short list. Ask me only for what's missing, plus these two questions:\n1. How many reminders have I already sent for this invoice? (0 if none.)\n2. How well do I know this client? A new client, a regular, or someone I've worked with for years?\n\nWait for my answers before you write anything.\n\n## Step 2: Write the reminder\n\nPick the tone from the number of reminders already sent:\n- None: a friendly nudge. Assume it slipped their mind.\n- One: clear and firm. Say the invoice is now overdue and ask them to pay, or to tell me when they will.\n- Two or more: a final notice. Say plainly that this is the final reminder and ask them to pay or reply to sort it out. Mention late fees or interest only if the invoice states them, and quote the terms exactly.\n\nUse how well I know the client to set the warmth: first name and a lighter touch for someone I know well, a little more formal for someone new.\n\nEvery version:\n- mentions the invoice number, the amount with currency, the due date and the payment link (or the payment methods if there's no link);\n- is short: a subject line and a body of 120 words or fewer;\n- has no grovelling, no guilt-tripping and no apologising for asking to be paid;\n- signs off with my business name from the invoice, unless I give you my own name.\n\nWrite the subject like this: \"Invoice \u003Cnumber>: \u003Camount> due \u003Cdue date>\". Add \"Reminder\" or \"Final reminder\" at the front for the second and later reminders.\n\n## Step 3: Get it into my email\n\nCheck whether this chat actually has an email tool that can create drafts, such as a Gmail or Outlook connector. Don't assume it does. If you're not sure, treat it as not connected.\n\n**If it's connected:**\n1. Show me the To address, the subject and the body first, and wait for my yes.\n2. Then create a draft. Never send it.\n   - Address it to the client's email from the invoice.\n   - If you can find an existing email thread with this client about this invoice, create the draft as a reply in that thread.\n   - If I attached the invoice PDF and the tool supports attachments, attach it. Otherwise put the invoice link in the body, and tell me plainly that I need to attach the PDF myself.\n3. Tell me where you saved the draft, so I can find it, read it and send it.\n\n**If it's not connected:**\n1. Say so in one line.\n2. Give me the To address, the subject and the body, each in its own block so I can copy them.\n3. Add one line: connecting Gmail or Outlook to this chat lets you create the draft for me next time.\n\nIf I ask for changes, rewrite it and show me again before you touch the draft.",{"title":132,"description":140},"prompts\u002Foverdue-invoice-reminder",[150,151,152,153,154],"Check the invoice really is unpaid. Look at your bank, not just your invoicing tool.","Copy the prompt into a new chat and paste the invoice link, or attach the PDF. A screenshot works too.","Check what it read from the invoice, then answer two questions: how many reminders you've already sent, and how well you know the client.","If Gmail or Outlook is connected to the chat, it saves a draft in your email. If not, you get the address, subject and message ready to copy.","Read it and send it yourself. If they answer with a problem, deal with the problem. Don't send the next reminder on autopilot.","FO5FOvTtuEy7wLH_pBpFlPAOWLdExzF76PS7ZWZ6sLo",1793290437720]