Build the tool.
ASTRIA does the math.
Internal apps, client portals, SaaS products: embed projections and Monte Carlo in your UIs with a typed client — without coding an engine or managing infrastructure.
Node.js 18+ · npm · v0.1.1 · aligned with the REST API · npm package
demo — pick a profile: the code updates and the run replays. Same profile, same fingerprint, every time.
What your teams will build
From internal widget to billed product.
The same TypeScript client, from Notion-replacement prototype to production SaaS.
Internal tools
Scenario simulators for leadership, price calculators for sales, dashboards that recalculate when an assumption changes.
Client portals
Different projections per client, computed on demand under your brand — with no engine living in your code.
SaaS products
Ship computation as a billed feature of your product. Batch by entity with projectBatch() on Business plans and above.
Live again
Two more products, the same client.
A projection table for your analysts, a mortgage renewal for your advisors — each is just a project() call behind your interface.
—projected balance at 8 years
contributions —
interest —
$6,000/yr · return — · annual compounding
| Year | Contributions | Interest | Balance |
|---|
contributionsinterest — of balance
✓ deterministic · project() · outside quotarun —
——
| Offered term | Rate | Payment | Balance at term end |
|---|
qualifying: the greater of 5.25% or rate + 2% · project()
✓ 3 rate scenarios · a single call · —run —
Integration
Three calls, and you're in production.
Only simulate() consumes your quota — prototype your UI with project(), then move to Monte Carlo when you're ready.
01
client.project(spec)
Deterministic 1-scenario projection to wire your UI at no cost.
outside quota02
client.simulate(spec)
Multi-scenario Monte Carlo: full statistics and run_id.
quota · full stats03
client.getRun(id)
Status, summary, and artifacts for every run — audit built into your app.
auditable · traceableBuilt for production
The details that matter at 2 a.m.
Typed end to end
Typed responses and errors — QuotaExceededError, RateLimitError, ValidationError with stable errorReason . Your IDE knows the shape of every response.
The key stays on the backend
Built for Node or a controlled proxy: your be_live_ key never reaches the browser. Multi-team context via setTeamId().
Visible quotas and limits
getUsage(), getQuotaInfo(), getRateLimitInfo(): your app knows where it stands before your customers find out.
Your first widget calculates this afternoon.
from $49/mo · 25,000 scenarios included · project() outside quota for prototyping