{"type":"excalidraw","version":2,"source":"https://AwesomeSystemDesign.dev","elements":[{"angle":0,"strokeColor":"#6577aa","backgroundColor":"#eef1fc","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-1"],"frameId":null,"roundness":null,"boundElements":[{"type":"text","id":"shape-1"}],"updated":0,"link":null,"locked":false,"id":"shape-0","type":"rectangle","seed":41,"x":36,"y":32,"width":192,"height":68,"customData":{"revealStep":1}},{"angle":0,"strokeColor":"#394557","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-1"],"frameId":null,"roundness":null,"boundElements":null,"updated":0,"link":null,"locked":false,"id":"shape-1","type":"text","seed":114,"x":56,"y":54.3,"width":152,"height":23.400000000000002,"fontSize":18,"fontFamily":1,"text":"Model | Example","originalText":"Model | Example","textAlign":"center","verticalAlign":"middle","containerId":"shape-0","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":1}},{"angle":0,"strokeColor":"#628572","backgroundColor":"#edf5ee","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-2"],"frameId":null,"roundness":null,"boundElements":[{"type":"text","id":"shape-3"}],"updated":0,"link":null,"locked":false,"id":"shape-2","type":"rectangle","seed":187,"x":268,"y":32,"width":390,"height":223.20000000000002,"customData":{"revealStep":2}},{"angle":0,"strokeColor":"#394557","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-2"],"frameId":null,"roundness":null,"boundElements":null,"updated":0,"link":null,"locked":false,"id":"shape-3","type":"text","seed":260,"x":288,"y":50,"width":350,"height":187.20000000000002,"fontSize":18,"fontFamily":1,"text":"Flat rate | $99/month (Pro plan)\nPer-seat | $10/user/month\nUsage-based | $0.01 per API call\nover 10K/month\nTiered | 0-10K: $0, 10K-100K:\n$0.005, 100K+: $0.001\nHybrid | $99 base + $10/seat +\nusage overage","originalText":"Flat rate | $99/month (Pro plan)\nPer-seat | $10/user/month\nUsage-based | $0.01 per API call\nover 10K/month\nTiered | 0-10K: $0, 10K-100K:\n$0.005, 100K+: $0.001\nHybrid | $99 base + $10/seat +\nusage overage","textAlign":"center","verticalAlign":"middle","containerId":"shape-2","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":2}},{"angle":0,"strokeColor":"#a68a53","backgroundColor":"#fff7e6","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-3"],"frameId":null,"roundness":null,"boundElements":[{"type":"text","id":"shape-5"}],"updated":0,"link":null,"locked":false,"id":"shape-4","type":"rectangle","seed":333,"x":36,"y":295.20000000000005,"width":582.3839800000001,"height":588.5,"customData":{"revealStep":3}},{"angle":0,"strokeColor":"#394557","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-3"],"frameId":null,"roundness":null,"boundElements":null,"updated":0,"link":null,"locked":false,"id":"shape-5","type":"text","seed":406,"x":56,"y":313.20000000000005,"width":542.3839800000001,"height":552.5,"fontSize":17,"fontFamily":1,"text":"Metering Pipeline\n\nEvery billable action generates a usage event:\n\nAPI call:\nINCR usage:{tenant_id}:api_calls:{hour_bucket}\n(Redis — real-time, for rate limiting)\n\nAsync flush (every minute):\nRead Redis counters → write to ClickHouse (durable metering)\n\nHourly aggregation:\nClickHouse: SUM(api_calls) GROUP BY tenant_id, hour\n\nMonthly billing (1st of month):\n1. Query aggregated usage for billing period\n2. Apply plan pricing:\nbase_charge + (seats × per_seat_price)\n+ max(0, api_calls - included) × overage_price\n+ max(0, storage_gb - included) × overage_price\n3. Generate invoice\n4. Charge payment method\n5. Send receipt email\n\nPricing models:","originalText":"Metering Pipeline\n\nEvery billable action generates a usage event:\n\nAPI call:\nINCR usage:{tenant_id}:api_calls:{hour_bucket}\n(Redis — real-time, for rate limiting)\n\nAsync flush (every minute):\nRead Redis counters → write to ClickHouse (durable metering)\n\nHourly aggregation:\nClickHouse: SUM(api_calls) GROUP BY tenant_id, hour\n\nMonthly billing (1st of month):\n1. Query aggregated usage for billing period\n2. Apply plan pricing:\nbase_charge + (seats × per_seat_price)\n+ max(0, api_calls - included) × overage_price\n+ max(0, storage_gb - included) × overage_price\n3. Generate invoice\n4. Charge payment method\n5. Send receipt email\n\nPricing models:","textAlign":"left","verticalAlign":"middle","containerId":"shape-4","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":3}}],"appState":{"viewBackgroundColor":"#fbfbf8","gridSize":null},"files":{}}