Skip to content
AI-Native PM

Languages and frameworks: approve the pick

Chapter 5 of 7 in The Software Map · 9 min

You are showing the trails page, still running on your laptop, to a club friend who writes a bit of Python at work. Your friend scrolls up to the plan you approved and stops at the line that names Next.js. Why Next.js, when Python would have done the job? The only answer you have is that the agent picked it, and your friend adds that switching later would mean a rebuild, not an edit. Almost everything in the running-club folder is cheap to change except the parts that follow from that one line, and you approved it in seconds.

The first line of the plan holds a language and a framework

The line, as the plan printed it:

Build with:  JavaScript, using the Next.js framework

That line packs two picks of different weight into one sentence. A programming language is the words and grammar the instructions in your files are written in, the way a recipe is written in English or French. Builders shorten it to language.

JavaScript is the language browsers run, so the web standardized on it. Every page of the running-club site is written in it, and the .js ending says so.

TypeScript is JavaScript with stricter rules that catch mistakes early, like a spell-checker for code. Most coding agents offer it, and its files end in .ts.

Python is an easy-to-read language that became the home language of data and AI work. The three-line tip calculator in What software actually is: text files a computer runs was Python, and your friend writes it for the same reason: it reads almost like English.

For the running club any of the three does the job, and the pick that matters sits in the second half of that line.

Next.js is a framework, and the framework is the pick that matters

A framework is a bundle of decisions someone else already made, shipped as working code you build inside. Think of a meal kit: the recipe is chosen and the ingredients are measured, and you cook one dinner inside those choices. Next.js fixed the layout of the running-club folder before you typed a word: each page is a file called page.js inside a folder named for the page.

A library is one package of code doing one job, one ingredient in the kit. Next.js brings a library called React with it, and React draws what you see on the screen.

Swap one library and the agent touches a few lines. If you swap the framework, the folder layout and the naming rules change with it, so the agent starts again from an empty folder.

You pick a language first, then a framework written in itTwo rows, labeled language and framework down the left margin. The top language row holds three cards drawn calm and neutral, JavaScript, Python, and Ruby. An arrow runs down from each into the bottom framework row, whose cards are filled in sage and emphasized, Next.js, Django, and Rails. Caption: approving the framework matters more than approving the language.LANGUAGEFRAMEWORKJavaScriptNext.jsPythonDjangoRubyRailsApproving the framework matters more than approving the language.

The running-club site sits in the first column: JavaScript on top, Next.js below it. Your friend's Python would take the second column, with Django as its framework, and every column has the same split.

A framework is a bundle of decisions someone else already made, shipped as working code, and approving the framework matters far more than approving the language.

The receipt in the folder: what the agent borrowed when you said yes

To scaffold a project means to set up its folders, files, and starter code: the frame of a house before any walls go on. When you approved the plan, the agent scaffolded the running-club folder, all ten files of it. One of those files is a receipt for what the framework brought in.

The manifest is the receipt at the root of the project listing every piece of outside code it borrows. Its file name is package.json, and the ending .json only says what kind of text file it is. A dependency is one piece of borrowed code, one line on that receipt. Next.js is the first line, React is another, and a real receipt runs to dozens of lines.

A version number is the number beside each dependency, an edition number that climbs month by month. Read the names and let the numbers go. The styling row picks how the pages look, and Frontend, what users see teaches those materials. The point of reading the receipt is to spot the few names you know; the framework brought in the dozens of rows you do not recognize, and you can leave them alone.

The obvious objection: shouldn't I pick the best framework?

Comparison articles rank frameworks, so why not pick the winner? A ranking in the abstract says nothing about which framework your agent drafts reliably. The models inside coding agents are trained on enormous amounts of public code, and Next.js and React are among the most common things in it. An agent drafts working code more often in that territory, so the tools share a default. Vercel's app builder v0 starts every new project as a Next.js app, and Lovable starts on React.

We tested this on the site you are reading against Astro, a framework with real strengths for text-heavy sites. We ran the same requests through Claude Code, the AI coding tool we use in this course, on Astro and on Next.js. The Next.js drafts worked first time far more often, so we kept the default.

The best framework for an AI-assisted project is the one your tool writes best, usually the default it proposes. That default is the most common pattern in the code the model learned from.

How to approve the pick in under a minute

Approving takes three moves, and each one is a sentence you type or say.

  1. Ask for the plan with one reason per pick. Type: "Propose a language and a framework for [your idea in one line], and give one reason for each." A reason that praises the technology and never mentions your product is a warning.
  2. Read the two names. One is the language and one is the framework. If the framework is not the agent's usual default, ask why.
  3. Approve unless you can state a real constraint in one sentence. Real constraints sound like this: the product must be an iPhone app in Apple's App Store, which means Swift, the language of Apple's phones. Or your company runs on Python and a colleague will inherit the code. A preference is not a constraint, and your friend's Python was a preference.

Then add the pick and the reason to your idea file, beside the host line from Decode the technical questions that stop you. For the running club, the reason is that the agent writes Next.js best and no colleague will inherit the code.

Try it now

This drill takes about ten minutes; the no-setup path costs nothing and the tooled path a few cents of usage. You arrive with the idea file and, on the tooled path, the running-club folder.

No setup: Open any AI chat you already use and paste: "I want to build [your idea in one line]. Propose a language and a framework, give one reason for each, and say what it would cost to switch the framework a month after starting." Then decide which name is the language and which is the framework, and whether you can state a constraint in one sentence. If not, approve the pick on paper.

With your tools: Open Claude Code inside the running-club folder and type: "Which language and framework is this project written in, and why do they suit a site like this one? Then list the five lines in package.json I am most likely to recognize." Expect JavaScript and Next.js, then a list starting with next and react; check it against the card above. In Codex or Cursor, type the same question into the chat box and open package.json from the file list beside it. The Setup Clinic gets you installed.

Either way, you leave with the idea file one line longer: the names you approved and your reason. Add "Language and framework: [names], because [reason]" to the idea file, with your own names and reason filled in.

Chapter Summary

  • The first line of the plan holds two picks of different weight: a language, which is the words and grammar your files are written in, and a framework.
  • JavaScript is the language browsers run, TypeScript is JavaScript with stricter rules, and Python is the easy-to-read language of data and AI work; for a site like the running club, any of the three does the job.
  • A framework is a bundle of decisions someone else already made, shipped as working code you build inside, and a library is one package of code doing one job.
  • Approving the framework matters far more than approving the language: swapping a library touches a few lines, and swapping the framework means rebuilding the project.
  • The manifest, package.json, is the receipt at the root of the project listing every piece of borrowed code; each row is a dependency, and the version numbers beside the rows can be ignored.
  • The point of reading package.json is to spot the few names you know; the framework brought in the dozens of rows you do not recognize, and you can leave them alone.
  • The best framework for an AI-assisted project is the one your agent writes best, usually its default, since that default is the most common pattern in the code the model learned from.
  • Approve the default unless you can state a real constraint in one sentence, such as an App Store app that must be written in Swift, or a colleague who will inherit Python code.
  • Your artifact from this chapter is the idea file, one line longer with the names you approved and your reason.
  • Next, Git: the undo that makes AI edits safe covers what happens the moment you approve and the agent starts editing files.

Sources

  • Vercel v0 documentation on generated project stacks (last verified July 2026).
  • Lovable documentation on default project scaffolding (last verified July 2026).
  • npm documentation on the package.json manifest (last verified July 2026).
  • Next.js documentation (last verified July 2026).