Carry your site
across. Intact.
Migration tools for Ghost, Squarespace, Substack, Webflow, and WordPress → Astro. Content, assets, routes, and metadata. No lock-in. No data loss.
The Routes
Each route is a tested crossing — an origin platform to Astro, and the cargo that moves intact. Specs list every field, transform, and known edge.
The Manifest
A full accounting of what comes aboard. Four holds, nothing stowed loose.
Content
Posts, pages, collections, and CMS schemas. Mapped to Astro content collections or headless CMS structures.
Assets
Images, files, and media. URLs rewritten. Optimized for Astro's asset pipeline.
Routes
URL structures, slugs, and redirect maps. Your SEO equity moves with you.
Metadata
Titles, descriptions, Open Graph, alt text, publish dates. Nothing discarded.
How Portage Works
Three stages. Extract, transform, load. Each is inspectable, each is reversible, and nothing is written until the last.
Extract
Connect to source. Pull content, assets, and structure via API or export file.
Transform
Normalize schemas. Map to Astro content collections or your target headless CMS. Generate type-safe data layers.
Load
Write to Astro project. Output clean Markdown, MDX, or JSON. Asset references rewritten. Redirects generated.
$ npx portage extract --from ghost --to ./astro-project → 142 entries · 318 assets · 12 collections $ npx portage transform --schema content-collections → schemas normalized · type-safe layer generated $ npx portage load --assets ./public → markdown written · 47 redirects mapped · done
Nothing is left on the dock.
Portage treats your content as cargo with a manifest. Every item is counted on, and counted off.
No data loss
Every field in the manifest is checksummed on extract and verified on load. Mismatches halt the crossing.
No lock-in
Output is plain Markdown, MDX, or JSON in your repository. Portage leaves no runtime behind.
Reversible
Dry-run by default. Full diffs before anything is written. Nothing is overwritten without confirmation.
Inspectable
Every transform is logged. The manifest is a file you can read, diff, and commit alongside your code.
An infrastructure product of Salish Sea Consulting.
A small studio building migration and content tooling for teams leaving page-builders behind. We maintain Portage in the open, on the same schedule we'd want for our own crossings.
Carry it across.
Read the route specs, or pull the toolkit and run your first extract as a dry-run. Nothing is written until you say so.