Security zones — shield + octagon
DMZ → app zone → data zone with shield gates, octagon STOP-on-fail, and arrow flows.
Rendering…
Make it your own.
{
"nodes": [
{ "id":"u","type":"actor","label":"User","x":40,"y":120 },
{ "id":"f","type":"shield","label":"Firewall","x":220,"y":80,"fill":"#dbeafe","stroke":"#1d4ed8" },
{ "id":"w","type":"shield","label":"WAF","x":220,"y":200,"fill":"#dbeafe","stroke":"#1d4ed8" },
{ "id":"dmz","type":"container","label":"DMZ","x":380,"y":40,"width":280,"height":260,"fill":"rgba(254,243,199,0.4)","stroke":"#a16207" },
{ "id":"lb","type":"hexagon","label":"Load balancer","x":420,"y":100,"fill":"#fef3c7" },
{ "id":"web","type":"rounded","label":"Web tier","x":420,"y":220,"fill":"#dbeafe" },
{ "id":"app","type":"container","label":"App zone","x":700,"y":40,"width":260,"height":260,"fill":"rgba(220,252,231,0.4)","stroke":"#15803d" },
{ "id":"api","type":"rounded","label":"API","x":740,"y":100,"fill":"#dcfce7" },
{ "id":"workers","type":"rounded","label":"Workers","x":740,"y":220,"fill":"#dcfce7" },
{ "id":"data","type":"container","label":"Data zone","x":1000,"y":40,"width":260,"height":260,"fill":"rgba(252,231,243,0.4)","stroke":"#be185d" },
{ "id":"db","type":"cylinder","label":"Postgres","x":1040,"y":100,"fill":"#fce7f3" },
{ "id":"blob","type":"cylinder","label":"S3","x":1040,"y":220,"fill":"#fce7f3" },
{ "id":"deny","type":"octagon","label":"DENY","x":380,"y":340,"fill":"#fecaca","stroke":"#b91c1c","motion":"pulse" }
],
"edges": [
{ "id":"e1","source":"u","target":"f","label":"https" },
{ "id":"e2","source":"f","target":"lb" },
{ "id":"e3","source":"lb","target":"web" },
{ "id":"e4","source":"web","target":"api" },
{ "id":"e5","source":"api","target":"workers" },
{ "id":"e6","source":"api","target":"db" },
{ "id":"e7","source":"workers","target":"blob" },
{ "id":"e8","source":"f","target":"deny","label":"blocked","style":{"stroke":"#b91c1c","strokeDasharray":"4 4"} }
]
}