The Rebuild Specification
How the site would be rebuilt and migrated — specified in full, deliberately not executed, so the decision can be made later with everything already worked out.
Movement IV. Specified, not executed. The plan, ready for when you want it. Current-state numbers were measured 2026‑08‑04; everything about the target is a proposal.
Contents
- 1. Why this is written down and not done
- 2. Current state of record
- 3. Target architecture
- 4. The URL map — every path stays
- 5. M1 — Build
- 6. M2 — Instrument
- 7. M3 — Cutover
- 8. Acceptance criteria
- 9. Risks and rollback
- 10. Explicitly out of scope
- 11. Decisions required before M1 starts
1. Why this is written down and not done
Three reasons, in order of weight.
A migration is the riskiest routine operation in SEO, putting every ranking, backlink and citation at risk in one moment. Do one only when you can detect a regression against a stable baseline. Right now you can't: no analytics exist (§2), so a traffic collapse after the move would be invisible.
You have almost nothing to lose today, which argues for care, not haste. The site ranks for zero keywords and has zero AI-assistant mentions. A migration can't destroy rankings you don't have, and there's no deadline.
Everything valuable can start without it. Per S18.8, items 1–6 of the fix list improve the existing Webflow site and can begin immediately. Only item 7, the platform change, needs this document.
So: instrument first, publish for a quarter, then migrate against a real baseline. Until you say go, this plan stays specified, not executed.
2. Current state of record
Measured 2026‑08‑04 (raw/stack.json, raw/psi_*.json, raw/danielle_onpage_*.json, raw/sitemap_urls.json).
2.1 Platform and network path
Three terms: the CMS is the software you edit your site in (yours is Webflow). DNS is the internet's address book, pointing your domain at the machine that serves it. The edge, or CDN, is servers near your visitors keeping copies of your pages so they load fast.
| Layer | Current | Evidence |
|---|---|---|
| CMS / builder | Webflow | x-wf-region: us-east-1 and x-lambda-id headers on every page; danielle-carron.webflow.shared.*.min.css |
| Edge / CDN | Cloudflare — Webflow's account, not hers | Server: cloudflare, CF-Ray, CF-Cache-Status on all responses |
| Asset CDN | cdn.prod.website-files.com |
Serves CSS, images, media-kit PDF |
| DNS | SiteGround nameservers (ns1/ns2.siteground.net) |
Zone held at SiteGround; records point to Webflow. SiteGround serves no traffic. |
| Apex A record | 198.202.211.1 (Webflow-owned) |
|
www CNAME |
cdn.webflow.com |
|
| Apex behaviour | Double redirect — http://daniellecarron.com → https://daniellecarron.com → https://www.daniellecarron.com |
Two hops where one belongs |
| HTTP | HTTP/1.1 observed; alt-svc advertises h3 |
2.2 Application capability
Structured data is machine-readable labelling telling search engines what a page is (a person, a service, an episode). A canonical tag names a page's one official address.
| Capability | State |
|---|---|
| Analytics | None sitewide. No GA4, GTM, Meta pixel, Hotjar, Clarity, or dataLayer. |
| Structured data | None. Zero application/ld+json matches across 8 pages. |
| Canonical tags | None on any page. |
| Booking software | None. CTAs labelled “Book a Free Call” route to /contact. |
| Contact intake | Custom form → https://formspree.io/f/xaqgpnzo → email relay. reCAPTCHA v2. |
| Newsletter | Webflow-native form, /podcast footer only. Cloudflare Turnstile. No ESP behind it. |
| CRM | None. |
| Payments | None. Offers $300 – $20,000 sold by conversation. |
| Blog / CMS collections | None. Flat 8 pages. /podcast is hand-authored embeds. |
robots.txt |
Sitemap directive only; no Disallow rules. |
2.3 Performance baseline (mobile Lighthouse)
The before measurement; any rebuild is judged against it.
| Page | Perf | LCP | TTI | Weight | Unused JS |
|---|---|---|---|---|---|
/work-with-me |
66 | 7.5 s | 7.5 s | 1,172 KiB | 247 KiB |
/contact |
71 | 5.3 s | 9.9 s | 4,669 KiB | 555 KiB |
/ |
76 | 4.5 s | 6.7 s | 2,758 KiB | 247 KiB |
/about |
84 | 3.5 s | 5.9 s | 704 KiB | 247 KiB |
Desktop home: performance 94, LCP 1.5 s. Accessibility across pages: 80–89. SEO: 100 everywhere. Root-document server response: 0 ms (already edge-cached).
3. Target architecture
The governing constraint is S18.7: the strategy needs many pages published cheaply. Any target that keeps page creation a designer's task fails.
3.1 Proposed stack
| Layer | Proposal | Rationale |
|---|---|---|
| Hosting / edge | Cloudflare Pages on an account Danielle owns | Own the cache rules, redirects, logs and edge functions (18.6). Static output is free at this scale. |
| Site generator | A static generator with content in plain Markdown (Astro or Eleventy) | Content stays in a portable, greppable format — kills the platform-risk problem in 15.1 outright. |
| Content model | Templated types: article, episode, service, page |
One template renders 300 articles. This is the whole point of the rebuild. |
| Forms | Cloudflare Pages Functions → ESP + CRM | Removes the Formspree email dead-end. |
| Booking | Hosted scheduler, embedded and linked | See 3.3. |
| Payments | Stripe (checkout links, not a full store) | Needed only for the front/middle rungs of S16. |
| DNS | Consolidate at Cloudflare | Ends the two-vendor split where SiteGround holds a zone it does not serve. |
If visual editing matters to you, price an alternative: a CMS with a real content API and collection templates. The non-negotiable is templated types plus clean export, not any vendor.
3.2 Performance budget
Enforced on every deploy; nothing ships that breaches it.
| Metric | Budget | Current worst |
|---|---|---|
| Mobile Lighthouse performance | ≥ 95 | 66 |
| LCP (mobile) | ≤ 1.5 s | 7.5 s |
| Page weight (excl. video) | ≤ 400 KiB | 4,669 KiB |
| JavaScript shipped | ≤ 50 KiB | 247–555 KiB unused alone |
| Accessibility | 100 | 80 |
| CLS | ≤ 0.05 | already met (0.001–0.035) |
The weight budget is the load-bearing one. A page of text, images and a booking button has no reason to exceed it.
3.3 Booking and back end
The flow replacing the four-to-eight manual touches in S18.4:
CTA "Book a call"
→ live availability (scheduler)
→ slot selected → confirmation email + calendar invite (automatic)
→ intake questions asked AFTER the slot is held
→ reminder at 24 h and 1 h
→ contact created in CRM, tagged by source
→ post-call: proposal / Stripe checkout link for the relevant rung
Options, all adequate. The choice is yours (§11):
- Calendly / Cal.com / SavvyCal: scheduling only. Simplest, cheapest, fastest to install.
- Practice Better / SimplePractice: scheduling plus clinical notes, intake and billing in one system. Heavier, but collapses several tools into one if you want notes and invoicing together.
Design rule regardless of choice: the intake questions now on /contact get asked after the booking is secured. A held slot with three unanswered questions beats a perfect intake form nobody submitted.
4. The URL map — every path stays
All eight live URLs, from raw/sitemap_urls.json. Every one keeps its path, so none needs a redirect. This is a rehost, not a restructure: the same address serves the same page from a different machine, so your three real inbound links keep working untouched.
Changing platform and URLs at once would make any regression impossible to diagnose.
| # | Current URL | Target | Action |
|---|---|---|---|
| 1 | https://www.daniellecarron.com |
/ |
Keep |
| 2 | https://www.daniellecarron.com/work-with-me |
/work-with-me |
Keep |
| 3 | https://www.daniellecarron.com/how-i-work |
/how-i-work |
Keep |
| 4 | https://www.daniellecarron.com/podcast |
/podcast |
Keep — becomes an index over new per-episode pages |
| 5 | https://www.daniellecarron.com/press-and-speaking |
/press-and-speaking |
Keep |
| 6 | https://www.daniellecarron.com/about |
/about |
Keep |
| 7 | https://www.daniellecarron.com/contact |
/contact |
Keep — rebuilt around the scheduler |
| 8 | https://www.daniellecarron.com/cv |
/cv |
Keep |
The only redirects anywhere are host-level, deciding which address is official; no page moves:
http://→https://in a single hop, direct to the canonical host. The one genuine improvement: today it takes two hops.- Apex →
www, or the reverse (§11). Arbitrary, but made once and never revisited. - New content lives on new paths (
/articles/*,/podcast/<episode-slug>); no history, no redirects.
5. M1 — Build
Built in parallel with the live site. Nothing public changes during M1.
- Stand up the generator; deploy to a preview host (
preview.<something>.pages.dev),noindexthroughout. - Port all 8 pages, copy verbatim unless you approve a change. Content moves into Markdown.
- Rebuild the design to the 3.2 budget: same look, a fraction of the bytes.
- Build the four content templates. Prove the
articletemplate by rendering three real pieces from the S6 content plan. - Build the
episodetemplate and port the podcast back-catalogue (themaineshaman.compattern from Movement III, transcripts included). The largest single content win, and it needs the rebuild to exist. - Structured data throughout:
Person,Service,FAQPage,PodcastEpisode. - Canonicals on every page.
- Accessibility to 100: audited, not assumed.
- Wire forms to the ESP (email service provider) and CRM; wire the scheduler; wire Stripe for the S16 rungs.
6. M2 — Instrument
M2 doesn't wait for M1. It happens on the existing Webflow site, immediately.
- GA4 installed on the live Webflow site.
- Search Console verified, sitemap submitted.
- Baseline recorded and frozen: traffic, queries, impressions, Core Web Vitals field data, for a minimum of one full quarter before cutover.
- The same property and measurement IDs carry to the new site, so the series stays continuous.
Migrate first and instrument after, and you'll never know whether the move helped or hurt.
7. M3 — Cutover
The only step that waits on you: it doesn't begin without your explicit go-ahead on the day.
Pre-flight, all of which must pass:
- Acceptance criteria (§8) green on the preview host.
- Full crawl of the preview site: zero broken links, zero missing pages against the §4 map.
- DNS TTLs lowered to 300 s at least 24 hours ahead.
- Rollback rehearsed: the exact records to restore Webflow, written down, ready to paste.
- A quiet window chosen: not mid-launch, not during a campaign.
Cutover:
- Move DNS to Cloudflare; point at Pages.
- Remove
noindex. - Verify from an external resolver and your own machine.
- Submit the new sitemap; request re-crawl of the eight URLs.
- Watch Search Console daily for 14 days; investigate any indexing drop the same day.
- Keep the Webflow subscription active for at least 30 days after cutover. It is the rollback.
8. Acceptance criteria
Done means an executable check passes, not that it looks finished. Each check is written before the build and ships with it.
| # | Criterion | How it is proven |
|---|---|---|
| 1 | All 8 URLs return 200 at their original paths | Automated fetch of the §4 map |
| 2 | http:// and apex reach canonical in one hop |
curl -sIL, count redirects |
| 3 | Mobile Lighthouse ≥ 95 on all pages | PSI run against live |
| 4 | Page weight ≤ 400 KiB (excl. video) on all pages | Lighthouse total-byte-weight |
| 5 | Accessibility = 100 | Lighthouse |
| 6 | Structured data present and valid on every page | Rich Results Test |
| 7 | Canonical present on every page | Fetch + grep |
| 8 | GA4 fires on every page | Realtime report |
| 9 | Booking flow completes end to end | Manual test booking |
| 10 | Form submission reaches ESP and CRM | Test submission |
| 11 | Copy is byte-identical to approved source | Diff against Markdown |
| 12 | No page ships noindex post-cutover |
Fetch + grep |
Criterion 11: the most common silent migration failure is copy quietly altered in the port.
9. Risks and rollback
| Risk | Likelihood | Mitigation |
|---|---|---|
| Ranking loss at cutover | Low — she ranks for nothing today | Paths preserved (§4); the downside is unusually small right now |
| Backlink loss | Very low | Only 3 links are real, and all 3 point at the 8 preserved paths (§4). The other 27 are spam nobody would miss |
| Copy altered in the port | Medium — the common one | Criterion 11: byte-diff against approved source |
| Booking flow silently broken | Medium | Criterion 9: a real test booking, not a visual check |
| DNS propagation confusion | Medium | TTL lowered 24 h ahead; verify from multiple resolvers |
| Migration during a campaign | Low | §7 pre-flight names the quiet window |
Rollback: restore the Webflow DNS records (§2.1, kept ready per §7.4) and the old site is live within one TTL.
10. Explicitly out of scope
So nobody assumes them later:
- No change to daniellecarron.com has been made. Nothing in this document has been executed.
- No visual redesign. The look is good (S18.1); the target reproduces it at a fraction of the weight.
- No copy rewrite. Copy changes are a separate content decision, never bundled into a platform change.
- No new offers. The S16 ladder is a business decision that precedes its implementation here.
- No membership, course platform or community software.
11. Decisions required before M1 starts
None of these are urgent. All are yours.
- Scheduler: lightweight (Calendly / Cal.com / SavvyCal) or full practice-management (Practice Better / SimplePractice)?
- ESP: the S12 tribe island needs one. Choose before M2 so the list starts accumulating on the existing site.
- Canonical host:
wwwor apex. Arbitrary, but decided once and never revisited. - Visual editing: do you need to edit pages yourself? If yes, the generator choice changes.
- Podcast transcripts: the back-catalogue port is the largest content win (Movement III,
maineshaman.com). All 66+ episodes, or the best twenty first? - Timing: one full quarter of M2 instrumentation and publishing before M3 cutover.