From superloopy
Reverse-engineers a target website into a pixel-perfect local implementation with audit evidence. Use for authorized cloning, migration, learning, or recovery.
How this skill is triggered — by the user, by Claude, or both
Slash command
/superloopy:superloopy-cloneThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Reverse-engineer a target URL into a working local implementation with audit artifacts. Use this only for authorized cloning, migration, learning, or recovery work. Do not help with phishing, deceptive impersonation, credential capture, or evading a site's terms.
Reverse-engineer a target URL into a working local implementation with audit artifacts. Use this only for authorized cloning, migration, learning, or recovery work. Do not help with phishing, deceptive impersonation, credential capture, or evading a site's terms.
When multiple URLs are provided, process each host independently. Keep every site's research, screenshots, assets, and evidence isolated under paths like docs/research/<hostname>/, docs/design-references/<hostname>/, and .superloopy/evidence/website-clone/<hostname>/.
This is not "inspect once, then redraw." Act as the foreman: inspect one section, write the exact spec, dispatch or build that bounded slice, then keep extracting the next section while builders run. A hard section is where extraction gets stricter, not where approximation becomes acceptable.
Transferloom.com is a reference result for this workflow: superloopy-clone reproduced the page locally and passed desktop/mobile browser validation with preserved sticky navigation, animated hero, app preview sections, comparison table, security panel, sister app banner, footer, local assets, and a Superloopy evidence trail.
Use that bar for completion claims. A clone is successful only when it has this shape of evidence: source screenshots, research notes, component specs, downloaded assets, local browser screenshots, validation output, visual QA notes, and a final evidence artifact.
.superloopy/evidence/website-clone/<hostname>/.SUPERLOOPY_EVIDENCE: <path-under-active-evidence-root> when a worker is involved, or superloopy loop evidence when recording from the parent.Unless the user gives different requirements, clone exactly what is visible at the target URL:
Pixel-perfect means the default is extraction-first, not inspired reconstruction. If a section is driven by custom JavaScript, CSS keyframes, canvas, video, Lottie, WebGL, marquees, scroll timelines, masks, or layered absolute positioning, use verbatim port mode first:
docs/research/<hostname>/ and docs/design-references/<hostname>/ folders before extraction.npm run build, npm run typecheck, or npm test.docs/research/<hostname>/, docs/research/<hostname>/components/, docs/design-references/<hostname>/, scripts/, and the Superloopy evidence root.Use Superloopy actively when the clone has independent extraction, build, QA, or review lanes. Superloopy handoffs are parent-side bookkeeping; the host spawns workers, while Superloopy records and reconciles them.
loopy team ... loopy clone, loopy team <url> clone, loopy crew ... clone, loopycrew ... clone, and ultrawork ... clone as full-crew clone requests. Start with the crew plan, split extraction/build/QA/review lanes early, and record handoffs from the first dispatched lane.loopy clone may stay solo only for a small static page or one clearly bounded component. The moment there are multiple sections, responsive states, animations, unknown assets, or parallelizable QA/review work, escalate to crew dispatch instead of continuing solo.nami: read-only navigator for target app structure, candidate selectors, route layout, existing component patterns, and asset paths. Use before broad repo searches or when multiple search angles are needed.franky: builder for exactly one bounded component, wrapper, or asset integration slice. Give the full spec inline, allowed files, validation command, artifact target, and SUPERLOOPY_EVIDENCE requirement.usopp: QA lane for build/typecheck/browser checks, screenshot capture, interaction sweep replay, and evidence reports.zoro: drift reviewer. Ask it to compare implementation against the component spec and call out simplified lookalikes, missing states, missing assets, and wrong interaction models.robin: audit lane for high-risk evidence, source attribution, suspicious extraction gaps, and final claim review. It ends with SUPERLOOPY_AUDIT: <artifact>.jinbe: final gate lane for fleet status, accepted evidence, outstanding blockers, and release readiness.Record every dispatch with superloopy loop handoff --agent <name> --assignment <self-contained task>. When a worker returns, update that handoff with --verdict <PASS|REJECT|NEEDS_CONTEXT> and --artifact <path> when accepted. Run superloopy loop fleet --json before any final completion claim. Accepted handoffs require artifacts under the active evidence root; an ack-only worker is inconclusive, never a pass.
Capture the original before building:
PAGE_TOPOLOGY.md listing sections from top to bottom, fixed layers, z-index relationships, and each section's interaction model.BEHAVIORS.md from scroll, click, hover, time, and responsive sweeps.DESIGN_TOKENS.md with fonts, colors, spacing, radii, shadows, animation timings, and global page behavior.ASSETS.md listing images, videos, background images, SVGs, favicons, fonts, and local target paths.DEPENDENCY_GRAPH.md mapping each complex section to its DOM roots, CSS blocks, JS drivers/listeners, keyframes, assets, masks, z-index layers, and third-party libraries.Use computed styles, DOM inspection, and real assets. Do not estimate colors, spacing, text, or breakpoints when the browser can provide them.
Run this sweep after initial screenshots and before component specs:
BEHAVIORS.md is the behavior source of truth. If a component spec conflicts with it, re-extract before building.
Build the shared foundation before sections:
scripts/download-assets.mjs script or equivalent existing project script that downloads discovered images, videos, fonts, favicons, OG images, and binary assets into the local public asset tree with stable names.Run the relevant build or typecheck after the foundation change and save the output under the Superloopy evidence root.
Run a browser-side asset inventory before writing download code. Capture at least:
<img> sources, natural dimensions, alt text, parent classes, sibling image count, position, and z-index.<video> sources, posters, autoplay, loop, muted, and source children.Layered assets matter. A single visual may be a background, foreground image, mask, overlay icon, and clipped absolute layer. Enumerate all layers before assigning a builder. Do not build mockup HTML for content that is actually video, Lottie, canvas, or WebGL.
Use browser automation to gather this shape:
JSON.stringify({
images: [...document.querySelectorAll("img")].map((img) => ({
src: img.currentSrc || img.src,
alt: img.alt,
width: img.naturalWidth,
height: img.naturalHeight,
parentClasses: img.parentElement?.className?.toString(),
siblingImages: img.parentElement ? img.parentElement.querySelectorAll("img").length : 0,
position: getComputedStyle(img).position,
zIndex: getComputedStyle(img).zIndex
})),
videos: [...document.querySelectorAll("video")].map((video) => ({
src: video.currentSrc || video.src || video.querySelector("source")?.src,
poster: video.poster,
autoplay: video.autoplay,
loop: video.loop,
muted: video.muted
})),
backgroundImages: [...document.querySelectorAll("*")]
.map((element) => ({ element, backgroundImage: getComputedStyle(element).backgroundImage }))
.filter((item) => item.backgroundImage && item.backgroundImage !== "none")
.map(({ element, backgroundImage }) => ({
url: backgroundImage,
selectorHint: `${element.tagName.toLowerCase()}.${element.className?.toString().split(" ").slice(0, 3).join(".")}`
})),
svgCount: document.querySelectorAll("svg").length,
favicons: [...document.querySelectorAll('link[rel*="icon"]')].map((link) => ({ href: link.href, sizes: link.sizes?.toString() })),
fonts: [...new Set([...document.querySelectorAll("*")].slice(0, 250).map((element) => getComputedStyle(element).fontFamily))]
});
Before building each section, write a component spec at docs/research/<hostname>/components/<component>.spec.md. The spec is the contract for implementation and must include:
getComputedStyle().verbatim port, framework-adapted port, or approved reimplementation; include the reason and approval if not porting.If a spec grows beyond one focused component or a builder prompt exceeds about 150 lines, split it. Builders should not guess.
For each component container, run a browser extraction script instead of hand-measuring. The output goes into the spec and builder prompt:
(function extractComponent(selector) {
const root = document.querySelector(selector);
if (!root) return JSON.stringify({ error: `missing ${selector}` });
const props = [
"fontSize", "fontWeight", "fontFamily", "lineHeight", "letterSpacing", "color",
"background", "backgroundColor", "padding", "margin", "width", "height", "maxWidth",
"display", "flexDirection", "justifyContent", "alignItems", "gap", "gridTemplateColumns",
"borderRadius", "border", "boxShadow", "overflow", "position", "top", "right", "bottom",
"left", "zIndex", "opacity", "transform", "transition", "objectFit", "objectPosition",
"mixBlendMode", "filter", "backdropFilter", "whiteSpace", "textOverflow"
];
function styles(element) {
const computed = getComputedStyle(element);
return Object.fromEntries(props.map((prop) => [prop, computed[prop]]).filter(([, value]) => value && value !== "normal" && value !== "auto" && value !== "none"));
}
function walk(element, depth = 0) {
if (depth > 4) return null;
return {
tag: element.tagName.toLowerCase(),
classes: element.className?.toString(),
text: element.childNodes.length === 1 && element.childNodes[0].nodeType === Node.TEXT_NODE ? element.textContent.trim() : null,
styles: styles(element),
image: element.tagName === "IMG" ? { src: element.currentSrc || element.src, alt: element.alt, width: element.naturalWidth, height: element.naturalHeight } : null,
children: [...element.children].slice(0, 30).map((child) => walk(child, depth + 1)).filter(Boolean)
};
}
return JSON.stringify(walk(root), null, 2);
})("SELECTOR");
For stateful components, capture state A, trigger the behavior with browser automation, capture state B, then record the exact property diff, trigger, and transition.
Each spec must include these headings. If a heading truly does not apply, write N/A with a reason:
verbatim port, framework-adapted port, or approved reimplementation.Before dispatching any builder, verify every item:
docs/research/<hostname>/components/.getComputedStyle(), not guessed from utility classes.Implement one bounded section or component at a time. For parallel workers, send the full spec inline; do not tell a worker to "go read the docs" for missing details. Use a handoff like:
TASK: build <component> from this spec.
TARGET: <file path>
SCOPE: only this component and directly required local assets.
VERIFY: run the focused typecheck/build command.
DELIVERABLE: report artifact under <active evidence root> and end with SUPERLOOPY_EVIDENCE: <artifact>.
SPEC:
<paste the component spec here>
After each merge or parent implementation pass:
Wire sections into the page after their components pass local validation:
PAGE_TOPOLOGY.md.Do not declare completion after the build alone. Compare original and clone:
For every mismatch, decide whether extraction was wrong or implementation drifted. Re-extract, update the spec, and fix the component. If an approximation remains in a complex section without recorded approval, stop and mark the task blocked. Save VISUAL_QA.md under the evidence root.
SUPERLOOPY_EVIDENCE, update superloopy loop handoff, then reconcile with superloopy loop fleet --json.Report:
npx claudepluginhub beefiker/superloopy --plugin superloopyClones live webpages into active Figma file: measures layout, colors, fonts, text positions via Chrome DevTools, builds frames/tables with Figma Plugin API.
Clones inspiration websites exactly via browser extraction, customizes section-by-section with user content and AI-generated images, then deploys conversion-focused landing pages to Vercel.
Captures visual design elements (colors, typography, spacing) from any website via Bright Data and applies them to your existing frontend codebase.