[{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/ai-tools/","section":"Tags","summary":"","title":"Ai-Tools"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/automation/","section":"Tags","summary":"","title":"Automation"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/categories/","section":"Categories","summary":"","title":"Categories"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/claude-code/","section":"Tags","summary":"","title":"Claude-Code"},{"content":"Welcome. I write about [topics you care about — update me]. Below you\u0026rsquo;ll find my latest posts.\n","date":null,"permalink":"https://build.markjreynolds.com/","section":"Mark Reynolds","summary":"","title":"Mark Reynolds"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/categories/messy-updates/","section":"Categories","summary":"","title":"Messy Updates"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/n8n/","section":"Tags","summary":"","title":"N8n"},{"content":"I recently completed an intensive learning session on n8n automation workflows using Claude Code, guided by Nate Herkelman\u0026rsquo;s video tutorials. I focused on mastering several foundational tools and concepts.\nSkills Developed #The learning covered:\nVisual Studio Code fundamentals Bash Terminal command operations Claude Terminal usage Git and GitHub workflows Project file configuration (bashrc, env, gitignore, CLAUDE.md, scripts) Automated script creation for new project initialization MCP server and skills connection Practical Application #I then implemented my newfound knowledge by integrating Claude Code with an existing n8n workflow. I directed the AI to examine, refine, modify email date formatting, and incorporate a new Telegram notification node.\nThe process demonstrated Claude Code\u0026rsquo;s capability to request necessary credentials and provide setup guidance before task execution. The outcome was flawless and a massive time saving.\nNext Steps #Going forward, I intend to plan and construct n8n workflows using Claude Code and pursue more ambitious web application projects to advance my development skills.\n","date":"10 May 2026","permalink":"https://build.markjreynolds.com/posts/now-i-understand-why-everyone-is-raving-about-claude-code/","section":"Posts","summary":"After an intensive learning session on n8n automation workflows using Claude Code, I finally get what all the fuss is about.","title":"Now I Understand Why Everyone Is Raving About Claude Code"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/posts/","section":"Posts","summary":"","title":"Posts"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/","section":"Tags","summary":"","title":"Tags"},{"content":"I needed to share a public knowledge base while protecting internal-only content. The obvious approach — maintaining duplicate documents — creates a maintenance nightmare and guarantees drift.\nSo I built a single-source solution instead.\nThe Problem #One document. Two audiences. How do you serve different content from the same source without duplicating the document or risking exposure?\nThe Solution: Inline \u0026lt;int\u0026gt; Tags #I developed a tagging system where \u0026lt;int\u0026gt;\u0026lt;/int\u0026gt; tags mark sensitive sections within a document. The approach automatically segregates content into external and internal chunks during vectorisation.\nUnauthenticated users see only public material Administrators access everything No duplicate documents, no accidental exposure Technical Implementation #Core Mechanism:\nThe solution integrates audience-based security into an n8n RAG pipeline. Tagged private content generates separate chunks marked with audience: internal metadata in Supabase. Public content receives audience: external tags.\nDuring queries, the database filters results before the language model processes them. This prevents prompt injection attacks because filtering occurs server-side — not in the prompt.\nAuthentication:\nA subtle admin link gates access via password. Upon login, the server generates a secure token stored in cookies — never the password itself. Server-side validation marks authenticated requests before data retrieval, preventing user manipulation.\nTry the Demo #You can test the system at the BizBrains web front-end:\nSearch for \u0026ldquo;Reauthorizing Google accounts?\u0026rdquo; Observe how the system retrieves information with source links Examine source documents in the viewer Roadmap #Next: vectorising external files (DOCX, Google Slides, PDFs) while maintaining original formats through URL-based metadata storage.\n","date":"1 May 2026","permalink":"https://build.markjreynolds.com/posts/sharing-sensitive-information-safely/","section":"Posts","summary":"How I built audience-based RAG security using inline tags — one document, two audiences, zero accidental data exposure.","title":"Knowledge Base Security: Share Content Safely Without Data Leaks"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/knowledge-base/","section":"Tags","summary":"","title":"Knowledge-Base"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/rag/","section":"Tags","summary":"","title":"Rag"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/security/","section":"Tags","summary":"","title":"Security"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/categories/solutions/","section":"Categories","summary":"","title":"Solutions"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/supabase/","section":"Tags","summary":"","title":"Supabase"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/categories/case-studies/","section":"Categories","summary":"","title":"Case Studies"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/coda/","section":"Tags","summary":"","title":"Coda"},{"content":"I was drowning in scattered files. Google Drive, PCloud, Documents, Coda, Keep. My filing systems would degrade from organised to chaotic after abandoning various projects, creating significant retrieval challenges.\nSo I built BizBrains — a self-managing knowledge base where a structured table acts as the remote control for everything.\nThe Core Idea #Most RAG implementations passively store vectorised content without tracking or removal. Add a document, it gets vectorised. Done. But what happens when you update a document? Or delete it? Most systems leave orphaned data in the vector store.\nBizBrains V1 used a Google Sheet to track documents alongside their titles, descriptions, tags, and categories. When PDFs were added to a specific folder, an n8n workflow vectorised them and stored them in Supabase. Changing a document\u0026rsquo;s status to \u0026ldquo;Remove\u0026rdquo; automatically deleted its chunks from the vector store.\nBizBrains V1 Architecture # Document Tracking: Google Sheet managing vectorisation status Ingestion: PDFs added to Google Drive folder, processed via n8n workflow Metadata: Title, description, tags, category tracked per document Removal: Status column automation for chunk deletion from Supabase Retrieval: Cohere Reranker checking against metadata for accuracy BizBrains V2 — Rebuilt with Claude Code #In April 2026, I used Claude Code to recreate the system in one week, consolidating from six workflows to four. The Coda table now serves dual purposes: document source and workflow controller.\nAdditional V2 features:\nDocument Types: Knowledge documents are chunked and vectorised; Guides are stored whole with metadata-only vectorisation, returning links to original documents Audience Segmentation: A column for future internal/external sharing control User Interface: Coda buttons enabling status changes; Instant Webhook Chrome Extension triggering n8n workflow checks Frontend: Query interface for searching the vector store Roadmap # Internal Tags System: Using \u0026lt;int\u0026gt;\u0026lt;/int\u0026gt; tags to redact sensitive content in publicly shared documents — visible only to authenticated users User Authentication: Required for delineating internal vs external access Online Table Migration: Moving the Coda table into the frontend after authentication Folder Tree View: Hierarchical metadata field for document organisation External File Vectorisation: Supporting DOCX, Google Slides by vectorising URLs as metadata while files remain in their original locations ","date":"25 April 2026","permalink":"https://build.markjreynolds.com/posts/rag-knowledge-base-bizbrains/","section":"Posts","summary":"Most RAG systems just store documents — they don\u0026rsquo;t track them. BizBrains uses a Coda table as a remote control for the entire vectorisation pipeline.","title":"Self-Managing Knowledge Base: RAG System That Tracks Documents Automatically"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/build-log/","section":"Tags","summary":"","title":"Build-Log"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/focus/","section":"Tags","summary":"","title":"Focus"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/productivity/","section":"Tags","summary":"","title":"Productivity"},{"content":"I struggle with inconsistent focus. On distraction-prone days, I waste significant time unless I catch myself early. My primary symptoms: daydreaming, or spending extended periods on YouTube, LinkedIn, or Facebook.\nSo I built something to interrupt the pattern.\nWhat It Does #A locally-running screen monitor application with two core functions:\nDetects screen inactivity exceeding 5 minutes and displays \u0026ldquo;Have you lost focus?\u0026rdquo; Alerts when accessing specified distraction websites Configurable: monitored sites, trigger timing, and messaging are all adjustable The app functions as an intentional interruption — forcing a conscious decision instead of losing hours to distraction.\nHow I Built It #I created it using Claude Code. It monitors screen activity and triggers alerts based on the conditions above.\nThe AI Experiment That Didn\u0026rsquo;t Work #My initial approach: a \u0026ldquo;Yes\u0026rdquo; response to the alert triggered an AI voice agent call via VAPI offering coaching.\nProblem: the 11 cents/minute cost created pressure that actually hindered thinking rather than helping it.\nThree Alternatives I Considered # Implement walkie-talkie-style interaction requiring \u0026ldquo;over\u0026rdquo; or \u0026ldquo;thank you\u0026rdquo; to trigger AI responses Build an n8n-based AI agent sending Telegram messages for asynchronous responses Skip AI integration entirely using a mental state mapping system What I Actually Chose #Option 3. I mapped identifiable mental states to specific corrective actions:\nMurky mind Scattered mind Bored Restless Tired Stuck Chasing certainty Overwhelmed Each state has a corresponding action. No AI required.\nJust because I can use AI doesn\u0026rsquo;t mean I should.\nThe app includes comprehensive Settings for customising question text, idle timing thresholds, and monitored applications.\n","date":"20 April 2026","permalink":"https://build.markjreynolds.com/posts/focus-monitor-distraction-alert/","section":"Posts","summary":"I built a locally-running screen monitor that catches distraction before it steals hours. And then decided not to use AI in it at all.","title":"Screen Monitor App: Get Distraction Alerts and Stay Focused"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/tools/","section":"Tags","summary":"","title":"Tools"},{"content":"I needed a way to trigger my n8n workflows on demand without waiting for scheduled polling. So I built a Chrome Extension to do it.\nWhat It Does #A browser tool that lets you trigger n8n webhooks with a single click. No payload required. No waiting for the next scheduled polling interval. Just click and run.\nThe Problem It Solves #Development cycles used to require waiting for scheduled polling intervals to activate workflows. That\u0026rsquo;s fine in production — but painful during development and testing, and frustrating for clients who need to trigger something immediately when a new document is added.\nThe benefit: Development and testing are now instant. Clients can trigger workflows whenever they need to instead of waiting for the next scheduled run.\nUse Cases # Trigger n8n to retrieve the latest updates from Coda tables Force a re-check of Google Drive files immediately after uploading Run any webhook-based workflow on demand during development Get It #The extension is available on the Chrome Web Store.\nIt was built using ChatGPT — you can read about the build process here.\n","date":"15 April 2026","permalink":"https://build.markjreynolds.com/posts/instant-webhook-chrome-extension/","section":"Posts","summary":"The Instant Webhook extension is now on the Chrome Web Store — trigger any n8n workflow with a single click, no polling required.","title":"Chrome Extension: Instant Webhook Triggers for n8n Workflows"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/chrome-extension/","section":"Tags","summary":"","title":"Chrome-Extension"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/webhooks/","section":"Tags","summary":"","title":"Webhooks"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/chatgpt/","section":"Tags","summary":"","title":"Chatgpt"},{"content":"I recently developed a Chrome extension using ChatGPT, completing the initial build in approximately 45–60 minutes. The project came out of my work with n8n workflows and a RAG solution called BizBrains.\nWhat I Built #An extension that lets me trigger n8n workflows manually via webhooks — eliminating the need for continuous polling of data sources like Coda Tables or Gmail inboxes.\nI collaborated with ChatGPT to produce vanilla, configurable code across three files: manifest.json, popup.html, and popup.js.\nTesting Process # Created a folder containing the three generated files Loaded the extension into Chrome via chrome://extensions/ Enabled Developer Mode and selected \u0026ldquo;Load Unpacked\u0026rdquo; Added the folder to Chrome Configured webhook names and URLs through the extension menu Executed webhooks by clicking \u0026ldquo;Run\u0026rdquo; Three Iterations #It wasn\u0026rsquo;t clean first time:\nVersion 1: Icons displayed as corrupted text Version 2: Caused complete Chrome crashes Version 3: Functioned successfully Each refinement came through visual feedback and iterative prompting with ChatGPT.\nWhy It Matters #The extension lets clients trigger workflow executions on demand rather than adhering to predetermined polling intervals. This is particularly valuable for knowledge ingestion systems that need immediate updates when new documents are added.\nUpdate (15/04/2026): The \u0026ldquo;Instant Webhook\u0026rdquo; extension is now available on the Chrome Web Store.\n","date":"5 April 2026","permalink":"https://build.markjreynolds.com/posts/i-built-a-chrome-extension-with-chatgpt-in-under-an-hour/","section":"Posts","summary":"Three iterations, one Chrome crash, and about 45 minutes later — a working browser extension that triggers n8n webhooks on demand.","title":"I Built a Chrome Extension With ChatGPT in Under an Hour — Here's How It Went"},{"content":"I use Zoom meetings to explore people\u0026rsquo;s passions and connect their interests with their Genius Report profile. The preparation process was becoming cumbersome when generating text versions of Genius Reports.\nTo fix it, I turned to ChatGPT and spent just 10 minutes explaining what I needed: a simple HTML/JavaScript form where I can rapidly enter Genius Report Talent \u0026amp; Cooperation profile values (1–100), tab through each field, hit Enter, and have the formatted result instantly copied to my clipboard.\nAfter ChatGPT generated the code, I saved it as an HTML file in Google Drive and bookmarked it in Chrome for quick access during sessions. The tool functions seamlessly, allowing me to paste clipboard contents into my custom GPT during meetings.\nThe workflow enables immediate interpretation of how a person\u0026rsquo;s Talent and Cooperation profiles manifest when they\u0026rsquo;re operating optimally.\nTen minutes of building. Ongoing time saved every session.\n","date":"1 April 2026","permalink":"https://build.markjreynolds.com/posts/10-minute-build-that-accelerates-zoom-prep/","section":"Posts","summary":"I spent 10 minutes with ChatGPT building a simple HTML tool that saves me time before every Zoom session.","title":"A 10-Minute Build That Accelerates Zoom Prep"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/html/","section":"Tags","summary":"","title":"Html"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/documentation/","section":"Tags","summary":"","title":"Documentation"},{"content":"Back in 2009 I implemented a knowledge management system at GHD Engineering in Brisbane using Windows SharePoint Services. Within six months, IT staff across multiple offices were actively referencing the wiki knowledge base.\nWhat Made It Work #I attribute the wiki\u0026rsquo;s success to four things:\nA logical naming convention for articles A structured article body format Ongoing maintenance of the hierarchical page organisation Management support and advocacy The Naming Convention Problem #Generic summarisation approaches create problems fast. When every article is labelled something vague, a search for \u0026ldquo;out of office\u0026rdquo; yields a list of articles your eyes have to painstakingly scan through.\nI developed a top-down chunking approach with four hierarchical levels:\n1st Level: Category (Software, Hardware, Network) 2nd Level: Brand (Microsoft, Dell, Cisco) 3rd Level: Product Name/Version (Outlook 2010, Optiplex 7700) 4th Level: Article Type (Error, Issue, How To) Examples:\nSoftware - Microsoft - Outlook 2010 - How To - Recover Deleted Items Software - Microsoft - Outlook 2010 - Error - Cannot start Microsoft Outlook Software - Microsoft - Outlook 2010 - Issue - Hyperlinks not working Article Body Structure #I implemented a simple template-based system:\nFirst Heading: HOW TO, ERROR, or ISSUE Second Heading: SOLUTION Content varied by article type and included procedural steps, error descriptions, screenshots, and technical explanations. Each article automatically displayed author, modification date, and breadcrumb navigation.\nAddressing Contributor Hesitation #Some staff hesitated to contribute directly due to concerns about proper placement and format adherence. I addressed this by personally managing article submissions — prioritising content capture over structural perfection.\nThe same principle applies directly to RAG pipelines today. Clear, structured titles make retrieval dramatically more accurate. The discipline is the same; only the technology has changed.\n","date":"15 March 2026","permalink":"https://build.markjreynolds.com/posts/good-document-titles-dont-just-help-humans-they-help-your-rag-pipeline-too/","section":"Posts","summary":"A naming convention I built for a SharePoint knowledge base in 2009 turns out to be exactly what modern RAG pipelines need too.","title":"Good Document Titles Don't Just Help Humans — They Help Your RAG Pipeline Too"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/knowledge-management/","section":"Tags","summary":"","title":"Knowledge-Management"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/sharepoint/","section":"Tags","summary":"","title":"Sharepoint"},{"content":"Sarah manages catering requests for Fuel Bakehouse. Every quote request followed the same five-step manual process: extract customer details from email, populate a spreadsheet, generate a quote in Excel, fill in an email template, attach the PDF, and send it. She was doing this 6 times a day, 6 days per week.\nI met Sarah at Dale Beaumont\u0026rsquo;s AI in Business seminar. A month later, I had something built for her.\nWhat I Built #An automation workflow that handles most of it. The moment an email arrives, it:\nExtracts the customer details Writes them into her spreadsheet Generates the email Attaches the menu PDF Alerts Sarah to review, attach the quote, and send The Technical Stack # Gmail filter + label to detect incoming quote requests the moment they arrive n8n on a DigitalOcean VPS ($6/month) triggered on that label AI Agent to extract customer details from the email and write them into the right columns in Google Sheets Code nodes to format dates correctly before insertion Auto-generated email: subject, body, dates, menu PDF attached, addressed to the customer Label update to mark emails as processed Telegram alert to Sarah so she can review, generate the quote, attach it, and send Error handler that fires a Telegram message if anything breaks The Result #5 minutes saved per quote request.\n6 requests a day × 6 days a week = 30 minutes daily, 15 hours a month back in her pocket.\nRunning cost: $6/month.\nThe Lesson #I used to build n8n workflows node by node. Now I use Claude Code to build them in a fraction of the time.\nIf you\u0026rsquo;ve mapped out an online process clearly enough that someone new could follow it — AI can be trained to do it too.\nWith full website access, this project could have expanded to include a Voice AI agent, auto-generated quotes, and a custom order management app. That\u0026rsquo;s the next conversation.\n","date":"1 March 2026","permalink":"https://build.markjreynolds.com/posts/catering-quote-automation-case-study/","section":"Posts","summary":"Sarah at Fuel Bakehouse was manually processing 6 catering quote requests a day. A simple n8n workflow on a $6/month VPS changed that.","title":"30 Minutes Saved Every Day — With a $6/Month Automation"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/ai-agent/","section":"Tags","summary":"","title":"Ai-Agent"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/case-study/","section":"Tags","summary":"","title":"Case-Study"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/gmail/","section":"Tags","summary":"","title":"Gmail"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/pubsub/","section":"Tags","summary":"","title":"Pubsub"},{"content":"Most email automation systems work by polling — constantly checking your inbox at regular intervals to see if anything new has arrived. It\u0026rsquo;s inefficient, slow, and costs money you don\u0026rsquo;t need to spend.\nThere\u0026rsquo;s a better way.\nThe Problem with Polling #Think of conventional automation like a helpful assistant who stands at your office door and knocks every minute, asking: \u0026ldquo;Do you have a new task for me?\u0026rdquo;\nThat constant checking wastes computational resources and increases costs unnecessarily. And you still get a delay between the email arriving and your automation firing.\nThe Pub/Sub Solution #Instead, I implemented a Pub/Sub notification system through the Gmail API. Here\u0026rsquo;s the three-step process:\nGmail Filters automatically label incoming emails with designations like \u0026ldquo;New\u0026rdquo; based on specified criteria Upon labelling, Gmail instantly sends a webhook notification to n8n n8n activates only when it receives an actual notification n8n doesn\u0026rsquo;t have to endlessly knock on the door to check for new emails. It only wakes up when there is actual work to do — resulting in improved speed and efficiency.\nThe emails hit the automation the moment they arrive. No polling delay. No unnecessary API calls. No wasted compute.\nIf you\u0026rsquo;re building any kind of email-triggered workflow, this is the architecture to use.\n","date":"20 February 2026","permalink":"https://build.markjreynolds.com/posts/the-secret-gmail-automation-hack-that-saves-time-and-money/","section":"Posts","summary":"Most email automations poll constantly and waste resources. Here\u0026rsquo;s how a Pub/Sub notification system through the Gmail API changes everything.","title":"The Secret Gmail Automation Hack That Doesn't Require Polling"},{"content":"In 2009, while working in IT at GHD Engineering in Brisbane, I built SharePoint Lists to organise the IT Department\u0026rsquo;s asset inventory. Printers were the perfect example of why structure matters.\nGHD occupied three buildings throughout Brisbane\u0026rsquo;s CBD across multiple levels — 11 floors total — each containing multiple printers. The printer naming system conveyed location information, but IT staff still repeatedly asked the same questions:\nWhat\u0026rsquo;s the IP address? Which toner cartridge does it take? Who\u0026rsquo;s the vendor for reordering? I recognised this as a simple structure problem with a simple structure solution.\nWhat I Built #A SharePoint List with these columns:\nPrinter Name · IP Address · Location · Colour/BW · Cartridge Model No\u0026rsquo;s · Order Cartridges (linked to vendor) · Serial · Admin PW · Warranty Expiry · Printer Repair Number\nThe IP column linked directly to the printer\u0026rsquo;s admin console. The Order Cartridges column linked to the vendor\u0026rsquo;s website. Everything anyone needed was in one place.\nThe Result #Compiling it took minimal effort. The payoff was significant — repetitive questions stopped, and all staff knew exactly where to find the information.\nThe Question Worth Asking #What information needs structure in your business?\nSoftware, hardware, standard operating procedures, vendor contacts — anything that generates repeated questions is a candidate. If people keep asking the same thing, the answer belongs in a structured list, not in someone\u0026rsquo;s head.\n","date":"15 January 2026","permalink":"https://build.markjreynolds.com/posts/printers-ip-addresses-and-11-floors-of-chaos-a-case-study-in-structure/","section":"Posts","summary":"A simple SharePoint list solved a constant stream of repetitive IT questions across 11 floors. The principle still applies today.","title":"Printers, IP Addresses, and 11 Floors of Chaos: A Case Study in Structure"},{"content":"","date":null,"permalink":"https://build.markjreynolds.com/tags/structure/","section":"Tags","summary":"","title":"Structure"},{"content":"Hi, I\u0026rsquo;m Mark #[Write your bio here — who you are, what you do, what this site is about.]\nWhat I\u0026rsquo;m working on #[Current projects, interests, or focus areas.]\nGet in touch #Feel free to reach out at markreynolds.mg@gmail.com.\n","date":null,"permalink":"https://build.markjreynolds.com/about/","section":"Mark Reynolds","summary":"","title":"About"}]