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+
  • 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 site-facelift

The PyPI distribution is site-facelift, but the installed CLI command and Python module are both facelift (the unprefixed facelift name on PyPI was already taken).

If you'd rather install from source, clone this repo and run uv sync (or any other Python build frontend that understands pyproject.toml).

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.2.tar.gz (101.4 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.2-py3-none-any.whl (22.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: site_facelift-0.1.2.tar.gz
  • Upload date:
  • Size: 101.4 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.2.tar.gz
Algorithm Hash digest
SHA256 729edd196a51d503ee9a36defb9a33108413cef1d222c081586800e46701a118
MD5 9f4866f72100fc8febfe2adfbfd09e9e
BLAKE2b-256 c63d20d5ccbfd3e9e1fd2e95e7f64df20136dac3ff2cad0e2e164e529428b855

See more details on using hashes here.

File details

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

File metadata

  • Download URL: site_facelift-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 22.4 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0b2ee2def155ed805d3cdbe04836bbe899caa0b9ebdff5e047339b0e36fabbc7
MD5 edd2e3028d6462e748fac9ae0a58e98c
BLAKE2b-256 f42acd2c4af2ebc811a187df30cd6511f47d5e881b3438aa704a11d965c66e69

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