Skip to content

Stork Wire · install help

The /news install.
Every platform, one rule.

Your Stork Wire paper is served by a single server-side rewrite: requests to /news on your domain proxy to our origin. Installing for the first time, or reinstalling after a server rebuild dropped the rule — either way, everything you need is on this page.

The rule, in words

Proxy /news and /news/* to https://www.stork.ai/wire/YOUR-KEY. It must be a proxy that returns 200 — a 301/302 redirect sends your readers and crawlers to stork.ai instead of serving under your domain, which defeats the point, and our install check will fail on it. Both paths matter: on every engine the /* splat does not match the bare /news, and a paper whose index works but whose articles 404 reads as broken.

YOUR-KEY is your paper's key — the part after /wire/ on your install card. Your console shows every snippet below with the key already filled in, next to a Verify button.

The same rule on your stack

Pick your platform, replace YOUR-KEY

Next.js/Vercel

// next.config.js -> rewrites()
{ source: "/news",        destination: "https://www.stork.ai/wire/YOUR-KEY" },
{ source: "/news/:path*", destination: "https://www.stork.ai/wire/YOUR-KEY/:path*" }

Netlify

# netlify.toml - status 200 proxies; 301 would break it
[[redirects]]
  from = "/news"
  to = "https://www.stork.ai/wire/YOUR-KEY"
  status = 200
  force = true

[[redirects]]
  from = "/news/*"
  to = "https://www.stork.ai/wire/YOUR-KEY/:splat"
  status = 200
  force = true

Cloudflare

// Cloudflare Worker (Workers Routes: yourdomain.com/news*)
export default {
  async fetch(request) {
    const url = new URL(request.url);
    const rest = url.pathname.replace(/^\/news/, "");
    return fetch("https://www.stork.ai/wire/YOUR-KEY" + rest + url.search, request);
  },
};

nginx

# nginx - inside your server { } block. proxy_pass, never return 301.
location = /news {
  proxy_pass https://www.stork.ai/wire/YOUR-KEY;
  proxy_set_header Host www.stork.ai;
}
location /news/ {
  proxy_pass https://www.stork.ai/wire/YOUR-KEY/;
  proxy_set_header Host www.stork.ai;
}

Apache

# Apache / LiteSpeed - .htaccess or vhost. Needs mod_proxy + mod_proxy_http.
SSLProxyEngine On
ProxyPass        /news/ https://www.stork.ai/wire/YOUR-KEY/
ProxyPassReverse /news/ https://www.stork.ai/wire/YOUR-KEY/
ProxyPass        /news  https://www.stork.ai/wire/YOUR-KEY
ProxyPassReverse /news  https://www.stork.ai/wire/YOUR-KEY

Caddy

# Caddyfile - inside your site block
handle /news* {
  rewrite * /wire/YOUR-KEY{uri.path.strip_prefix./news}
  reverse_proxy https://www.stork.ai {
    header_up Host www.stork.ai
  }
}

Another stack? Express, Remix, SvelteKit, Astro, Plesk — same two paths, proxied server-side, status 200, using whatever your project already uses for proxying. Site builders that can't proxy at all (Webflow, Framer, Squarespace, Wix, Carrd, GitHub Pages) can front the domain with free Cloudflare and use the Worker above — the firewall guide walks through it.

Rather not touch config by hand?

Paste this into your coding agent

This is the full install prompt — it picks the right form for your stack, adds the sitemap line and a nav link, deploys, and verifies the result. Swap YOUR-KEY for your key and yoursite.com for your domain before pasting (or copy it pre-filled from your console).

Serve /news on this site from Stork Wire.

1. Add a server-side rewrite for /news and /news/*. It must PROXY (return 200),
   not redirect - a 301/302 sends visitors and crawlers to stork.ai instead of
   serving under this domain, which defeats the entire point, and our install
   check will fail. Work out which host this project deploys to and use the
   matching form:

   Next.js / Vercel - next.config.js rewrites() (or vercel.json):
   { source: "/news", destination: "https://www.stork.ai/wire/YOUR-KEY" }
   { source: "/news/:path*", destination: "https://www.stork.ai/wire/YOUR-KEY/:path*" }

   Netlify - netlify.toml (or _redirects). BOTH rules are required: the /*
   splat does not match the bare /news.
   [[redirects]]
     from = "/news"
     to = "https://www.stork.ai/wire/YOUR-KEY"
     status = 200
     force = true
   [[redirects]]
     from = "/news/*"
     to = "https://www.stork.ai/wire/YOUR-KEY/:splat"
     status = 200
     force = true

   _redirects equivalent, if the project already uses that file:
   /news      https://www.stork.ai/wire/YOUR-KEY         200!
   /news/*    https://www.stork.ai/wire/YOUR-KEY/:splat  200!

   Cloudflare - a Worker on route yourdomain.com/news* :
   export default { async fetch(request) {
     const url = new URL(request.url);
     const rest = url.pathname.replace(/^\/news/, "");
     return fetch("https://www.stork.ai/wire/YOUR-KEY" + rest + url.search, request);
   } };

   nginx - in the server { } block:
   location = /news { proxy_pass https://www.stork.ai/wire/YOUR-KEY; proxy_set_header Host www.stork.ai; }
   location /news/ { proxy_pass https://www.stork.ai/wire/YOUR-KEY/; proxy_set_header Host www.stork.ai; }

   Apache / LiteSpeed - .htaccess or vhost, needs mod_proxy + mod_proxy_http:
   SSLProxyEngine On
   ProxyPass        /news/ https://www.stork.ai/wire/YOUR-KEY/
   ProxyPassReverse /news/ https://www.stork.ai/wire/YOUR-KEY/
   ProxyPass        /news  https://www.stork.ai/wire/YOUR-KEY
   ProxyPassReverse /news  https://www.stork.ai/wire/YOUR-KEY

   Caddy - in the site block:
   handle /news* {
     rewrite * /wire/YOUR-KEY{uri.path.strip_prefix./news}
     reverse_proxy https://www.stork.ai { header_up Host www.stork.ai }
   }

   Anything else (Express, Remix, SvelteKit, Astro, Caddy behind something
   else): same two paths, proxied server-side, status 200. Use whatever this
   project's stack already uses for proxying.

2. If robots.txt lists sitemaps, add: Sitemap: https://yoursite.com/news/sitemap.xml
3. Link to it from the site itself: add a "News" item pointing at /news to the
   main nav or footer, matching the site's existing style. Without an internal
   link the page is an orphan - crawlers reach it late and it inherits none of
   the site's authority.
4. Deploy, then confirm https://yoursite.com/news returns a page containing "stork-wire:".
5. If that check returns HTTP 429/403 with a bot challenge (it will for curl AND
   headless browsers), the site's firewall (Vercel Bot Protection, Cloudflare) is
   challenging non-browser clients. Don't try to work around it from code - it's a
   dashboard setting. Tell the human to add a firewall bypass rule for paths
   starting with /news, then re-check. Step-by-step guide for them:
   https://www.stork.ai/stork-wire/firewall

After you deploy

Two checks and you're live

From any terminal: curl -s https://yoursite.com/news | grep stork-wire — a match means the proxy is serving your paper. Then hit Verify in your console; articles and citations resume on their own once it passes.

Seeing 429 or 403 instead? Your site's bot protection is challenging non-browser clients, ours included. That's a two-minute scoped exception — the firewall guide shows exactly where it lives on Vercel and Cloudflare.

Open your console → get your key

Stuck on anything here? support@stork.ai — a person reads these. New here? What Stork Wire is →