<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>2026-04 on Funky Si's Blog</title><link>https://www.funkysi1701.com/2026/04/</link><description>Recent content in 2026-04 on Funky Si's Blog</description><generator>Hugo -- gohugo.io</generator><language>en-gb</language><managingEditor>funkysi1701@gmail.com (Simon Foster)</managingEditor><webMaster>funkysi1701@gmail.com (Simon Foster)</webMaster><lastBuildDate>Fri, 10 Apr 2026 12:00:00 +0000</lastBuildDate><atom:link href="https://www.funkysi1701.com/2026/04/index.xml" rel="self" type="application/rss+xml"/><item><title>How I Use AI on Side Projects: ChatGPT, Cursor, and Copilot</title><link>https://www.funkysi1701.com/posts/2026/how-i-use-ai-on-side-projects/</link><author>funkysi1701@gmail.com (funkysi1701)</author><pubDate>Fri, 10 Apr 2026 12:00:00 +0000</pubDate><guid>https://www.funkysi1701.com/posts/2026/how-i-use-ai-on-side-projects/</guid><category term="AI">AI</category><category term="ChatGPT">ChatGPT</category><category term="Cursor">Cursor</category><category term="GitHubCopilot">GitHubCopilot</category><category term="SideProjects">SideProjects</category><category term="DeveloperWorkflow">DeveloperWorkflow</category><category term="Blazor">Blazor</category><category term="Hugo">Hugo</category><category term="Productivity">Productivity</category><media:content medium="image" type="image/png" url="https://www.funkysi1701.com/images/2026/ai-with-side-projects.png"/><description>&lt;p&gt;There is no shortage of AI tools aimed at developers right now: chat assistants, IDE completions, agents that promise to run your tests, and new products every month with overlapping features. I am not going to argue which one is &amp;ldquo;best.&amp;rdquo; Instead, here is &lt;strong&gt;what I am actually using today&lt;/strong&gt; on hobby code: &lt;a href="https://chatgpt.com/" target="_blank" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt;
for quick, low-context questions, &lt;a href="https://cursor.com/" target="_blank" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;
when the work needs my repository in the loop, and &lt;a href="https://github.com/features/copilot" target="_blank" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt;
for fast inline help while I type. That trio might change, but it reflects how I have learned to spend money and attention in 2026.&lt;/p&gt;
&lt;p&gt;The through-line is simple: &lt;strong&gt;match the tool to how much context the problem needs&lt;/strong&gt;. That stops me from dumping half a repo into a browser tab for a vague design question, or firing up an editor assistant when I only wanted a two-paragraph explanation of something I could read in the docs.&lt;/p&gt;
&lt;p&gt;This is not a product review. It is a snapshot of how I work, using the projects on &lt;a href="https://www.funkysi1701.com/projects/"&gt;my projects page&lt;/a&gt;
as concrete examples.&lt;/p&gt;
&lt;h2 id="chatgpt-questions-that-do-not-need-my-codebase"&gt;ChatGPT: questions that do not need my codebase&lt;a class="anchor ms-1" href="#chatgpt-questions-that-do-not-need-my-codebase" aria-label="Permalink: ChatGPT: questions that do not need my codebase"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://chatgpt.com/" target="_blank" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt;
is still my first stop when I am trying to &lt;em&gt;frame&lt;/em&gt; a problem. I use it when the answer is mostly portable knowledge: comparisons, vocabulary, &amp;ldquo;what should I read next,&amp;rdquo; and sanity checks that do not depend on the exact shape of my solution.&lt;/p&gt;
&lt;p&gt;A few examples from things I have built:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;This blog (Hugo + Azure Static Web Apps)&lt;/strong&gt; — I might ask how people usually implement site search on static sites, or what the trade-offs are between generating a JSON index at build time versus leaning on a hosted search service. I am not looking for a drop-in patch to my theme; I want a short list of options so I can decide what fits a hobby budget.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.episodeatlas.com/" target="_blank" rel="noopener noreferrer"&gt;Episode Atlas&lt;/a&gt;
(Blazor, Functions, Cosmos DB)&lt;/strong&gt; — good prompts sound like &amp;ldquo;patterns for tracking per-user progress through a large catalogue&amp;rdquo; or &amp;ldquo;when a tiny Blazor app might still justify a separate API layer.&amp;rdquo; Those are design conversations. The model does not need to see my episode containers to help me think about partition keys and stale data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://mandelbrot.funkysi1701.com/" target="_blank" rel="noopener noreferrer"&gt;Mandelbrot Generator&lt;/a&gt;
(Blazor WebAssembly)&lt;/strong&gt; — I have used general chats to reason about why browser-side fractals feel CPU-bound, or what people typically do first when zoom performance tanks. Again, that is physics-of-the-platform stuff, not &amp;ldquo;line 40 of my render loop.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Experiments&lt;/strong&gt; — when I am poking at &lt;a href="https://www.funkysi1701.com/projects/"&gt;.NET Aspire&lt;/a&gt;
, Kubernetes, Elasticsearch, or Azure Functions in my own time, ChatGPT is useful for learning paths: what to skim first, what terms I am mixing up, and what I am over-engineering for a toy.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Where ChatGPT falls down is predictable: anything that requires &lt;em&gt;my&lt;/em&gt; wiring—pipeline YAML that only fails in CI, a Hugo partial that interacts with three others, a Blazor component that only breaks after publish. For that, context wins.&lt;/p&gt;
&lt;h2 id="cursor-when-the-answer-is-in-the-repo"&gt;Cursor: when the answer is in the repo&lt;a class="anchor ms-1" href="#cursor-when-the-answer-is-in-the-repo" aria-label="Permalink: Cursor: when the answer is in the repo"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://cursor.com/" target="_blank" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;
(or any &amp;ldquo;chat with your codebase&amp;rdquo; style editor) is where I go when I need &lt;strong&gt;consistency across files&lt;/strong&gt; and &lt;strong&gt;diff-shaped output&lt;/strong&gt;. Side projects accumulate small decisions—naming, folder layout, how strict nullability is—and the model only respects those if it can see them.&lt;/p&gt;
&lt;p&gt;Typical jobs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Blog platform&lt;/strong&gt; — adjusting a Hugo layout or partial, fixing warnings after a Hugo upgrade, or tweaking GitHub Actions / Azure Pipelines so the build still emits RSS and the JSON search index. Those changes are boring, fiddly, and easy to get subtly wrong if you guess from memory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Episode Atlas&lt;/strong&gt; — refactoring a Blazor page, aligning a Function endpoint with what the client expects, or tightening a Cosmos query once I know the access pattern. Here I want suggestions that match &lt;em&gt;my&lt;/em&gt; project structure, not a generic sample from the internet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mandelbrot&lt;/strong&gt; — iterating on rendering code where small mistakes show up as wrong colours or runaway iterations. Having the file in context beats describing the algorithm in chat.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.thornepentecostalchurch.co.uk/" target="_blank" rel="noopener noreferrer"&gt;Thorne Pentecostal Church&lt;/a&gt;
site&lt;/strong&gt; — simple HTML and CSS still benefit from repo context when the goal is &amp;ldquo;match what is already there&amp;rdquo; rather than &amp;ldquo;invent a new design system.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I still treat Cursor as an accelerator, not an author. I read diffs, run the site or tests, and verify anything touching hosting or secrets. Side projects are a great place to learn &lt;em&gt;when&lt;/em&gt; to trust an edit—and when the model confidently invents an API that never existed.&lt;/p&gt;
&lt;h2 id="github-copilot-the-inline-teammate"&gt;GitHub Copilot: the inline teammate&lt;a class="anchor ms-1" href="#github-copilot-the-inline-teammate" aria-label="Permalink: GitHub Copilot: the inline teammate"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/features/copilot" target="_blank" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt;
fills a different gap. Where Cursor often drives &lt;strong&gt;multi-file&lt;/strong&gt; or &lt;strong&gt;exploratory&lt;/strong&gt; edits, Copilot shines on &lt;strong&gt;local&lt;/strong&gt; work: finishing a line, sketching a test, or repeating a pattern I have already established in the file.&lt;/p&gt;
&lt;p&gt;I reach for it when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I am writing repetitive Blazor markup or boilerplate DTOs.&lt;/li&gt;
&lt;li&gt;I am editing YAML or shell and want a plausible next stanza that matches the block above.&lt;/li&gt;
&lt;li&gt;I already know what I am doing and want speed more than architecture.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is overlap between Copilot and Cursor in my workflow, and I am fine with that. If you only pay for one tool, you can still apply the same &lt;em&gt;principle&lt;/em&gt;: shallow context versus deep context.&lt;/p&gt;
&lt;h2 id="a-quick-decision-table"&gt;A quick decision table&lt;a class="anchor ms-1" href="#a-quick-decision-table" aria-label="Permalink: A quick decision table"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;What I use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ldquo;What are my options?&amp;rdquo; / compare approaches&lt;/td&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ldquo;Change this project to do X&amp;rdquo;&lt;/td&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ldquo;Finish this method / this pipeline step&amp;rdquo;&lt;/td&gt;
&lt;td&gt;Copilot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security, secrets, production incidents&lt;/td&gt;
&lt;td&gt;Me, plus docs—AI optional and heavily verified&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="boundaries-privacy-and-verification"&gt;Boundaries, privacy, and verification&lt;a class="anchor ms-1" href="#boundaries-privacy-and-verification" aria-label="Permalink: Boundaries, privacy, and verification"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What I do not put in AI tools.&lt;/strong&gt; I treat anything that could identify a person, anything contractual from work, and anything that unlocks production (passwords, API keys, connection strings, private certificates) as off-limits unless the product’s policy and my employer’s policy both say otherwise. For side projects that usually means personal repos only, secrets in environment variables or Key Vault—not in chat—and if I need help with a failing pipeline I redact resource names and paste error text, not the whole variable block. If you have a day job, your company’s acceptable-use rules beat anything you read in a blog post; when in doubt, use vendor docs and internal support channels instead of a model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How I check output before it counts.&lt;/strong&gt; I never merge a multi-file change on trust alone: I read the diff file by file, run &lt;code&gt;hugo&lt;/code&gt; / &lt;code&gt;dotnet build&lt;/code&gt; / whatever the project’s normal build is, and exercise the path I changed in the browser or with a quick manual test. If the assistant suggested a library call or HTTP API I do not recognise, I cross-check the official documentation or source before I rely on it—side projects are where I have been burned by plausible-but-wrong method names. For anything security-sensitive (auth callbacks, CORS, SQL, dependency upgrades), I assume the model is giving me a sketch and I still apply the same review I would give a junior’s pull request.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learning paths are still verified.&lt;/strong&gt; When I use ChatGPT to orient around Aspire, Kubernetes, or Elasticsearch, I use it to build a mental map and a reading list, then I confirm version-specific behaviour in Microsoft Learn, Kubernetes docs, or Elastic’s docs. The goal is to shorten &lt;em&gt;where to look&lt;/em&gt;, not to skip looking.&lt;/p&gt;
&lt;h2 id="closing-thought"&gt;Closing thought&lt;a class="anchor ms-1" href="#closing-thought" aria-label="Permalink: Closing thought"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;AI tools have not replaced the fun of side projects for me. Projects like Episode Atlas exist because I wanted a better way to track &lt;em&gt;Star Trek&lt;/em&gt; rewatches across hundreds of episodes; the Mandelbrot app exists because fractals are still cool; this blog exists because writing things down forces clarity. What has changed is how fast I can get through the glue work—if I pick the right assistant for the amount of context the task really needs.&lt;/p&gt;
&lt;p&gt;If you are a developer experimenting with the same stack—.NET, static sites, Azure—how do you split tools today? I would be interested to hear what works for you in the comments.&lt;/p&gt;</description></item></channel></rss>