Stop Reading This and Start Coding

The distance between an idea and a product has never been shorter.

A cartoon robot cooks up a strength training app.
Image generated with Chat-GPT (4o)

The Takeaway

Over the weekend, I created a simple (but real) prototype using the latest AI-enabled tools. It may not be pretty, but this technology is only going to get easier and better. To paraphrase the title of a recent Lenny's Podcast:

👨‍💻
Everyone's a software engineer now.

My Goal: Structured Data Made Easy

In previous posts, I've written about the strength training app I'm envisioning. One of the first problems I need to solve is to make it easier to capture structured data about strength training. But data structure can't come at the cost of ease-of-use.* Of course it's also possible that AI will make this intentional structuring of data unnecessary. But right now I'm just focused on building the very specific thing that I want. It's fun!

I believe the solution to this problem is to begin structuring the data when the coach writes the program. Most programming is written for many athletes, so properly structuring the data within the program allows our structure to scale.

But it still needs to be easy to use. Coaches don't want to fiddle with an app any more than athletes do. So the experience of writing a program must be delightful.

The Prototype

Given that coaches are often just writing programs in plain text, I thought it would be interesting to explore "auto-complete for exercises" inside a text editor. So that's what I built.

An animated gif of my autocomplete dropdown prototype, demonstrating exercise selection.
My very simple React prototype.

As the coach types, the app looks for known exercises from a database that has not just the name of the exercise, but additional relevant data on each exercise. The coach can simply accept a suggestion as they type using the keyboard. Now the programmed workout is both easier to type and can bring additional data to clients like:

  • What type of lift is it? A Competition lift* One of the main lifts performed in competitions, like the Squat, Bench Press, Deadlift, or Snatch. , a Supplemental lift* An exercise that closely mimics the demands of a competition lift, with minor changes—e.g., Close Grip Bench Press or Deficit Deadlift. , or an Accessory movement* A broad category for movements that don’t directly mimic competition lifts—essentially, everything else. ?
  • What equipment is used for this lift? A barbell? Bodyweight? A specialty bar?
  • When did the coach most recently program this lift? When did the athlete most recently log it?

The Value of Specificity

If you're designing a UI for logging workouts, you should design every step of logging an actual, specific workout. If you're designing a UI to help a coach write lifting programs, your design should improve the way a specific program is created. Specificity is key.

Before I started experimenting with AI, I wanted to make my app concept more specific by designing a data schema that could enable the types of analysis I wanted to do on my own training. I used Tana to prototype and iterate on the schema, which helped me think through what I wanted the structure to do. This has been a helpful exercise, but a schema is still a long way from a working app.

A screenshot of a workout I tracked in Tana, showing Tana supertags and fields, which helped me design the data structure I desired.
A screenshot of a workout I tracked in Tana.

My Toolset

After hearing Guillermo Rauch (of Vercel and v0) on Lenny's podcast, I dawned on me that I could start turning my schema into a real product. I had v0 create a few screens, which made me realize I should write a spec in Notion. I shared my spec with ChatGPT, which led to me creating a database in Supabase and a React UI directly in ChatGPT. I then switched to Cursor and finished the project there.

Lessons Learned & Speculations

  • Specificity moves the ball forward. My data schema prototype in Tana made it much easier to move quickly with AI tools. Even before I built that schema, I was designing the type of analysis I wanted to enable in R.
  • AI can help you skip the blank page problem. Humans are better at reacting to things than conjuring ideas out of nothing. I think this is one way that AI will make us more productive and creative. Once I saw v0's efforts at designing my app based on a simple prompt, I had a better feel for some of the details I needed to fill in, and the problems I needed to focus on solving.
  • Conversations are very productive—keep asking. One of the costs of remote work was missing out on conversations with co-workers. But I wonder if one of the benefits of remote work will be providing employees more time to have conversations with AI.
  • AI still isn't perfect. ChatGPT hallucinated a version of Tailwind that didn't exist, which prevented my app from running. Cursor (running Claude's Sonnet) helped me troubleshoot this issue. But don't worry: Today's AI tools are “the worst you’ll ever use for the rest of your life.”

There's Never Been a Better Time to be a Builder

I leave you with this image of a v0 ad, also mentioned by Rauch on Lenny's Podcast. Happy cooking!