// Landing page — hero + paper config grid + multi-layer picker + featured features. // All numbers come from /api/landing and /api/featured (real values from the // per-layer feature index, no hard-coded mocks). function Landing({ onPickLayer, onPickFeature }) { const landing = useFetch(API.landing, []); const featured = useFetch(API.featured, []); if (landing.loading) return ; if (landing.error) return
; const data = landing.data || {}; const layers = data.layers || []; const sae = data.sae || {}; const dataset = data.dataset || {}; // Mean across loaded layers — used as headline numbers under the hero. const mean = (key) => { const xs = layers.map(L => L[key]).filter(v => v != null); return xs.length ? xs.reduce((a, b) => a + b, 0) / xs.length : null; }; return ( {/* HERO */}
GeoPedia · ESM-2 SAE feature atlas

Reading the geometry learned by protein language models, one feature at a time.

For each feature we test seven annotation methods (InterPro · CATH · MEME · sequence position · geometric Cα backbone) and report which ones reach BH q < 0.05. Pick a layer below to browse, or jump straight to one of the features called out in the paper.

Model
{dataset.esm_model || SAE_DEFAULTS.model}
Architecture
Simple ReLU SAE · {sae.activation_dim ? `${sae.activation_dim}-d` : ""} residual stream
Layers in atlas
{layers.map(L => L.layer).join(", ") || "—"}
Training proteins
{dataset.total_proteins ? dataset.total_proteins.toLocaleString() : "—"}
Sequence clusters
{dataset.total_clusters ? dataset.total_clusters.toLocaleString() : "—"}
Features / layer
{layers[0]?.num_features?.toLocaleString() || "—"}
Mean annotated (any method)
{mean("any_pct") != null ? `${mean("any_pct").toFixed(1)}%` : "—"} · BH q < 0.05
Mean geometric significant
{mean("geom_pct") != null ? `${mean("geom_pct").toFixed(1)}%` : "—"}
{/* LAYER PICKER */}
Step 1

Pick a layer to explore

Each ESM-2 transformer layer has its own SAE. Annotation methods are run independently per layer. Bars show the % of features each method significantly annotates (BH q < 0.05).

{layers.map((L) => { const rows = [ { lbl: "% Total annotated", v: L.total_annotated_pct, cls: "" }, { lbl: "% Geometric", v: L.geometric_pct, cls: "geom" }, { lbl: "% Seq Motif", v: L.seq_motif_pct, cls: "bio" }, { lbl: "% InterPro Res.", v: L.interpro_res_pct, cls: "bio" }, { lbl: "% InterPro Prot.", v: L.interpro_prot_pct, cls: "bio" }, { lbl: "% CATH Res.", v: L.cath_res_pct, cls: "bio" }, { lbl: "% CATH Prot.", v: L.cath_prot_pct, cls: "bio" }, { lbl: "% Seq Pos", v: L.seq_pos_pct, cls: "bio" }, ]; return ( ); })}
{/* FEATURED EXAMPLES */}
Step 2 — or jump straight in

Features described in the paper

Every feature called out by ID in the paper, opened directly here. Includes the geometry-primary case, the ablation-causal feature, the four HSP90-like ATPase variants, the metagenomic case, and the schematic example.

{featured.loading ? : featured.error ? : (
{(featured.data || []).map((f) => ( ))}
)}
); } window.Landing = Landing;