{"id":18282,"date":"2026-06-08T13:56:25","date_gmt":"2026-06-08T11:56:25","guid":{"rendered":"https:\/\/www.centigrade.de\/?post_type=blog&#038;p=18282"},"modified":"2026-06-22T13:51:58","modified_gmt":"2026-06-22T11:51:58","slug":"18282","status":"publish","type":"blog","link":"https:\/\/www.centigrade.de\/en\/blog\/18282\/","title":{"rendered":"Lead Analysis with Vibe Coding \u2013 How we tailored our analysis more closely to our needs"},"content":{"rendered":"<p>Monthly lead reports are a regular part of our CRM routine. The same question comes up every time: how do we get to reliable insights about our lead pipeline as quickly as possible, without spending a large chunk of time on manual data preparation?<\/p>\n<p>That&#8217;s exactly the situation we faced in the Centigrade CRM team. Once a month, we review our lead analysis: How many new leads did we acquire? Where are they coming from? What are the conversion rates? And why did we lose certain leads?<\/p>\n<p>Our previous process was functional and actually quite pragmatic, but far from lightweight. In Excel, we used PowerTools to query the API of our agency management software Moco (<a href=\"https:\/\/www.mocoapp.com\/\">https:\/\/www.mocoapp.com\/<\/a>), where all lead data is stored. Existing charts were updated, new ones had to be created and linked manually when needed. The results were then prepared for PowerPoint and transferred by copy or screenshot. Any additional analyses from meetings could typically only be included the following month.<\/p>\n<p>Our new goal was: an analysis that fits better into our day-to-day work. A solution based on current data, interactive to use, incrementally extensible, and not dependent on individual people \u2014 one the entire CRM team could work with.<\/p>\n<p><!--more--><\/p>\n<p>Before we got started, however, we had to address a fundamental question. We&#8217;ve been using Moco since 2023, which means we only have a reliable data foundation in the system from that point onwards. Earlier lead data still exists in the legacy Excel file \u2014 it was migrated from older tools at the time \u2014 but it wouldn&#8217;t be included in the new analysis. We consciously chose a pragmatic path nonetheless: we forgo direct comparisons with the period before 2023 and continue to refer to the old Excel file when needed.<\/p>\n<p>Then came the technology question. It&#8217;s often more effective to run analyses where the data is collected. Moco itself already offers lead analytics features, but not yet to the extent our requirements demanded.<\/p>\n<p>One natural first thought was to use a third-party tool like Power BI (<a href=\"https:\/\/www.microsoft.com\/de-de\/power-platform\/products\/power-bi\">https:\/\/www.microsoft.com\/de-de\/power-platform\/products\/power-bi<\/a>). We already had experience with it, including querying APIs and databases from other contexts. On closer inspection, though, it quickly became clear: for this use case, that would have been a comparatively large setup \u2014 too complex and too heavyweight for what we actually needed to solve.<\/p>\n<p>More interesting, therefore, was a different approach: building a small custom tool via vibe coding. Platforms like Figma Make (https:\/\/www.figma.com\/de-de\/make\/) or Lovable (https:\/\/lovable.dev\/) would have been viable options in principle, but would have required additional licenses. The higher licensing costs wouldn&#8217;t have been a dealbreaker given the right value proposition. At the same time, there was the obvious skepticism: is it even worth it when a working Excel solution already exists? Well, we wanted to find out, and set ourselves a timebox of one day.<\/p>\n<p>The low-risk entry point toward a concrete decision was therefore a small proof of concept. Using Claude Sonnet 4.6 via prompting, we first generated an HTML file that mapped out a dashboard covering our known requirements. In this first step, lead data was still fed in manually via a JSON file. Even at this early stage, the results were surprisingly convincing: within a short time it was clear that the approach not only worked technically, but was also well suited to our specific use case. On this basis, we aligned on next steps together with the engineering team.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-18271 size-large\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-1-982x1024.webp\" alt=\"\" width=\"982\" height=\"1024\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-1-982x1024.webp 982w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-1-288x300.webp 288w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-1-768x801.webp 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-1-24x24.webp 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-1-46x48.webp 46w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-1.webp 1008w\" sizes=\"auto, (max-width: 982px) 100vw, 982px\" \/><\/p>\n<p><em>Figure 1. The first PoC as an HTML page already worked remarkably well<\/em><\/p>\n<p>For the evolution of the PoC into a reusable tool, we settled on a combination of n8n workflow (<a href=\"https:\/\/n8n.io\/\">https:\/\/n8n.io\/<\/a>) and OpenAI&#8217;s Codex (<a href=\"https:\/\/openai.com\/de-DE\/codex\/\">https:\/\/openai.com\/de-DE\/codex\/<\/a>). The data was connected to a GitLab repository that already contained agents.md documents to better guide the LLM&#8217;s working behaviour.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-18273 size-large\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-2-1500x645.webp\" alt=\"\" width=\"1500\" height=\"645\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-2-1500x645.webp 1500w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-2-300x129.webp 300w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-2-768x330.webp 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-2-1536x660.webp 1536w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-2-2048x880.webp 2048w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-2-24x10.webp 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-2-36x15.webp 36w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-2-48x21.webp 48w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p><em>Figure 2. Codex translates prompts directly into documented code changes<\/em><\/p>\n<p>The n8n workflow handles reading the lead data from the agency software and passing it as a JSON file to the HTML code. The workflow was built by DevOps and is reusable for similar applications.<\/p>\n<p>Authentication is managed within it, ensuring only authorised access to the data. We could have used Codex for building the workflow, but given the extensive hands-on experience our team had already accumulated with n8n, such workflows can be created effectively by hand as well.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-18275 size-large\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-3-1500x415.webp\" alt=\"\" width=\"1500\" height=\"415\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-3-1500x415.webp 1500w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-3-300x83.webp 300w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-3-768x212.webp 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-3-1536x425.webp 1536w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-3-2048x566.webp 2048w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-3-24x7.webp 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-3-36x10.webp 36w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-3-48x13.webp 48w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p><em>Figure 3. The n8n workflow is triggered automatically when the lead website is opened<\/em><\/p>\n<p>In practice, this setup has proven pleasantly direct: whenever something changes in the code, the HTML page just needs to be reloaded and the update is immediately visible in the browser. Codex is used to iteratively extend the frontend code via prompting and version it through the GitLab repository. To give the tool a visual identity that fits better into our context, we also incorporated styling information from our design system Supernova (<a href=\"https:\/\/www.supernova.io\/\">https:\/\/www.supernova.io\/<\/a>).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-18277 size-large\" src=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-4-1500x1001.webp\" alt=\"\" width=\"1500\" height=\"1001\" srcset=\"https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-4-1500x1001.webp 1500w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-4-300x200.webp 300w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-4-768x512.webp 768w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-4-1536x1025.webp 1536w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-4-2048x1366.webp 2048w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-4-24x16.webp 24w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-4-36x24.webp 36w, https:\/\/www.centigrade.de\/wordpress\/wp-content\/uploads\/Abbildung-4-48x32.webp 48w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p><em>Figure 4. Lead analysis now happens dynamically in the browser<\/em><\/p>\n<p>What was particularly striking to us was how quickly a rather experimental idea turned into a solid result. After roughly a day and a half, we had a solution that not only met our original objectives, but already went beyond them. There&#8217;s now an additional sub-page that, via communication with a new n8n workflow, evaluates leads based on AI-assisted web analysis and fills in form fields autonomously. It was well worth extending the original scope slightly for that.<\/p>\n<p><strong>Conclusion<\/strong><\/p>\n<p>For us, the outcome is far more than just a technical optimisation. In a short time, a concrete internal need gave rise to a tool that makes our lead analysis noticeably faster and more flexible. What excited us most was how much is possible today with a clear use case and the right tools. Instead of continuing to invest in manual preparation, we can focus more on what actually matters: making better decisions in the CRM team and developing our business development activities in a more targeted way. That&#8217;s precisely what makes this project such a satisfying example of vibe coding being not just an abstract trend, but a genuinely effective instrument in the right context.<\/p>\n","protected":false},"author":88,"featured_media":0,"template":"","tags":[840,983,1073],"class_list":["post-18282","blog","type-blog","status-publish","hentry","tag-ai","tag-ki-2","tag-n8n"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/blog\/18282","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/users\/88"}],"version-history":[{"count":2,"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/blog\/18282\/revisions"}],"predecessor-version":[{"id":18286,"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/blog\/18282\/revisions\/18286"}],"wp:attachment":[{"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/media?parent=18282"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.centigrade.de\/en\/wp-json\/wp\/v2\/tags?post=18282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}