Overhaul market system with shared TAM competition, multi-tier pricing, enterprise pipeline, and developer ecosystem
CI / build-and-push (push) Successful in 42s

Replaces the simplified single-subscriber market with a full competitive simulation:
shared TAM with softmax market shares across 4 segments, multi-tier consumer
subscriptions (Free/Plus/Pro/Team) and API tiers (Free/PAYG/Scale/Enterprise),
enterprise sales pipeline (Lead→Qualification→POC→Negotiation→Active→Renewal)
with SLA tracking, developer ecosystem flywheel, technology obsolescence pressure,
seasonal demand cycles, and two new product lines (Code Assistant, AI Agents Platform).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-25 08:30:24 -04:00
parent 4c1c0e9ff2
commit 09a5cb69a7
34 changed files with 2851 additions and 408 deletions
+131 -1
View File
@@ -16,6 +16,7 @@ import type {
ModelArchitecture,
SFTSpecialization, QuantizationLevel, VariantCreationJob,
EvalJob,
ConsumerTierId, ApiTierId,
} from '@ai-tycoon/shared';
import {
INITIAL_SETTINGS, SAVE_VERSION,
@@ -125,6 +126,15 @@ interface Actions {
openSourceModel: (modelId: string) => void;
setOverloadPolicy: (policy: Partial<OverloadPolicy>) => void;
acquireCompetitor: (competitorId: string) => void;
setConsumerTierPrice: (tierId: ConsumerTierId, price: number) => void;
toggleConsumerTier: (tierId: ConsumerTierId) => void;
setApiTierPrice: (tierId: ApiTierId, field: 'monthlyFee' | 'inputTokenPrice' | 'outputTokenPrice', value: number) => void;
toggleApiTier: (tierId: ApiTierId) => void;
setDevRelSpending: (amount: number) => void;
setCodeAssistantPrice: (price: number) => void;
toggleCodeAssistant: () => void;
setAgentsPlatformPrice: (price: number) => void;
toggleAgentsPlatform: () => void;
updateState: (partial: Partial<GameState>) => void;
}
@@ -1205,6 +1215,126 @@ export const useGameStore = create<Store>()(
};
}),
setConsumerTierPrice: (tierId, price) => set((s) => ({
market: {
...s.market,
consumerTiers: {
...s.market.consumerTiers,
tiers: {
...s.market.consumerTiers.tiers,
[tierId]: {
...s.market.consumerTiers.tiers[tierId],
config: { ...s.market.consumerTiers.tiers[tierId].config, price },
},
},
},
},
})),
toggleConsumerTier: (tierId) => set((s) => ({
market: {
...s.market,
consumerTiers: {
...s.market.consumerTiers,
tiers: {
...s.market.consumerTiers.tiers,
[tierId]: {
...s.market.consumerTiers.tiers[tierId],
config: {
...s.market.consumerTiers.tiers[tierId].config,
isActive: !s.market.consumerTiers.tiers[tierId].config.isActive,
},
},
},
},
},
})),
setApiTierPrice: (tierId, field, value) => set((s) => ({
market: {
...s.market,
apiTiers: {
...s.market.apiTiers,
tiers: {
...s.market.apiTiers.tiers,
[tierId]: {
...s.market.apiTiers.tiers[tierId],
config: { ...s.market.apiTiers.tiers[tierId].config, [field]: value },
},
},
},
},
})),
toggleApiTier: (tierId) => set((s) => ({
market: {
...s.market,
apiTiers: {
...s.market.apiTiers,
tiers: {
...s.market.apiTiers.tiers,
[tierId]: {
...s.market.apiTiers.tiers[tierId],
config: {
...s.market.apiTiers.tiers[tierId].config,
isActive: !s.market.apiTiers.tiers[tierId].config.isActive,
},
},
},
},
},
})),
setDevRelSpending: (amount) => set((s) => ({
market: {
...s.market,
developerEcosystem: {
...s.market.developerEcosystem,
devRelSpending: amount,
},
},
})),
setCodeAssistantPrice: (price) => set((s) => ({
market: {
...s.market,
codeAssistant: {
...s.market.codeAssistant,
pricePerSeat: price,
},
},
})),
toggleCodeAssistant: () => set((s) => ({
market: {
...s.market,
codeAssistant: {
...s.market.codeAssistant,
isActive: !s.market.codeAssistant.isActive,
},
},
})),
setAgentsPlatformPrice: (price) => set((s) => ({
market: {
...s.market,
agentsPlatform: {
...s.market.agentsPlatform,
pricePerSeat: price,
},
},
})),
toggleAgentsPlatform: () => set((s) => ({
market: {
...s.market,
agentsPlatform: {
...s.market.agentsPlatform,
isActive: !s.market.agentsPlatform.isActive,
},
},
})),
updateState: (partial) => set((s) => {
const newState: Partial<Store> = {};
for (const key of Object.keys(partial) as (keyof GameState)[]) {
@@ -1234,7 +1364,7 @@ export const useGameStore = create<Store>()(
notifications: [{
id: uuid(),
title: 'Save Reset',
message: 'Your save was reset due to a major model system overhaul — multi-stage training pipelines, model families with variants, benchmarks, and architecture choices!',
message: 'Your save was reset due to a major market system overhaul — shared TAM competition, multi-tier pricing, enterprise pipeline, developer ecosystem, and technology obsolescence!',
type: 'info' as const,
tick: 0,
read: false,