Redesign infrastructure to hypercluster scale with 4-level hierarchy
CI / build-and-push (push) Successful in 43s

Replace flat DataCenter/Rack model with Cluster > Campus > Data Center > Racks
hierarchy. Individual rack entities eliminated in favor of statistical batch
simulation using deployment cohorts. Adds tiered network topology (ToR/agg/core)
with proportional outage model, DC retrofitting, bulk operations, and drill-down
UI navigation with breadcrumbs. First cluster and campus are free to preserve
early game flow. Rebalances starting economy ($600K), funding rounds, and
cohort scaling for hypercluster-scale gameplay.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-24 23:15:41 -04:00
parent d36d9d61a8
commit c799f2e359
13 changed files with 1831 additions and 1267 deletions
+6 -6
View File
@@ -12,7 +12,7 @@ export function DashboardPage() {
const revenuePerTick = useGameStore((s) => s.economy.revenuePerTick);
const expensesPerTick = useGameStore((s) => s.economy.expensesPerTick);
const totalFlops = useGameStore((s) => s.infrastructure.totalFlops);
const dataCenters = useGameStore((s) => s.infrastructure.dataCenters);
const totalDCs = useGameStore((s) => s.infrastructure.totalDataCenterCount);
const trainedModels = useGameStore((s) => s.models.trainedModels);
const activeTraining = useGameStore((s) => s.models.activeTraining);
const subscribers = useGameStore((s) => s.market.consumers.totalSubscribers);
@@ -27,13 +27,13 @@ export function DashboardPage() {
<div className="space-y-6">
<h2 className="text-2xl font-bold">Dashboard</h2>
{dataCenters.length === 0 && (
{totalDCs === 0 && (
<TutorialHint id="welcome">
Welcome to AI Tycoon! Start by building a data center in the Infrastructure tab, then order racks to begin training your first AI model.
Welcome to AI Tycoon! Start by building a cluster in the Infrastructure tab, then add a campus and data center to deploy racks and train your first AI model.
</TutorialHint>
)}
{dataCenters.length > 0 && trainedModels.length === 0 && !activeTraining && (
{totalDCs > 0 && trainedModels.length === 0 && !activeTraining && (
<TutorialHint id="train-first-model">
You have compute available! Head to the Models tab to allocate compute for training and start your first model.
</TutorialHint>
@@ -58,7 +58,7 @@ export function DashboardPage() {
<StatCard
icon={Server}
label="Data Centers"
value={dataCenters.length.toString()}
value={totalDCs.toString()}
subValue={`${formatNumber(totalFlops)} FLOPS`}
color="text-blue-400"
onClick={() => useGameStore.getState().setActivePage('infrastructure')}
@@ -194,7 +194,7 @@ export function DashboardPage() {
</div>
</div>
{dataCenters.length === 0 && (
{totalDCs === 0 && (
<div className="bg-surface-900 border border-accent/30 rounded-xl p-6 text-center">
<h3 className="text-lg font-semibold mb-2">Get Started</h3>
<p className="text-surface-400 text-sm mb-4">