# PageFork — full knowledge corpus This file concatenates every PageFork documentation page, blog post, and case study into a single plaintext document for language model ingestion. Canonical URLs are provided for each section. For the structured sitemap of the site, see https://pagefork.ai/llms.txt. Last generated: 2026-05-26T13:12:12.598Z --- ## Documentation # Analytics and tracking Source: https://pagefork.ai/docs/analytics-and-tracking/ Description: Add GA4, Plausible, Meta Pixel, and other analytics or conversion-tracking tools to your PageFork site. Group: Integrations PageFork supports any analytics or tracking script that works via client-side JavaScript — which is basically all of them. Below are the most common ones with ready-to-paste prompts. > Before you add tracking, consider whether you need a cookie-consent > banner. Most analytics beyond the privacy-first options (Plausible, > Fathom, Simple Analytics) require consent in the EU/UK. See > [Cookie consent and privacy](/docs/cookie-consent-and-privacy/). ## Google Analytics 4 (GA4) The most common setup. Get your **Measurement ID** from GA4 → Admin → Data Streams (format: `G-XXXXXXXXXX`). ``` Add Google Analytics 4 to the whole site. Measurement ID: G-ABC12345. ``` Verify in GA4 → **Realtime** report after publishing. ## Plausible Privacy-focused, no cookies, no consent banner required in most cases. ``` Add this to the
of every page: ``` Verify in your Plausible dashboard within a minute or two of the first visit. ## Fathom Same category as Plausible — lightweight, cookieless. ``` Add Fathom Analytics to every page. Site ID: ABCDEFGH. ``` Or paste the snippet Fathom gives you: ``` ``` ## Simple Analytics ``` Add Simple Analytics to every page: ``` ## Microsoft Clarity Free heatmaps and session recordings. ``` Add Microsoft Clarity to the whole site. Project ID: abc123def. ``` Verify in the Clarity dashboard's **Live** section. ## PostHog Product analytics with session replay and feature flags. ``` Add PostHog to every page. API key: phc_abc123. Host: https://us.i.posthog.com. ``` ## Google Tag Manager (GTM) The "umbrella" option — load GTM once, then manage all your pixels from its UI without touching the site again. ``` Add Google Tag Manager to the whole site. Container ID: GTM-ABC1234. ``` GTM inserts two snippets (one in ``, one right after `` opens). The AI handles both. ## Meta (Facebook) Pixel For Facebook / Instagram ad conversion tracking. ``` Add the Meta Pixel to every page. Pixel ID: 1234567890123456. ``` Verify with the **Meta Pixel Helper** Chrome extension on the published site. ## LinkedIn Insight Tag ``` Add the LinkedIn Insight Tag to every page. Partner ID: 1234567. ``` ## TikTok Pixel ``` Add the TikTok Pixel to every page. Pixel ID: ABCDEFGHIJ. ``` ## Google Ads Conversion Tracking Paste the exact snippet from Google Ads → **Tools** → **Conversions** → your conversion → **Tag setup** → **Install the tag yourself**. ``` Add this Google Ads conversion tag to the thank-you page only: ``` Scope it to the thank-you page so the conversion only fires after a form submission. ## Segment Customer-data platform that fans events out to many downstream tools. ``` Add Segment to every page. Write key: abc123def456. ``` ## X (Twitter) Conversion Tracking ``` Add the X Pixel to every page. Pixel ID: abc12. ``` ## Reddit Pixel ``` Add the Reddit Pixel to every page. Pixel ID: t2_abcde. ``` ## Hotjar ``` Add Hotjar to the whole site. Site ID: 1234567. ``` ## Multiple trackers at once Totally fine — they don't conflict. If you're stacking several, use **Google Tag Manager** as the single container and configure individual tags inside GTM's UI. That way you only touch PageFork once. ## Firing events on specific actions For a form-submission or button-click event, ask the AI to wire it: ``` Fire a GA4 event called "signup" when the newsletter form is submitted. ``` ``` Fire the Meta Pixel "Lead" event when the "Book a call" button is clicked. ``` The AI will add the right event snippet at the right DOM hook. ## Troubleshooting - **No data in the dashboard** — confirm the site is **published** (not just saved), and you're visiting the live URL, not the editor preview. - **Script loads but no events** — check browser devtools → Network tab for calls to the vendor's endpoint. Most vendors also have a "diagnose" tool (Meta Pixel Helper, GA4 DebugView). - **Consent banner blocks everything** — if you've added a cookie banner, it may be gating scripts. Make sure analytics is allowed in the category the visitor accepted. ## Next - [Cookie consent and privacy](/docs/cookie-consent-and-privacy/) - [Integrations overview](/docs/integrations-overview/) - [Chat and support widgets](/docs/chat-and-support-widgets/) --- # Apex vs www Source: https://pagefork.ai/docs/apex-vs-www/ Description: Which domain should you connect — yourbrand.com or www.yourbrand.com? Group: Domains `yourbrand.com` and `www.yourbrand.com` are technically different domains, set up differently in DNS. When you connect a custom domain you pick which one is the primary — and whether the other should also reach your site. ## The short answer **Use both.** Connect `www.yourbrand.com` and choose **Include apex** so `yourbrand.com` redirects to `www`. Whichever one a visitor types, they end up on your site. ## Why it matters - **Apex** is the root domain: `yourbrand.com`. In standard DNS, an apex can't be a CNAME — it has to be an A record (or a provider-specific **ALIAS** / **CNAME flattening** record). - **Subdomain** (including `www`) is anything in front: `www.yourbrand.com`, `launch.yourbrand.com`. Subdomains can be CNAMEs freely. PageFork's edge accepts traffic via a CNAME to `sites.pagefork.ai`. An apex without CNAME flattening can't do that — so when your registrar doesn't support flattening, PageFork uses a small **redirect service** at the apex to bridge the gap. ## The three scenarios ### 1. Subdomain only (e.g. `launch.yourbrand.com`) One CNAME to `sites.pagefork.ai` at the subdomain. See [DNS records reference](/docs/dns-records-reference/) → Case A. ### 2. www + apex, and your DNS provider supports ALIAS / flattening Providers like **Cloudflare**, **DNSimple**, **Netlify DNS**, **Route 53**, and a few registrars. One record at the apex (ALIAS or flattened CNAME) is enough. See [DNS records reference](/docs/dns-records-reference/) → Case C. ### 3. www + apex, and your DNS provider doesn't support flattening / ALIAS Most traditional registrars (GoDaddy, Namecheap, most others). You'll add **two** records: - A **CNAME on `www`** → `sites.pagefork.ai`. This is where your site is actually served. - An **A record on the apex** → PageFork's redirect-service IP (shown in-app). This IP runs a tiny HTTP service that **301**-redirects every request from `yourbrand.com` to `www.yourbrand.com`. Visitors who type the apex hit the redirect service and are bounced to `www`, where your site lives. See [DNS records reference](/docs/dns-records-reference/) → Case D. ## There is no "A record direct to PageFork" If you've set up other hosts before, you might expect to point the apex at a PageFork edge IP via an A record. PageFork **doesn't** support that. The only valid A record is for the redirect service, and it's **only** valid alongside a CNAME on `www` pointing at `sites.pagefork.ai`. If you put an A record at the apex without a matching `www` CNAME, verification will fail. ## Apex-only, no www You can have a site reachable only at the apex (`yourbrand.com`, no `www`) — but it **requires** ALIAS / CNAME flattening support at your registrar. Without that, you can't have apex-only on PageFork; use the `www` + redirect pattern from scenario 3 instead. ## Which should I pick? - Both `www` and apex, registrar supports flattening → one ALIAS/CNAME at apex. - Both `www` and apex, registrar doesn't support flattening → CNAME on `www` + A record at apex (redirect service). - Only `www.yourbrand.com` → one CNAME on `www`; say **No, www only** when PageFork asks about apex. - Only a sub-brand subdomain (like `launch.yourbrand.com`) → one CNAME at that subdomain; nothing at the apex is touched. ## Next - [Connecting your domain](/docs/connecting-your-domain/) - [DNS records reference](/docs/dns-records-reference/) - [Cloudflare and proxies](/docs/cloudflare-and-proxies/) --- # Changing or removing a domain Source: https://pagefork.ai/docs/changing-or-removing-a-domain/ Description: Refresh, re-add, switch, or fully disconnect a custom domain. Group: Domains Domains aren't forever. Campaigns end, brands rename, and sometimes a domain needs to move between PageFork sites. Here's how to handle each scenario without downtime. ## Refresh a domain's status If DNS has changed or you've just added records, force a recheck: 1. In the editor, click **Domain** in the toolbar. 2. Find the domain in the list. 3. Click **Refresh status**. Refresh is safe to click repeatedly — it just polls DNS and, if DNS looks right, attempts SSL issuance again. ## Remove a domain from a site 1. Open **Domain** settings on the site. 2. Find the domain. 3. Click **Remove**. This detaches the domain from this PageFork site. Your DNS records still exist at your registrar — update or delete them separately if you no longer want them pointing at PageFork. > Note: removing a domain **does not** unpublish the site. The site > remains live on your subdomain and any other custom domains. ## Move a domain to a different site Because any given hostname can only be connected to **one** PageFork site at a time, moving a domain is a two-step process: 1. On the **current** site, open Domain settings and **Remove** the domain. 2. On the **new** site, open Domain settings and **Add** the domain. Because DNS doesn't change, propagation is immediate — the new site picks it up as soon as validation completes. > If you forget step 1, you'll see "Domain already connected" when you > try to add it on the new site. ## Change from www to apex (or vice versa) The cleanest way: remove the current domain in PageFork, then add the new one. DNS needs to match what PageFork shows for the new setup — update your records at your registrar before or just after adding. ## Disconnect everything (unpublishing with domain cleanup) If you're taking a site down entirely and don't want any of its custom domains pointing at PageFork: 1. Click **Unpublish** in the editor toolbar. 2. In the confirmation dialog, check **Remove custom domains**. 3. Confirm. All custom domains for this site are removed in one go. Then clean up the DNS records at your registrar. ## Next - [Connecting your domain](/docs/connecting-your-domain/) - [Unpublishing](/docs/unpublishing/) - [Domain not verifying](/docs/domain-not-verifying/) --- # Chat and support widgets Source: https://pagefork.ai/docs/chat-and-support-widgets/ Description: Add live chat, support inboxes, and feedback widgets from Intercom, Crisp, Tawk, and others. Group: Integrations Every mainstream chat / support tool ships a **single JavaScript snippet** you drop into your site. Paste it into PageFork and the AI places it at the end of `` where chat widgets normally live. > Chat widgets make sites heavier and trigger cookie-consent rules in > most regions. Only add one if you'll actually answer messages. ## The universal pattern Copy the vendor's snippet and paste: ``` Add this chat widget to every page: ``` Or, for the popular ones, just ask by name: ``` Add the Intercom chat widget to every page. App ID: abc123. ``` ## Intercom ``` Add Intercom to every page. App ID: abc123. ``` Intercom offers more advanced features (user identification, events) that need extra snippet configuration — ask the AI to wire them: ``` Add Intercom with user identification. App ID: abc123. Use the identity snippet with name and email from window.pagefork.visitor. ``` ## Crisp Chat Free tier available. ``` Add Crisp chat to every page. Website ID: abc12-3456-7890-ab. ``` ## Tawk.to Free. ``` Add Tawk.to chat to every page. Widget ID: https://embed.tawk.to/abc123/def456 ``` ## Drift ``` Add Drift chat to every page. App ID: abc12345. ``` ## HubSpot Chat Paste the tracking code from HubSpot → **Settings → Tracking code**. It bundles chat alongside HubSpot analytics. ``` Add HubSpot tracking + chat. Portal ID: 12345678. ``` ## LiveChat ``` Add LiveChat to every page. License ID: 12345678. ``` ## Chatwoot (self-hosted or cloud) ``` Add Chatwoot to every page. Base URL: https://app.chatwoot.com. Website token: abc123. ``` ## Front Chat ``` Add Front Chat to every page. Chat ID: abc123. ``` ## Feedback / user-input widgets Some tools are feedback widgets rather than live chat: - **Canny** — public product-feedback board; paste their embed to show it inline. - **Featurebase** — similar. - **Frill** — roadmap + feedback widget. - **Senja collect-testimonial widget** — public review form. ``` Add the Canny feedback widget to the Feedback page. App ID: abc123. Board token: def456. ``` ## Only show on certain pages By default, a chat widget appears everywhere — which is usually what you want. If not: ``` Show Intercom only on the Pricing and Contact pages. Remove it from everywhere else. ``` ``` Hide Tawk.to on the Thank You page. ``` ## Position and styling ``` Move the Intercom launcher to the bottom-left. Add 24px extra bottom offset on mobile so it doesn't cover the CTA button. ``` ``` Make the Crisp chat bubble use brand color #E85D4E. ``` Vendor-specific styling works when the vendor exposes configuration; the AI uses the correct API for each tool. ## Mobile considerations - Chat launcher icons **overlap the bottom CTAs** on many mobile layouts. Tell the AI to add a bottom offset, or hide the chat on mobile entirely. - On tiny screens, big chat widgets that auto-expand on page load can cover the fold. Keep them collapsed by default. ## Performance Chat widgets typically add 100–400 KB of JavaScript. To keep Lighthouse scores up: - Load them only after interaction — ask the AI to use the vendor's deferred-load option if one exists. - Don't stack multiple chat widgets. ``` Load Intercom only after the user scrolls or clicks anywhere on the page. ``` ## Troubleshooting - **Widget doesn't appear** — open devtools → Console. Most vendors log a clear error (wrong app ID, domain not whitelisted). - **Widget appears in editor but not on published site** — remember to publish. See [Preview not updating](/docs/preview-not-updating/). - **Domain mismatch** — some vendors (Intercom, Drift) require you to add your custom domain in their dashboard. - **Chat blocked by cookie consent** — make sure chat is categorized as essential or allowed by default in your consent manager. See [Cookie consent and privacy](/docs/cookie-consent-and-privacy/). ## Next - [Cookie consent and privacy](/docs/cookie-consent-and-privacy/) - [Analytics and tracking](/docs/analytics-and-tracking/) - [Integrations overview](/docs/integrations-overview/) --- # Cloudflare and proxies Source: https://pagefork.ai/docs/cloudflare-and-proxies/ Description: When a CDN proxy sits in front of your PageFork domain, things break. Here's what to do. Group: Domains PageFork already runs on its own edge CDN with automatic SSL. If your DNS provider has a proxy in front of your domain (Cloudflare's orange cloud, Fastly, StackPath, etc.), it intercepts traffic before it reaches us — which blocks SSL issuance and can break interactive features. ## What to do on Cloudflare Cloudflare is the most common case. Each DNS record has a **toggle** between a grey cloud (DNS only) and an orange cloud (proxied). **Set every PageFork-related record to grey cloud (DNS only):** - The **CNAME** at `www` (or at your subdomain) → `sites.pagefork.ai`. - If you used an ALIAS / flattened CNAME at apex, that record too. - If you used the Case D apex-redirect pattern, the **A record** at `@` → the redirect IP. On Cloudflare: 1. Go to the site's **DNS** tab. 2. Find each record. 3. Click the orange cloud so it turns grey. 4. Save. ## Why proxies are a problem - **SSL issuance** — Let's Encrypt needs to reach PageFork directly to validate the domain. A proxy intercepts that challenge. - **Cache layering** — a proxy cache in front of PageFork's cache doubles invalidation time and can serve stale content after a republish. - **WAF / rate limits** — proxies sometimes block API requests coming from your own site, breaking forms and any interactive feature. ## Can I re-enable the proxy later? Technically yes, once SSL is Active. But we don't recommend it. You'd need to: - Configure origin SSL matching on Cloudflare. - Manage the cache layering yourself. - Accept that form submissions and dynamic calls route through the proxy. Most customers leave records grey and let PageFork's edge do the job. ## The only valid CNAME target is `sites.pagefork.ai` PageFork routes custom domains through a SaaS-style custom-hostname pipeline keyed to `sites.pagefork.ai`. Don't CNAME to a different host (even another PageFork-looking subdomain) — it won't validate. Don't point an A record directly at the PageFork edge either. The only valid A record is the **redirect-service IP** shown in the app, and only when paired with a CNAME on `www`. See [DNS records reference](/docs/dns-records-reference/). ## Other proxies If you use Fastly, AWS CloudFront, StackPath, or similar in front of your domain for PageFork, the same advice applies: turn off proxying for the PageFork hosts. PageFork isn't designed to sit behind another CDN. ## How to tell if a proxy is in the way Run a DNS lookup from a terminal: ``` dig www.yourbrand.com +short ``` Expected result — a CNAME resolving to `sites.pagefork.ai.` and then PageFork-owned IPs: ``` sites.pagefork.ai. 104.21.x.x 172.67.x.x ``` If instead you see an IP range owned by Cloudflare without a `sites.pagefork.ai` line, Fastly, or another CDN in front of the record, the proxy is still in the way. ## Next - [Connecting your domain](/docs/connecting-your-domain/) - [DNS records reference](/docs/dns-records-reference/) - [Domain not verifying](/docs/domain-not-verifying/) --- # Connecting your domain Source: https://pagefork.ai/docs/connecting-your-domain/ Description: Attach your own domain to a PageFork site, with automatic SSL. Group: Domains **To connect a custom domain to PageFork, open your site's Domain sheet, add the domain, and create the two DNS records PageFork shows you. SSL is issued automatically once DNS resolves, usually within a few minutes.** Every PageFork site with an active hosting subscription supports custom domains with automatic SSL. The exact DNS records you need depend on whether you're pointing an apex (`yourbrand.com`), a subdomain (`www` or `launch`), or both. ## 1. Open the domain sheet In the editor, click **Domain** in the toolbar. The sheet shows: - Your free `*.pagefork.ai` subdomain. - A **Custom domain** section — this is where you add a domain you own. Custom domains require an **active hosting subscription** for this site. See [Hosting subscriptions](/docs/hosting-subscriptions/) if you haven't set one up yet. ## 2. Enter your domain Click **Add custom domain** and type the domain. You can enter: - A **subdomain**, e.g. `launch.yourbrand.com` or `app.yourbrand.com`. - The **www subdomain**, e.g. `www.yourbrand.com`. - An **apex**, e.g. `yourbrand.com` (no prefix). PageFork branches based on what you entered: - **Subdomain** that isn't `www` → skip to step 5 — you only need one record. - **`www.` subdomain** → PageFork asks whether the apex should also reach your site (step 3). - **Apex** → PageFork asks about your DNS provider's capabilities (step 4). ## 3. "Do you also want the apex to work?" (www only) When you type `www.yourbrand.com`, the UI asks whether `yourbrand.com` (the apex, no prefix) should also serve your site. - **No, www only** — one DNS record. Skip to step 5. - **Yes, include apex** — continue to step 4. ## 4. "Does your DNS provider support CNAME flattening or ALIAS records?" This step appears whenever an apex is involved (you entered an apex directly, or you said "include apex"). The answer depends on your registrar: - **Yes** — providers like **Cloudflare**, **DNSimple**, **Netlify DNS**, **Route 53**, and a few registrars support a CNAME or ALIAS at the apex. You'll add **one** record. - **No** — most traditional registrars (GoDaddy, Namecheap, many others). You'll add **two** records: a CNAME on `www` pointing at PageFork, plus an A record at the apex pointing at PageFork's **redirect service** (which 301-redirects the apex to `www`). If you're unsure, pick **No** — the two-record path works everywhere. ## 5. Copy the DNS records from PageFork After confirming your answers, PageFork shows the exact records to paste into your registrar. Each record has a copy button. What you'll see depends on the case: ### Case A — Subdomain (not www) One CNAME: | Type | Name | Target | |--|--|--| | `CNAME` | (your subdomain, e.g. `launch`) | `sites.pagefork.ai` | ### Case B — www only One CNAME: | Type | Name | Target | |--|--|--| | `CNAME` | `www` | `sites.pagefork.ai` | ### Case C — Apex with ALIAS / CNAME flattening One record at the apex: | Type | Name | Target | |--|--|--| | `CNAME` (flattened) *or* `ALIAS` | `@` (or blank) | `sites.pagefork.ai` | ### Case D — www + apex, without ALIAS / flattening Two records: | Type | Name | Target | |--|--|--| | `CNAME` | `www` | `sites.pagefork.ai` | | `A` | `@` | (redirect IP shown by PageFork) | The A record only routes traffic to PageFork's **redirect service** — all it does is 301-redirect the apex to `www`. It does not serve the site itself; the CNAME on `www` does. > The redirect IP shown in the app is authoritative — copy the value > from the UI, not from this page. ## 6. Wait for verification and SSL PageFork polls DNS automatically. Your domain moves through: - **Pending** — records haven't been seen yet. - **Validating** — records found; Let's Encrypt is issuing a certificate. - **Active** — HTTPS is live. - **Failed** — something went wrong; the error tells you what. Typical time: 1–10 minutes. Click **Refresh status** to poll immediately. ## Common issues - **"Domain already connected"** — the domain is attached to a different PageFork site. Remove it there first. See [Changing or removing a domain](/docs/changing-or-removing-a-domain/). - **Stuck on Pending for more than an hour** — see [Domain not verifying](/docs/domain-not-verifying/). - **Using Cloudflare?** — set the record's proxy toggle to the **grey cloud** (DNS only). See [Cloudflare and proxies](/docs/cloudflare-and-proxies/). ## Next - [Apex vs www](/docs/apex-vs-www/) - [DNS records reference](/docs/dns-records-reference/) - [SSL certificates](/docs/ssl-certificates/) --- # Cookie consent and privacy Source: https://pagefork.ai/docs/cookie-consent-and-privacy/ Description: Add a GDPR/CCPA-compliant cookie banner to your PageFork site and control how tracking scripts load. Group: Integrations If visitors from the EU, UK, or California can reach your site, most tracking scripts (GA4, Meta Pixel, chat widgets, session replay) need a **cookie-consent banner** before they run. PageFork doesn't ship a banner of its own — the right pattern is a small third-party consent manager. > This page is practical guidance, not legal advice. If compliance > matters for your business, consult a lawyer. ## Do I need a banner? **Probably yes**, if you add any of these: - Google Analytics, Hotjar, Clarity, PostHog (with session replay). - Meta Pixel, LinkedIn Insight, TikTok Pixel, Google Ads tags. - Chat widgets like Intercom, Drift, HubSpot Chat. - Embeds that load third-party cookies (YouTube default mode, many social embeds). **Probably no**, if your tracking is limited to: - Plausible, Fathom, Simple Analytics (cookieless by design). - Google Analytics with IP anonymization *and* regional restrictions (gray area — check current guidance for your region). - No tracking at all. ## Consent-manager options All of these ship as a **drop-in JavaScript snippet**. Paste into PageFork the same way as any other integration. ### CookieYes Free tier covers small sites. Supports GDPR, CCPA, LGPD. ``` Add CookieYes consent banner to every page. Site ID: abc123. ``` ### Cookiebot Enterprise-ready, auto-scans your site for cookies and classifies them. ``` Add Cookiebot to every page. CBID: abc-123-def. ``` ### Termly Good all-in-one (banner + privacy policy + terms generator). ``` Add Termly to every page. Website UUID: abc123. ``` ### Osano Mid-market, heavy on compliance features. ``` Add Osano consent banner. Site ID: abc-123. ``` ### Quantcast Choice IAB TCF 2 compliant; usually overkill for a small site. ### Klaro! Open-source, free, self-configured. ``` Add the Klaro! consent banner to every page. Manage these services: Google Analytics, Meta Pixel, Intercom. ``` ## How consent blocking works Most managers support two styles: - **Automatic blocking** — the manager's script is loaded first, and it intercepts and blocks other scripts until the visitor accepts. You mark your tracking scripts with a special `type` attribute (or add them via the manager's UI). - **Consent mode** — Google's standard. Scripts load but only send "allowed" pings. Works with GA4, Meta, Microsoft Clarity via their `consent` APIs. Tell the AI which one your manager uses: ``` Wire Cookiebot to automatically block GA4, Meta Pixel, and Intercom until the visitor accepts analytics and marketing cookies. ``` ``` Wire GA4 with Google Consent Mode v2, default denied, update when Cookiebot fires consent. ``` ## Categorization Consent managers group cookies into categories. A typical setup: - **Strictly necessary** — session, CSRF, consent state. Always on, no toggle. - **Functional** — language preference, theme. Optional. - **Analytics** — GA4, Plausible (if you treat it as analytics), Hotjar, Clarity. Gated. - **Marketing** — Meta Pixel, TikTok Pixel, ad retargeting. Gated. Your manager's dashboard is where you assign each script to a category. ## Privacy policy and terms A banner is only half the picture. You also need: - A **Privacy Policy** page describing what you collect and why. - A **Terms of Service** page (for most commercial sites). - A **Cookie Policy** (some jurisdictions require it separately from the Privacy Policy). Tools like **Termly**, **iubenda**, and **FreePrivacyPolicy.com** generate these. Paste the output into a PageFork page or link out to the vendor-hosted version. ``` Create a /privacy page with this policy text: (paste the generated policy here) ``` ## DNT (Do Not Track) and GPC Some regions require you to honor the **Global Privacy Control** signal (a browser-level header that says "I don't want to be tracked"). Most consent managers support GPC out of the box — enable it in their dashboard. ## Testing After adding a banner: 1. Open the published site in a **private/incognito** window so no existing consent is cached. 2. Verify the banner appears on first load. 3. Click **Reject all** — then check devtools → Network for pings to GA4, Meta, etc. There should be **none** (or only "default denied" consent pings). 4. Click **Accept all** — the pings should now fire. 5. Verify the consent persists across pages but resets after clearing cookies. ## Scripts the banner should never block Some things should always run — otherwise the site breaks: - **Your own form submission logic** (PageFork forms are first-party and essential). - **Payment-provider scripts on checkout pages** (Stripe, Paddle, etc.). - **Security / anti-abuse scripts** like reCAPTCHA when used for security rather than tracking. Put these in the "strictly necessary" category. ## Updating consent later Consent managers provide a small "cookie settings" link or floating icon that lets visitors change their mind. Add it to the footer: ``` Add a "Cookie settings" link in the footer that opens the Cookiebot preference center. ``` ## Related laws (very brief) - **GDPR** (EU/EEA, UK) — requires opt-in consent before non-essential cookies. Banners must offer an equally easy "reject" option. - **CCPA / CPRA** (California) — requires a "Do Not Sell or Share My Personal Information" link if you do any targeted advertising. - **LGPD** (Brazil) — similar to GDPR. - **ePrivacy Directive** — older EU law, still relevant, focused on cookies specifically. - **PECR** (UK) — similar to ePrivacy. When in doubt, pick the strictest applicable law and design for it. ## Next - [Analytics and tracking](/docs/analytics-and-tracking/) - [Chat and support widgets](/docs/chat-and-support-widgets/) - [Integrations overview](/docs/integrations-overview/) - [Launch checklist](/docs/launch-checklist/) --- # Core concepts Source: https://pagefork.ai/docs/core-concepts/ Description: The vocabulary of PageFork: sites, pages, versions, blocks, credits, and hosting. Group: Getting Started **PageFork's core concepts are sites (projects), pages (URLs), versions (snapshots of every edit), credits (the unit of AI work), and hosting subscriptions (per-site monthly or yearly plans). This page defines each one.** You don't have to memorise it — but if you read it once, every other doc will make more sense. ## Site A **site** is one project. It has its own editor, its own chat history, its own pages, and its own publish settings. You can have many sites under a single account. New sites show up in the sidebar under **Recent Sites**, and the full list lives under **All Sites**. ## Page A **page** is one URL within a site, e.g. `/`, `/pricing`, `/about`. A site can have one page or many. PageFork decides which pages to create based on your prompts — you can always add more by asking ("add a pricing page"). ## Version Every edit produces a new **version** of the site. Versions are what power [undo/redo](/docs/versions-undo-retry/) — you can roll back at any point without losing your chat history. The version shown in the preview is the current one; publishing freezes one specific version and serves it from the public URL. ## Block A **block** is any visible element on your page — a headline, a card, a button, a pricing row, a footer link. Blocks are what you point at when you want to change "this specific thing" instead of the whole section. See [Selecting blocks](/docs/selecting-blocks/) for how to reference them in chat. ## Chat message The editor has two kinds of messages: - **Edit** — PageFork generates a new version of the site. - **Discuss** — PageFork answers a question or brainstorms with you, but doesn't change the site. Both consume credits, but Discuss is usually cheaper. See [Edit vs Discuss](/docs/edit-vs-discuss/). ## Credit A **credit** is the unit of AI usage. Each generation, edit, retry, or discuss message consumes credits based on how much the AI has to think and write. You buy credits in packs. See [Credits explained](/docs/credits-explained/). ## Hosting subscription A **hosting subscription** is what puts a site on the internet. One subscription covers one site, billed monthly or yearly. Without an active subscription for a site, you can still edit and preview it — you just can't publish it to a live URL. See [Hosting subscriptions](/docs/hosting-subscriptions/). ## Subdomain Every site gets a free `*.pagefork.ai` **subdomain** as soon as it's published (e.g. `acme.pagefork.ai`). You can change the subdomain label at any time. See [Your PageFork subdomain](/docs/your-pagefork-subdomain/). ## Custom domain A **custom domain** is a domain you own (like `acme.com`) that you point at your PageFork site. It requires an active hosting subscription and a quick DNS setup. SSL is automatic. See [Connecting your domain](/docs/connecting-your-domain/). ## The lifecycle, visually ``` prompt/template │ ▼ version 1 ──edit──▶ version 2 ──edit──▶ version 3 … │ ▼ publish live at acme.pagefork.ai (or acme.com) ``` Every edit creates a new version. Publishing snapshots one version and serves it. Editing after publishing creates new versions without affecting the live site — until you publish again. --- # Credits explained Source: https://pagefork.ai/docs/credits-explained/ Description: How AI credits work in PageFork and what each action costs. Group: Billing A **credit** is the unit of AI usage in PageFork. Every time you ask the AI to do something, credits are deducted from your balance. Credits are separate from hosting — you can pile up credits without paying for hosting, and vice versa. ## What costs credits Anything that runs the AI: - **Generating a new site.** - **Editing an existing site** (each Edit message). - **Discussing** with PageFork about a site (each Discuss message — usually cheaper than Edit). - **Retrying** a failed generation. Things that **don't** cost credits: - Opening the editor. - Using Undo / Redo. - Switching preview devices or pages. - Publishing or unpublishing. - Viewing submissions, downloading CSVs, updating your profile. ## How pricing is calculated Cost is based on how much work the AI does — specifically, the number of tokens read and written. Tokens are a measure of text the AI processes. For reference: - A short discuss message might be under 1 credit. - A typical edit on a small site might be 1–3 credits. - A full site generation from a prompt might be 5–20 credits depending on complexity. - A large rewrite across many pages can be higher. A minimum charge of 1 credit applies to any action that runs the AI, even a trivial one. ## Seeing your balance Your credit balance is shown: - On the **Billing** page (→ Credits tab). - Inside the chat composer when balance runs low. When you hit 0 credits, you'll see an **Out of credits** banner in chat and a modal when generating from the homepage. ## Rolling over Credits **do not expire** and roll over month to month. Buy in advance with confidence. ## Refunds We don't offer refunds for used credits, but we do for failed generations that consumed credits — those are automatically credited back. ## Next - [Purchasing credits](/docs/purchasing-credits/) - [Saving credits](/docs/saving-credits/) - [Hosting subscriptions](/docs/hosting-subscriptions/) - [Insufficient credits](/docs/insufficient-credits/) --- # CSV export Source: https://pagefork.ai/docs/csv-export/ Description: Download all submissions for a form as a CSV. Group: Forms If you want to move submissions into a spreadsheet, a CRM, or an email tool, use **CSV export**. ## How to export 1. Go to **Submissions** in the sidebar. 2. Pick a **site** and a specific **form** in the filters. 3. Click **Export CSV** top-right. A `.csv` file downloads immediately containing every submission for that form, including historic ones. > Export requires both a site **and** a form to be selected. Without a > form filter, there's no single column shape to export. ## What's in the file - One row per submission. - One column per field defined in the form's schema (in schema order). - Any extra fields that showed up in submissions but aren't in the schema, appended after the known fields. - Metadata columns: submission timestamp, read state. Values are quoted where needed to preserve commas, newlines, and quotes. ## Using the CSV elsewhere - **Google Sheets** — `File → Import → Upload`. Pick "Comma" as the separator. - **Excel** — open directly, or use `Data → From Text/CSV` for better control over column types (especially dates). - **Airtable** — create a new table and import the CSV. - **CRMs** — most (HubSpot, Pipedrive, Close) accept CSV import with column mapping. ## Exporting repeatedly Each export is a **full** snapshot of all submissions for that form. If you export weekly, you'll get overlapping data each time. Downstream tools should dedupe by the submission ID column or by timestamp + email. ## Character encoding CSVs are UTF-8. If your tool opens the file with the wrong encoding (common in older Excel on Windows), re-import using `Data → From Text/CSV` and pick UTF-8. ## Next - [Submissions inbox](/docs/submissions-inbox/) - [Form field schemas](/docs/form-field-schemas/) --- # Dashboard tour Source: https://pagefork.ai/docs/dashboard-tour/ Description: Find your way around the sidebar, Recent Sites, and All Sites. Group: Getting Started Once you're signed in, the left sidebar is your home base. Here's what each section does. ## The sidebar - **PageFork logo (top)** — returns to the homepage where you create a new site. - **Recent Sites** — collapsible list of the sites you've worked on most recently. Click one to open its editor. - **All Sites** — a full, paginated view of every site in your account. - **Forms → Submissions** — the inbox for form submissions across all your sites. An unread count appears as a badge here when new submissions arrive. - **Account menu (bottom)** — your profile, billing, support email, theme switcher, and sign-out. ## All Sites The All Sites page has two tabs: - **Active** — sites you're currently working on. - **Archived** — sites you've put aside. Each card shows the site name, a thumbnail, and a **Published** indicator if the site is currently live. The **⋯ menu** on each card exposes: - **View Submissions** — jumps to the submissions inbox pre-filtered by this site (only visible if the site is published). - **Archive** — move this site to the Archived tab. Available only when the site is **not published** and has **no active hosting subscription**. - **Unarchive** — move an archived site back to Active. > Archiving doesn't delete the site or the chat history. It just tidies up > the Active list. ## Theme The theme switcher (inside the account menu) offers **Light**, **Dark**, or **System**. Your choice applies to the dashboard only — your published sites keep whatever styling you prompted for. ## Support Inside the account menu, clicking the support email copies it to your clipboard and opens a `mailto:` compose window. Always include the site URL (or subdomain) in your support email — it helps us respond faster. ## Next - [Editing with AI](/docs/editing-with-ai/) - [The editor interface](/docs/the-editor-interface/) --- # Deleting your account Source: https://pagefork.ai/docs/deleting-your-account/ Description: How to fully remove your PageFork account and everything in it. Group: Account If you're leaving PageFork for good, you can delete your account yourself — as long as you don't have any active subscriptions. ## Before you delete Deletion is permanent. We recommend doing each of these first: 1. **Export anything you need.** [Export form submissions to CSV](/docs/csv-export/) for each site you want to keep records of. 2. **Unpublish published sites.** See [Unpublishing](/docs/unpublishing/). This is strictly optional — deletion will take them down anyway — but it's cleaner. 3. **Cancel every active subscription.** See [Managing billing in Stripe](/docs/managing-billing-in-stripe/). Active subs block deletion. 4. **Remove DNS records** at your registrar for any custom domains that point at PageFork. Domains keep their DNS bindings until you clean them up. ## Where to delete 1. Open **Account** from the sidebar → user menu. 2. Scroll to the **Danger zone**. 3. Click **Delete account**. 4. Confirm in the dialog. 5. You're signed out immediately. If you have active subscriptions, the Delete button is disabled with an explanation. Cancel the subs first. ## What gets deleted - Your profile and authentication credentials. - All your sites (chat history, versions, drafts, published copies). - All form submissions you've received. - All files you've uploaded. ## What's kept - **Invoices and payment records** required by law for accounting (we retain them per legal requirements). - **Anonymised product analytics** (e.g. "a user generated a site" with no personal data). ## Timing - **Immediate.** Your account is unusable within seconds. - **Data purge**: your data is removed from primary storage right away and from backups within our normal backup retention window. ## If deletion fails Most commonly: an active subscription the system didn't expect. The error message names the blocker. Fix it, then retry. If you're stuck, contact support. ## Next - [Managing billing in Stripe](/docs/managing-billing-in-stripe/) - [Unpublishing](/docs/unpublishing/) - [CSV export](/docs/csv-export/) --- # Designing for conversion Source: https://pagefork.ai/docs/designing-for-conversion/ Description: Prompt patterns that produce sites that actually convert. Group: Best Practices A pretty site that nobody acts on is a failed site. These are prompt patterns that bias PageFork toward output that converts — landing pages that sign people up, portfolios that book calls, local sites that fill slots. ## 1. Make the hero earn its space The hero is the first thing visitors see and most of them won't scroll. Prompt for: - A **clear headline** — what, for whom, and why they should care. Under 10 words. - A **one-sentence sub-headline** — the concrete benefit. - **One primary CTA.** Not two. One. - A **visual** that matches the subject, not a stock abstraction. Example prompt: > "Rewrite the hero. Headline under 8 words, says exactly what we do for > whom. Sub-headline one sentence with a concrete benefit. One CTA, > label it 'Start free'. No secondary CTA." ## 2. One CTA per section, repeated Every major section should have **one** CTA, and they should mostly point to the same destination. Decision fatigue kills conversion. Prompt: "Every section should have one CTA. Use the same label and destination ('Start free' → /signup) everywhere except the pricing section, which uses 'Pick a plan'." ## 3. Social proof where decisions happen Place testimonials, logos, and case studies **just before** the conversion moment — near the CTA, not on a separate page: - Below the hero. - Next to the pricing table. - Inside the form section. Prompt: "Add a single-line row of three customer logos under the hero, and a two-column testimonial next to the pricing grid." ## 4. Short forms convert better Every field is a friction point. Ask PageFork for the minimum: - For a newsletter: **email only**. - For a demo request: **email, name, company** — three fields. - For a contact: **email, message** — two fields. If you need more data, collect it after conversion, not before. ## 5. Specific copy beats clever copy "Book a 15-minute call" converts better than "Let's chat". Prompt for specificity: > "Replace the abstract CTA copy with concrete commitments: how long, > what happens next, what the user gets." ## 6. Typography hierarchy A page with three font sizes feels amateurish. A page with seven looks like a random walk. Aim for **four**: - H1 (hero headline). - H2 (section headlines). - Body. - Small / metadata. Prompt: "Tighten the typography hierarchy to exactly four sizes. Aggressive contrast between H1 and body; H2 just slightly larger than body." ## 7. Remove, don't add Every extra section dilutes the one the user actually needs to read. Prompt: "Remove the features section and the 'how it works' diagram — the hero and pricing already cover them." ## Anti-patterns - Three CTAs in the hero ("Sign up", "Learn more", "Watch video"). - A 10-field contact form for a newsletter. - Stock photos of people pointing at laptops. - "Innovative, scalable, best-in-class" copy. - Testimonials with no names or photos. ## Next - [Writing great prompts](/docs/writing-great-prompts/) - [Launch checklist](/docs/launch-checklist/) --- # DNS records reference Source: https://pagefork.ai/docs/dns-records-reference/ Description: Copy-paste DNS records for connecting a custom domain to PageFork. Group: Domains When you connect a custom domain, PageFork shows the exact records to add — use those. This page is a reference for planning ahead or when your registrar's UI doesn't line up with the PageFork flow. > The values in the PageFork domain sheet are authoritative. If they > differ from this page, use what the app shows you (especially the > redirect IP in Case D). ## The target host Every CNAME record for PageFork points at the same host: ``` sites.pagefork.ai ``` That's the only valid CNAME target. PageFork's edge handles routing, caching, and SSL for every domain that CNAMEs here. ## Case A — Subdomain (not www) One CNAME on the subdomain: | Type | Name | Target | TTL | |--|--|--|--| | `CNAME` | (e.g. `launch`, `go`, `app`) | `sites.pagefork.ai` | Auto / 300 | The simplest setup and the one we recommend for campaign pages or sub-brands. ## Case B — www only (no apex) One CNAME on `www`: | Type | Name | Target | TTL | |--|--|--|--| | `CNAME` | `www` | `sites.pagefork.ai` | Auto / 300 | Visitors who type the bare apex (`yourbrand.com`) will hit whatever the apex currently serves — often a registrar parking page or another app. If you want both to work, see Case C or Case D. ## Case C — Apex with ALIAS / CNAME flattening Available on **Cloudflare**, **DNSimple**, **Netlify DNS**, **Route 53**, and a few registrars. One record at the apex does the whole job: | Type | Name | Target | TTL | |--|--|--|--| | `ALIAS` *or* `CNAME` (flattened) | `@` (or blank) | `sites.pagefork.ai` | Auto / 300 | The cleanest option when your provider supports it. ## Case D — www + apex, without ALIAS / flattening The fallback for registrars that only support classic A / CNAME. **Two** records, both required: | Type | Name | Target | TTL | |--|--|--|--| | `CNAME` | `www` | `sites.pagefork.ai` | Auto / 300 | | `A` | `@` | (redirect IP shown in the PageFork app) | Auto / 300 | Important details: - The A record **doesn't serve your site**. It points at PageFork's tiny redirect service, which 301-redirects the apex to `www`. Your site is served from the `www` CNAME. - The A record is only valid **paired with** the `www` CNAME. An A record without a matching `www` CNAME won't verify. > There is no A record that points directly at PageFork's site edge. > CNAME to `sites.pagefork.ai` is the only way for a record to serve > your site. ## What TTL should I use? Any low value works — 300 seconds (5 minutes) or your provider's **Auto** setting is fine. Avoid 24h+ TTLs while you're setting things up; long TTLs make DNS issues painful to debug. ## Verifying the records In PageFork, your domain moves through these states: - **Pending** — records haven't been seen yet. - **Validating** — records found; SSL is being provisioned. - **Active** — live over HTTPS. - **Failed** — the error message says what's wrong. Click **Refresh status** any time to force a recheck. ## Common gotchas - **Proxied records** (Cloudflare's orange cloud, other CDNs). Must be **off** for every PageFork record — the CNAME, the apex redirect A, the ALIAS. See [Cloudflare and proxies](/docs/cloudflare-and-proxies/). - **Existing A records at `@`** from a previous host. Remove them before adding PageFork's records; stale A records shadow the redirect setup. - **AAAA records at `@` or `www`** pointing elsewhere. Remove them, or they'll be preferred on IPv6 and skip PageFork entirely. - **Wildcard records** (`*` → something). You *don't* need to remove or change these. Two reasons: - In standard DNS, `*` **does not match the apex** (`@`). A `* A 1.2.3.4` record answers for `anything.yourbrand.com` but never for `yourbrand.com` itself, so it doesn't conflict with the Case D apex A record you add for the PageFork redirect. - Specific records always win over `*` anyway. Your `www` CNAME to `sites.pagefork.ai` takes precedence over a `* CNAME` pointing somewhere else. Just know that any subdomain you *haven't* explicitly configured will still fall through to the wildcard's target. - **TXT records for email** (SPF, DKIM, DMARC). Leave them alone — PageFork doesn't touch them. ## Next - [Connecting your domain](/docs/connecting-your-domain/) - [Apex vs www](/docs/apex-vs-www/) - [Domain not verifying](/docs/domain-not-verifying/) --- # Domain not verifying Source: https://pagefork.ai/docs/domain-not-verifying/ Description: Custom domain stuck on Pending or Validating? Here's what to check. Group: Troubleshooting If a custom domain hasn't reached the **Active** status after 30 minutes, something in DNS is off. Work down this list. ## 1. Confirm the records match what PageFork shows Open **Domain** settings and compare the records PageFork lists with what's actually in your DNS. The most common mistakes: - **Wrong target host.** CNAMEs must point at `sites.pagefork.ai` exactly. Anything else fails validation. - **Wrong record type.** Using a CNAME where you need an A record (the apex-redirect case) or vice versa. See [DNS records reference](/docs/dns-records-reference/). - **Wrong host name.** E.g. adding records on `www` when you only connected `launch`. - **Missing second record.** For the www + apex case without flattening, you need **both** the `www` CNAME and the apex A record. Either alone won't validate. ## 2. Check for proxies If you use **Cloudflare** (or another CDN in front of your DNS), the proxy toggle must be **off** — the **grey cloud**, not the orange cloud. See [Cloudflare and proxies](/docs/cloudflare-and-proxies/). ## 3. Check DNS propagation From a terminal: ``` dig www.yourbrand.com +short dig yourbrand.com +short ``` Expected, per case: - **Subdomain / www CNAME**: `sites.pagefork.ai.` followed by PageFork-owned IPs. - **Apex with ALIAS / flattened CNAME**: PageFork-owned IPs (flattening hides the `sites.pagefork.ai` line). - **Apex with redirect A record (Case D)**: the redirect-service IP shown in the PageFork UI. Nothing else. If instead you see: - **Empty result** — records not saved, or TTL still expiring on your resolver. Wait 5–10 minutes. - **A Cloudflare / Fastly / other proxy IP** — proxy is still enabled. - **A different IP** — wrong record value. Update it. - **Old hosting provider's IP** — stale A record at apex. Delete it before PageFork's records can take over. ## 4. "Domain already connected" You'll see this error when adding a domain that's already attached to a different PageFork site. 1. Find the other site (All Sites → search). 2. Open its Domain settings. 3. **Remove** the domain there. 4. Go back to the new site and add it again. See [Changing or removing a domain](/docs/changing-or-removing-a-domain/). ## 5. Wrong apex configuration If you're trying to connect an apex (`yourbrand.com` with no `www`) and your registrar **doesn't** support ALIAS / CNAME flattening, there's no apex-only path — PageFork uses the `www` + redirect pattern instead. When adding the domain, enter `www.yourbrand.com` and choose **Include apex**; then add both the `www` CNAME **and** the apex A record from the domain sheet. If your registrar supports flattening and you used the one-record path, make sure the apex record is genuinely an ALIAS or flattened CNAME and not a regular A record. See [Apex vs www](/docs/apex-vs-www/). ## 6. TTL is too high If you previously had a record with a 24h TTL, your resolver may still be caching it. Options: - Wait it out. - Flush your local DNS cache (`sudo dscacheutil -flushcache` on macOS). - Test from a different network / DNS resolver (e.g. switch to 1.1.1.1). ## 7. It's been an hour, still Pending Click **Refresh status** one more time. If it's still Pending, contact support with: - The domain. - A screenshot of your DNS records. - The output of `dig` on both the apex and `www`. ## Next - [Connecting your domain](/docs/connecting-your-domain/) - [DNS records reference](/docs/dns-records-reference/) - [Cloudflare and proxies](/docs/cloudflare-and-proxies/) - [SSL not issuing](/docs/ssl-not-issuing/) --- # Edit vs Discuss Source: https://pagefork.ai/docs/edit-vs-discuss/ Description: When to ask PageFork to change your site, and when to just talk. Group: Editing The composer has two modes: **Edit** (the default) and **Discuss**. They look the same, but they do very different things. ## Edit In **Edit** mode, PageFork treats your message as an instruction to change the site. It will: - Read the relevant pages of your site. - Plan the change. - Write updated code. - Produce a new version that appears in the preview. Every Edit message creates a new version. Undo rolls it back without losing your chat history. Use Edit when you know what you want changed: - "Make the hero darker." - "Add a three-column feature section below the hero." - "Rewrite the CTA on the pricing page." ## Discuss In **Discuss** mode, PageFork answers questions and brainstorms with you without touching the site. It can: - Explain what's on your site. - Suggest what to try next. - Help you decide between two approaches. - Rewrite copy in chat for you to review before committing. No version is created. The preview doesn't change. Use Discuss when you're thinking, not yet deciding: - "What sections does my homepage have?" - "Give me three headline options for the hero." - "Would a FAQ or a comparison table be better here?" ## Credits Both modes consume [credits](/docs/credits-explained/), but Discuss is usually cheaper because it doesn't rewrite your site — it just reads and responds. When you're exploring ideas, Discuss is the efficient mode. ## Switching modes Below the composer you'll see an **Edit / Discuss** toggle. It sticks for the current session, so if you switch to Discuss to brainstorm, remember to switch back to Edit when you're ready to make changes. ## Which should I use? | Situation | Use | |--|--| | Clear, specific change | **Edit** | | Generate options to choose from | **Discuss** | | "What should I do about X?" | **Discuss** | | Apply the option you just picked | **Edit** | | Fixing a small issue | **Edit** | | Exploring a big structural change | **Discuss** first, then **Edit** | ## Next - [Saving credits](/docs/saving-credits/) - [Writing great prompts](/docs/writing-great-prompts/) --- # Editing with AI Source: https://pagefork.ai/docs/editing-with-ai/ Description: Get the most out of PageFork by writing clear, targeted edit prompts. Group: Editing **To edit a PageFork site, type a plain-English instruction in the chat. The best edit prompts name three things: the target (which section), the change (what to do), and an optional constraint (tone, style, length). Smaller edits, one change at a time, produce the best results.** PageFork is conversational by design. The better your prompt, the better your result. Here are patterns that consistently produce great edits. ## Anatomy of a great edit A strong edit prompt usually names three things: 1. **Target** — which section or element you want changed. 2. **Change** — what you want to do to it. 3. **Constraint** — optional tone, style, length, or layout requirements. ### Examples - **Target + change + constraint**: "In the hero, replace the headline with something under 8 words and confident." - **Copy rewrite**: "Rewrite the 'About' section to feel more personal and first-person." - **Layout change**: "Move the pricing section directly after the hero." - **Style shift**: "Make the whole page darker and more editorial, keep the lime accent." ## Iteration mindset Don't try to fix everything in one prompt. Short, surgical edits work best: 1. Generate → review 2. Fix the single biggest thing wrong 3. Repeat This is both faster and gives you much better results than a giant "change everything" prompt. ## When to reference - **Brand reference**: "Match the tone of brand X" (include a URL if public). - **Structural reference**: "Use a hero similar to Stripe's docs landing." - **Image reference**: attach a screenshot of the look you want. --- # Email notifications Source: https://pagefork.ai/docs/email-notifications/ Description: Get an email for every form submission you receive. Group: Forms Every time someone submits a form on your PageFork site, you get an email. No configuration needed — it just works. ## Where the email goes To the **email address on your PageFork account**. If that's not the best address for lead notifications (e.g. you want them going to a shared sales inbox), update your account email — see [Your profile](/docs/your-profile/). ## What the email contains - Which site received the submission. - Which form was submitted. - Every field value submitted, in a clean table. - A link straight to that submission in the [Submissions inbox](/docs/submissions-inbox/). - The submitter's IP address, for spam/legitimacy checks. ## Not receiving emails? First, check your spam folder. Notification emails come from a PageFork domain; some strict filters will misroute the first few until your mail client learns they're legitimate. Add the sender to your contacts. If submissions are visible in the inbox but you never got the email, see [Forms not receiving](/docs/forms-not-receiving/) for more checks. ## Can I turn off emails per form? Not yet — every form notifies you. If you run a high-volume form and want to mute it, a common pattern is to set up a mail-client rule: auto-archive anything from PageFork that contains a specific form name. Your inbox stays tidy and the Submissions page still shows everything. ## Forwarding to a team If multiple people should see the same submissions, the simplest setup is to make your account email a mailing list (e.g. `leads@yourbrand.com`) that fans out. Alternatively, set up a mail-client rule to forward all PageFork emails to your team. ## Next - [Forms overview](/docs/forms-overview/) - [Submissions inbox](/docs/submissions-inbox/) - [Forms not receiving](/docs/forms-not-receiving/) --- # Embeds and iframes Source: https://pagefork.ai/docs/embeds-and-iframes/ Description: Embed videos, maps, calendars, forms, prototypes, and other widgets on your PageFork site. Group: Integrations Most third-party services give you an **embed code** — usually an `