We One Shotted an AI Link Building Tool
Mood
excited
Sentiment
positive
Category
startup_launch
Key topics
Hey I'm Tim, I run https://saasco.com, we're using ai to make a 100x cheaper version of hubspot.
We recently added a feature, but it was confusing so we one shotted an ai assistant tool using cursor and sonnet 4.5
What is the tool Users got confused about how to use utm tracking in our analytics so we built a tool that would generate correct utm tags using ai.
You can check it out here: https://www.saasco.com/tools/ai-utm-builder
How we built it
First off the project is full stack typescript which is basically essential for llms to do any amount of autonomous work. Secondly we have systems to make things full stack typesafe.
We use TRPC with Zod so everything is defined strictly.
We also set up the project with client, server and shared libs like:
libs/ ai-utm/ server/ client/ shared/
This helps AI know where to put each bit of code and how and when to use it. EG don't call a server function on the client and put all the zods/types in the shared folder.
Primatives
We had also previously set up the primitives this project would need - UI library with Input/Button etc (we use shadcn) - AI sdk configured for streaming ai responses (we use vercels ai sdk) - Cursor rule mdc files explaining how the above it set up
As a side not I think getting these primitives in place and documented for AI is a super power to moving fast and one shotting bigger features.
Prompt
The main tricky part for this was getting structured output from the LLM to stream into the inputs. (it's fast, but if you look it streams the response into the inputs)
We had solved this before so were able to reference that solution in our prompt, I think that helped sonnet figure it out in one go. But the prompt sonnet wrote looks like this for the fields:
Return the result in this exact XML format: <utm_parameters> <source>twitter</source> <medium>social</medium> <campaign>product_launch</campaign> <term>optional_keyword</term> <content>optional_creative</content> </utm_parameters>
Then it has some extraction and autoclosing of tags so even partial fields load.
So after writing one mega prompt, that included when to use each param, linking the reference/guide/doc files it started working. And after 7 mins we mostly have the page you see now!
I spent a little time cleaning improving the UX, but it mostly one shotted this
LMK if you have any questions!
Discussion Activity
No activity data yet
We're still syncing comments from Hacker News.
Generating AI Summary...
Analyzing up to 500 comments to identify key contributors and discussion patterns
Discussion hasn't started yet.
Want the full context?
Jump to the original sources
Read the primary article or dive into the live Hacker News thread when you're ready.