source/skills/uninstall/SKILL.md
Roll back a Bodega-provisioned project. Walks the user through removing the Vercel project, blob store, GitHub repo, Stripe webhook, and (optionally) `.bodega.md` itself. The merchant's Stripe account stays — that's their data.
npx skillsauth add mitcheman/bodega uninstallInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Reverse what setup put in place. Use this when:
This skill is destructive by design. It asks before each step and defaults to "no" — accidentally deleting a Vercel project on the day of a launch would be a very bad day.
.bodega.md. If absent, there's nothing to uninstall — say so
and exit..bodega.md vercel, backup, stripe, domain sections), so
the user knows exactly what's about to come down.Here's what I'd undo:
• Your hosting on Vercel (
muddmannstudioproject + your photo storage) • Your backup folder on GitHub (the private one) • The Stripe connection (just the link — your Stripe account and your money stay safe, only the line between Stripe and your site comes down) • Your custom domainmuddmannstudio.comwon't be deleted (you still own it), but I'll unlink it from this site. • This project's.bodega.mdsettings fileWant to keep going? I'll ask before each piece.
Provisioned resources to remove:
- Vercel project:
prj_abc123(muddmannstudio) + blob storebodega-store- GitHub:
mitchellsmith/mudd-mann-studio(PRIVATE)- Stripe webhook: <endpoint_id> at https://muddmannstudio.com/api/stripe/webhook
- Vercel domain binding: muddmannstudio.com (DNS / registrar untouched)
- .bodega.md
Each step asks first, defaults no. Stripe account/balance/payouts NOT touched.
Stripe webhooks are the cheapest to recreate, so do them first. If the user bails partway through uninstall, at least the duplicate-events risk is gone before the URL the webhook points to disappears.
Remove the Stripe connection? (Your Stripe account stays. This just turns off the line that tells your site when an order is paid for. Safe to remove if you're tearing this site down — re-running setup adds it back.)
y / n (default: n)
Delete Stripe webhook
<endpoint_id>(URL:<webhook_url>)? Account/ balance untouched. y/n (default n).
Pull STRIPE_SECRET_KEY from Vercel env (in-memory only):
vercel env pull .env.production.local --environment=production --yes
Delete the webhook by ID:
DELETE https://api.stripe.com/v1/webhook_endpoints/<endpoint_id>
Authorization: Bearer <STRIPE_SECRET_KEY>
Then rm .env.production.local.
Mark in .bodega.md:
state:
webhook_configured: false
uninstall:
webhook_removed_at: <iso>
state.domain: done)The domain itself isn't deleted (the merchant still owns it at the registrar). We only remove the Vercel binding so subsequent deploys don't auto-bind.
Unlink your custom domain
<domain>from this site? (You still own the domain — this only disconnects it from your store. Safe.)
vercel domains rm <domain> --yes— removes the binding only. Registrar / DNS records untouched. y/n (default n).
vercel domains rm <domain> --yes
Mark .bodega.md:
state:
domain: skipped
uninstall:
domain_unbound_at: <iso>
The most destructive step — deleting a git repo means losing any history that wasn't pulled locally. Make the prompt unmistakable.
⚠️ Delete your backup folder on GitHub? (
<owner>/<repo>)This is permanent. If you have files on GitHub that aren't on this computer anymore, they'll be gone. You can still pull a copy down RIGHT NOW (before saying yes) if you want to keep one.
Type the word delete to confirm, or anything else to skip.
⚠️
gh repo delete <owner>/<repo> --yes— IRREVERSIBLE. Local clone is your only copy if you proceed. Typedeleteto confirm.
gh repo delete <owner>/<repo> --yes
(gh repo delete --yes is the non-interactive form — without --yes
the CLI prompts for the repo name as a typed-confirmation, which hangs
in non-TTY shells.)
Mark .bodega.md:
state:
backup: skipped
uninstall:
github_repo_deleted_at: <iso>
github_repo_was: <owner>/<repo>
Delete your photo storage on Vercel? (
<blob_store_name>)Photos uploaded through your studio live here. If you put your site back online later, you'll need to re-upload them. The originals on your computer are unaffected.
vercel blob store remove <name> --yes. All blobs deleted. y/n (default n).
vercel blob store remove <blob_store_name> --yes
Mark .bodega.md:
uninstall:
blob_store_removed_at: <iso>
blob_store_was: <name>
Last — once the project is gone, the URLs that webhooks point to are also gone. Ordering matters: webhook removed in Step 1, domain unbound in Step 2, blob store gone in Step 4, project last.
Delete the Vercel project itself? (
<project_slug>)⚠️ Permanent. Your store will stop responding at the URL right after I do this. The custom domain stays in your name (Step 2 just unlinked it).
Type the project name to confirm.
vercel project rm <slug> --yes. URL goes 404 immediately. Type the slug to confirm.
vercel project rm <slug> --yes
If the project doesn't exist (already deleted manually, or never created), surface the message but don't error — keep going.
Mark .bodega.md:
state:
hosting: skipped
uninstall:
vercel_project_removed_at: <iso>
vercel_project_was: <slug>
.bodega.md itselfLast step: delete the
.bodega.mdconfig file in this project folder?y → fully fresh slate; running setup again starts from scratch n → keep the file (useful as a record of what was uninstalled)
Default: keep.
rm .bodega.md? Keep is fine — theuninstall.*markers above document what came down. Default n.
rm .bodega.md
(If user said no, the file stays with all the uninstall.* markers
written through Steps 1–5 — that's an audit trail.)
Show what was actually removed (some steps may have been skipped):
✓ Done. Removed:
- The Stripe connection
- Your backup folder on GitHub
- Your hosting on Vercel + your photo storage
Kept (because you said skip):
- Custom domain (still in your name)
.bodega.md(in case you want a record)Your Stripe account, your bank account, and your domain registrar are untouched. If you want to start over, just run
{{command_prefix}}bodega:setupin this folder again.
✓ Uninstall complete. removed: stripe-webhook, github-repo, vercel-project, blob-store skipped: domain-unbind, .bodega.md
Re-run setup any time. Resume contract treats removed
state.*asskipped, notnot-started— re-setup will ask before recreating each.
.bodega.md. Default keep. The audit trail
matters more than the cleanliness.gh repo delete without --yes. Without the flag,
the CLI prompts for typed confirmation, which hangs in non-TTY
shells.business
Reports the current state of the store — what's set up, what's pending, what the URLs are, and what to do next.
testing
First-time Bodega setup. Detects whether the folder has an existing project (adapt) or is empty (greenfield), asks about voice and beneficiary, writes .bodega.md, and orchestrates the full flow through hosting, payments, deploy, and admin.
testing
Re-ask the voice and beneficiary questions and update .bodega.md. Useful when the user's preference changes or the store is being handed off to someone new.
development
Walks the merchant through Stripe onboarding, captures their API keys, and writes them to Vercel env vars. Handles the common case where KYC takes days by supporting a preview-mode deploy path.