1 likes | 3 Views
The story of how I used AI as a coding partner to develop the London Improv Calendar at https://improv-calendar.co.uk
E N D
My AI Coding Partner How I built the London Improv Calendar Diana Ionita
Diana Ionita: About Me • Serverless Consultant specializing in AWS • Working with Lambdas since 2016 • Serverless Meetup attendee since 2017, but this is my first talk
Talk Outline • The Why: From a personal challenge to a community project • The How: The plan, the challenge, and choosing the tech stack • AI in Action: Case Studies • The Reality: AI’s limitations and quirks • Tips & Tricks for working with AI • The Result: A tool for the community, and a journey that made coding fun again
Things to know • Prompt examples are paraphrased
Things to know • Prompt examples are paraphrased • When I say AI suggests solutions, it usually is part of a conversation rather than one answer to one prompt • It may take multiple prompts to accurately describe the problem or the constraints
What this talk is not • A comparison of AI tools • I mostly used VSCode with GitHub Copilot and chat UIs of OpenAI / Google / Anthropic
What this talk is not • A comparison of AI tools • I mostly used VSCode with GitHub Copilot and chat UIs of OpenAI / Google / Anthropic • A comparison of LLMs • I switched models frequently, but didn’t comprehensively evaluate them
Why was it needed? • In November 2024, I got temporarily banned by an improv school in London, without warning • a respectful email to an instructor made them uncomfortable
Why was it needed? • In November 2025, I got temporarily banned by an improv school in London, without warning • a respectful email to an instructor made them uncomfortable • I didn’t contest the ban • But I wasn’t told exactly what was wrong
Why was it needed? • In November 2025, I got temporarily banned by an improv school in London, without warning • a respectful email to an instructor made them uncomfortable • I didn’t contest the ban • But I wasn’t told exactly what was wrong • Ban was labeled as “temporary” • I insisted on defining “temporary”
Why was it needed? • In November 2025, I got temporarily banned by an improv school in London, without warning • a respectful email to an instructor made them uncomfortable • I didn’t contest the ban • But I wasn’t told exactly what was wrong • Ban was labeled as “temporary” • I insisted on defining “temporary” • Someone from leadership replied: “offering such clarity would likely lead to permanent exclusion”
Why was it needed? “offering such clarity would likely lead to permanent exclusion”
Why was it needed? “offering such clarity would likely lead to permanent exclusion” • I emailed their internal “student liaison” • No replies for 3 weeks
Why was it needed? “offering such clarity would likely lead to permanent exclusion” • I emailed their internal “student liaison” • No replies for 3 weeks • I escalated to another person in leadership • Problematic language was dismissed as unintentional • 1 year ban, check back after 1 year if I can be allowed back; no criteria given
Why was it needed? “offering such clarity would likely lead to permanent exclusion” • I emailed their internal “student liaison” • No replies for 3 weeks • I escalated to another person in leadership • Problematic language was dismissed as unintentional • 1 year ban, check back after 1 year if I can be allowed back; no criteria given • I raised a formal complaint, about the language in the email, in December • Still waiting for a reply
Why was it needed? “offering such clarity would likely lead to permanent exclusion” • I emailed their internal “student liaison” • No replies for 3 weeks • I escalated to another person in leadership • Problematic language was dismissed as unintentional • 1 year ban, check back after 1 year if I can be allowed back; no criteria given • I raised a formal complaint, about the language in the email, in December • Still waiting for a reply • Ironically, I’m banned for an email while my complaint about an email is still pending.
I couldn’t really go back there after that. So, how do I find improv?
I couldn’t really go back there after that. So, how do I find improv? It’s scattered everywhere
I couldn’t really go back there after that. So, how do I find improv? It’s scattered everywhere: instagram
I couldn’t really go back there after that. So, how do I find improv? It’s scattered everywhere: instagram, whatsapp
I couldn’t really go back there after that. So, how do I find improv? It’s scattered everywhere: instagram, whatsapp, facebook
I couldn’t really go back there after that. So, how do I find improv? It’s scattered everywhere: instagram, whatsapp, facebook, ticketing sites…
How about I use a calendar to track them all? I could share it with people.
How about I use a calendar to track them all? I could share it with people. They could add events I don’t know about!
The Plan • A public website • Anyone can add events • It’ll be a calendar • It’s strictly for improv in London
The Challenge • Solo developer with a backend specialty
The Challenge • Solo developer with a backend specialty • Brand new frontend stack
The Challenge • Solo developer with a backend specialty • Brand new frontend stack • Limited hours, part-time over the holidays
What I knew • Experience in the AWS serverless stack
What I knew • Experience in the AWS serverless stack • What clean code tends to look like
What I knew • Experience in the AWS serverless stack • What clean code tends to look like • That absolute positioning is generally a bad idea
What I knew • Experience in the AWS serverless stack • What clean code tends to look like • That absolute positioning is generally a bad idea • The value of creating a task list, organising it into must have / nice to have, working through itemised bits of work
What I knew • Experience in the AWS serverless stack • What clean code tends to look like • That absolute positioning is generally a bad idea • The value of creating a task list, organising it into must have / nice to have, working through itemised bits of work • Git is useful for tracking changes
What I knew • Experience in the AWS serverless stack • What clean code tends to look like • That absolute positioning is generally a bad idea • The value of creating a task list, organising it into must have / nice to have, working through itemised bits of work • Git is useful for tracking changes • What I wanted the project to look like and what was realistic technically
What I knew • Experience in the AWS serverless stack • What clean code tends to look like • That absolute positioning is generally a bad idea • The value of creating a task list, organising it into must have / nice to have, working through itemised bits of work • Git is useful for tracking changes • What I wanted the project to look like and what was realistic technically • Great at copy-pasting
First thing’s first: the Frontend Stack • “I'm looking to build a simple website with a calendar. I know nodejs and typescript. Are there any nice calendar components I can use? Something that has colours and possibility of filtering. Don't worry about implementation, let's talk ideas first.” GPT-4o - December ‘24
First thing’s first: the Frontend Stack • “I'm looking to build a simple website with a calendar. I know nodejs and typescript. Are there any nice calendar components I can use? Something that has colours and possibility of filtering. Don't worry about implementation, let's talk ideas first.” • AI laid out the pros and cons of React, Svelte and 4 other frontend frameworks. • Explained why React's ecosystem with Vite would be a good fit for my S3-hosted, serverless-first approach • It recommended a library called 'FullCalendar' as a powerful component to start with. GPT-4o - December ‘24
From Copy-Paste to Conversation • Early days (early December): Copy-pasting code into web UIs • It worked, but it was slow and the AI had zero project context.
From Copy-Paste to Conversation • Early days (early December): Copy-pasting code into web UIs • It worked, but it was slow and the AI had zero project context. • Getting Integrated (late December): Copilot in VSCode • I still had to reference files I wanted in context, but no more copy pasting. Quick for small changes.
From Copy-Paste to Conversation • Early days (early December): Copy-pasting code into web UIs • It worked, but it was slow and the AI had zero project context. • Getting Integrated (late December): Copilot in VSCode • I still had to reference files I wanted in context, but no more copy pasting. Quick for small changes. • Breakthrough (February): the @workspace feature • Now I could have conversation about my entire project. • I could ask it to suggest changes, then kept talking about the code until I got it to generate what I wanted.
From Copy-Paste to Conversation • Early days (early December): Copy-pasting code into web UIs • It worked, but it was slow and the AI had zero project context. • Getting Integrated (late December): Copilot in VSCode • I still had to reference files I wanted in context, but no more copy pasting. Quick for small changes. • Breakthrough (February): the @workspace feature • Now I could have conversation about my entire project. • I could ask it to suggest changes, then kept talking about the code until I got it to generate what I wanted. • Fine Tuning (March): System prompts, aka copilot instructions • The AI now had details about my preferences and coding style for every request.
From Copy-Paste to Conversation • Early days (early December): Copy-pasting code into web UIs • It worked, but it was slow and the AI had zero project context. • Getting Integrated (late December): Copilot in VSCode • I still had to reference files I wanted in context, but no more copy pasting. Quick for small changes. • Breakthrough (February): the @workspace feature • Now I could have conversation about my entire project. • I could ask it to suggest changes, then kept talking about the code until I got it to generate what I wanted. • Fine Tuning (March): System prompts, aka copilot instructions • The AI now had details about my preferences and coding style for every request. • Models improved (o3-mini, Claude 3.5) => I was becoming more confident asking it to refactor large files • For more complex questions, I'd narrow down the files I thought needed changes and paste them into chats with smarter models that weren't available via VSCode (i.e. o3-mini-high at the time)