Nucleus logonucleus
‹ All use cases
Flatten · translated SEO cache

Translated pages that crawlers see as they are today.

Flatten serves search engines and AI crawlers a ready-made copy of every translated page. That copy is only useful while it matches the live site. This is the same cache on two sites at one moment: one kept fresh by Nucleus and Dispatch, the other by a cron job an engineer set up. It's also a product gap that the field team filled and tested on real customers before the product team had to commit to anything.

Current99.84% Requeuehourly Model calls0 Cost / run$0
Nucleus + Dispatch
99.84%current · 20,694 of 20,728 URLs
only 34 stalelast flattened: within hours
Hand-built cron job
23.8%current · 2,014 of 8,474 URLs
6,460 staleoldest render: 7 months ago
01

What Flatten does for a translated site

GlobalLink Web translates a customer's website into every language they sell in. A person's browser gets the translation as the page loads. Crawlers are another matter: many search and AI crawlers read the HTML and leave without running the page's scripts, so they would see the untranslated original.

Without Flatten

A crawler requests the German page.

  • it gets the source HTML, with the translation still to be applied
  • it doesn't run the script that applies it
  • it indexes English text on a German URL
  • so the translated site barely exists in German search

✓ With Flatten

The translation has already been rendered.

  • each translated URL is rendered once, ahead of time
  • the finished HTML is cached, already in German
  • crawlers are served that cached copy instantly
  • search and AI answers show the page in German
uncachedRegistered

The URL is known to the cache but hasn't been rendered yet.

queuedWaiting to render

Lined up for the renderer. URLs don't move here on their own.

cachedCurrent

Crawlers get a translation of the page as it is now.

staleOut of date

The source page changed after it was rendered, so crawlers still get the old version.

The platform detects when a source page changes and marks its cached copies stale. It does not re-render them by itself. Something has to move them back into the queue, and new pages have to be registered before they can be rendered at all. Every customer needs someone or something doing that, indefinitely. This page is about who or what does it.
02

What a stale cache costs the customer

A stale page doesn't look broken. It serves the last translation it rendered, so nobody notices until a customer searches in German and finds last season's catalog.

Wrong facts

Old prices, old products

A retired product, last quarter's price or a superseded policy stays indexed in every language, and it lasts as long as the cache stays stale, not just until the next crawl.

Missing pages

New pages that never appear

A page that was never registered is never rendered, so the launch page or the new product line has no translated presence in search at all.

AI answers

Assistants quote the old page

AI crawlers read the same cached copy, so answers about the brand in other languages are built from content the customer has already replaced.

Shopping & Merchant Center

Where a stale page costs you a market

An online store sends Google Merchant Center a product feed for each country, with price and availability. Google then crawls each product's landing page and checks that the page matches the feed. On a translated store, the crawler doing that check gets the Flatten copy.

If that copy is stale, the German page still shows last season's price or says a restocked item is sold out. The product gets disapproved for price or availability mismatch, and it drops out of Shopping ads and free listings in Germany. That's the market the translation was supposed to win.

If automatic item updates are turned on, the result can be worse: Google may rewrite the listing to match what it crawled, and show shoppers the stale price. Persistent mismatches can also put the whole Merchant Center account at risk.

Product feed · DE Travel mat, black 79,00 €In stock
≠
Landing page Google crawled · rendered 7 months ago Reisematte, schwarz 89,00 €Ausverkauft
Disapproved · price mismatch, availability mismatch · Germany
With the cache current, the crawler sees today's page, the feed matches, and the listing stays live.
03

Two caches, one moment, filtered to stale

Both views come from the product's own Flattening screen with the state filter set to stale. Hostnames and paths below are replaced with invented ones in the same shape, and the counts and ages are as recorded.

Enterprise software site

34 of 20,728 URLs
Six locale domains · maintained by Nucleus + Dispatch
URLLast flattenedState
kr.example.com/events10 hours agoStale
kr.example.com/partners/program8 hours agoStale
www.example.de/learning/certslast hourStale
www.example.de/legal/addendum7 hours agoStale
www.example.es/events10 hours agoStale
… 29 morehours, not months

Apparel e-commerce site

6,460 of 8,474 URLs
Product catalog · maintained by a hand-built cron job
URLLast flattenedState
www.example-shop.com/3 months agoStale
…/de-de/products/travel-mat-black7 months agoStale
…/de-de/products/trucker-hat-white7 months agoStale
…/de-de/products/mat-towel-espresso7 months agoStale
…/de-de/products/headband-red7 months agoStale
… 6,455 moremostly months

Point-in-time snapshot. The stale count on a healthy cache rises and falls through the day as the site changes and the hourly requeue catches up.

The healthy cache is bigger, spread over more domains and changes every day, and it is still almost entirely current. The stale pages it does have are stale by hours, because the next hourly run will requeue them. On the other site three out of four pages are stale, and the renders are measured in months. Seven months is long enough for a product catalog to have changed completely.
04

Three workflows, two clocks, no model

Keeping the cache fresh comes down to two jobs, and they have different costs. One finds pages that are new or changed by reading the customer's sitemaps, which is the slow part. The other requeues whatever the platform has already marked stale, which takes one call. Each runs on its own schedule, and a third workflow reports on both.

Requeue what's already stale

every hour

A single call moves every stale and uncached URL to queued. It never contacts the customer's site, so the site's bot protection can't slow it down or block it. This is why stale pages here are hours old rather than months.

flatten · rerender_by_status

Discover new and changed pages

every 6 hours

For each of six locale domains, the workflow reads the sitemap, keeps only pages changed in the last 12 hours (twice the interval, so a late run misses nothing), checks each one against the project's own scope rules and registers what's in scope. Domains run three at a time. If one domain fails, the other five still complete.

fetch_sitemap›match_scope›jq · urls›add_urls_to_flatten× 6 domains

Report every outcome, including failures

on succeeded or failed

The report isn't a step at the end of the sweep, because a final step only runs if everything before it worked, and it would stay silent on exactly the runs that matter. It's a separate workflow triggered by the other two finishing, whether they succeeded or failed, and it posts to the team's Slack channel.

jq · compose›slack · post
tool call through Nucleus local data step on the box
27 steps across three workflows, and not one of them calls a model. Freshness has a correct answer: a page is either stale or current, and either in scope or not. Tools compute that answer the same way every time. The schedule is hourly because running it costs nothing extra. Because no step needs a model or a local system, the same steps could be built as a Nucleus workflow in the cloud just as well. It runs on Dispatch here, where it calls the same Nucleus tools.
05

A gap in the product, filled from the field

Look again at what these workflows do. Flatten marks pages stale but doesn't requeue them, and it can't find new pages in a sitemap by itself. Normally that's a feature request that waits in a backlog while the product team decides whether enough customers need it. With Nucleus, the people working with customers closed the gap themselves, with tools and workflows instead of product code. Every run since has produced evidence.

01 · the fieldSpot the gap

A customer's translated pages go stale and nothing in the product puts them back in the queue.

02 · days, not a releaseFill it with tools

The product's own API is already in Nucleus as tools. A workflow arranges them, and nothing ships in the product.

03 · real customersTrial it in production

It runs for the customers who need it now, with every run and every step's result recorded.

04 · the product teamBuild it, with the data

Commit to the feature knowing who needs it, how often it should run and where it breaks, or skip it.

What the trial taught, that a spec wouldn't have
ObservedAn hourly requeue kept a 20,000-URL cache 99.84% current. A comparable site without one sat at 23.8%.
So the feature needsAutomatic requeue of stale pages in the product itself. Hourly is often enough, and it costs almost nothing.
ObservedOne customer's bot protection rejects sitemap fetches outright, so discovery fails while requeue keeps working.
So the feature needsDiscovery and requeue as separate jobs. Requeue should never depend on reaching the customer's site.
ObservedOne customer's sitemap lists only source-language URLs, while its 13 languages live on separate subdomains.
So the feature needsDiscovery that maps each source URL onto every locale host, not just the URLs the sitemap lists.
ObservedFailed renders carry no HTTP status at all, and some pages marked failed load fine in a real browser.
So the feature needsA real check of failed pages before anyone acts on them. A status filter can never catch these.
ObservedA discovery window equal to the run interval missed pages whenever a run started late.
So the feature needsA look-back window of about twice the interval, which can't be found until the job runs on real schedules.
This is the advantage that's easy to miss. Nucleus lets the people closest to customers meet a niche need now, without waiting for a roadmap. A customer with 13 locale subdomains and a source-only sitemap got one extra workflow step, not a product escalation. Meanwhile the product team gets something a backlog ticket never gives it: a working solution, measured on real customers, with its edge cases already found. It can build the feature knowing it's needed, or leave it in the field if it turns out to be niche.
06

A cron job's failures are silent. These aren't.

A cron job doesn't fail for lack of a schedule. It fails because, once the engineer moves on, nothing tells anyone when the job stops working. In the snapshot above, renders up to seven months old show that nobody was told.

The traditional setup

A script on a server, written once

  • owned by whoever wrote it, until they move on
  • a failure goes to a log file, if anywhere
  • a new locale, a moved sitemap or new bot protection means a code change
  • it holds credentials directly, under no one's name
  • you find out from the stale count, months later
Nucleus + Dispatch

Workflows anyone can read and change

  • every run and every step's input and output is kept and viewable
  • every outcome, including failures, is posted to the team's channel
  • a new locale is a copied step, and a new schedule is one edit
  • each call is authorized and recorded by Nucleus as a named owner
  • you find out within the hour, in Slack
07

Setting up a new site doesn't need an engineer

Because the Flatten tools are in Nucleus and the engine is Dispatch, adding a customer is a short conversation. An onboarding agent asks for what it can't safely guess, such as the project key and the sitemap, instead of inferring them. Registering the URLs then waits for one human approval covering the whole batch, however many thousand URLs it contains.

From a laptop

Claude

Onboard this site to Flatten, check its sitemaps every six hours, requeue stale pages hourly, and post results to #web-ops.
I need the project key and the sitemap URL. I won't guess either. Once I have them, I'll run the import as a dry run so you can review the count before approving.
From a phone

The Dispatch app

Approval needed · register 3,198 URLs for XXXX-XXXX-XXXX-XXXX

One tap approves the batch. From there you can copy the workflow set for the next customer, change a schedule, or follow each run's steps live.

From the channel

Slack

/flatten-requeue example-shop
Queued 412 stale URLs for re-render.

A slash command starts the same workflow the schedule runs, so whoever notices a problem can fix it from the channel.

This is the point of the comparison. The healthy cache wasn't kept healthy by a better engineer writing a better script. It's kept healthy by automation that anyone with access can set up, read and change, running for free on a schedule and reporting its own failures. Customers get translated pages that stay current, and the work no longer waits on someone with time to write and maintain code.
The difference

99.84% current, kept that way by configuration anyone can change.