<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Building blocks: Love, Debt and Robots]]></title><description><![CDATA[A story about a couple working through their budgeting issues with a spreadsheet and AI ]]></description><link>https://dquangle.substack.com/s/love-debt-and-robots</link><image><url>https://substackcdn.com/image/fetch/$s_!WqF0!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6fc16f-2b71-4cd2-b0b1-57823a1e6b8e_599x599.png</url><title>Building blocks: Love, Debt and Robots</title><link>https://dquangle.substack.com/s/love-debt-and-robots</link></image><generator>Substack</generator><lastBuildDate>Fri, 05 Jun 2026 23:22:41 GMT</lastBuildDate><atom:link href="https://dquangle.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Quang Le]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[dquangle@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[dquangle@substack.com]]></itunes:email><itunes:name><![CDATA[Quang LE]]></itunes:name></itunes:owner><itunes:author><![CDATA[Quang LE]]></itunes:author><googleplay:owner><![CDATA[dquangle@substack.com]]></googleplay:owner><googleplay:email><![CDATA[dquangle@substack.com]]></googleplay:email><googleplay:author><![CDATA[Quang LE]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Love, Debt and Robots #2: Friction]]></title><description><![CDATA[The friction was still there. Just&#8230; in a different form.]]></description><link>https://dquangle.substack.com/p/love-debt-and-robots-2-friction</link><guid isPermaLink="false">https://dquangle.substack.com/p/love-debt-and-robots-2-friction</guid><dc:creator><![CDATA[Quang LE]]></dc:creator><pubDate>Wed, 06 Aug 2025 06:30:28 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7d2f935a-b7ed-47c0-b2b2-01a0f0197417_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At the end of <a href="https://dquangle.substack.com/p/chapter-1-foundation">Chapter #1</a>, we had everything we thought we needed:</p><ul><li><p>A shiny new spreadsheet</p></li><li><p>An AI that reads our bank emails</p></li><li><p>A working automation to categorise and log our expenses</p></li></ul><p>It was supposed to alleviate our most acute pain: freeing us from manually reconciling expenses&#8212;no more digging through crumpled receipts. No more squinting at barely legible transaction comments on banking apps. No more playing detective.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dquangle.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading C&#7863;m c&#7909;i! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><strong>I wish it had been that simple.</strong></p><blockquote><p>"If it takes four clicks to change one number, it's not a tool &#8212; it's friction."</p></blockquote><p>The friction was still there. Just&#8230; in a different form.</p><div><hr></div><h1>Friction #1: The Sucker of Souls</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ptJZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21e61126-eede-42be-b0bc-bcfa72ed16ca_1904x1163.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ptJZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21e61126-eede-42be-b0bc-bcfa72ed16ca_1904x1163.png 424w, https://substackcdn.com/image/fetch/$s_!ptJZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21e61126-eede-42be-b0bc-bcfa72ed16ca_1904x1163.png 848w, https://substackcdn.com/image/fetch/$s_!ptJZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21e61126-eede-42be-b0bc-bcfa72ed16ca_1904x1163.png 1272w, https://substackcdn.com/image/fetch/$s_!ptJZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21e61126-eede-42be-b0bc-bcfa72ed16ca_1904x1163.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ptJZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21e61126-eede-42be-b0bc-bcfa72ed16ca_1904x1163.png" width="410" height="250.4359243697479" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21e61126-eede-42be-b0bc-bcfa72ed16ca_1904x1163.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1163,&quot;width&quot;:1904,&quot;resizeWidth&quot;:410,&quot;bytes&quot;:2625699,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a29b082-14a5-4108-8f0d-23fa8f6d7ef1_1904x1163.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ptJZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21e61126-eede-42be-b0bc-bcfa72ed16ca_1904x1163.png 424w, https://substackcdn.com/image/fetch/$s_!ptJZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21e61126-eede-42be-b0bc-bcfa72ed16ca_1904x1163.png 848w, https://substackcdn.com/image/fetch/$s_!ptJZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21e61126-eede-42be-b0bc-bcfa72ed16ca_1904x1163.png 1272w, https://substackcdn.com/image/fetch/$s_!ptJZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21e61126-eede-42be-b0bc-bcfa72ed16ca_1904x1163.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Me holding my cat against the soul-sucking spreadsheet. Colorised. Circa 2025.</figcaption></figure></div><h2>&#127762; The Shadow</h2><p>By the end of May, it was a peaceful Sunday afternoon. I was on the couch. My wife sat beside me, laptop open, face scrunched.</p><p>We went through the sheet &#8212; and it was a mess. Again.</p><p>Even with the automation, the &#8220;Unclassified&#8221; section was overflowing. The AI got us 70&#8211;80% of the way. But that last 20%?</p><blockquote><p>That was where our time, energy, and mood went to die.</p></blockquote><p>We were still doing exactly what we had tried to avoid</p><ul><li><p>Pulling up bank apps to match unknown charges</p></li><li><p>Guessing which line belonged to which group</p></li><li><p>Cross-referencing our memory (&#8220;Did we spend &#8364;12 at&#8230; WAWGA?&#8221;)</p></li></ul><p>We dreaded it &#8212; spending one to two evenings a week just to fix the spreadsheet. Worse, it made us question the whole point of tracking in the first place, sucking the soul out of what we started.</p><blockquote><p>&#8220;It&#8217;s 2025. Why does this still suck?&#8221;</p></blockquote><h2>&#9889; The Spark</h2><p>We tried to be more flexible by working out the modifications on the go: in the bus, on the tram, while waiting for food in the restaurant.</p><p>Using Sheets on mobile was a nightmare: it took at least three steps to do a simple modification.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IAyd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IAyd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif 424w, https://substackcdn.com/image/fetch/$s_!IAyd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif 848w, https://substackcdn.com/image/fetch/$s_!IAyd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif 1272w, https://substackcdn.com/image/fetch/$s_!IAyd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IAyd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif" width="203" height="439.3939393939394" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:231,&quot;resizeWidth&quot;:203,&quot;bytes&quot;:1771739,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IAyd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif 424w, https://substackcdn.com/image/fetch/$s_!IAyd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif 848w, https://substackcdn.com/image/fetch/$s_!IAyd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif 1272w, https://substackcdn.com/image/fetch/$s_!IAyd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb881e835-5460-4ddc-b53e-44df5b2feaa2_231x500.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Using Sheets on mobile is a nightmare.</figcaption></figure></div><p>I got a strong urge to build a new app, mobile-friendly, with a simple design, a good UX and a new transaction notification. That would cost me at least a month.</p><p>Then my wife jokingly mentioned hiring an accountant: it would be much easier to have someone do that for you, we&#8217;d tell them in chat. That way, we continued using Telegram: no UX, no UI, no learning curve, just words.</p><h2>&#129302; The Bot</h2><p>The idea was brilliant.</p><p>After a total of 2 hours of hacking and 0&#8364; spent, I got a new Telegram bot as a <strong>basic financial assistant</strong>. It was not just for tracking &#8212; but for interacting. It worked from the couch, the tram, or Sunday breakfast.</p><h4>It&#8230;talked</h4><p>We named it&#8230;Penny.</p><p>Whenever there was a new transaction, Penny sent a new message into the group.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Rsh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc98ea9-9efb-4f9c-b340-f4303f4e7189_883x1333.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Rsh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc98ea9-9efb-4f9c-b340-f4303f4e7189_883x1333.png 424w, https://substackcdn.com/image/fetch/$s_!0Rsh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc98ea9-9efb-4f9c-b340-f4303f4e7189_883x1333.png 848w, https://substackcdn.com/image/fetch/$s_!0Rsh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc98ea9-9efb-4f9c-b340-f4303f4e7189_883x1333.png 1272w, https://substackcdn.com/image/fetch/$s_!0Rsh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc98ea9-9efb-4f9c-b340-f4303f4e7189_883x1333.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Rsh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc98ea9-9efb-4f9c-b340-f4303f4e7189_883x1333.png" width="266" height="401.5605889014723" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9fc98ea9-9efb-4f9c-b340-f4303f4e7189_883x1333.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1333,&quot;width&quot;:883,&quot;resizeWidth&quot;:266,&quot;bytes&quot;:1032206,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ffdb4af-764b-46ea-89a6-131d32bfc19f_894x1333.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0Rsh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc98ea9-9efb-4f9c-b340-f4303f4e7189_883x1333.png 424w, https://substackcdn.com/image/fetch/$s_!0Rsh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc98ea9-9efb-4f9c-b340-f4303f4e7189_883x1333.png 848w, https://substackcdn.com/image/fetch/$s_!0Rsh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc98ea9-9efb-4f9c-b340-f4303f4e7189_883x1333.png 1272w, https://substackcdn.com/image/fetch/$s_!0Rsh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc98ea9-9efb-4f9c-b340-f4303f4e7189_883x1333.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If anything was wrong, we told her to rectify it right away.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eB79!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4520701c-8ba9-4152-9986-d3386d086433_1206x1141.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eB79!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4520701c-8ba9-4152-9986-d3386d086433_1206x1141.png 424w, https://substackcdn.com/image/fetch/$s_!eB79!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4520701c-8ba9-4152-9986-d3386d086433_1206x1141.png 848w, https://substackcdn.com/image/fetch/$s_!eB79!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4520701c-8ba9-4152-9986-d3386d086433_1206x1141.png 1272w, https://substackcdn.com/image/fetch/$s_!eB79!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4520701c-8ba9-4152-9986-d3386d086433_1206x1141.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eB79!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4520701c-8ba9-4152-9986-d3386d086433_1206x1141.png" width="266" height="251.66334991708126" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4520701c-8ba9-4152-9986-d3386d086433_1206x1141.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1141,&quot;width&quot;:1206,&quot;resizeWidth&quot;:266,&quot;bytes&quot;:810082,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfa55a1a-c971-4853-b666-ccf02cd4a01d_1206x1141.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eB79!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4520701c-8ba9-4152-9986-d3386d086433_1206x1141.png 424w, https://substackcdn.com/image/fetch/$s_!eB79!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4520701c-8ba9-4152-9986-d3386d086433_1206x1141.png 848w, https://substackcdn.com/image/fetch/$s_!eB79!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4520701c-8ba9-4152-9986-d3386d086433_1206x1141.png 1272w, https://substackcdn.com/image/fetch/$s_!eB79!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4520701c-8ba9-4152-9986-d3386d086433_1206x1141.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Also, manipulating the &#8220;comment&#8221; of the transfers in our banking app was enough for Penny to ignore money moving between our accounts.</p><blockquote><p>&#8220;This 120 EUR is for &#8216;&#128573;Cat Expenses&#8217; and add note: annual vaccine.&#8221;</p><p>Done. The spreadsheet is now <strong>just a database</strong>. Interaction lives in chat.</p></blockquote><h4>And she learned</h4><p>As most of our spending was repetitive, errors usually repeated themself. We found ourselves doing the same modification repeatedly: if a purchase from a bakery or a supermarket was wrongly classified, we had to adjust it systematically.</p><p>Penny must learn.</p><p>I created a new sheet, <code>Penny Memory</code> , with three columns &#8212; a very primitive form of a vector database.</p><ul><li><p>Type of memory &#8212; classification instruction in this case</p></li><li><p>Topic &#8212; for grouping purposes (still not sure it's useful)</p></li><li><p>Memory &#8212; description of what the LLM need to take into account when classifying a transaction</p></li></ul><p>Every time we told the bot to change a detail of a transaction, the LLM determined the difference and wrote down a new instruction in the sheet to prevent future misclassification.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2q0i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2q0i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png 424w, https://substackcdn.com/image/fetch/$s_!2q0i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png 848w, https://substackcdn.com/image/fetch/$s_!2q0i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png 1272w, https://substackcdn.com/image/fetch/$s_!2q0i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2q0i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png" width="450" height="134.75274725274724" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:436,&quot;width&quot;:1456,&quot;resizeWidth&quot;:450,&quot;bytes&quot;:189793,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2q0i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png 424w, https://substackcdn.com/image/fetch/$s_!2q0i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png 848w, https://substackcdn.com/image/fetch/$s_!2q0i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png 1272w, https://substackcdn.com/image/fetch/$s_!2q0i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c949ff2-2c1f-4b25-b40d-768099c1d35c_1570x470.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="pullquote"><p>&#127808; Penny kept categorising &#8216;Magasin U&#8217; as &#8216;Dining Out&#8217;, but we used that receipt for weekly meal prep. One correction later, she remembered it &#8212; and never misfiled it again. That saved 10 minutes every week.</p></div><h1>Friction #2: The Blindspots</h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VFKD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VFKD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png 424w, https://substackcdn.com/image/fetch/$s_!VFKD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png 848w, https://substackcdn.com/image/fetch/$s_!VFKD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png 1272w, https://substackcdn.com/image/fetch/$s_!VFKD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VFKD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png" width="451" height="218.99519230769232" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:707,&quot;width&quot;:1456,&quot;resizeWidth&quot;:451,&quot;bytes&quot;:753547,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VFKD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png 424w, https://substackcdn.com/image/fetch/$s_!VFKD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png 848w, https://substackcdn.com/image/fetch/$s_!VFKD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png 1272w, https://substackcdn.com/image/fetch/$s_!VFKD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbac024fb-4f98-4e49-bfa9-ee2c2543553c_1920x932.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">An unforeseen event creeping up on our budget. Colorised. Circa 2025.</figcaption></figure></div><h2>&#127787;&#65039; The Fog</h2><p>Back when we elaborated the ground rules for our system, we agreed on the budget: to set it as rigid as possible, it would teach us discipline. In our dashboard, the budget was set against the actual spending &#8212; there's no room for deviation.</p><p>My wife was doubtful, but I insisted, more room to wiggle, and you know to syphon out.</p><p>Things worked for a couple of weeks.</p><p>One day, our cat swallowed something in the yard and started vomiting blood everywhere. We immediately threw him in the cage and drove to the emergency service. That was 150 EUR worth of grass seed.</p><p>That night, we pulled our hair trying to find a way to reallocate some money to cover that unexpected incident, potentially from our shopping, groceries and restaurant budget. It was stressful not only because we didn&#8217;t</p><p>I mistook <strong>rigidity</strong> for <strong>control</strong>.</p><h2>&#128099; The Sidestep</h2><p>As a workaround, I insisted on going with a buffer, and I couldn't be more wrong once more.</p><p>Whenever we overspent, the transaction got into a kind of purgatory: it is labelled with the category overspent and at the exact time another category, such as <code>shopping</code> and <code>car maintenance</code></p><p>At the end of the 2nd week, I gave up&#8212;time to build the proper budget table.</p><h2>&#128294; The Light</h2><p>Adding a dedicated &#8220;table&#8221; for the budget was sensible.</p><p>Also, I started using Cursor instead of Claude for coding, so it was supposed to cover the heavy lifting here.</p><p>After another 90 minutes&#8230;</p><p>A new sheet for our database to store the budget lines</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!34aw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!34aw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png 424w, https://substackcdn.com/image/fetch/$s_!34aw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png 848w, https://substackcdn.com/image/fetch/$s_!34aw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png 1272w, https://substackcdn.com/image/fetch/$s_!34aw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!34aw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png" width="450" height="213.56456043956044" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:691,&quot;width&quot;:1456,&quot;resizeWidth&quot;:450,&quot;bytes&quot;:350883,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!34aw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png 424w, https://substackcdn.com/image/fetch/$s_!34aw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png 848w, https://substackcdn.com/image/fetch/$s_!34aw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png 1272w, https://substackcdn.com/image/fetch/$s_!34aw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d724c8e-d161-4bd9-8c50-82eed32f3026_2006x952.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Budget List</figcaption></figure></div><p>A new memory section for the bot to memorise our budgeting instructions</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6VPy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f6ba2ec-0e92-4661-8608-a0e0f1e443f6_2070x272.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6VPy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f6ba2ec-0e92-4661-8608-a0e0f1e443f6_2070x272.png 424w, https://substackcdn.com/image/fetch/$s_!6VPy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f6ba2ec-0e92-4661-8608-a0e0f1e443f6_2070x272.png 848w, https://substackcdn.com/image/fetch/$s_!6VPy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f6ba2ec-0e92-4661-8608-a0e0f1e443f6_2070x272.png 1272w, https://substackcdn.com/image/fetch/$s_!6VPy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f6ba2ec-0e92-4661-8608-a0e0f1e443f6_2070x272.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6VPy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f6ba2ec-0e92-4661-8608-a0e0f1e443f6_2070x272.png" width="450" height="59.130434782608695" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f6ba2ec-0e92-4661-8608-a0e0f1e443f6_2070x272.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:272,&quot;width&quot;:2070,&quot;resizeWidth&quot;:450,&quot;bytes&quot;:136716,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8eab735-5afe-410a-bbec-5b018df86f53_2070x272.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6VPy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f6ba2ec-0e92-4661-8608-a0e0f1e443f6_2070x272.png 424w, https://substackcdn.com/image/fetch/$s_!6VPy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f6ba2ec-0e92-4661-8608-a0e0f1e443f6_2070x272.png 848w, https://substackcdn.com/image/fetch/$s_!6VPy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f6ba2ec-0e92-4661-8608-a0e0f1e443f6_2070x272.png 1272w, https://substackcdn.com/image/fetch/$s_!6VPy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f6ba2ec-0e92-4661-8608-a0e0f1e443f6_2070x272.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">New section in Penny brain for budgeting instruction</figcaption></figure></div><p>We got a monthly budget that&#8230;</p><ul><li><p>&#8230;was based on our life, real spending and the last known monthly budget. Any variation must not stray too far from the 5/3/2 rules: 50% for the expenses, 30% for the funds and 20% for the long-term savings.</p></li><li><p>&#8230;could be effortlessly modified accordingly to our chat messages &#8212; similarly to a transaction.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9no0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13348501-620c-44d1-9037-c8040a225dae_1206x2415.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9no0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13348501-620c-44d1-9037-c8040a225dae_1206x2415.png 424w, https://substackcdn.com/image/fetch/$s_!9no0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13348501-620c-44d1-9037-c8040a225dae_1206x2415.png 848w, https://substackcdn.com/image/fetch/$s_!9no0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13348501-620c-44d1-9037-c8040a225dae_1206x2415.png 1272w, https://substackcdn.com/image/fetch/$s_!9no0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13348501-620c-44d1-9037-c8040a225dae_1206x2415.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9no0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13348501-620c-44d1-9037-c8040a225dae_1206x2415.png" width="224" height="448.55721393034827" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13348501-620c-44d1-9037-c8040a225dae_1206x2415.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2415,&quot;width&quot;:1206,&quot;resizeWidth&quot;:224,&quot;bytes&quot;:1101969,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85815557-2102-4658-b34c-bafb66be09aa_1206x2622.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9no0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13348501-620c-44d1-9037-c8040a225dae_1206x2415.png 424w, https://substackcdn.com/image/fetch/$s_!9no0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13348501-620c-44d1-9037-c8040a225dae_1206x2415.png 848w, https://substackcdn.com/image/fetch/$s_!9no0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13348501-620c-44d1-9037-c8040a225dae_1206x2415.png 1272w, https://substackcdn.com/image/fetch/$s_!9no0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13348501-620c-44d1-9037-c8040a225dae_1206x2415.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Thirty minutes was more than enough for Penny to do our budget.</strong></p><div class="pullquote"><p>&#127808;A week later, our cat decided to test his acrobatic capability with a 5-metre jump from the 2nd floor to the concrete ground below. The 6-Kg bastard crash-landed with a remarkable &#8221;thump&#8221; and could not walk afterwards.</p><p>It was a Sunday. The vet was closed; only emergency service was open. The bill? Another &#8364;187. We didn&#8217;t flinch. Penny had already flagged that we&#8217;d underspent on gas and groceries that week. </p><p>That moment, the bot stopped being a tech hack. It became a stress guardrail.</p></div><h1>Friction #3: Beyond the Budget Rift</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8cJa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8df9ecf4-9337-4c33-8d43-7f569cb7d322_626x906.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8cJa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8df9ecf4-9337-4c33-8d43-7f569cb7d322_626x906.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8cJa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8df9ecf4-9337-4c33-8d43-7f569cb7d322_626x906.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8cJa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8df9ecf4-9337-4c33-8d43-7f569cb7d322_626x906.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8cJa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8df9ecf4-9337-4c33-8d43-7f569cb7d322_626x906.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8cJa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8df9ecf4-9337-4c33-8d43-7f569cb7d322_626x906.jpeg" width="250" height="361.82108626198084" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8df9ecf4-9337-4c33-8d43-7f569cb7d322_626x906.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:906,&quot;width&quot;:626,&quot;resizeWidth&quot;:250,&quot;bytes&quot;:171783,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a17f521-a251-4341-8d91-861161cd3042_626x906.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8cJa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8df9ecf4-9337-4c33-8d43-7f569cb7d322_626x906.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8cJa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8df9ecf4-9337-4c33-8d43-7f569cb7d322_626x906.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8cJa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8df9ecf4-9337-4c33-8d43-7f569cb7d322_626x906.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8cJa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8df9ecf4-9337-4c33-8d43-7f569cb7d322_626x906.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My cat and I hanging on to our budget at the end of the month. Restored. Circa 2025.</figcaption></figure></div><h2>&#128371;&#65039; The Wormhole</h2><p>It was a couple of busy weeks for both of us &#8212; with lots of deadlines, unexpected news from our family and time on the road. On Friday night, we got to the supermarket and bought some nice things for hot pot.</p><p>After dinner, I glanced at the spreadsheet.</p><blockquote><p>&#8220;Wait &#8212; we&#8217;re &#8364;100 over on groceries &#129327;?!&#8221; &#8221;What? Impossible!&#8221;</p></blockquote><p>We thought we managed the budget well and could forget about it until, at the other end, we realised that we were a light year into the overspending.</p><h2>&#129680; The Orbit</h2><p>Out of sight = out of mind.</p><p>We resorted to checking the spreadsheet frequently using the mobile app or just before the weekly trip to the market.</p><p>Once-a-week spreadsheet check-ins meant we could only see the damage after it was done.</p><p>We created the monthly budget as the gravity centre of our living, so it must pull us back every time we stray out of orbit.</p><h2>&#127756; The Pathway</h2><p>We needed to be aware of what was left on our monthly budget for specific categories and the total budget. This time it would be just &#8220;reporting&#8221;, so I quickly opened up the bot codebase.</p><p><strong>For an overview report &#8212; what's planned vs what's left</strong>, we got an automation that sent out a Weekly summary via Telegram. It was triggered every Saturday &#8212; before our trip to the market. We could also ask the bot anytime for an <strong>on-demand report</strong> for midweek check-ins.</p><p>Now, everyone saw the burn <strong>before</strong> the flame got too high. The report was:</p><ul><li><p>Short (3&#8211;4 lines)</p></li><li><p>Categorised</p></li><li><p>Emoji-coded (&#8252;&#65039; = urgent, &#9888;&#65039; = caution)</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ko1-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ko1-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ko1-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ko1-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ko1-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ko1-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg" width="280" height="489.81333333333333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1968,&quot;width&quot;:1125,&quot;resizeWidth&quot;:280,&quot;bytes&quot;:712949,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ko1-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ko1-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ko1-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ko1-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae70ca1-d9f9-40f6-a4c5-2f007255ccf0_1125x1968.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>For each category-centric report</strong>, every time the bot sent the transactional message, it also included the remaining budget for the category.</p><div class="pullquote"><p>&#9752;&#65039;<em>By the end of June, we didn't argue over a missing &#8364;15; all the money calculation just took 30 minutes. </em></p><p><em><strong>That was the day we started to wonder: what if Penny could do more than track? What if she could tell us, &#8216;Yes, you can afford this trip&#8217; &#8212; and show us how?&#8221;</strong></em></p><p><strong>&#128073;</strong><em><strong>Please follow for the last chapter of the series <br>Chapter #3: Premonition</strong></em></p></div><h1>After Credit: Under the hood &#128736;&#65039;</h1><blockquote><p><strong>&#9995;In this part, I explain technically how Penny works. Skip this if you're not interested.</strong></p></blockquote><p>If you want to test out the bot, check out the source code here: <a href="https://github.com/quangle-lab/pennythefinbot">https://github.com/quangle-lab/pennythefinbot</a></p><h2>Database</h2><p>The spreadsheet is organised as a simplified database.</p><p>I use five tables:</p><ul><li><p>Categories list</p></li><li><p>Instructions (bot's memory)</p></li><li><p><em>Spending:</em> Variable spending, Fixed spending</p></li><li><p><em>Fund:</em> Family Fund, Target Fund and Saving</p></li><li><p>Dashboard &#8212; where all the calculations happen</p></li></ul><p>For each table, there are get/set functions to read or write the data from the spreadsheets. They are also tools for the agent later on.</p><h2>Workflow and Prompts</h2><p>I start most of the features as intention-based, which is the classic approach for a chatbot. The architecture is listed below. The prompts are maintained and built in the promptHandler, which comprises three parts</p><ul><li><p>system: set Penny&#8217;s tone, language and identity</p></li><li><p>user: group the user's message, the dynamic context and instructions built from the spreadsheet</p></li><li><p>other params: the model to use (4.1 yields the best result with the chain of thought), temperature.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o4D-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o4D-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png 424w, https://substackcdn.com/image/fetch/$s_!o4D-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png 848w, https://substackcdn.com/image/fetch/$s_!o4D-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png 1272w, https://substackcdn.com/image/fetch/$s_!o4D-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o4D-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png" width="1456" height="948" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:948,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:357849,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/170159572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!o4D-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png 424w, https://substackcdn.com/image/fetch/$s_!o4D-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png 848w, https://substackcdn.com/image/fetch/$s_!o4D-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png 1272w, https://substackcdn.com/image/fetch/$s_!o4D-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fbfe654-8a2a-4585-a603-ac65b3846953_2478x1613.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Penny's first architecture</figcaption></figure></div><p>The following example shows how a prompt can guide the LLM to return a structured response.</p><pre><code><code>{
  "intent": "addTx" or "intent": "modifyTx" or "intent": "deleteTx",
  "tab": "name of the current category group, strictly following the name and emoji as defined in the category list",
  "newtab": "name of the new group if the user requests to move the transaction to a different group. Must strictly follow the name and emoji in the category list. Leave blank if the update only modifies details such as description, amount, or category within the same group",
  "date": "date of the transaction in the format DD/MM/YYYY",
  "desc": "short description of the transaction, maximum 30 characters, based on the original description and the user's request",
  "amount": "transaction amount in the format &#8364;20.00 (omit + or - if present)",
  "location": "place where the transaction occurred. Use the rental location instruction to determine the correct city name with the correct capitalization",
  "category": "categorization item, must strictly follow the name including the emoji as listed in the categorization instruction",
  "comment": "one of the following two values if there&#8217;s no existing comment (if there is one, keep it unchanged):
    - blank if the intent is modifyTx
    - added manually if the user requested to add the transaction, only applies to intent addTx"
  "row": "row number of the transaction to be updated",
  "confirmation": "confirmation message summarizing the changes, with the *Group* and *Category* names written in bold using markdown, e.g., *category* or *group*"
}
</code></code></pre><h2>Memory</h2><h3><strong>Short term</strong></h3><p>OpenAI provides a mechanism to link the message together and form a discussion thread: we can include the previous_message_id in the API calls whenever it's relevant.</p><p>It is a dangerous practice because the token number increases rapidly and can reach millions after 3-4 calls. I only use this for the agentic approach, where the bot needs to continue the discussions or to determine the tools to use before answering the user requests.</p><h3><strong>Long term</strong></h3><p>The bot's long-term memory lives in the Instructions tab of the spreadsheet. Every time the bot determines a new rule, I will provide the context, a list of categories, and the instructions to help it determine the appropriate update.</p><h2>Builder's task list</h2><ul><li><p>Create the bot using <a href="https://core.telegram.org/bots/tutorial">Telegram's Bot Father</a> and add it to the family's dedicated expense tracking group chat.</p></li><li><p>Add the Google Sheets function to send the new messages to the group via the bot whenever there's a new transaction.</p></li><li><p>Add a Google trigger to check for new messages in the chat group, route the message to the OpenAI API to detect the intention and specify the expected response.</p></li><li><p>Execute the appropriate functions for each intention.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dquangle.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading C&#7863;m c&#7909;i! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Love, Debt and Robots #1: Foundation]]></title><description><![CDATA[Here&#8217;s the story how we rebuilt our household budgeting system from scratch using Google Sheets and AI. For the first chapter, we'll explore how the project started and the real motivation behind.]]></description><link>https://dquangle.substack.com/p/chapter-1-foundation</link><guid isPermaLink="false">https://dquangle.substack.com/p/chapter-1-foundation</guid><dc:creator><![CDATA[Quang LE]]></dc:creator><pubDate>Wed, 09 Jul 2025 05:30:31 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7a6ee316-095a-41c5-a72b-da14e0cfe6c2_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Being a sandwich generation is not easy: trying to balance between ageing parents support in Vietnam, save for a house here in France, and prepare for kids &#8212; all while our calculations shows we're "on budget" but our bank account says otherwise.</p><p>Here&#8217;s the story how we rebuilt our household budgeting system from scratch using Google Sheets, AI, and email alerts.</p></blockquote><p>It was a lazy late Friday afternoon in May.</p><p>I was daydreaming about a story set on a sand planet, where a brother leads his people into battle on massive, beautiful worms.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dquangle.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading C&#7863;m c&#7909;i! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Abruptly, my beloved poked her head in, asking:</p><blockquote><p>&#128172; Our financial sheet is messed up. I have wasted 2 hours and still cannot match all the spending and our budget. Where the hell have those 200 EUR for the cats gone? Can we throw the Excel file into ChatGPT to analyse it? I guess we can get an Plus account.</p></blockquote><p><em>I was shattered, my heart sank. The Switch 2 was just 3 weeks away, and I had managed to secure 200 EUR for its purchase.</em></p><p>Time to act.</p><p>We sat down to do a simple check-in on our household budget. Five minutes in, we realised something painful. Our financial system was completely out of sync with our current life, and here was why.</p><div><hr></div><p>&#127483;&#127475; <strong>We started the sheets in 2019 while living in Vietnam. At the time:</strong></p><ul><li><p>Most of our transactions were in cash. There were no recurring debit operations.</p></li><li><p>Our income far exceeded our expenses, so we didn&#8217;t stress over tracking.</p></li><li><p>Our parents were healthy and financially independent.</p></li></ul><p>&#127467;&#127479; <strong>Fast forward to now &#8212; 2025, we live in a smaller city in France.</strong></p><ul><li><p>95% of our payment is cashless</p></li><li><p>Our income is decent, but&#8230;</p><ul><li><p>Our parents are older, less financially stable, and depend on us more.</p></li><li><p>Essential services (food, rent, pet care, healthcare) are more expensive.</p></li></ul></li></ul><div><hr></div><p>It wasn&#8217;t just the numbers. We can feel the pressure and our <strong>workflow</strong> itself has too many overhead:</p><ul><li><p>It was painful to track the receipts or to remember what we bought.</p></li><li><p>Our bank apps were messy: sync was off across devices, the statement took 3 business days to update, mandatory phone approval loop to access the accounts.</p></li></ul><p>Even trying to sit down and reconcile the monthly sheet led to tension between us and could take hours at times. The tools didn&#8217;t match our habits anymore. We needed a system that was low-friction and collaborative.</p><p>&#128172; So I said to her:</p><blockquote><ul><li><p>We need a new sheet, or a new process.</p></li><li><p>But how about the missing 200 EUR?</p></li><li><p>I&#8217;m sure it&#8217;s getting mixed up somewhere. But we&#8217;ll set something up that won&#8217;t take up the whole weekend and 3 fights to consolidate. I&#8217;ll also look into the automation with AI. Let&#8217;s build this over the weekend &#128170;.</p></li></ul></blockquote><blockquote></blockquote><div><hr></div><h2>Step One: Diagnostics</h2><p>We spent the next 30 minutes mapping out the current tracking process and the pain points to address.</p><p>We just asked ourselves</p><ul><li><p>What is our midterm goal? And long-term goal?</p></li><li><p>How do we make a decision when we encounter the expected?</p></li><li><p>How do we want to keep ourselves accountable in complex times?</p></li></ul><p>That's when we notice three big gaps</p><ul><li><p>A decision-making framework for the unexpected.</p></li><li><p>A way to forecast affordability for our goals.</p></li><li><p>A mechanism to create just enough guilt before dipping into savings.</p></li></ul><h2>Step Two: Flow</h2><p>We adopted a cashflow model built on the classic <em>six jars</em> principle, simplified for our context:</p><ul><li><p><strong>Fixed + Variable Expenses</strong>: core monthly needs, parental supports and our pocket money</p></li><li><p><strong>Family Fund</strong>: emergency costs like car breakdowns, pet health, or unexpected bills</p></li><li><p><strong>Target Fund</strong>: future large expenses (travel, moving, etc.)</p></li><li><p><strong>Long-Term Savings</strong>: to prepare for eventual investment or home buying</p></li></ul><p>We intentionally leave the "Investment" jar for now. Our priority was building stability before compounding risk.</p><p>Due to our current job locations, we have some logistics that we need to sort out. That will keep our monthly expenses way over the recommended 50% line to correctly fill the investment jar. We will revisit it in December 2025.</p><p>The cash flow should look like this.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O72y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O72y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png 424w, https://substackcdn.com/image/fetch/$s_!O72y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png 848w, https://substackcdn.com/image/fetch/$s_!O72y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!O72y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O72y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png" width="1456" height="918" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:918,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:326637,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/167853938?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!O72y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png 424w, https://substackcdn.com/image/fetch/$s_!O72y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png 848w, https://substackcdn.com/image/fetch/$s_!O72y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!O72y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007cdafd-4025-4a9c-bf26-f795f5242241_2518x1588.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Step Three: Tools</h2><p>We decided to keep the architecture simple but robust. The budget would be managed with:</p><ul><li><p><strong>Google Sheets</strong> for data storage and calculations</p></li><li><p><strong>Notion</strong> for shared rules and structure</p></li></ul><p>That&#8217;s it &#8212; no subscriptions, no integrations, no login nightmares. We tried out multiple apps in the past (Money Lover, YNAB) but&#8230;</p><ul><li><p>we don&#8217;t want any more learning curves.</p></li><li><p>we don't want to pay extra to keep our data.</p></li><li><p>we want flexibility to get our tracker to grow easily with us.</p></li></ul><p>So, we mapped out our typical expenses and manually created categories with validation, formatting, and even emojis for clarity. What started as a rough sketch became a functioning prototype in a weekend.</p><p>The result was a colourful, clear, and collaborative sheet that we could use.</p><ul><li><p>a transaction list for each group, with category validation</p></li><li><p>a dashboard with the budgets vs. spending, by groups and categories</p></li><li><p>a category list</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gGoK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gGoK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png 424w, https://substackcdn.com/image/fetch/$s_!gGoK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png 848w, https://substackcdn.com/image/fetch/$s_!gGoK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png 1272w, https://substackcdn.com/image/fetch/$s_!gGoK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gGoK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png" width="1456" height="645" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:645,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:506177,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/167853938?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gGoK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png 424w, https://substackcdn.com/image/fetch/$s_!gGoK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png 848w, https://substackcdn.com/image/fetch/$s_!gGoK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png 1272w, https://substackcdn.com/image/fetch/$s_!gGoK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2951b71-2961-42e8-9268-a9375c92eec9_2128x942.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Dashboard</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DY9w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DY9w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png 424w, https://substackcdn.com/image/fetch/$s_!DY9w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png 848w, https://substackcdn.com/image/fetch/$s_!DY9w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png 1272w, https://substackcdn.com/image/fetch/$s_!DY9w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DY9w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png" width="1456" height="1072" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1072,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:665953,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/167853938?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DY9w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png 424w, https://substackcdn.com/image/fetch/$s_!DY9w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png 848w, https://substackcdn.com/image/fetch/$s_!DY9w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png 1272w, https://substackcdn.com/image/fetch/$s_!DY9w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d096c1-bff3-4196-be84-9a85cd455fff_2064x1520.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Transaction list for fixed expenses</figcaption></figure></div><h2>Step Four: Automated Tracking</h2><h3><strong>Alerts</strong></h3><p>We knew that manual tracking wouldn&#8217;t last.</p><ul><li><p>Receipts get lost.</p></li><li><p>Motivation fades.</p></li><li><p>Mobile bank apps were inconsistent: both synchronisation and data export were complicated.</p></li></ul><blockquote><p>&#128680;This was our most acute pain point.</p></blockquote><p>We must find an easy way to get all of our spending data in our place.</p><p>A full bank sync is not an option because it would mean dealing with a complex integration and security, not ideal for a weekend project.</p><p>That&#8217;s when we discovered <strong>email alerts</strong>. Most French banks let you configure emails for key operations:</p><ul><li><p>Card purchases</p></li><li><p>Incoming/outgoing transfers</p></li><li><p>New debits (e.g., rent, utilities)</p></li></ul><p>These alerts were consistent, searchable, and already part of our workflow. We just needed to make use of them.</p><h3><strong>Automations</strong></h3><p>First, to avoid mixing up with other emails, we created a new dedicated mailbox for all the bank alerts.</p><p>Then, I asked ChatGPT to help me to write a script in Google's AppsScript:</p><ul><li><p>Read emails from Gmail and parse the transaction alert.</p></li><li><p>Use a Language Mode (OpenAI's GPT) to classify it by group, category, location, and note.</p></li><li><p>Write the transaction into the Google Sheet.</p></li></ul><p>It worked on the first try, which is amazing. It would take me at least half an hour to get this working from scratch. ChatGPT generated two core functions:</p><ul><li><p>One to fetch the relevant email body and extract the amount and the relevant text.</p></li><li><p>One to call OpenAI with a well-structured prompt, including the extracted description and return a structured response.</p></li></ul><p>To my surprise, the first version leaned on rigid logic &#8212; how the phrase must read &#8212; to extract the relevant information. This would stop working as soon as the bank updated its email or we switched to another bank. As an example, this was how the email looked like.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!knjr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!knjr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png 424w, https://substackcdn.com/image/fetch/$s_!knjr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png 848w, https://substackcdn.com/image/fetch/$s_!knjr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png 1272w, https://substackcdn.com/image/fetch/$s_!knjr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!knjr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png" width="1086" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:1086,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76384,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dquangle.substack.com/i/167853938?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!knjr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png 424w, https://substackcdn.com/image/fetch/$s_!knjr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png 848w, https://substackcdn.com/image/fetch/$s_!knjr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png 1272w, https://substackcdn.com/image/fetch/$s_!knjr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3636d5-e19e-40e8-ab2b-ce123c71ed47_1086x400.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So I asked ChatGPT to extract what was between the greetings and the signature, then send it in for classification.</p><p>This way, we could still keep it fairly private:</p><ul><li><p>The data were stored in our spreadsheet &#8212; we could always download it and go offline.</p></li><li><p>OpenAI only saw the operation and the amount that we sent over to classify.</p></li></ul><h3>Assessments</h3><p>We tested it with a dozen real bank alerts.</p><ul><li><p>It populated the sheet automatically.</p></li><li><p>Roughly 70% of the transactions get categorised correctly without any effort from us.</p><ul><li><p>For the remaining 30%, we needed to rectify or delete them <strong>in the spreadsheet.</strong></p></li><li><p>The errors were &#8220;random&#8221;, e.g. &#8220;grocery&#8221; getting labelled as &#8220;dining out&#8221;, random categorisation of the health insurance as shopping or service.</p></li></ul></li></ul><div class="pullquote"><p>&#127881; Suddenly, the hardest part &#8212; keeping up with the daily flow &#8212; was almost invisible.</p></div><h2>At the End of a Sunday</h2><ul><li><p>A new spreadsheet built around real needs &#128073; <strong>You can check out the <a href="https://docs.google.com/spreadsheets/d/1BoMRXTw_Vd5Ns_HmwaTxCwZooUW-XlcohmDwWGJsp9Q/edit?usp=sharing">TEMPLATE</a> here.</strong></p></li><li><p>A categorisation system tied to actual cash flow and priorities</p></li><li><p>An AI-powered system for auto-logging expenses, usable by both of us</p></li></ul><p>And most importantly:</p><ul><li><p>No more "sign me into your bank app" moments</p></li><li><p>No more dread when we talk about money</p></li><li><p>A system that could grow with us</p></li></ul><p><strong>We had our</strong> <strong>foundation. I hope it will be useful for couples trying to manage joint budgets without handing over control (and sanity) to a fintech app: Sheets and AI are already very powerful for this scenario.</strong></p><p><em>Now, guess I can peacefully find another chance to &#8220;borrow&#8221; the remaining 200 EUR while waiting for my crush Samus Aran to come back to the Switch 2 Universe </em>&#128520; <em>.</em></p><div class="pullquote"><p>&#129525; It was not the end. Another painful moment quickly makes its way back into our process.</p><p><strong>Please follow for <a href="https://dquangle.substack.com/p/love-debt-and-robots-2-friction">Chapter #2: Friction</a> &#8212; where we build a bot that talks back using the spreadsheet.</strong></p></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dquangle.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading C&#7863;m c&#7909;i! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>