Where it lives
Ships as /enterprise in the SvelteKit app. This prototype is plain HTML/CSS/JS on
purpose: every piece maps one-to-one to a Svelte component (ModuleCard, SeatStepper, BlockPicker, TopSheet) with a single derived
store computing totals. No React, so nothing here fights our stack.
Pricing is one config object
All numbers live in the PRICING object at the top of the script (base, module price,
seat pack, blocks with rates). In production this comes from one server-side config so marketing
can change a rate without a deploy touching components. The math is pure addition, so totals
should be a derived value, never stored state.
Wiring
"Request this configuration" posts the config JSON to a lead endpoint and prefills the deal-desk
email. Post-contract, the same object seeds the org wallet (existing Stripe wallet + quota
services) as the monthly committed block. Fire analytics on every change: enterprise_config_changed with the full config payload, and enterprise_config_submitted on CTA. Abandoned configs are sales signal.
SEO and rendering
Server-render the page with the default configuration and price ranges in the HTML so crawlers
index real numbers, then hydrate. Add Product/Offer structured data with
the $2,110 starting price. Target queries: "script coverage software pricing", "screenplay
analysis enterprise". Publishing prices is deliberate, it pre-answers the first sales question
and filters unqualified leads.
Guards to keep
Minimum one module (the last one cannot be deselected), one block always selected, floor
configuration $2,110. Keyboard focus is visible on every control, reduced motion is respected,
and the layout stacks below 940px. Keep all of that in the production build.
In-development modules
Modules carry an inProgress flag in the pricing config. Flagged modules render as a
dashed, non-selectable card with an IN DEVELOPMENT badge and never enter the total. Flipping the
flag to false is the entire launch switch for Finance & Budgeting: the card becomes selectable
at the standard module rate with no other code change.
Not built yet, by design
Annual prepay checkout, the 500+ contact flow, and charter-offer logic are stubs here. They land
after the pricing is approved and Simon signs off on the external terms.