Spokes.wiki Search About

Log — Frontend Architecture Wiki

Append-only history. Entries start ## [YYYY-MM-DD] <op> | <title>.

[2026-08-12] split | Spoke created from the hub _inbox frontend-architecture cluster

Spun out at the curator's approval, from three sources parked over six weeks under the tag frontend-architecture. Every existing spoke had declined them, and the declines became this spoke's scope boundary (CLAUDE.md):

  • flutter-large-app-structure — parked 2026-06-30 as app-development, re-tagged 2026-07-14. Declined by game-engines (Flame is a Flutter game engine; a general app-architecture guide there is a category error), dev-tooling (Ky precedent — application-level concerns are out), webperf, static-site.
  • micro-frontends-migration — parked 2026-07-14. Declined by ui-frameworks (the talk explicitly contrasts micro-frontends with components, so it sits above that spoke's subject), static-site (React meta-frameworks excluded by charter), platform-ops ("microservices for the frontend" is the analogy, not the domain), dev-tooling, webperf.
  • open-saas — parked 2026-08-10 with the cluster tally at 3 and both readings recorded rather than acted on. Declined by static-site (full-stack frameworks excluded since 2026-06-03: "park them unless a better home exists"), dev-tooling, ui-frameworks, foss-applications, agentic-tooling.

The genre objection is on the record and was not dissolved. Two of the three sources are architecture guides that argue a thesis; Open SaaS is a template that embodies one silently, and this same cluster had already excluded a build-along tutorial on exactly that distinction. The curator approved with both readings in front of them. Kept live in synthesis → Contradictions and on boilerplate.

One thing this spin-out resolves elsewhere: ../static-site-wiki has excluded full-stack and React meta-frameworks since 2026-06-03 with the instruction to park them "unless a better home exists." This is that home. Next.js, Remix, Gatsby and Wasp route here from now on.

All three primaries re-fetched at ingest, per ../HUB.md

A park record is a lead, not a finding. Two corrections came out of it:

  • open-saas — the park record (2026-08-10) said 15,217★ / 1,818 forks / 114 open issues. Verified 2026-08-12: 15.3k★ / 1.8k forks / 101 open issues. Stars and forks agree; the issue count moved.
  • micro-frontends-migration — the park record did not name the venue. It is QCon San Francisco 2025, and Mezzalira's stated basis is hundreds of migrations at Amazon and with AWS customers.
  • flutter-large-app-structure — published 23 June 2026 (the record carried only a fetch date of 2026-06-30). Confirmed on re-read: the article cites no study, case or measurement, which is why it is tiered T3 on what it rests on rather than on its publisher.
  • wasp — fetched as its own primary rather than through the boilerplate: 18.7k★, v0.24.0, in beta by its own statement, targeting React + TanStack Query / Node + Express / Prisma only.

Founding pages (11)

Sources: micro-frontends-migration (T2), open-saas (T1), wasp (T1), flutter-large-app-structure (T3). Things: application-architecture, micro-frontends, feature-first-structure, app-shell, boilerplate. Entities: luca-mezzalira (Person), freecodecamp (EducationalOrganization). [[aws]] and [[infoq]] are linked cross-wiki to their existing nodes in ../cloud-wiki and ../platform-ops-wiki rather than duplicated.

The founding thesis

One question — who decides an application's structure — answered from three positions: the team by convention, the organization by ownership, the framework before anyone arrives. The two architecture sources converge on boundaries beat patterns and on features owning their own state, from different scales and ecosystems, which is the strongest signal this corpus holds.

Two findings recorded against the grain of the sources. The corpus's headline number (3 deploys a month → 25 a day per team) is credited by its own author to the "safe net" of edge-compute rollback, so it is evidence about reversibility rather than modularity. And the difference between the two scales is enforcement: a micro-frontend boundary is enforced by deployment, a feature boundary by discipline, and no source here compares how well each holds.

Recorded weakness

This domain argues more than it measures. One source reports work done, one states what it ships, one cites nothing. CLAUDE.md carries an edge rule requiring every page to record what its source rests on, and growth edge 1 asks for any measured outcome of a structural choice — the spoke's thesis is currently unfalsifiable.

Sweep of the rest of _inbox (../HUB.md step 6)

Re-read the remaining 25 parked records against this spoke's new domain: line, since "no spoke owns this" stops being true the moment a spoke is created. Nothing else moved. The three nearest were checked in full and all three fail on the same distinction the charter draws:

  • ky-http-client (js-libraries) — an HTTP client. A library the application uses, not a decision about the application's structure. This is the precedent CLAUDE.md cites against ../dev-tooling-wiki, and it cuts the same way here.
  • ai-test-automation-paradox (ai-productionization) — about the brittleness of DOM-structural test abstractions under AI-generated tests. Adjacent (it is an argument about an abstraction) and its subject is test automation.
  • temporal-durable-execution (durable-execution) — backend workflow persistence; ../platform-ops-wiki territory if anywhere.

Note for future readers: both earlier park records cite an adrianhajdin-uber-clone record as the build-along tutorial this cluster excluded on genre. It is no longer in the holding pen — routed or dropped at some point before today — so the exclusion survives only as reasoning quoted in those two records, not as a record you can go and read.

[2026-08-15] ingest | Next.js — the meta-framework hole, and what it did to the thesis

Quality cycle, weakest-spoke-first: this spoke scored depth 0/6 on 2026-08-13, the worst in the corpus, and its own ## Open questions named the reason — the charter took React meta-frameworks from ../static-site-wiki on 2026-08-12 and none had been paged. Coverage edge 4. Closed one third of it with nextjs, from Next's own project-structure documentation (T1, v16.3.1, docs dated 2026-07-21).

It was not a hole-filling exercise. The spine's axis ran from the team decides to the framework decides, with wasp at the framework end. Next.js does not sit on that line: it decides routing structure absolutely (folders are URL segments, page is what makes a route public, the reserved filenames are the API) and refuses code organization in writing — "unopinionated," three strategies listed and deliberately unranked. One of those three is feature-first-structure, demoted from an argument to a menu item.

The uncomfortable consequence is now in synthesis.md: the spoke's two loudest sources (flutter-large-app-structure, micro-frontends-migration) argue about the half the dominant framework leaves open, which explains the argument's lack of resolution better than either source does.

Also recorded: route groups (marketing)/(shop) organize "by team" inside one deployable, while micro-frontends means a team that deploys independently — same vocabulary, opposite deployment story.

Integrity at time of writing: 0 orphans (lowest inbound count 2), 0 broken links, 0 dupes. Open questions 0/6 → 1/6 partly answered; edge 4 half-closed, Remix and Gatsby still open.

[2026-08-20] ingest | Next.js 16.3: Instant Navigations, Up to 90% Less Dev Memory and Faster Builds (InfoQ)

Routed here by the hub (runner-up: ../dev-tooling-wiki). InfoQ news item by Daniel Curtis, 20 Aug 2026, on the Next.js 16.3 release → nextjs-16-3 (T3, NewsArticle, stable).

Tier T3, stated on the page. Every performance figure — 90% less dev memory, 21.5GB→2GB on Vercel's own dashboard, 5.5× repeat CI builds, +22% requests under load — originates with vercel, which makes the framework and sells the hosting. InfoQ relays them and originates none, which matches the standing posture on the infoq entity page in ../platform-ops-wiki. The independent readings are one early adopter via The Register (~4GB→1.5GB) and a Reddit thread.

Why it is an architecture source. nextjs had given the spine a clean split: routing decided, code organization refused. 16.3 does not fit either half. cacheComponents makes cache boundaries a component-level structural decision, ships as an opt-in flag, and is stated to become the default in a future major version — so the axis is not who decides but who decides, and when. Recorded in synthesis.md as a new section, plus two consequences: the edge runtime is deprecated (a deployment target retracted after the Node-streams rewrite), and static exports do not work with Partial Prefetching (the ../static-site-wiki seam drawn as an exclusion, from the meta-framework side).

No version conflict with nextjs. That page read the docs at v16.3.1 on 2026-08-15, which looked earlier than a release covered on 20 August — but The Register covered 16.3 on 4 August, so the article postdates the release and the two pages agree.

Not duplicated here: Turbopack's disk cache and TypeScript 7 belong to ../dev-tooling-wiki (cross-linked to typescript-7-go-compiler, whose numbers are measured rather than relayed); the throughput and memory claims are ../webperf-wiki material. The version-matched AGENTS.md block 16.3 generates is noted as context, not filed to ../agentic-tooling-wiki — per charter, agent machinery bolted onto a framework does not move the subject.

Entities: no new nodes. infoq and vercel already exist as canonical nodes elsewhere and are linked cross-wiki; Daniel Curtis is named in prose but not paged, following the spoke's own precedent (the author of flutter-large-app-structure is not a node either — the publisher is).

Open questions 6 → 7 (added: what it costs when a framework changes its mind). Growth edges unchanged — Remix and Gatsby are still the coverage gap, and a release note does not close it.

[2026-08-22] ingest | Module Federation (via quality cycle)

module-federation — the project's own documentation and repository (module-federation/core, MIT, 2,618★/430 forks/61 open issues, created 2020-10-24, pushed 2026-08-21, v2.8.2 of 2026-08-06, Rspack + Webpack). T1 under tier by the claim: the load-bearing content is the artifact's own mechanism — roles, configuration keys, negotiation rules — which is checkable against the software. The benefits list ("improve performance," "lower the overall size of your applications") is the maker speaking about how well its own thing works, carries no measurement, and is flagged on the page rather than graded.

Closes coverage edge 7, which had said the mechanism was "named repeatedly as the mechanism and never described" — micro-frontends-migration names it four times and describes it nowhere. Third coverage edge to close cleanly on first contact (nextjs, react were the others); the spoke's question edges have still never closed cleanly.

It did not just fill the hole. synthesis.md has framed boundary enforcement as two mechanisms, deployment versus discipline. The shared scope is a third, and the new spine section ranks it below both: shareKey must match on both sides or negotiation silently does not happen; singleton: true loads the higher version and warns the party that asked for the lower one; a requiredVersion mismatch resolves to "the smallest version available." So violations show up as two copies of React in a browser, in production, rather than as a failed build or a review comment. The corpus already held the field evidence and had not connected it — Mezzalira's React Router downgrade against Module Federation is this negotiation, done by hand.

Two more things kept. The tool defines itself as "an architectural pattern for the decentralization of JavaScript applications (similar to microservices on the server-side)" — the analogy an open question asks about, asserted by the tooling as a definition. And what it federates is a module, so adopting it decides nothing about ownership; it serves a shared component library exactly as well. Against wasp (decides everything) and nextjs (decides routing, refuses code organization), this one decides nothing while calling itself an architecture.

New edge 8 records the residue: shared reintroduces the coupling micro-frontends are chosen to avoid, and nothing here measures what that costs. No dedup collision — no page in any spoke mentioned Module Federation except one line in micro-frontends-migration.

[2026-08-25] ingest | The singleton that stopped being one (via research pass)

Edge 8 half-closed with one T1 source, hunted for hub ## Most wanted #27: module-federation-singleton-postfix-bug (module-federation/core issue #4078). A team on rslib/rsbuild shared a library as singleton: true with requiredVersion: '2.2.2-release.99'; the consumer asked for '*'; each remote loaded its own copy anyway. Drop the prerelease suffix and the same config works, which is the reporter's own control and what makes this a defect rather than a misconfiguration.

It is the spoke's first named version-negotiation incident, and it is the runtime-enforcement finding happening to somebody: the build passed, no error named the cause, and the symptom class is a broken React context. The trigger is ordinary release engineering, which is the part worth carrying — nobody chooses a prerelease suffix expecting it to change module sharing.

Verified against the GitHub API rather than the rendered page: filed 2025-09-18, two comments, closed 2025-12-02 with state_reason: not_planned and the single label no-issue-activity. Closed by inactivity, not by a decision, so the behaviour is neither fixed nor documented as intended.

Not closed. One report is not an accounting — no duplicated bytes, no time-to-detection, nothing about the team upgraded from under. Successor edge 8a asks for that. The write-ups that do carry figures (11.9 MB micro-frontend bundles; a 7.5 → 10.5 MB regression from duplicate copies) are consultancy marketing with no stated method, rejected at the T1/T2 research bar and deliberately not ingested. module-federation updated in place; index.md gains one entry. Entities: 0 created.

[2026-10-05] ingest | EmDash 1.0 (Cloudflare Blog)

Routed from the hub; runner-up static-site-wiki (Astro is the developer surface; EmDash is server-rendered and database-backed, so it sits on this side of that spoke's charter). Source page emdash-1-0, T3, published 2026-09-28.

The spoke's first runtime plugin-isolation boundary: capabilities declared by the plugin and approved by an admin, enforced by Dynamic Workers or workerd, plus an AT Protocol registry where publishers hold their own signed records. Added as the fourth enforcement mechanism in synthesis, and the one that fails closed. Rests on a vendor announcement; no audit, escape history or paid-plugin case is cited, so it is held T3 and growth edge 3 notes it. Entities: 0 created (cloudflare, astro and cloudflare-workers already paged in sibling spokes).

[2026-10-07] research | edge 8a hunted — nothing at the bar

Searched for a measured cost of shared runtime dependencies in Module Federation. The only academic hit (Lando & Hasselbring, arXiv 2501.18225) proposes an approach and measures nothing; the blog figures are assumptions. Edge stays open; cooldown to 2026-10-21.