[{"data":1,"prerenderedAt":245},["ShallowReactive",2],{"prompts-\u002Fprompts\u002Fsubscription-audit":3,"prompts-related-\u002Fprompts\u002Fsubscription-audit":36},{"id":4,"title":5,"audience":6,"body":7,"builtVersion":14,"category":15,"check":16,"date":17,"description":18,"draft":19,"extension":20,"keyword":14,"meta":21,"navigation":22,"path":23,"prompts":24,"seo":28,"sourcePost":14,"stem":29,"steps":30,"__hash__":35},"prompts\u002Fprompts\u002Fsubscription-audit.md","Find the subscriptions you forgot you're paying for","Anyone with a business or personal card",{"type":8,"value":9,"toc":10},"minimark",[],{"title":11,"searchDepth":12,"depth":12,"links":13},"",2,[],null,"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.",false,"md",{},true,"\u002Fprompts\u002Fsubscription-audit",[25],{"label":26,"text":27},"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":5,"description":18},"prompts\u002Fsubscription-audit",[31,32,33,34],"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",[37,100,126,152,187,217],{"id":38,"title":39,"audience":40,"body":41,"builtVersion":80,"category":81,"check":82,"date":83,"description":84,"draft":19,"extension":20,"keyword":14,"meta":85,"navigation":22,"path":86,"prompts":87,"seo":91,"sourcePost":14,"stem":92,"steps":93,"__hash__":99},"prompts\u002Fprompts\u002Fexplain-the-job.md","Explain a job to a customer in plain words","Trades and technical services",{"type":8,"value":42,"toc":78},[43,50],[44,45,46],"p",{},[47,48,49],"strong",{},"What you get depends on where you run it:",[51,52,53,60,66,72],"ul",{},[54,55,56,59],"li",{},[47,57,58],{},"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.",[54,61,62,65],{},[47,63,64],{},"No email connected:"," you get the address, subject and message, ready to copy.",[54,67,68,71],{},[47,69,70],{},"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.",[54,73,74,77],{},[47,75,76],{},"In a plain chat:"," you get the email, without the quote.",{"title":11,"searchDepth":12,"depth":12,"links":79},[],"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",[88],{"label":89,"text":90},"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":39,"description":84},"prompts\u002Fexplain-the-job",[94,95,96,97,98],"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":101,"title":102,"audience":103,"body":104,"builtVersion":108,"category":15,"check":109,"date":83,"description":110,"draft":19,"extension":20,"keyword":14,"meta":111,"navigation":22,"path":112,"prompts":113,"seo":117,"sourcePost":14,"stem":118,"steps":119,"__hash__":125},"prompts\u002Fprompts\u002Foverdue-invoice-reminder.md","Chase an overdue invoice without the awkwardness","Any business that invoices",{"type":8,"value":105,"toc":106},[],{"title":11,"searchDepth":12,"depth":12,"links":107},[],"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",[114],{"label":115,"text":116},"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":102,"description":110},"prompts\u002Foverdue-invoice-reminder",[120,121,122,123,124],"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",{"id":127,"title":128,"audience":129,"body":130,"builtVersion":134,"category":135,"check":136,"date":83,"description":137,"draft":19,"extension":20,"keyword":14,"meta":138,"navigation":22,"path":139,"prompts":140,"seo":144,"sourcePost":14,"stem":145,"steps":146,"__hash__":151},"prompts\u002Fprompts\u002Fquiet-quote-follow-up.md","Follow up on quotes that went quiet","Trades and service businesses",{"type":8,"value":131,"toc":132},[],{"title":11,"searchDepth":12,"depth":12,"links":133},[],"The one CCM Labs builds watches your sent quotes and drafts the nudge when one goes quiet, ready for you to approve.","Quotes & sales","It only writes drafts, so nothing goes out until you send it. Check the job and the dates first. A follow-up about the wrong job undoes the good the quote did.","Most quotes don't get a no, they get silence. Paste the quote link or attach the PDF, answer two questions, and get a short follow-up as a draft in your email or ready to copy.",{},"\u002Fprompts\u002Fquiet-quote-follow-up",[141],{"label":142,"text":143},"Paste it, then add your quote link or PDF","You help me follow up on a quote that went quiet. I'll give you a link to the quote or estimate (Jobber, Housecall Pro, QuickBooks, Square, ServiceTitan, Xero, a shared Google Doc or similar), or attach it as a PDF, a screenshot or a photo. You write the follow-up. I decide when it goes.\n\n## Ground rules\n\n- Never send an email, never change the quote, and never contact my client yourself. You only write drafts.\n- Use only what's on the quote and what I tell you. Never invent a discount, a deadline, \"limited availability\" or any other pressure that isn't printed on the quote.\n- If something is unclear or missing, say so. Don't guess.\n\n## Step 1: Read the quote\n\nPull these from the quote:\n- my business name, as it appears on the quote\n- the client's name and contact email\n- quote number\n- total and currency\n- the date it was sent\n- how many days ago that was, worked out from today's date (if you don't know today's date, ask me)\n- the scope, in one line\n- the expiry or valid-until date, if there is one\n- the accept or approve link, if there is one\n\nIf the link won't open, or opens but shows no quote details (common with 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 follow-ups have I already sent for this quote? (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 follow-up\n\nPick the tone from the number of follow-ups already sent:\n- None: a light check-in. Ask if the quote arrived and if they have any questions.\n- One: helpful. Offer to walk them through it, or to adjust the scope if it doesn't quite fit.\n- Two or more: a polite close-out. Ask something like \"Should I close this out, or keep it open for you?\" so they have an easy way to say no.\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- names the quote and what it covers;\n- includes the accept link, if there is one;\n- mentions the expiry date only if it's printed on the quote;\n- is short: a subject line and a body of 120 words or fewer;\n- has no grovelling, no pressure and no apologising for following up;\n- signs off with my business name from the quote, unless I give you my own name.\n\nWrite the subject like this: \"Quote \u003Cnumber>: \u003Cscope in a few words>\". Add \"Following up\" at the front for the second and later follow-ups.\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 quote.\n   - If you can find an existing email thread with this client about this quote, create the draft as a reply in that thread.\n   - If I attached the quote PDF and the tool supports attachments, attach it. Otherwise put the quote 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":128,"description":137},"prompts\u002Fquiet-quote-follow-up",[147,148,149,123,150],"Find a quote that never got an answer. A week after you sent it is a good time to follow up; a month is still fine.","Copy the prompt into a new chat and paste the quote link, or attach the PDF. A screenshot works too.","Check what it read from the quote, then answer two questions: how many follow-ups you've already sent, and how well you know the client.","Read it, add a line only you could write, and send it yourself. \"Close it out\" is an answer too, and it clears your list.","8xfHmJHEg3y56W6HxnMSAkUtcEtclrcQ8lrC9BSR298",{"id":153,"title":154,"audience":155,"body":156,"builtVersion":166,"category":135,"check":167,"date":168,"description":169,"draft":19,"extension":20,"keyword":170,"meta":171,"navigation":22,"path":172,"prompts":173,"seo":177,"sourcePost":178,"stem":179,"steps":180,"__hash__":186},"prompts\u002Fprompts\u002Fslow-season-check-ins.md","Check in with past customers in the slow season","Seasonal trades and service businesses",{"type":8,"value":157,"toc":164},[158],[44,159,160,163],{},[47,161,162],{},"One note for Canada:"," anti-spam rules (CASL) generally cover people who bought from you in the last two years or asked for a quote in the last six months, and every message needs your business name, your contact details and a way to opt out. That's why the prompt flags anyone whose last job was more than two years ago, and adds an opt-out line to every check-in. Check the rules for your own case.",{"title":11,"searchDepth":12,"depth":12,"links":165},[],"The one I build at CCM Labs knows who's due for a check-in and drafts the message for you.","Read every draft before it goes. It only knows what's in your email, and it can get a job or a date wrong.","2026-10-09 22:38:00","Your best leads already paid you once. With Gmail or Outlook connected, the AI finds past clients in your email, you pick who to check in with, and it writes the drafts.","FOLLOWUP",{},"\u002Fprompts\u002Fslow-season-check-ins",[174],{"label":175,"text":176},"Paste into a chat with your email connected","You help me check in with past clients during the slow season. You find them in my email, I pick who to write to on a small page you build, and you write the check-ins as drafts. I decide what goes.\n\n## Ground rules\n\n- Never send an email, never contact anyone, and never change, label, archive or delete anything in my mailbox. You only read mail and write drafts.\n- Never invent a past job, a date or a detail. Use only what's in my mail and what I tell you.\n- No phone numbers or street addresses in the page.\n- If something is unclear (a client you can't place, a job you can't date), say so. Don't guess silently.\n- Keep chat replies short. The page does the talking.\n\n## Step 1: Check for email\n\nCheck whether this chat actually has an email tool that can search my mail and 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\nIf it's not connected, say so in one line and offer the fallback: I paste or attach a list of past customers (an export from Jobber or QuickBooks, a spreadsheet, or my phone's contacts), and you build the same page from that. The check-ins then come back ready to copy instead of saved as drafts. Add one line: connecting Gmail or Outlook to this chat lets you do the search yourself next time.\n\n## Step 2: Find past clients (read-only)\n\nSearch my sent and received mail from the last 3 years for signs of finished work: invoices or receipts sent, quotes accepted, booking or job confirmations, thank-you notes, review requests.\n\n- Group what you find by client.\n- Leave out:\n  - anyone I've emailed in the last 60 days (they're active);\n  - suppliers, newsletters, personal contacts and automated mail;\n  - anyone who complained, disputed a bill, has an unpaid invoice, or asked not to be contacted.\n- Tell me in one line how many you left out, and why.\n- Keep the 30 most promising.\n- Flag anyone whose last paid job was more than 2 years ago. Anti-spam rules (Canada's CASL, for one) may not let me email them without their consent.\n- Note my business name as it appears in my sent mail. If you can't find it, ask me.\n\nWith a pasted list instead of email, use what the list gives you, and leave a field empty when the list doesn't say.\n\nFor each client, record:\n\n| field | meaning |\n|---|---|\n| `id` | short slug, unique |\n| `name` | client name |\n| `email` | client email |\n| `last_job` | what the last job was, in a few words |\n| `last_job_date` | YYYY-MM-DD, or \"unknown\" |\n| `jobs` | number of jobs found |\n| `last_contact` | date of the last email either way, YYYY-MM-DD |\n| `reason` | one line on why now is a good time to check in; seasonal where it fits (annual maintenance, before winter, a year since the job) |\n| `confidence` | \"high\", \"medium\" or \"low\" that this is a real past client |\n| `evidence` | the subject line and date of the email(s) you relied on; never copy email bodies |\n| `flag` | e.g. \"last job over 2 years ago\", or empty |\n| `status` | always \"undecided\" at this stage |\n| `note` | empty for now |\n\n## Step 3: 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 `check-ins.html` and open in my browser.\n\n**Data.** Put all the data in `\u003Cscript id=\"checkin-state\" type=\"application\u002Fjson\">` as\n`{\"version\": 1, \"list_id\": \"\u003Ctoday's date + a short slug>\", \"round\": 1, \"has_email\": \u003Ctrue|false>, \"business_name\": \"\u003Cname>\", \"clients\": [...]}`.\nSet `has_email` to `true` only if this chat actually gives you an email tool that can create drafts. Otherwise set it to `false`. The page renders everything from this data and nothing else.\n\n**Layout:**\n- If `has_email` is `false`, put a clearly visible notice directly under the header. It isn't an error, so style it calmly. Use exactly this text: \"Email isn't connected in this chat, so your check-ins will come back as messages ready to copy, not as drafts in your email.\"\n- Header: how many clients were found, and how many are marked Check in, Skip, or still to decide.\n- One card per client, best fit first: highest confidence, then the strongest reason, then the longest since the last job. Each card shows the name, the last job and its date, the number of jobs, the date of last contact, the reason, a confidence badge (low confidence looks visibly different), the evidence in small text, and the flag if there is one.\n- Each card has two buttons, **Check in** and **Skip**, and a short optional note field labelled \"Anything to mention?\". Clicking a button sets the client's `status`, highlights the chosen button and updates the counts. Clicking it again sets it back to \"undecided\". Typing in the note field saves it to `note`.\n- Works on a phone. Readable in light and dark mode.\n\n**Saving.** The page must not lose my choices:\n- On every change, save the full state to `localStorage` under `checkins:\u003Clist_id>`. Wrap every read and write in `try\u002Fcatch`, because some chat apps block storage.\n- On load, if saved state exists for this `list_id`, the saved statuses and notes 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   SLOW SEASON CHECK-INS — ROUND \u003Cn>\n   CHECK IN: \u003Cname>, \u003Cname>, ...\n   SKIP: \u003Cname>, \u003Cname>, ...\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 client is marked Check in.\n\nAfter the page, write one line in the chat: \"Mark who to check in with, then click **Send my choices to the assistant** and paste the result here.\"\n\n## Step 4: When I paste a `SLOW SEASON CHECK-INS` message\n\nTreat the `STATE` JSON as the source of truth. It lets you carry on even in a fresh chat.\n\n### Check in\n\nFor each client marked Check in, write a short check-in:\n- personal: mention the last job and why now is a good time, and use my note if I wrote one;\n- offer to book them in, and end with one easy question they can answer in a line;\n- no hard sell, and no discount unless I give you one;\n- a subject line, and a body of 90 words or fewer, not counting the sign-off;\n- signed with my business name and my contact details from my sent mail, with a last line that lets them opt out, such as \"If you'd rather not hear from me, just reply and say so.\"\n\nShow me all of them first, and wait for my yes. If I ask for changes, rewrite and show me again.\n\n**With email connected:** once I say yes, create a draft for each one. Never send. Where you can find the last email thread with that client, create the draft as a reply in that thread. Then tell me where you saved the drafts.\n\n**Without email:** give me each one with the To address, the subject and the body, each in its own block so I can copy them.\n\nThen build the page again with these changes:\n- Increase `round` by 1.\n- Set each client you wrote for to \"drafted\".\n- Show those clients in a \"Drafted\" section at the top, each with a **Done** button I click once I've sent it, which sets its status to \"sent\". Without email, show each message in that section with a copy button. Keep the notice from Step 3 at the top of the page.\n- Any client still \"undecided\" keeps its full card, with **Check in** and **Skip**.\n- Skipped clients go into a collapsed \"Skipped\" section. They stay in the state.\n- The header counts include drafted and sent.\n- The hand-off text uses the new round number.\n\n### Skip\n\nDo nothing with these.\n\n## Finally\n\nWhen nothing is left undecided, or I say I'm done, give me a summary of two lines:\n- how many check-ins you wrote, and where they are;\n- anyone worth a second look: low confidence, or flagged.",{"title":154,"description":169},"https:\u002F\u002Fwww.instagram.com\u002Fccmlabs\u002Fp\u002FDeSmY57DzeX\u002F","prompts\u002Fslow-season-check-ins",[181,182,183,184,185],"Connect Gmail or Outlook to your AI assistant first. It works best that way. Without it, you can paste a customer list instead and copy the messages yourself.","Paste the prompt into a new chat. It searches your email, read-only, for clients you've done work for.","On the page it builds, mark each one Check in or Skip, and add a note if there's something to mention. Then click Send my choices to the assistant and paste the result back.","Read the check-ins it writes. Say yes, and it saves them as drafts in your email. Nothing gets sent.","Send them yourself, five a day, and add a line only you could write. When someone answers, reply the same day.","enkQZlLa7Pv8VgOExfOzZqJFbl7yw-1TF5iRtuXwjPQ",{"id":188,"title":189,"audience":190,"body":191,"builtVersion":195,"category":196,"check":197,"date":198,"description":199,"draft":19,"extension":20,"keyword":200,"meta":201,"navigation":22,"path":202,"prompts":203,"seo":207,"sourcePost":208,"stem":209,"steps":210,"__hash__":216},"prompts\u002Fprompts\u002Fjob-notes-by-voice.md","Talk through the job, get notes, follow-ups and invoice lines","Trades and field crews",{"type":8,"value":192,"toc":193},[],{"title":11,"searchDepth":12,"depth":12,"links":194},[],"The one CCM Labs builds files those notes into your job system by itself, and reminds you about the follow-up.","On the job","Check every number before it goes on an invoice. Voice mishears, and anything it wasn't sure of is listed under Check these.","2026-10-09 21:50:00","Your best job notes are in your head at 6pm and gone by 8. Made for ChatGPT's voice mode, so you can talk through the job before you leave the site and get your notes, follow-ups and invoice lines back as a file.","NOTES",{},"\u002Fprompts\u002Fjob-notes-by-voice",[204],{"label":205,"text":206},"Paste into a new ChatGPT chat, then tap the voice button","You're helping me write up a job I just finished. We'll do it by voice, so this is a spoken conversation.\n\nHow to talk to me:\n- Keep every reply to one short sentence plus one question. Ask one question at a time.\n- No lists, headings or symbols out loud. Talk like a person.\n- When I say a name or a number, repeat it back briefly so I can catch mistakes, like \"Twelve metres of trim, right?\" Voice mishears these.\n- If an answer is vague, ask for the number: hours, quantities, measurements.\n\nAsk about these, in this order, and move on once you have the answer:\n1. Which job, and which client.\n2. What got done.\n3. Materials used, with quantities.\n4. Extras or changes beyond what was agreed. Ask me straight out: \"Anything you did that wasn't in the quote?\"\n5. Problems: anything that went wrong, got delayed or needs a second look.\n6. What's next, and by when.\n\nWhen I say \"that's it\", \"done\" or \"wrap it up\":\n- Say one line out loud: \"Got it, I'm making your notes file.\"\n- Then create a downloadable Markdown file named job-notes-\u003Cclient-or-job>-\u003CYYYY-MM-DD>.md, using today's date.\n- If you can't create a file while we're in voice mode, say this out loud instead: \"End the voice chat and type 'file'.\"\n- If you can't create files at all, put the same Markdown in one code block, so I can copy it or save it.\n\nIf I type \"file\" or \"write it up\" at any point, create the file straight away with what you have.\n\nThe file has four sections, each with its own heading:\n- Job notes: the job and client, what got done, materials, problems.\n- Follow-ups: each one with a date.\n- Invoice lines: a table with Qty, Unit and Description columns. Mark extras with \"Extra\" so I can see what wasn't in the quote.\n- Check these: anything you weren't sure you heard right, and anything I didn't give you.\n\nNever invent prices, quantities or dates I didn't give you. If one is missing, write \"not given\" and list it under Check these.\n\nStart by asking which job this is.",{"title":189,"description":199},"https:\u002F\u002Fwww.instagram.com\u002Fccmlabs\u002Fp\u002FDeSg8DJkgFs\u002F","prompts\u002Fjob-notes-by-voice",[211,212,213,214,215],"Before you leave the site, open the ChatGPT app and start a new chat.","Paste the prompt and send it, then tap the voice button.","Answer out loud. It asks one question at a time and repeats names and numbers back, so you can correct them.","Say \"that's it\" when you're done, and download the notes file it makes. If the voice chat can't make files, it asks you to type one word: \"file\".","Check the file, then put it where it belongs: notes into the job file, follow-ups into your calendar, invoice lines into your invoice.","VZtspxs6Kz3oWCdjrCu9eF1muEqg158rnRKhXlVLPaE",{"id":218,"title":219,"audience":220,"body":221,"builtVersion":225,"category":81,"check":226,"date":227,"description":228,"draft":19,"extension":20,"keyword":229,"meta":230,"navigation":22,"path":231,"prompts":232,"seo":236,"sourcePost":237,"stem":238,"steps":239,"__hash__":244},"prompts\u002Fprompts\u002Fwrite-like-you.md","Teach your AI assistant to write like you","Any business that answers customers",{"type":8,"value":222,"toc":223},[],{"title":11,"searchDepth":12,"depth":12,"links":224},[],"The one CCM Labs builds drafts replies inside your inbox, with each customer's history in front of it.","Still read every reply before it goes. Your voice rules don't know today's prices or hours.","2026-10-09 21:34:00","Your AI replies sound like everyone else's, and customers can tell. Turn ten of your own messages into voice rules in ten minutes.","VOICE",{},"\u002Fprompts\u002Fwrite-like-you",[233],{"label":234,"text":235},"Paste with your ten messages under it","Here are ten messages I wrote to customers.\nDescribe how I write as 8 to 10 rules you could follow: greeting, sign-off, sentence length, words I use, words I never use.\nKeep each rule to one line.",{"title":219,"description":228},"https:\u002F\u002Fwww.instagram.com\u002Fccmlabs\u002Fp\u002FDeSfGKEErl8\u002F","prompts\u002Fwrite-like-you",[240,241,242,243],"Collect ten messages you actually sent: emails, DMs, texts to real customers. Pick the ones that sound like you. Take names and details out.","Copy the prompt and paste it into a chat, with your ten messages under it.","Save the rules as custom instructions. In ChatGPT: Settings, Personalization. In Claude: Settings, then Instructions for Claude. In Gemini: put them in a Gem.","From then on, reply in one line: \"Reply to this: can't do Friday, offer Monday 9am, keep the deposit.\" It drafts in your voice.","OodNGjdv3Ts2JQvmIvSFCp_lca97Ii-N4DoHLdGPToE",1792525689578]