Advent of AI 2025 - Day 8: Messy Data to Structured Output
Iβve edited this post, but AI helped. These are meant to be quick posts related to the Advent of AI. I donβt have time if Iβm doing one of these each day to spend a couple hours on a post. π
The advent of AI series leverages Goose, an open source AI agent. If youβve never heard of it, check it out!
The https://github.com/block/goose repository on GitHubDay 8: Structured Data is All About Examples#
For Day 8 of Advent of AI, I tackled the classic βmessy napkin notesβ problem. Donβt know if itβs classic but itβs definitely classic Advent of Ai 2025 classic. The festival coordinator Dmitri had a vendor list scribbled on a coffee-stained napkin, and I needed to turn it into structured JSON, then a fully styled HTML site.
This challenge was easier than some of the previous days, but it highlighted an important lesson: when working with AI to generate structured data, good examples are everything.
The Messy Vendor List#
Hereβs what I was working with:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ DMITRI'S NAPKIN NOTES (with stains!) ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£β Joes hot cocoa - main plaza - hot drinks & pastries ββ TACO TRUCK DEL FUEGO!!! north entrance mexican food ββ sweet treats bakery, near the ice rink... cookies ββ Pierogi Palace - east side - polish food ββ Waffle Wonderland next to storytelling tent WAFFLES ββ mamas meatballs - food court area - italian ββ The Pretzel Pretender - west plaza - pretzels ββ Curry in a Hurry mobile cart roams around ββ Sushi on Ice - near skating rink - sushi ββ PIZZA PALACE - main stage area - pizza slices ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββAll caps, inconsistent capitalization, coffee stains, and wildly varying formatting. Perfect.
The Key: Show, Donβt Tell#
Instead of trying to explain in words how I wanted the JSON structured, I gave Goose one solid example:
{ "vendors": [ { "name": "Joe's Hot Cocoa", "location": "Main Plaza", "cuisine": "Hot drinks & pastries" } ]}That single example showed Goose exactly what I wanted:
- Proper name capitalization (title case with apostrophes handled correctly)
- Location formatting (major words capitalized, βtheβ stays lowercase)
- When to include cuisine vs when to omit it
The result? Goose nailed the structured data on the first try. All ten vendors properly formatted, with βCurry in a Hurryβ correctly having no cuisine field since it wasnβt in the napkin notes.
From Console to Beautiful Website#
Once I had the structured JSON, I asked Goose to update the TypeScript script to generate an HTML page with light and dark theme support. I pointed it to the styling from my Day 4 winter festival site as reference.
Goose created a complete page with:
- Light/dark theme toggle that persists in localStorage
- Animated snowflakes with wind drift
- Responsive vendor cards with cuisine-specific emoji
- Structured data (Schema.org JSON-LD) for SEO
- Scroll progress bar and smooth animations
Everything styled with the same winter festival aesthetic from Day 4.

The Netlify MCP Deploy#
Hereβs where it got really smooth. Instead of manually deploying, I used the Netlify MCP server in Goose. One prompt to deploy and live!
The site is available at https://winter-festival-nickyt.netlify.app within seconds.
Note this works really well with the Vercel MCP server as well.
Why This Worked So Well#
Three things made Day 8 surprisingly smooth:
1. Concrete examples beat abstract descriptions every time. Instead of explaining βcapitalize proper nouns but leave articles lowercase,β I just showed one formatted entry and let Goose figure out the pattern.
2. Reference existing work when possible. Pointing Goose to my Day 4 styling meant I didnβt need to describe what βwinter festival themedβ meant. It could see it.
3. MCP servers are useful. The Netlify MCP integration turned a multi-step deploy process into a single command. No leaving the terminal, no manual uploads, just βdeploy this.β
The Full Flow#
Hereβs what the actual workflow looked like:
# Initial structured data generationUser: Take this messy vendor list and structure it as JSON...Goose: *creates vendors.json with proper formatting*
# RefinementUser: If there's no cuisine, omit the property entirelyGoose: *updates JSON to skip empty fields*
# HTML generation and deployUser: Update the script to generate an HTML page with theme toggle. Look at ../day-4/index.html for styling. Deploy with Netlify MCP.Goose: *generates full HTML, uploads to Netlify*The whole thing took maybe 15 minutes.
What I Shipped#
Everythingβs in my repoβs day-8 folder:
vendors.json- Clean structured dataparse-vendors.ts- TypeScript that generates the HTMLindex.html- The generated site- Live site: https://winter-festival-nickyt.netlify.app
Wrapping Up#
When you need AI to generate structured data, skip the long-winded explanations. Give it one or more good examples that shows exactly what you want. The pattern recognition in modern LLMs is really good at βoh, I see what you wantβ when you show rather than tell.
And if youβre using Goose, definitely explore the MCP ecosystem. Having tools like Netlify available directly in your agent makes workflows way smoother than jumping between tools.
If you want to stay in touch, all my socials are on nickyt.online.
Until the next one!
Photo by Martijn Baudoin on Unsplash