420 lines
13 KiB
Markdown
420 lines
13 KiB
Markdown
---
|
||
name: lovable-cleanup
|
||
description: "Audits and strips Lovable scaffolding from Vite + React projects — removes lovable-tagger, swaps placeholder assets, prunes unused Radix deps, and cleans generated docs so the codebase ships as yours."
|
||
risk: safe
|
||
source: community
|
||
source_repo: whoisabhishekadhikari/lovable-cleanup
|
||
source_type: community
|
||
author: whoisabhishekadhikari
|
||
date_added: "2026-06-13"
|
||
tags: [lovable, cleanup, vite, react, shadcn, devtools]
|
||
tools: [claude, cursor, codex, antigravity, gemini-cli]
|
||
---
|
||
|
||
# lovable-cleanup
|
||
|
||
> Remove every trace of Lovable scaffolding and ship the project as your own.
|
||
> Made with [antigravity-awesome-skills](https://github.com/sickn33/antigravity-awesome-skills) · author: **whoisabhishekadhikari**
|
||
|
||
---
|
||
|
||
## Overview
|
||
|
||
Lovable (lovable.dev) bootstraps Vite + React + shadcn/ui projects with its own tagger
|
||
dependency, branding, placeholder assets, and generated markdown docs baked in. Most
|
||
developers export from Lovable and want a clean, ownable codebase before shipping or
|
||
open-sourcing. This skill covers all 14 areas where Lovable leaves fingerprints.
|
||
|
||
---
|
||
|
||
## When to Use This Skill
|
||
|
||
- User says "clean up my Lovable project" or "remove Lovable branding"
|
||
- User says "de-Lovable", "I exported from Lovable", or "audit for Lovable leftovers"
|
||
- Project contains `lovable-tagger` in `package.json`
|
||
- Project contains `CLEANUP_SUMMARY.md`, `DEPLOYMENT_GUIDE.md`, or `DEVELOPMENT_SUMMARY.md`
|
||
- `index.html` still has a generic `<title>` or Lovable favicon
|
||
- User wants to audit a Vite/React project for scaffolding leftovers before shipping
|
||
|
||
---
|
||
|
||
## Core Concepts
|
||
|
||
### What Lovable injects
|
||
|
||
Lovable adds three categories of scaffolding that must be removed:
|
||
|
||
1. **Dependency** — `lovable-tagger` dev dep + `componentTagger()` call in `vite.config.ts`.
|
||
This is the only runtime hook; removing it is always safe.
|
||
2. **Branding artifacts** — `favicon.ico/png`, `og-image.png`, `logo.png`, generic `<title>`,
|
||
and a Lovable project URL in `README.md`.
|
||
3. **Generated docs** — `CLEANUP_SUMMARY.md`, `DEPLOYMENT_GUIDE.md`, `DEVELOPMENT_SUMMARY.md`,
|
||
`LOGO_UPDATE.md` in the project root.
|
||
|
||
### Why the execution order matters
|
||
|
||
Removing deps before editing source files avoids lockfile conflicts. Cleaning docs last
|
||
means the README reflects the already-cleaned project.
|
||
|
||
### Unused dep footprint
|
||
|
||
Lovable pre-installs the full shadcn/ui component set (~29 components) and all Radix UI
|
||
primitives (~30 packages). Most projects use 5–10. The unused ones are safe to remove but
|
||
`@radix-ui/react-slot` must be kept — it is an indirect dep used internally by many
|
||
shadcn components via the `asChild` prop.
|
||
|
||
---
|
||
|
||
## Recommended Execution Order
|
||
|
||
1. Dependencies (Areas 2 & 7) — clear the package graph first
|
||
2. Build config (Area 3) — remove the tagger from Vite
|
||
3. Entry points (Areas 4 & 6) — clear runtime references
|
||
4. Assets (Area 5) — swap brand files (defer if assets not ready yet)
|
||
5. Docs & README (Areas 1 & 10) — clean last so README reflects the cleaned project
|
||
6. Environment & Git (Areas 9 & 12) — security sweep
|
||
7. SEO / deploy (Area 11) — usually a no-op; confirm and move on
|
||
8. Unused deps (Area 13) — safe to defer until after ship if on a deadline
|
||
|
||
---
|
||
|
||
## Step-by-Step Guide
|
||
|
||
### Area 1 · README.md
|
||
|
||
- Line 1: Replace `# Welcome to your Lovable project` with the real project title
|
||
- Line 5: Remove `https://lovable.dev/projects/REPLACE_WITH_PROJECT_ID`
|
||
- Lines 11–19: Delete the "Use Lovable" instructions block
|
||
- Lines 65–73: Delete the "Deploy via Lovable / custom domain docs" block
|
||
|
||
✅ After stripping, read the README end-to-end. Offer to write a replacement intro
|
||
paragraph if large sections were removed.
|
||
|
||
---
|
||
|
||
### Area 2 · package.json
|
||
|
||
- Remove `"lovable-tagger"` from `devDependencies`
|
||
- Rename `"name"` from `"vite_react_shadcn_ts"` to the real project name (kebab-case)
|
||
- Scan the `scripts` block for `"lovable"` or `"lovable:*"` entries and remove them
|
||
|
||
<!-- security-allowlist: grep for scanning package.json content, read-only, no network -->
|
||
```bash
|
||
grep -n "lovable" package.json
|
||
```
|
||
|
||
---
|
||
|
||
### Area 3 · vite.config.ts
|
||
|
||
- Remove `import { componentTagger } from "lovable-tagger"`
|
||
- Remove `mode === 'development' && componentTagger()` from the plugins array
|
||
- Remove `.filter(Boolean)` if it was only present to handle the conditional tagger
|
||
|
||
<!-- security-allowlist: grep for scanning vite config, read-only -->
|
||
```bash
|
||
grep -n "lovable\|componentTagger\|filter(Boolean)" vite.config.ts
|
||
```
|
||
|
||
---
|
||
|
||
### Area 4 · index.html
|
||
|
||
- Replace the generic `<title>` with the real product name
|
||
- Remove any `<!-- Generated by Lovable -->` comments or Lovable meta tags
|
||
- Replace the Lovable favicon reference if present
|
||
|
||
<!-- security-allowlist: grep for scanning HTML file, read-only -->
|
||
```bash
|
||
grep -in "lovable\|generator" index.html
|
||
```
|
||
|
||
---
|
||
|
||
### Area 5 · public/ assets
|
||
|
||
Replace these files (keep filenames, swap content):
|
||
|
||
| File | Action |
|
||
|---|---|
|
||
| `favicon.ico` | Replace with real icon |
|
||
| `favicon.png` | Replace with real icon |
|
||
| `og-image.png` / `logo.png` | Replace with real brand assets |
|
||
| `placeholder.svg` | Usually unused — safe to delete |
|
||
|
||
✅ Flag which files are actually referenced in `<head>` vs dead weight so the user
|
||
knows what to prioritise.
|
||
|
||
---
|
||
|
||
### Area 6 · Source files
|
||
|
||
- `src/main.tsx` — scan for Lovable HOCs, wrappers, or comments
|
||
- `src/App.tsx` — same
|
||
- Auto-generated components — look for `// generated by Lovable` headers
|
||
|
||
<!-- security-allowlist: grep over source files, read-only, no network -->
|
||
```bash
|
||
grep -rn "lovable\|Lovable" src/ --include="*.tsx" --include="*.ts"
|
||
```
|
||
|
||
---
|
||
|
||
### Area 7 · Lockfile
|
||
|
||
<!-- security-allowlist: npm uninstall removes a dev-only package, local filesystem only -->
|
||
```bash
|
||
npm uninstall lovable-tagger
|
||
grep "lovable-tagger" package-lock.json
|
||
```
|
||
|
||
Use `yarn remove` or `pnpm remove` if the project uses those instead.
|
||
|
||
---
|
||
|
||
### Area 8 · package.json scripts (follow-up)
|
||
|
||
Double-check after Area 2 — scripts are sometimes injected separately from deps:
|
||
|
||
<!-- security-allowlist: grep, read-only -->
|
||
```bash
|
||
grep -n '"lovable' package.json
|
||
```
|
||
|
||
---
|
||
|
||
### Area 9 · Environment files
|
||
|
||
<!-- security-allowlist: grep over local env files, read-only, no credentials transmitted -->
|
||
```bash
|
||
grep -rin "lovable" .env .env.local .env.example 2>/dev/null \
|
||
| sed -E 's/([A-Za-z_][A-Za-z0-9_]*LOVABLE[A-Za-z0-9_]*=).*/\1[REDACTED]/I'
|
||
```
|
||
|
||
Remove any Lovable API keys or project IDs. If a variable is Lovable-only, delete the
|
||
entire line — don't leave an empty key.
|
||
|
||
---
|
||
|
||
### Area 10 · Root markdown docs
|
||
|
||
Delete or repurpose these common Lovable-generated files:
|
||
|
||
- `CLEANUP_SUMMARY.md`
|
||
- `DEPLOYMENT_GUIDE.md`
|
||
- `DEVELOPMENT_SUMMARY.md`
|
||
- `LOGO_UPDATE.md`
|
||
|
||
<!-- security-allowlist: grep over markdown files, read-only -->
|
||
```bash
|
||
grep -rln "lovable\|Lovable" *.md 2>/dev/null
|
||
```
|
||
|
||
✅ Skim each file before deleting — Lovable docs sometimes contain useful architecture
|
||
notes worth preserving in a rewritten `CONTRIBUTING.md` or `ARCHITECTURE.md`.
|
||
|
||
---
|
||
|
||
### Area 11 · SEO & deploy config
|
||
|
||
Usually clean — confirm and move on:
|
||
|
||
<!-- security-allowlist: grep over config files, read-only -->
|
||
```bash
|
||
grep -in "lovable" \
|
||
public/robots.txt public/sitemap.xml public/_redirects \
|
||
vercel.json netlify.toml 2>/dev/null
|
||
```
|
||
|
||
After replacing `og-image.png`, update OG meta in `index.html`:
|
||
|
||
```html
|
||
<meta property="og:image" content="/og-image.png" />
|
||
<meta property="og:url" content="https://your-domain.com" />
|
||
<meta property="og:title" content="Your Real Title" />
|
||
```
|
||
|
||
---
|
||
|
||
### Area 12 · Git config
|
||
|
||
<!-- security-allowlist: grep and ls on local git config, read-only -->
|
||
```bash
|
||
grep -in "lovable" .gitignore
|
||
ls .git/hooks/
|
||
```
|
||
|
||
Remove any Lovable-specific `.gitignore` entries or commit hooks.
|
||
|
||
---
|
||
|
||
### Area 13 · Unused dependencies
|
||
|
||
**Step 1 — Map what's actually imported**
|
||
|
||
<!-- security-allowlist: grep over source files, read-only, writes to private temp dir only -->
|
||
```bash
|
||
tmpdir="$(mktemp -d "${TMPDIR:-/tmp}/lovable-cleanup.XXXXXX")" || exit 1
|
||
grep -rh "from [\"']@radix-ui/" src/ --include="*.tsx" --include="*.ts" \
|
||
| grep -oP "from [\"']\K@radix-ui/[^\"']+" | sort -u > "$tmpdir/radix-used.txt"
|
||
|
||
grep -rh "from [\"']@/components/ui/" src/ --include="*.tsx" \
|
||
| grep -oP "from [\"']\K@/components/ui/[^\"']+" | sort -u > "$tmpdir/shadcn-used.txt"
|
||
```
|
||
|
||
**Step 2 — Diff against installed**
|
||
|
||
<!-- security-allowlist: grep and diff on local package.json and private temp files, read-only -->
|
||
```bash
|
||
grep -oP '"@radix-ui/[^"]+' package.json | tr -d '"' | sort > "$tmpdir/radix-installed.txt"
|
||
diff "$tmpdir/radix-installed.txt" "$tmpdir/radix-used.txt"
|
||
```
|
||
|
||
**Step 3 — Bulk remove & verify**
|
||
|
||
<!-- security-allowlist: npm uninstall removes unused local packages, no network mutation -->
|
||
```bash
|
||
npm uninstall @radix-ui/react-accordion @radix-ui/react-alert-dialog # etc.
|
||
npm run build
|
||
```
|
||
|
||
---
|
||
|
||
### Area 14 · Generic Lovable artifacts
|
||
|
||
- `components.json` — verify `style`, `baseColor`, and `aliases` match the real project
|
||
- `eslint.config.js` — usually standard; quick scan only
|
||
|
||
<!-- security-allowlist: grep on config files, read-only -->
|
||
```bash
|
||
grep -in "lovable" components.json eslint.config.js
|
||
```
|
||
|
||
---
|
||
|
||
## Master Scan Command
|
||
|
||
<!-- security-allowlist: recursive grep across project directory, read-only, no network -->
|
||
```bash
|
||
grep -rn "lovable\|Lovable\|LOVABLE\|lovable-tagger\|lovable\.dev" \
|
||
--include="*.ts" --include="*.tsx" --include="*.js" --include="*.jsx" \
|
||
--include="*.json" --include="*.md" --include="*.html" --include="*.toml" \
|
||
--include="*.yaml" --include="*.yml" --include="*.txt" \
|
||
. 2>/dev/null \
|
||
| grep -v "node_modules\|\.git\|dist\|build" \
|
||
| sed -E 's/([A-Za-z_][A-Za-z0-9_]*LOVABLE[A-Za-z0-9_]*=).*/\1[REDACTED]/I'
|
||
```
|
||
|
||
---
|
||
|
||
## Examples
|
||
|
||
### Example 1: Full audit from scratch
|
||
|
||
```
|
||
User: I just exported my project from Lovable. Clean it up.
|
||
|
||
Agent:
|
||
1. Runs master scan — finds 23 matches across 8 files
|
||
2. Uninstalls lovable-tagger, renames package.json "name"
|
||
3. Strips vite.config.ts of componentTagger
|
||
4. Updates index.html title, removes generator comment
|
||
5. Flags 4 markdown docs for deletion, skims each first
|
||
6. Produces cleanup report
|
||
```
|
||
|
||
### Example 2: Targeted dep pruning only
|
||
|
||
```
|
||
User: Just prune the unused Radix packages from my Lovable project.
|
||
|
||
Agent:
|
||
1. Runs grep diff (Area 13 only)
|
||
2. Identifies 18 unused @radix-ui packages
|
||
3. Removes them in bulk, keeps @radix-ui/react-slot
|
||
4. Runs npm run build to verify — passes clean
|
||
```
|
||
|
||
---
|
||
|
||
## Best Practices
|
||
|
||
- ✅ **Do:** Run dep removal (Areas 2 & 7) before touching source files
|
||
- ✅ **Do:** Skim Lovable-generated docs before deleting — may contain useful arch notes
|
||
- ✅ **Do:** Verify `npm run build` passes after every batch of changes
|
||
- ✅ **Do:** Replace OG image before launch — it directly affects social sharing previews
|
||
- ❌ **Don't:** Remove `@radix-ui/react-slot` — it's an indirect dep of most shadcn components
|
||
- ❌ **Don't:** Leave empty env vars like `LOVABLE_PROJECT_ID=` — delete the whole line
|
||
|
||
---
|
||
|
||
## Limitations
|
||
|
||
- This skill does not create or source brand assets (favicons, OG images) — it only flags
|
||
what needs replacing. The user must supply real assets.
|
||
- Dep pruning (Area 13) is safe but not foolproof — some Radix packages are indirect deps
|
||
not caught by a direct `grep`. Always verify with `npm run build`.
|
||
- The skill does not modify `components.json` aliases automatically — it only scans and
|
||
flags mismatches for the user to fix manually.
|
||
- Does not cover Lovable-specific backend integrations (Supabase row-level security, edge
|
||
functions) — those require separate review.
|
||
|
||
---
|
||
|
||
## Troubleshooting
|
||
|
||
### Problem: Build fails after removing Radix packages
|
||
|
||
**Symptoms:** Module not found error for a `@radix-ui/*` package
|
||
**Solution:** Re-add the missing package. Open `src/components/ui/*.tsx` and search for
|
||
the `from '@radix-ui/...'` import to find which component depends on it.
|
||
|
||
### Problem: lovable-tagger still in lockfile after uninstall
|
||
|
||
**Symptoms:** `grep "lovable-tagger" package-lock.json` returns results
|
||
**Solution:** Delete `node_modules/` and `package-lock.json`, then run `npm install` fresh.
|
||
|
||
### Problem: Generic title still showing in browser after updating index.html
|
||
|
||
**Symptoms:** Browser tab shows "Lovable" or "Vite App" despite edits
|
||
**Solution:** Check for a `<Helmet>` or `<Head>` component in `src/App.tsx` or a layout
|
||
wrapper — React-level title tags override `index.html` at runtime.
|
||
|
||
---
|
||
|
||
## Related Skills
|
||
|
||
- `@vite-config` — Vite configuration best practices
|
||
- `@shadcn-setup` — shadcn/ui installation and customization
|
||
- `@react-cleanup` — general React project hygiene
|
||
|
||
---
|
||
|
||
## Additional Resources
|
||
|
||
- [Lovable docs](https://docs.lovable.dev)
|
||
- [shadcn/ui component list](https://ui.shadcn.com/docs/components)
|
||
- [Radix UI primitives](https://www.radix-ui.com/primitives)
|
||
- [antigravity-awesome-skills](https://github.com/sickn33/antigravity-awesome-skills)
|
||
|
||
---
|
||
|
||
## Output Format
|
||
|
||
After completing the audit, produce a cleanup report:
|
||
|
||
```
|
||
## ✅ Cleaned
|
||
<list of changes made>
|
||
|
||
## ⚠️ Needs your input
|
||
<items needing a decision — brand assets, project name, domain>
|
||
|
||
## 🗑️ Deferred (safe to do later)
|
||
<e.g. unused dep pruning, OG image swap>
|
||
```
|
||
|
||
---
|
||
|
||
*Made with [antigravity-awesome-skills](https://github.com/sickn33/antigravity-awesome-skills) · author: [whoisabhishekadhikari](https://github.com/whoisabhishekadhikari)*
|