EventStorming that
thinks with you.
Model your domain in minutes, not meetings. JourneyStorm enforces Actor → Command → Event → Policy grammar while an AI facilitator fills in the gaps. No DDD background needed.
Free forever for solo projects · No credit card required
Your whiteboard has
hundreds of sticky notes.
None of them have meaning. No causal grammar, no direction, no path to code. Generic tools weren't built for domain modeling.
A built-in linter for
business logic.
Every connection on the canvas is validated against
Actor → Command → Event → Policy
grammar in real-time. If the causal chain breaks, you'll know before the meeting ends.
- ⚡ Real-time validation as you place nodes — not a post-session audit.
- 🔗 Connections are checked for causal meaning, not just graph topology.
- 💡 The AI suggests what's missing: "Add a Policy between Event and Command."
AI Suggestion
Add a Policy between "Payment Failed" and "Retry Payment" to capture the business rule.
One journey at a time.
Full context, zero noise.
Each user journey gets its own canvas, its own AI context, and its own causal chain. Checkout, Auth, Onboarding — scoped and separate, the way domain modeling should be.
Named Journeys
Each discovery session is scoped to a single user journey. No accidental cross-pollination between flows.
Isolated Context
Nodes, edges, and AI context are per-journey. Work on Checkout without seeing Auth artifacts.
Instant Switching
Jump between journeys in one click. The AI facilitator picks up right where you left off.
// ⚡ Auto-generated from Checkout Flow journey
// JourneyStorm v0.1 · 2026-02-25
export type PlaceOrderCommand = {
type: 'PLACE_ORDER';
customerId: string;
cartId: string;
items: OrderItem[];
};
export type OrderPlacedEvent = {
type: 'ORDER_PLACED';
aggregateId: string;
customerId: string;
items: OrderItem[];
totalAmount: number;
timestamp: Date;
};
export type FraudCheckPolicy = {
trigger: 'ORDER_PLACED';
emits: 'VERIFY_PAYMENT';
condition: (e: OrderPlacedEvent) => boolean;
};
From canvas to
typed TypeScript.
Export your domain model as typed interfaces, event schemas, and policy contracts. Your codebase mirrors your design session — no translation layer, no interpretation gap.
- Commands — Intent types with full payload signatures
- Events — Immutable fact types with aggregate IDs
- Policies — Reactive rule interfaces with trigger/emit pairs
- Read Models — Query projection types for your UI layer
Simple pricing.
One tool, two plans. No seat-based surprises.
Explorer
For solo exploration and learning.
- ✓ 1 project
- ✓ 3 journeys per project
- ✓ 30 nodes per journey
- ✓ AI suggestions (5/day)
- ✓ Causality linter
- ✗ TypeScript export
- ✗ Unlimited nodes
- ✗ Priority support
Builder
For shipping real products.
Cancel anytime. No contracts.
- ✓ Unlimited projects
- ✓ Unlimited journeys
- ✓ Unlimited nodes
- ✓ Full AI — no daily cap
- ✓ TypeScript export
- ✓ Export to Mermaid / JSON
- ✓ Team sharing (up to 3)
- ✓ Priority support
Both plans include the Causality Engine linter, the AI facilitator, and the Journey-centric canvas.
See full feature comparison →
Your next project deserves
structured thinking.
In 10 minutes you'll have a causality-valid EventStorm, a structured domain model, and TypeScript types ready for your codebase. Start with the free tier.