feat(rflows): smaller funnels for faster simulation, all outcomes start at $0

- Shrink all funnel thresholds/capacities by ~5x so they fill and drain
  visibly within a few simulation ticks
- Zero out all outcome fundingReceived and reset statuses to not-started
- Same treatment for both BCRG Demo and Simulation Demo presets
- Funnels now cycle through fill/overflow/spend much more dynamically

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-03-15 05:17:02 +00:00
parent d7c1aaae9c
commit 35eadc8a34
1 changed files with 41 additions and 41 deletions

View File

@ -30,9 +30,9 @@ export const demoNodes: FlowNode[] = [
{
id: "bcrg", type: "funnel", position: { x: 660, y: 0 },
data: {
label: "BCRG", currentValue: 95000, desiredOutflow: 25000,
minThreshold: 25000, sufficientThreshold: 100000, maxThreshold: 150000,
maxCapacity: 225000, inflowRate: 15000, dynamicOverflow: true,
label: "BCRG", currentValue: 0, desiredOutflow: 5000,
minThreshold: 5000, sufficientThreshold: 20000, maxThreshold: 30000,
maxCapacity: 45000, inflowRate: 15000, dynamicOverflow: true,
overflowAllocations: [],
spendingAllocations: [
{ targetId: "alice", percentage: 20, color: SPENDING_COLORS[0] },
@ -48,9 +48,9 @@ export const demoNodes: FlowNode[] = [
{
id: "alice", type: "funnel", position: { x: 80, y: 400 },
data: {
label: "Alice", currentValue: 18000, desiredOutflow: 5000,
minThreshold: 5000, sufficientThreshold: 20000, maxThreshold: 30000,
maxCapacity: 45000, inflowRate: 3000,
label: "Alice", currentValue: 0, desiredOutflow: 1000,
minThreshold: 1000, sufficientThreshold: 4000, maxThreshold: 6000,
maxCapacity: 9000, inflowRate: 3000,
overflowAllocations: [],
spendingAllocations: [
{ targetId: "alice-comms", percentage: 50, color: SPENDING_COLORS[0] },
@ -61,9 +61,9 @@ export const demoNodes: FlowNode[] = [
{
id: "bob", type: "funnel", position: { x: 380, y: 400 },
data: {
label: "Bob", currentValue: 14000, desiredOutflow: 4000,
minThreshold: 4000, sufficientThreshold: 16000, maxThreshold: 24000,
maxCapacity: 36000, inflowRate: 3000,
label: "Bob", currentValue: 0, desiredOutflow: 800,
minThreshold: 800, sufficientThreshold: 3200, maxThreshold: 4800,
maxCapacity: 7200, inflowRate: 3000,
overflowAllocations: [],
spendingAllocations: [
{ targetId: "bob-research", percentage: 60, color: SPENDING_COLORS[0] },
@ -74,9 +74,9 @@ export const demoNodes: FlowNode[] = [
{
id: "carol", type: "funnel", position: { x: 680, y: 400 },
data: {
label: "Carol", currentValue: 22000, desiredOutflow: 6000,
minThreshold: 6000, sufficientThreshold: 24000, maxThreshold: 36000,
maxCapacity: 54000, inflowRate: 3000,
label: "Carol", currentValue: 0, desiredOutflow: 1200,
minThreshold: 1200, sufficientThreshold: 4800, maxThreshold: 7200,
maxCapacity: 10800, inflowRate: 3000,
overflowAllocations: [],
spendingAllocations: [
{ targetId: "carol-ops", percentage: 50, color: SPENDING_COLORS[0] },
@ -87,9 +87,9 @@ export const demoNodes: FlowNode[] = [
{
id: "dave", type: "funnel", position: { x: 980, y: 400 },
data: {
label: "Dave", currentValue: 10000, desiredOutflow: 5000,
minThreshold: 5000, sufficientThreshold: 20000, maxThreshold: 30000,
maxCapacity: 45000, inflowRate: 3000,
label: "Dave", currentValue: 0, desiredOutflow: 1000,
minThreshold: 1000, sufficientThreshold: 4000, maxThreshold: 6000,
maxCapacity: 9000, inflowRate: 3000,
overflowAllocations: [],
spendingAllocations: [
{ targetId: "dave-design", percentage: 45, color: SPENDING_COLORS[0] },
@ -100,9 +100,9 @@ export const demoNodes: FlowNode[] = [
{
id: "eve", type: "funnel", position: { x: 1280, y: 400 },
data: {
label: "Eve", currentValue: 16000, desiredOutflow: 5000,
minThreshold: 5000, sufficientThreshold: 20000, maxThreshold: 30000,
maxCapacity: 45000, inflowRate: 3000,
label: "Eve", currentValue: 0, desiredOutflow: 1000,
minThreshold: 1000, sufficientThreshold: 4000, maxThreshold: 6000,
maxCapacity: 9000, inflowRate: 3000,
overflowAllocations: [],
spendingAllocations: [
{ targetId: "eve-legal", percentage: 40, color: SPENDING_COLORS[0] },
@ -118,7 +118,7 @@ export const demoNodes: FlowNode[] = [
{ id: "alice-comms", type: "outcome", position: { x: -20, y: 850 },
data: {
label: "Comms Strategy", description: "Community communications and outreach",
fundingReceived: 12000, fundingTarget: 12000, status: "completed",
fundingReceived: 0, fundingTarget: 12000, status: "not-started",
phases: [
{ name: "Planning", fundingThreshold: 4000, tasks: [
{ label: "Stakeholder mapping", completed: true },
@ -136,7 +136,7 @@ export const demoNodes: FlowNode[] = [
{ id: "alice-events", type: "outcome", position: { x: 260, y: 850 },
data: {
label: "Event Series", description: "Quarterly community gatherings",
fundingReceived: 6000, fundingTarget: 15000, status: "in-progress",
fundingReceived: 0, fundingTarget: 15000, status: "not-started",
phases: [
{ name: "Venue & Logistics", fundingThreshold: 5000, tasks: [
{ label: "Venue scouting", completed: true },
@ -153,7 +153,7 @@ export const demoNodes: FlowNode[] = [
{ id: "bob-research", type: "outcome", position: { x: 400, y: 850 },
data: {
label: "Field Research", description: "Participatory action research in partner communities",
fundingReceived: 8000, fundingTarget: 20000, status: "in-progress",
fundingReceived: 0, fundingTarget: 20000, status: "not-started",
phases: [
{ name: "Literature Review", fundingThreshold: 5000, tasks: [
{ label: "Systematic review", completed: true },
@ -168,7 +168,7 @@ export const demoNodes: FlowNode[] = [
{ id: "bob-writing", type: "outcome", position: { x: 680, y: 850 },
data: {
label: "Publications", description: "Research papers and policy briefs",
fundingReceived: 2000, fundingTarget: 10000, status: "not-started",
fundingReceived: 0, fundingTarget: 10000, status: "not-started",
phases: [
{ name: "Drafting", fundingThreshold: 5000, tasks: [
{ label: "Working paper draft", completed: false },
@ -183,7 +183,7 @@ export const demoNodes: FlowNode[] = [
{ id: "carol-ops", type: "outcome", position: { x: 820, y: 850 },
data: {
label: "Operations", description: "Day-to-day operational management",
fundingReceived: 18000, fundingTarget: 18000, status: "completed",
fundingReceived: 0, fundingTarget: 18000, status: "not-started",
phases: [
{ name: "Setup", fundingThreshold: 6000, tasks: [
{ label: "Process documentation", completed: true },
@ -201,7 +201,7 @@ export const demoNodes: FlowNode[] = [
{ id: "carol-infra", type: "outcome", position: { x: 1100, y: 850 },
data: {
label: "Infrastructure", description: "Shared infrastructure and hosting",
fundingReceived: 10000, fundingTarget: 20000, status: "in-progress",
fundingReceived: 0, fundingTarget: 20000, status: "not-started",
phases: [
{ name: "Provisioning", fundingThreshold: 8000, tasks: [
{ label: "Server setup", completed: true },
@ -218,7 +218,7 @@ export const demoNodes: FlowNode[] = [
{ id: "dave-design", type: "outcome", position: { x: 1240, y: 850 },
data: {
label: "Design System", description: "Shared UI/UX design system",
fundingReceived: 15000, fundingTarget: 15000, status: "completed",
fundingReceived: 0, fundingTarget: 15000, status: "not-started",
phases: [
{ name: "Foundations", fundingThreshold: 5000, tasks: [
{ label: "Color & type system", completed: true },
@ -236,7 +236,7 @@ export const demoNodes: FlowNode[] = [
{ id: "dave-prototypes", type: "outcome", position: { x: 1520, y: 850 },
data: {
label: "Prototypes", description: "Rapid prototyping of new tools",
fundingReceived: 3000, fundingTarget: 12000, status: "in-progress",
fundingReceived: 0, fundingTarget: 12000, status: "not-started",
phases: [
{ name: "Discovery", fundingThreshold: 4000, tasks: [
{ label: "User interviews", completed: true },
@ -254,7 +254,7 @@ export const demoNodes: FlowNode[] = [
{ id: "eve-legal", type: "outcome", position: { x: 1660, y: 850 },
data: {
label: "Legal Framework", description: "Legal structure and agreements",
fundingReceived: 10000, fundingTarget: 10000, status: "completed",
fundingReceived: 0, fundingTarget: 10000, status: "not-started",
phases: [
{ name: "Research", fundingThreshold: 4000, tasks: [
{ label: "Jurisdiction analysis", completed: true },
@ -269,7 +269,7 @@ export const demoNodes: FlowNode[] = [
{ id: "eve-compliance", type: "outcome", position: { x: 1940, y: 850 },
data: {
label: "Compliance", description: "Regulatory compliance and reporting",
fundingReceived: 4000, fundingTarget: 12000, status: "in-progress",
fundingReceived: 0, fundingTarget: 12000, status: "not-started",
phases: [
{ name: "Assessment", fundingThreshold: 4000, tasks: [
{ label: "Compliance gap analysis", completed: true },
@ -285,7 +285,7 @@ export const demoNodes: FlowNode[] = [
{ id: "eve-governance", type: "outcome", position: { x: 2220, y: 850 },
data: {
label: "Governance Model", description: "Governance framework and voting mechanisms",
fundingReceived: 1000, fundingTarget: 8000, status: "not-started",
fundingReceived: 0, fundingTarget: 8000, status: "not-started",
phases: [
{ name: "Design", fundingThreshold: 3000, tasks: [
{ label: "Governance charter draft", completed: false },
@ -319,9 +319,9 @@ export const simDemoNodes: FlowNode[] = [
{
id: "treasury", type: "funnel", position: { x: 560, y: 0 },
data: {
label: "Treasury", currentValue: 0, desiredOutflow: 10000,
minThreshold: 10000, sufficientThreshold: 40000, maxThreshold: 60000,
maxCapacity: 90000, inflowRate: 12000, dynamicOverflow: true,
label: "Treasury", currentValue: 0, desiredOutflow: 2000,
minThreshold: 2000, sufficientThreshold: 8000, maxThreshold: 12000,
maxCapacity: 18000, inflowRate: 12000, dynamicOverflow: true,
overflowAllocations: [],
spendingAllocations: [
{ targetId: "ops", percentage: 40, color: SPENDING_COLORS[0] },
@ -335,9 +335,9 @@ export const simDemoNodes: FlowNode[] = [
{
id: "ops", type: "funnel", position: { x: 200, y: 400 },
data: {
label: "Operations", currentValue: 0, desiredOutflow: 4000,
minThreshold: 4000, sufficientThreshold: 16000, maxThreshold: 24000,
maxCapacity: 36000, inflowRate: 0,
label: "Operations", currentValue: 0, desiredOutflow: 800,
minThreshold: 800, sufficientThreshold: 3200, maxThreshold: 4800,
maxCapacity: 7200, inflowRate: 0,
overflowAllocations: [
{ targetId: "community", percentage: 100, color: OVERFLOW_COLORS[0] },
],
@ -350,9 +350,9 @@ export const simDemoNodes: FlowNode[] = [
{
id: "research", type: "funnel", position: { x: 560, y: 400 },
data: {
label: "Research", currentValue: 0, desiredOutflow: 3500,
minThreshold: 3500, sufficientThreshold: 14000, maxThreshold: 21000,
maxCapacity: 31500, inflowRate: 0,
label: "Research", currentValue: 0, desiredOutflow: 700,
minThreshold: 700, sufficientThreshold: 2800, maxThreshold: 4200,
maxCapacity: 6300, inflowRate: 0,
overflowAllocations: [
{ targetId: "community", percentage: 100, color: OVERFLOW_COLORS[1] },
],
@ -365,9 +365,9 @@ export const simDemoNodes: FlowNode[] = [
{
id: "community", type: "funnel", position: { x: 920, y: 400 },
data: {
label: "Community", currentValue: 0, desiredOutflow: 2500,
minThreshold: 2500, sufficientThreshold: 10000, maxThreshold: 15000,
maxCapacity: 22500, inflowRate: 0,
label: "Community", currentValue: 0, desiredOutflow: 500,
minThreshold: 500, sufficientThreshold: 2000, maxThreshold: 3000,
maxCapacity: 4500, inflowRate: 0,
overflowAllocations: [],
spendingAllocations: [
{ targetId: "events", percentage: 50, color: SPENDING_COLORS[4] },