Combined system architecture

One content foundation, five bounded experiments.

The prototypes share a BMJ content snapshot but choose different runtime boundaries. Expensive analysis is precomputed where possible; live Workers perform only the retrieval, orchestration or rendering needed for the interaction.

Shared foundation

The public content kit

A single read-only Worker presents the root documentation site and routes three dataset hostnames to R2 buckets.

Public data surface

  • Metadata: 32,894 article records with titles, abstracts and authorship.
  • Full text: 222 open-access article records from three journals.
  • Vectors: 32,814 normalised 384-dimensional BGE embeddings plus an ordered-ID sidecar.
  • Delivery: public GET, HEAD and OPTIONS requests, open CORS and byte-range support for large objects.

Derived private snapshot

Search and topic experiences use a separate private R2 bucket containing canonical article records, portfolio statistics and pre-materialised topic artefacts. Public browsers never receive R2 credentials; only bound Workers can read it.

POC 01

Journal Picker

A public UI Worker delegates semantic matching to a private API Worker and receives a compact, evidence-bearing recommendation.

Live request path

  1. The browser sends a title and abstract to picker-ui.
  2. A Cloudflare service binding invokes the private picker-api Worker without exposing it publicly.
  3. Workers AI embeds the query; the API compares it with 74 journal centroids.
  4. Only the top three journal article shards are loaded for related-article evidence, and the browser renders the response with the static two-dimensional map.
POC 02

Portfolio Search Lab

A public Worker combines semantic retrieval with exact record hydration so experimentation remains inspectable and grounded.

Live request path

  1. The browser posts a query, precision profile and optional journal/month filters to search-test.
  2. Cloudflare AI Search performs vector retrieval, optional query rewrite and BGE reranking against the indexed article corpus.
  3. The Worker hydrates each hit from canonical article JSON in private R2 rather than treating index excerpts as the record of truth.
  4. When requested, Workers AI synthesises a grounded answer from the returned evidence. Retrieval results remain visible alongside the answer.

Boundary choices

The Worker is stateless and read-only. Search failure is retried once, filters are validated before retrieval, and a missing canonical record does not discard otherwise useful search evidence.

POC 03

Author Graph POC

The graph is an offline analysis product. Cloudflare serves the resulting HTML, JavaScript and bounded JSON; no Python or server-side graph computation is published.

Offline build

  1. Python build tooling ingests 32,981 papers from the content export.
  2. Authors are disambiguated into 164,838 identities using name and affiliation evidence; the source contains no ORCID or email identifiers.
  3. Co-authorship edges, journal overlap, prolific-author rankings, approximate betweenness and journal ego bundles are precomputed.
  4. The deployable output contains static pages and sharded JSON small enough for Cloudflare asset limits and browser consumption.

Static runtime

The browser loads one of four question-shaped views and renders its data locally. The four primary views are journal overlap, prolific multi-journal authors, connector authors and per-journal ego networks. The original full explorer remains available as a reference view.

POC 04

Topic Explorer

A public rendering Worker calls a private snapshot API, which performs exact reads of topic artefacts materialised before deployment.

Live request path

  1. The browser requests the catalogue, topic detail, evidence or comparison view from topics-ui.
  2. The public Worker calls portfolio-intelligence through a private service binding.
  3. The private Worker validates topic slugs and reads exact keys from topic-catalog, topic-series and topic-evidence in R2.
  4. The public Worker renders HTML for the catalogue, detail and comparison experiences.

Boundary choices

The 500 topic summaries, time series and evidence sets are materialised offline across a 32,814-article, 74-journal snapshot. The interactive path does not aggregate the corpus, invoke an LLM or list R2 objects.

POC 05

Journal Overview

A public journal landing-page Worker combines compact static journal snapshots with an optional private evidence lookup for cross-portfolio topic comparisons.

Live request path

  1. The browser opens the journal catalogue or a selected journal page from journal-overview.
  2. Static assets provide article volume, publishing breadth, detail and topic-drift evidence materialised before deployment.
  3. For similar topic momentum, the public Worker calls portfolio-intelligence through the private PORTFOLIO_INTELLIGENCE service binding.
  4. The private Worker validates the journal ID and reads the exact topic-neighbours/{journal}.json object from R2. The landing page renders the leading comparisons alongside their evidence.

Boundary choices

Candidate journals and topic movement are computed offline from the portfolio snapshot. A page view performs no LLM call, runtime embedding or R2 listing, and the core journal page still works if the optional comparison service is unavailable.

Shared design principles

The implementation differs by POC, but the same boundaries recur.

Bound the live path

Heavy graph and topic analysis runs offline; live Workers retrieve, validate and orchestrate bounded outputs.

Keep evidence inspectable

Search results, related articles and topic evidence remain visible instead of hiding the retrieval layer behind a generated answer.

Use private bindings

Internal APIs and R2 buckets stay private. Public Workers expose only the narrow endpoints required by each experience.