Dead site rescue for Laravel builders

Dead sites still have useful bones.

Gjallr inventories old source trees, inspects SQL dumps, extracts content and visual evidence, checks Wayback when it matters, and writes a rescue report a builder can actually use. Not a vibe. A working salvage rig.

Illustration of untrusted dead website material being sorted into clean evidence and a rebuild dossier.
Main rescue flow
$ php artisan gjallr:analyze-source
$ php artisan gjallr:import
$ php artisan gjallr:build
Wayback evidence flow
$ php artisan gjallr:analyze-source --with-wayback
$ php artisan gjallr:wayback:recover-media --dry-run --limit=50
$ php artisan gjallr:wayback:discover-urls --limit=500

What it saves

The useful parts survive the fire.

Gjallr keeps the material a builder actually needs, without pretending every dead site was WordPress or every rebuild should copy the old mess.

Textual content

Headings, body copy, lists, tables, captions, forms, comments, authors, dates, and useful generated HTML.

Media and assets

Images, downloads, upload records, local file checks, recovered archive copies, and clear misses when a file is gone.

Tables and data

SQL tables, custom records, settings, members, forms, products, events, and the mapping clues that explain them.

Routes and SEO

Legacy paths, redirects, canonical hints, titles, descriptions, Open Graph fields, and old-link preservation notes.

Visual language

Colors, fonts, spacing clues, layout regions, repeated components, responsive hints, and screenshot evidence.

Browsable reports

Static rescue reports that make the evidence readable before the builder or AI starts sketching the final site.

Already here

This is more than a README with boots on.

Gjallr now has the boring, valuable parts: commands, a Laravel runtime, a rescue skill pack, helper scripts, fixtures, tests, and a static project site. The useful sort of bragging.

A real Laravel runtime

Imported material is served through normal Laravel routes: homepage, content pages, taxonomy archives, navigation, comments, media, and AI-friendly JSON.

WordPress import that does work

Posts, pages, comments, terms, menus, media records, SEO fields, redirects, and legacy query paths already map into clean Laravel tables.

Wayback support with brakes

Archive checks, missing-media recovery, and URL discovery are opt-in, bounded, dry-run friendly, and stored as evidence instead of gospel.

A rescue skill pack

The bundled agent skill covers safety, content extraction, asset salvage, SQL inspection, visual tokens, static rendering, Wayback comparison, and builder handoff.

Read-only helper scripts

Source inventory, SQL inventory, HTML extraction, CSS token extraction, optional Playwright screenshots, and static report generation live in the repo.

Tests for the ugly bits

Fixtures cover WordPress imports, static HTML, custom PHP treated as inert text, suspicious code detection, Wayback recovery, and report generation.

Wayback

Archive work is evidence, not magic.

Internet Archive requests stay opt-in, bounded, and dry-run friendly. Gjallr can check availability, recover missing uploads, and suggest archived URLs. It does not pretend the archive is truth carved into stone.

Bounded by default

Limits are explicit, user agents are required for real requests, and dry runs come first.

Media recovery

Missing uploads can be recovered into Gjallr-owned storage without overwriting local evidence by accident.

URL discovery

Archived HTML paths become suggestions. A builder still decides what belongs in the revived site.

Refuses

Not a dead-site cosplay engine.

Gjallr is not here to keep the old machine coughing. It extracts the salvage, names the uncertainty, then gets out of the way.

No CMS cosplay

The rescued runtime is read-only. Editing belongs in the rebuild, not in the salvage rig.

No framework guessing

WordPress, custom PHP, static exports, and backup folders get inspected before any importer is chosen.

No finished-site illusion

The build command writes dossiers. A builder directs the rebuild. A frontend-capable AI can help turn the evidence into the finished Laravel site.

Repo map

The whole salvage rig, one picture.

This map shows the sharp edge of the project: untrusted source goes through ingestion, crosses a guarded transformation boundary, then becomes a clean Laravel runtime and builder handoff. The warning badges mark the parts that deserve adult supervision.

Graphical repository map for Gjallr showing untrusted source material, CLI entry points, WordPress and Wayback ingestion, the transformation boundary, clean Laravel runtime, builder handoff, supporting surfaces, hotspots, and improvement targets.

Generated from the current repo structure. The map is evidence, not prophecy.

Pipeline

From archive mess to readable rebuild evidence.

  1. Identify

    Find likely site roots and SQL dumps across old project folders, hosting backups, duplicated volumes, and dated snapshots.

  2. Inspect safely

    Treat old PHP, plugins, themes, uploads, shell files, and scripts as inert evidence. Flag suspicious code before rendering anything.

  3. Extract material

    Pull out content, media, tables, routes, SEO clues, colors, fonts, layout regions, and missing-file evidence.

  4. Compare Wayback

    Use bounded archive requests to compare copy, layout, media, and URLs when the archive can answer a real question.

  5. Write dossier

    Record what survived, what is missing, what is uncertain, what should be reproduced, and what should be simplified.

  6. Browse report

    Generate a static rescue report with no old-site JavaScript and no external runtime dependency.

  7. Rebuild

    Use Laravel, Blade, Tailwind v4, and Alpine.js as modern defaults. The builder still decides what the final site becomes.

Bundled skill

Teach the agent to stop guessing.

The rescue skill tells an agent how to inspect old web projects as hostile evidence before touching Laravel code. It treats WordPress as one case, not the default answer.

Pair roots and dumps

Find likely site roots, nearby SQL dumps, dated backups, duplicated volume copies, and path/name clues that belong together.

Extract before importing

Recover content, media, SQL tables, routes, colors, layout clues, screenshots, safety findings, and uncertainty before choosing a rescue path.

Daddy's Birthday rule

The demo case is not a WordPress proof. It is the reason Gjallr must handle custom PHP and archive mess without making lazy assumptions.

AI handoff

The builder still drives.

Gjallr is meant to hand a website builder clean evidence: safety findings, source classification, rescued routes, content, media status, SQL clues, colors, layout evidence, archive snapshots, and rebuild notes. The builder can then direct a frontend-skilled AI agent instead of guessing from rubble.

Give the AI evidence

Use the dossier, rescue report, schema notes, JSON page views, visual tokens, media paths, old URLs, and Wayback references as the source material.

Keep taste with the builder

The AI can draft layouts, components, copy structure, and responsive details. The builder decides what survives.

Useful agent brief

Rebuild this as a clean Laravel frontend with Blade, Tailwind v4, and Alpine.js. Preserve intent, routes, SEO context, and media evidence. Do not recreate WordPress.

Rescue proof

The demo slot is waiting for a proper corpse.

The product surface is ready for a real rescue example: dead source, archive evidence, rescue report, and rebuilt Laravel result. Until then, the fixtures prove the machinery without pretending a toy screenshot is a case study.

Source

Dead source

A screenshot of the site as found: missing media, old PHP shell, broken WordPress theme, static export, or whatever state it died in.

Technical illustration of dead source material compared against Wayback archive evidence and recovered route and media clues. Wayback

Archived reference

A Wayback snapshot showing what the site used to look like, useful details, and recovered evidence.

Technical illustration of Gjallr static rescue report panels and builder dossier evidence. Report

Rescue report

The static rescue report turns safety findings, content, media, routes, visual tokens, and rebuild notes into something a builder can inspect.

Quick start

Run the rescue rig.

Commands
$ composer install
$ php artisan gjallr:analyze-source --sql-dump=/path/to/site.sql.gz --site-path=/path/to/site-root --source-label="old site"
$ php artisan gjallr:import --sql-dump=/path/to/site.sql.gz --site-path=/path/to/site-root --source-label="old site"
$ php artisan gjallr:build --source-label="old site" --format=both

Boundary

Keep the source mess out of the runtime.

WordPress knowledge belongs in ingestion. Archive mechanics belong in Wayback. Runtime models, controllers, routes, and views stay clean. If `wp_*` leaks into the Laravel runtime, something has gone off the rails.

Why Gjallr?

A short alarm, not a mythology essay.

Gjallr nods at Gjallarhorn, the horn sounded to wake gods and announce the end of an age. That fits because a dead WordPress site is already the end of an age. Gjallr sounds the alarm, gathers what survived, and turns wreckage into evidence for a proper rebuild.

The salvage rig exists.

Gjallr has the commands, tests, runtime boundaries, Wayback support, rescue skill, helper scripts, and static report generator. Feed it dead source material. Get readable evidence. Then rebuild with your hands on the wheel.