March 14, 2025

How it's made:stringme.dev

The main lesson from this, actually, was to try to identify the languages, frameworks, and services you'll need to use up front when vibe coding.

  • We ran into problems when we told Cursor, mid-project, that we wanted to use Tailwind, that we wanted to deploy via Vercel, that we wanted to switch from TypeScript to JavaScript.
  • These were all pretty painful, debug-time-consuming transitions, which could have been avoided by specifying these technologies up front.
  • I think code gen tools can do a better job of recommending best practices up front before initializing the codebase. They seem to pretend to be naive about modern best practices and tacitly pin it on the user if they don't specify them. Ethically defensible but practically annoying.

Anyhow, here's how we vibe-coded stringme.dev:

  • I chatted with ChatGPT about this concept (thread here). ChatGPT validated the concept and then gave some instructions as how to to start implementing it.
  • I asked ChatGPT to format the project proposal into a prompt for Cursor's agent to take and implement, which it did well enough...
  • But the main thing that was missing was specification of the technologies to use. This was the main lesson. You gotta specify these up front.
  • What ChatGPT did help with was techniques to optimize text extraction for LLMs, which currently includes a summary, key facts, and the main content.

I initialized it, pivoted the design to be a Google-like centered input box, dark mode only.

  • Added the Karpathy tweet below the input field explaining the value prop. I kind of like that technique of having someone else established explain your product's value prop for you. Social proof.
  • Originally, I added a getwalist.com email signup below to gauge interest in an API for generating these kinds of LLM-optimized strings programmatically. But then the lack of customization got to me and so I just created a Supabase table and had Cursor create a style-matching email signup field that writes to it. Easy enough.
  • Sidenote: this is why indie hackers are probably not a good target customer. They have low willingness to pay, and they can build their own solution (or at least they think they can).

I deployed, and it basically works. The optimizations I did afterwards were around formatting the text output, getting the Vercel functions to work the same way local functions did, and small usability enhancements.

Next up is:

  • Store each URL string in Supabase to (a) cache it and (b) create a kind of network effect around the use of this service.
  • Handle file -> optimized txt conversion.
  • Introduce an API for programmatically generating these kinds of strings.

Open to other ideas too!