A Brief History
In late 2025, I wrote From Lovable to Live. It was a guide on taking a Lovable-generated site and hosting it on Cloudflare Pages. At that time, Lovable was useful. You described what you wanted. It generated a working React and shadcn UI app.
I used Lovable to generate 10 apps in production. They included a budget planner, a talent matrix, and a Kanban mind-graph tool. Each app used the same stack: React, Vite, 45-49 npm dependencies, and a vendored Radix UI kit with 49 files.
Why I Stopped Using Lovable
Free Tier Changed
Lovable reduced its free tier. The credits decreased. The message limits decreased. The cost of prototyping increased. I evaluated what value Lovable added to my workflow.
Generated Code Was Mostly Dead Weight
Lovable generated React code with many dependencies. When I needed to customise a layout, add a non-shadcn interaction, or change a chart, I had to read the generated code. The generated code contained many files that the app did not use. 48 of 49 vendored UI files were unused. The real logic of each app was 300-3,500 lines of code. The remaining scaffolding added complexity without function.
Models Can Now Generate Code Directly
In 2025, asking a model to generate a React app often produced incomplete results. You needed a tool like Lovable to fill the gaps. By late 2026, this changed. SOTA models (Claude 4 Sonnet, GPT-5) can generate production-quality code directly. Local models running via vLLM, SGLang, or Ollama on a Ryzen AI Max+ 395 with 128 GB unified memory can also generate code directly. The coding harnesses (Claude Code, Pi, subagents, MCP servers) provide the workflow. The abstraction layer that Lovable provided is no longer necessary.
The Portfolio Audit Confirmed the Problem
In mid-2026, I audited all 22 apps in my monorepo. The audit found these data:
| Metric | Value |
|---|---|
| Lovable-generated apps | 10 |
Vendored components/ui/*.tsx files |
481 across the portfolio |
| Of which never imported | ~300 |
| Runtime deps per Lovable app | 45-49 |
| Real behavioral core LOC | 300-3,500 |
@tanstack/react-query usage |
0 real calls across all 10 apps |
react-hook-form usage |
0 real calls across all 10 apps |
| Dead-weight deps deletable instantly | ~140 |
Each Lovable app carried a Radix UI kit that it barely used. An app with 400 lines of real logic shipped 48 unused UI primitives, React Query (zero calls), react-hook-form (zero calls), and recharts (zero calls in that app). The scaffolding was the bulk of the code. The actual app was a small layer of logic on top.
What I Did
I followed the roadmap to remove or replace the Lovable-generated code:
Wave 1: Dead-weight sweep. I removed @tanstack/react-query and react-hook-form from the 5 Lovable apps still on React. Both had zero real usage. I deleted ~300 unused vendored UI files.
Wave 2: Dependency-free rewrites. I rewrote nine apps as hand-crafted vanilla HTML, CSS, and JS with zero runtime dependencies. For example, rust-hf-showcase had only a copy-to-clipboard button as its interactive element. Its bundle went from 492 kB of JS to 14 kB of HTML.
Wave 3: Logic core rewrites. I rewrote four medium-complexity apps as dependency-free code: insight-weaver, pr-dodger-deluxe, home-chore-helper, and financial-insights. financial-insights had one real dependency: recharts for a single stacked-bar projection chart. I replaced the chart with 200 lines of hand-rolled SVG. The bundle dropped from ~400 kB to 17 kB.
Wave 4: Holdout decisions. For 6 apps where a dependency provides real value, I made explicit decisions:
idea-weaverkeepsreact-force-graph-2d(a physics and canvas library that is hard to replace)photo-sitekeepsframer-motion(the animations are the visual product)blog-site,my-pi,start-with-local-aistay on their current build tools (they are already dependency-minimal)people-manager-suiteandem-compassremoved Azure auth and became local-only apps
Current Setup
The portfolio is a pnpm workspace monorepo (jreb-web-apps) with 23 apps.
13 apps are dependency-free. They are hand-authored HTML, CSS, and vanilla JS, built with Vite and no plugins:
| App | Bundle | Function |
|---|---|---|
rust-hf-showcase |
14 kB HTML + 7 kB CSS | Static marketing page |
app-drawer-showcase |
11 kB + 5 kB | App-launcher grid |
black-mirror |
13 kB | Episode ratings browser |
recipe-folders |
18 kB | Ayurvedic recipe catalogue |
gezonde-recepten |
22 kB | Dutch recipe catalogue with portion scaler |
money-book |
19 kB | Budget planner |
talent-grid-visualizer |
11 kB | 9-box talent matrix |
insight-weaver |
49 kB JS / 15 kB gzip | Journaling app with SVG heatmaps |
pr-dodger-deluxe |
16 kB JS / 5.6 kB gzip | Canvas arcade game |
home-chore-helper |
19 kB JS / 6.7 kB gzip | Cleaning-task scheduler |
financial-insights |
17 kB JS / 5.8 kB gzip | Finance projection with hand-rolled SVG charts |
people-manager-suite |
35 kB | Team tracker (local-only) |
em-compass |
28 kB | People explorer (local-only) |
4 apps use Astro as a build tool only. They ship zero runtime JS frameworks:
| App | Role |
|---|---|
blog-site (this one) |
Personal blog, root CSS and vanilla JS scripts |
flashcards |
ES-NL flashcard SRS with pre-generated audio |
sourdough-kitchen |
bread.jreb.nl recipe site |
jreb-training |
Bilingual training landing page |
3 apps keep one dependency they need:
| App | Dep | Reason |
|---|---|---|
idea-weaver |
react-force-graph-2d |
Force-directed graph is the core feature |
photo-site |
framer-motion |
Scroll reveals and AnimatePresence for visual portfolio |
my-pi |
@astrojs/starlight |
Docs chrome (sidebar, search, prev/next navigation) |
Deployment. All apps build to static output in dist/. They deploy to Cloudflare Pages with automatic HTTPS, global CDN, and per-app build filters. A change to one app rebuilds only that app.
Coding harness. I did all rewriting using Pi. For specific tasks, I delegated work to Claude Code. I run local models (vLLM, SGLang) on my Ryzen AI Max+ 395 for prototyping. The pipeline does not use Lovable.
Summary
Lovable was useful in 2025. It was a fast way to prototype and deploy web apps. The situation changed. Models and coding harnesses improved. The free tier contracted. The audit showed that most generated code was unused scaffolding.
My portfolio now has 22 of 23 apps that are either dependency-free or carry only the dependencies that earn their keep. The 23rd app (werewolf-whodunnit) is still on its own repository. It is next.