Overhaul market system with shared TAM competition, multi-tier pricing, enterprise pipeline, and developer ecosystem
CI / build-and-push (push) Successful in 42s
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:
+131
-1
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user