Skip to main content

Give old, outdated small-business websites a modern, AI-orchestrated facelift.

Project description

Facelift

Give any old, outdated website a modern facelift — fully automated, AI-driven, end-to-end.

What it does

Facelift crawls a target website and downloads every page and asset, then sends each image to Gemini Flash 3.1 for a structured design-oriented description. Claude analyzes the downloaded content and image sidecars to produce a brand analysis, then generates a detailed design brief, and finally implements the redesigned site as a Next.js + Tailwind project. A mechanical validation pass checks for typos, broken links, and image misuse; a final Claude step applies obvious fixes and logs judgment calls for human review. See plan.md for full pipeline detail.

⚠️ Footgun: --dangerously-skip-permissions

Facelift always invokes Claude Code with --dangerously-skip-permissions. That gives Claude unrestricted tool access, including arbitrary shell commands, on every step. This is required for the pipeline to run unattended, and it is not user-configurable. If you are not comfortable with that, do not run facelift.

Prerequisites

  • Python 3.11+
  • uv (only if installing from source)
  • Claude Code installed and authenticated (claude --version should print)
  • The frontend-design skill installed in your Claude Code setup
  • Node.js 20+ and npm (used by step 5 to scaffold the Next.js project)
  • A Gemini API key in the GEMINI_API_KEY environment variable

Install

pip install facelift

Usage

mkdir my-clients-facelift && cd my-clients-facelift
export GEMINI_API_KEY="..."
facelift www.examplebadwebsite.com

Facelift writes everything to the current working directory: download/ holds the raw scraped site (HTML, CSS, images, and all assets), plan/ holds the markdown planning artifacts (brand analysis, design brief, validation report, deferred decisions), and site/ is the finished Next.js + Tailwind project ready for npm run dev. facelift.log captures the full run log. A STEPN_COMPLETED sentinel file is written for each finished step. Re-running in the same directory picks up where it left off — any step whose sentinel is present is skipped automatically.

Output layout

./                           # cwd; one facelift run per directory
  facelift.log               # full run log
  STEP1_COMPLETED            # progress sentinels (see Resumability)
  STEP2_COMPLETED
  ...                        # one per completed step
  download/                  # raw scraped site (HTML, CSS, images, videos, all assets) + per-image sidecars
  plan/                      # planning markdown artifacts
    brand-analysis.md
    design-brief.md
    validation.md
    deferred-decisions.md
  site/                      # Next.js + Tailwind project — the modernized site (step 5 output)
    DEVIATIONS.md            # only present if step 5 deviated from the design brief
    node_modules/            # left in place so `npm run dev` works without reinstalling

Resumability

Step-level progress is tracked with STEPN_COMPLETED sentinel files at the run root. When a step finishes cleanly its sentinel is written; on the next run, any step whose sentinel exists is skipped. To force a step to re-run, delete its sentinel (and those of all downstream steps you also want redone). Steps 1 and 2 have additional per-item resumability: the crawler skips URLs whose output file already exists, and the image describer skips images whose sidecar already exists, so a mid-step crash picks up at the next unfinished item rather than restarting from scratch.

Troubleshooting

  • claude: command not found — install Claude Code from https://docs.claude.com/claude-code and make sure it's on your PATH.
  • Claude not authenticated — run claude /login and complete the authentication flow before re-running facelift.
  • Missing frontend-design skill — the skill is not detected at runtime; if it isn't installed, step 4 will still run but produce less distinctive design output. Install it in your Claude Code setup.
  • GEMINI_API_KEY not set — facelift fails fast on startup with a clear error; export the variable and re-run.
  • Gemini quota / rate-limit (HTTP 429) — fatal in v1; re-run after your quota resets. Sentinel-based resumability means step 2 picks up at the first un-described image.
  • npm: command not found — install Node.js 20+ (which includes npm) from https://nodejs.org/.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

site_facelift-0.1.0.tar.gz (101.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

site_facelift-0.1.0-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file site_facelift-0.1.0.tar.gz.

File metadata

  • Download URL: site_facelift-0.1.0.tar.gz
  • Upload date:
  • Size: 101.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for site_facelift-0.1.0.tar.gz
Algorithm Hash digest
SHA256 16c676f64d0ec80f1519f0afd501573baf3fb51b386548f55291c1d86ddefb8a
MD5 6ec2260535b7428de36fc49af6b19987
BLAKE2b-256 edeb0cbec4762ce665000db5563e47e412d51e81ddb05c433ab8d385c6b8695c

See more details on using hashes here.

File details

Details for the file site_facelift-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: site_facelift-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 22.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for site_facelift-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 456b1bcfbc587ac3c22e0bcbf054b4ef7d916fc602b1fd827cf743d2f79279b4
MD5 9131ce12418fddabb9acbe1283b40791
BLAKE2b-256 bd6971fe3f894982c305bf10c5b82cb6fab6fb603f4c2d771fc18b1b38cec869

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page