/* global React, Icons, Badge, Btn, Pill, Meter, Score, Stat, Eyebrow */ const { useState, useMemo } = React; /* ========================================================================= DATA & CONNECTIVITY HUB — plan finder ========================================================================= */ // Plan database. Verified May 12 2026. Calyx Sprout is the sleeper — // 501(c)(3) membership tier on T-Mo backbone, no deprioritization, $500/yr // ≈ $42/mo. Nearly nobody publishes a clean guide to it; we lead with it. const PLANS = [ { id: 1, carrier: 'Calyx', name: 'Sprout (membership · $500/yr)', price: 42, deprio: 9999, hotspot: 9999, type: 'Membership', up: '10-30', score: 9.4, notes: 'Best-kept secret. T-Mo SIM, no deprioritization. 501(c)(3) membership.', highlight: true }, { id: 2, carrier: 'T-Mobile',name: 'Business 5G Unlimited Adv.', price: 70, deprio: 100, hotspot: 50, type: 'Post', up: '20-100', score: 9.2, notes: 'Best uplink in mid-density US markets.' }, { id: 3, carrier: 'Verizon', name: 'Business 5G Unlimited Plus', price: 70, deprio: 100, hotspot: 100, type: 'Post', up: '15-50', score: 9.0, notes: 'Strong urban uplink, weak rural.' }, { id: 4, carrier: 'US Mobile',name: 'Unlimited Premium (Warp)', price: 50, deprio: 100, hotspot: 50, type: 'MVNO', up: '10-40', score: 8.4, notes: 'Best dollar-per-Mbps in the postpaid tier.' }, { id: 5, carrier: 'AT&T', name: 'Business Unl. Premium', price: 85, deprio: 60, hotspot: 60, type: 'Post', up: '10-25', score: 7.8, notes: 'Inconsistent uplink; useful as third carrier only.' }, { id: 6, carrier: 'Google Fi',name: 'Unlimited Plus', price: 65, deprio: 50, hotspot: 50, type: 'MVNO', up: '8-20', score: 7.6, notes: 'Solid travel default — eSIM-clean across most countries.' }, { id: 7, carrier: 'Visible', name: 'Plus (by Verizon)', price: 45, deprio: 50, hotspot: 0, type: 'MVNO', up: '5-15', score: 7.4, notes: 'Cheap soft-priority; no native hotspot allotment.' }, ]; const DataPage = ({ onNav }) => { const [usage, setUsage] = useState(120); // GB/mo const [travel, setTravel] = useState(false); const [budget, setBudget] = useState(200); const sorted = PLANS .filter(p => p.price <= budget) .filter(p => p.deprio >= Math.min(usage / 2, 100)) .sort((a, b) => b.score - a.score); return (
{/* HEADER */}
Connectivity · 34 carriers tracked

Data plans, decoded.

Real uplink speeds, real deprioritization thresholds. No marketing-page numbers. We re-test every plan quarterly and timestamp the page.

Non-affiliated rankings Live tests
{/* FINDER */}
Plan finder

Tell us what you stream.

We rank the ~78 tracked plans by your actual usage envelope.

Travel abroad
Recommendation
{sorted.length === 0 ? 'No match — raise your budget' : `${sorted[0].carrier} · ${sorted[0].name}`}

{sorted[0]?.notes || '—'}

{/* Save lands with accounts in Phase 5. See-bonding-kit goes to /bonding. */} onNav?.('bonding')}> See bonding kit
Ranked · {sorted.length} matching UPLINK SPEEDS · MEDIAN OF 18 TESTS
{sorted.map((p, i) => (
{(i + 1).toString().padStart(2, '0')}
{p.carrier} {p.type} {p.highlight && Sleeper pick} {i === 0 && !p.highlight && Top pick}
{p.name}
))}
{/* USAGE CALCULATOR */}
Tools · Usage calculator

How much data do you actually need?

{[ { tier: '720p · 4 Mbps', hr: 1.8, mo: 54 }, { tier: '1080p · 6 Mbps', hr: 2.7, mo: 81 }, { tier: '1080p60 · 8', hr: 3.6, mo: 108 }, { tier: '1440p · 12', hr: 5.4, mo: 162 }, ].map((b, i) => (
Tier {i + 1}
{b.tier}
Per hour{b.hr} GB
Per month (1h/day){b.mo} GB
= 3 ? 'warn' : ''} />
))}
{/* GUIDE GRID */}
Deep guides — coming Phase 4

When the obvious answer isn’t.

{/* "All connectivity guides" lands once we have an MDX content collection (Phase 4). For now: card list is a preview — not interactive. */}
{[ { t: 'Deprioritization, explained', s: 'Why your stream tanks at the convention center even though you have 5 bars.', b: 'updated' }, { t: 'Hotspot vs phone tethering', s: 'Why your dedicated hotspot can be slower than the phone in your pocket.', b: null }, { t: 'Multi-carrier strategy', s: 'Picking 2, 3, or 4 SIMs. The diminishing-returns curve and when to stop.', b: 'tested' }, { t: 'Travel SIM / eSIM guide', s: 'What to swap in before Tokyo, Berlin, or São Paulo. With actual upload tests.', b: 'updated' }, { t: 'Venue & event checklist', s: 'The 8-step survey to run before you commit to a venue uplink.', b: null }, { t: 'When your stream drops', s: 'A 4-minute recovery playbook. Print it, tape it to the inside of your pack.', b: 'beginner' }, ].map((g, i) => (
Guide · drafting {g.b && {g.b}}

{g.t}

{g.s}

SOON
))}
); }; const SliderControl = ({ label, value, setValue, min, max, step, unit, hint }) => (
{label} {unit === '$' ? `$${value}` : `${value} ${unit}`}
setValue(parseFloat(e.target.value))} /> {hint &&
{hint}
}
); const SmallStat = ({ label, value, mono, big, accent }) => (
{label}
{value}
); window.DataPage = DataPage;