Blueprint

System Data Flow

Entry Point
Process Node
Data Store
Output
Productionv1.0.0

GT9 Pricing Tool

Developer

Prevents pricing chaos by enforcing a transparent ruleset and a repeatable quoting flow.

Logic Breakdown

Applies tiering, discounts, and constraints; computes total and produces a quote summary. Rule versioning supports sales enablement updates without breaking historical quotes.

Architecture Decisions

  • 01Prevents pricing chaos by enforcing a transparent ruleset and a repeatable quoting flow.
  • 02Applies tiering, discounts, and constraints; computes total and produces a quote summary.
  • 03Rule versioning supports sales enablement updates without breaking historical quotes.

Code Snippet

typescript
gt9-pricing-tool.ts
const TIERS = {
  starter:    { base: 199,  seatRate: 25, maxSeats: 5,        label: "Starter" },
  growth:     { base: 499,  seatRate: 25, maxSeats: 25,       label: "Growth" },
  enterprise: { base: 1299, seatRate: 40, maxSeats: Infinity, label: "Enterprise" },
} as const;

type Tier = keyof typeof TIERS;

const ADD_ONS = {
  "analytics":    { label: "Advanced Analytics", price: 79  },
  "api-access":   { label: "API Access",         price: 149 },
  "white-label":  { label: "White Label",        price: 299 },
} as const;

type AddOnKey = keyof typeof ADD_ONS;

export function buildQuote({
  tier, seats, annual = false, addOns = [],
}: {
  tier: Tier; seats: number; annual?: boolean; addOns?: AddOnKey[];
}) {
  const { base, seatRate, maxSeats } = TIERS[tier];
  const clampedSeats = Math.min(Math.max(1, seats), maxSeats);
  const seatCost = Math.max(0, clampedSeats - 1) * seatRate;
  const addOnTotal = addOns.reduce((s, k) => s + ADD_ONS[k].price, 0);
  const subtotal = base + seatCost + addOnTotal;
  const annualSaving = annual ? Math.round(subtotal * 0.15) : 0;

  return {
    tier: TIERS[tier].label,
    seats: clampedSeats,
    billingCycle: annual ? "annual" : "monthly",
    lineItems: [
      { label: `${TIERS[tier].label} base plan`, amount: base },
      ...(clampedSeats > 1
        ? [{ label: `${clampedSeats - 1} extra seats`, amount: seatCost }]
        : []),
      ...addOns.map((k) => ({ label: ADD_ONS[k].label, amount: ADD_ONS[k].price })),
      ...(annual ? [{ label: "Annual discount (−15%)", amount: -annualSaving }] : []),
    ],
    subtotal,
    total: subtotal - annualSaving,
  };
}

Key Dependencies

TypeScriptCore stack component
UI LogicCore stack component
ValidationCore stack component

Technical Spec

Pillar
Developer
Mode
Configurator
Output
Price

Tags

TypeScriptUI LogicValidation

Live Sandbox

Interactive runtime environment — GT9 Pricing Tool v1.0.0

Production
gt9-pricing-tool-sandbox

$ npm run sandbox

> Initialising GT9 Pricing Tool v1.0.0

> Status: Production

// Live iframe mounted once sandboxUrl is configured.