{"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":16,"y":16,"width":288,"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":36,"y":35.7,"width":248,"height":28.6,"fontSize":22,"fontFamily":1,"text":"Model | Example","originalText":"Model | Example","textAlign":"left","verticalAlign":"middle","containerId":"shape-0","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":1}},{"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-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":16,"y":128,"width":288,"height":407.8,"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":36,"y":146,"width":248,"height":371.8,"fontSize":22,"fontFamily":1,"text":"Flat rate |\n$99/month (Pro plan)\nPer-seat |\n$10/user/month\nUsage-based | $0.01\nper API call over\n10K/month\nTiered | 0-10K: $0,\n10K-100K: $0.005,\n100K+: $0.001\nHybrid | $99 base +\n$10/seat + usage\noverage","originalText":"Flat rate |\n$99/month (Pro plan)\nPer-seat |\n$10/user/month\nUsage-based | $0.01\nper API call over\n10K/month\nTiered | 0-10K: $0,\n10K-100K: $0.005,\n100K+: $0.001\nHybrid | $99 base +\n$10/seat + usage\noverage","textAlign":"left","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":16,"y":579.8,"width":288,"height":1380.2,"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":36,"y":597.8,"width":248,"height":1344.2,"fontSize":22,"fontFamily":1,"text":"Metering Pipeline\n\nEvery billable action\ngenerates a usage\nevent:\n\nAPI call:\nINCR\nusage:{tenant_id}:ap\ni_calls:{hour_bucket\n}\n(Redis — real-time,\nfor rate limiting)\n\nAsync flush (every\nminute):\nRead Redis counters\n→ write to ClickHouse\n(durable metering)\n\nHourly aggregation:\nClickHouse:\nSUM(api_calls)\nGROUP BY\ntenant_id, hour\n\nMonthly billing (1st of\nmonth):\n1. Query aggregated\nusage for billing\nperiod\n2. Apply plan pricing:\nbase_charge +\n(seats ×\nper_seat_price)\n+ max(0, api_calls -\nincluded) ×\noverage_price\n+ max(0, storage_gb\n- included) ×\noverage_price\n3. Generate invoice\n4. Charge payment\nmethod\n5. Send receipt email\n\nPricing models:","originalText":"Metering Pipeline\n\nEvery billable action\ngenerates a usage\nevent:\n\nAPI call:\nINCR\nusage:{tenant_id}:ap\ni_calls:{hour_bucket\n}\n(Redis — real-time,\nfor rate limiting)\n\nAsync flush (every\nminute):\nRead Redis counters\n→ write to ClickHouse\n(durable metering)\n\nHourly aggregation:\nClickHouse:\nSUM(api_calls)\nGROUP BY\ntenant_id, hour\n\nMonthly billing (1st of\nmonth):\n1. Query aggregated\nusage for billing\nperiod\n2. Apply plan pricing:\nbase_charge +\n(seats ×\nper_seat_price)\n+ max(0, api_calls -\nincluded) ×\noverage_price\n+ max(0, storage_gb\n- included) ×\noverage_price\n3. Generate invoice\n4. Charge payment\nmethod\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":{}}