<div class="chartlet-wrapper"><style>.chartlet-stage{position:relative;display:inline-block;max-width:100%;vertical-align:top}.chartlet-stage>svg{display:block}.chartlet-hotspot{position:absolute;border-radius:8px;cursor:pointer}.chartlet-focus{margin:0 0 12px 0;font-size:13px}.chartlet-focus summary{cursor:pointer;min-height:24px}.chartlet-focus fieldset{border:none;padding:0;margin:4px 0 0 0}.chartlet-focus label{display:inline-flex;align-items:center;min-height:44px;margin-right:14px;cursor:pointer;white-space:nowrap}.chartlet-focus input{margin-right:4px}.chartlet-focus input:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.chartlet-wrapper:has(.chartlet-focus-node:checked) #chartlet-b56804eaa07d6435 .chartlet-f{opacity:.18}#chartlet-b56804eaa07d6435-hs-0{left:1.846%;top:48.641%;width:8%;height:14.493%}#chartlet-b56804eaa07d6435-hs-1{left:16.637%;top:49.185%;width:8%;height:13.406%}#chartlet-b56804eaa07d6435-hs-2{left:33.911%;top:50.272%;width:8.066%;height:11.232%}#chartlet-b56804eaa07d6435-hs-3{left:50.063%;top:51.902%;width:9.596%;height:15.58%}#chartlet-b56804eaa07d6435-hs-4{left:73.35%;top:13.315%;width:9.336%;height:11.232%}#chartlet-b56804eaa07d6435-hs-5{left:72.67%;top:35.054%;width:10.697%;height:13.043%}#chartlet-b56804eaa07d6435-hs-6{left:72.81%;top:53.17%;width:10.416%;height:13.043%}#chartlet-b56804eaa07d6435-hs-7{left:87.398%;top:74.004%;width:10.756%;height:11.232%}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-0:checked) #chartlet-b56804eaa07d6435 .chartlet-f-0{opacity:1}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-0:checked) #chartlet-b56804eaa07d6435 .chartlet-n-0 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-0:checked) #chartlet-b56804eaa07d6435 .chartlet-n-0 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-1:checked) #chartlet-b56804eaa07d6435 .chartlet-f-1{opacity:1}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-1:checked) #chartlet-b56804eaa07d6435 .chartlet-n-1 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-1:checked) #chartlet-b56804eaa07d6435 .chartlet-n-1 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-2:checked) #chartlet-b56804eaa07d6435 .chartlet-f-2{opacity:1}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-2:checked) #chartlet-b56804eaa07d6435 .chartlet-n-2 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-2:checked) #chartlet-b56804eaa07d6435 .chartlet-n-2 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-3:checked) #chartlet-b56804eaa07d6435 .chartlet-f-3{opacity:1}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-3:checked) #chartlet-b56804eaa07d6435 .chartlet-n-3 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-3:checked) #chartlet-b56804eaa07d6435 .chartlet-n-3 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-4:checked) #chartlet-b56804eaa07d6435 .chartlet-f-4{opacity:1}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-4:checked) #chartlet-b56804eaa07d6435 .chartlet-n-4 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-4:checked) #chartlet-b56804eaa07d6435 .chartlet-n-4 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-5:checked) #chartlet-b56804eaa07d6435 .chartlet-f-5{opacity:1}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-5:checked) #chartlet-b56804eaa07d6435 .chartlet-n-5 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-5:checked) #chartlet-b56804eaa07d6435 .chartlet-n-5 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-6:checked) #chartlet-b56804eaa07d6435 .chartlet-f-6{opacity:1}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-6:checked) #chartlet-b56804eaa07d6435 .chartlet-n-6 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-6:checked) #chartlet-b56804eaa07d6435 .chartlet-n-6 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-7:checked) #chartlet-b56804eaa07d6435 .chartlet-f-7{opacity:1}.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-7:checked) #chartlet-b56804eaa07d6435 .chartlet-n-7 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-b56804eaa07d6435-focus-7:checked) #chartlet-b56804eaa07d6435 .chartlet-n-7 .chartlet-seq-box{stroke-width:3}</style><details class="chartlet-focus"><summary>Focus</summary><fieldset><label><input type="radio" name="chartlet-b56804eaa07d6435-focus" checked> Show all</label><label><input type="radio" name="chartlet-b56804eaa07d6435-focus" class="chartlet-focus-node" id="chartlet-b56804eaa07d6435-focus-0"> Guest</label><label><input type="radio" name="chartlet-b56804eaa07d6435-focus" class="chartlet-focus-node" id="chartlet-b56804eaa07d6435-focus-1"> Booking app</label><label><input type="radio" name="chartlet-b56804eaa07d6435-focus" class="chartlet-focus-node" id="chartlet-b56804eaa07d6435-focus-2"> API gateway</label><label><input type="radio" name="chartlet-b56804eaa07d6435-focus" class="chartlet-focus-node" id="chartlet-b56804eaa07d6435-focus-3"> Booking service</label><label><input type="radio" name="chartlet-b56804eaa07d6435-focus" class="chartlet-focus-node" id="chartlet-b56804eaa07d6435-focus-4"> Pricing service</label><label><input type="radio" name="chartlet-b56804eaa07d6435-focus" class="chartlet-focus-node" id="chartlet-b56804eaa07d6435-focus-5"> Bookings</label><label><input type="radio" name="chartlet-b56804eaa07d6435-focus" class="chartlet-focus-node" id="chartlet-b56804eaa07d6435-focus-6"> Legacy inventory</label><label><input type="radio" name="chartlet-b56804eaa07d6435-focus" class="chartlet-focus-node" id="chartlet-b56804eaa07d6435-focus-7"> Payment provider</label></fieldset></details><figure class="chartlet-figure" data-viz="chart"><figcaption>Booking platform: who runs what</figcaption><div class="chartlet-stage"><svg xmlns="http://www.w3.org/2000/svg" width="1300" height="552" viewBox="0 0 1300 552" id="chartlet-b56804eaa07d6435" role="img" aria-labelledby="chartlet-b56804eaa07d6435-title chartlet-b56804eaa07d6435-description" class="chartlet-root"><title id="chartlet-b56804eaa07d6435-title">Booking platform: who runs what</title><desc id="chartlet-b56804eaa07d6435-description">Architecture diagram with 8 components and 7 connections in 2 boundaries. Cloud account: API gateway, Booking service, Pricing service, Data zone. Data zone (in Cloud account): Bookings, Legacy inventory. Most connected: Booking service (5 connections). Nothing leads into Guest. Bottleneck: API gateway; without it the diagram falls apart. Guest (person): connects to Booking app (books). Booking app (frontend): connects to API gateway (via HTTPS). API gateway (service): connects to Booking service (routes). Booking service (service): connects to Pricing service (asks price), Bookings (via SQL), Legacy inventory (checks rooms) and Payment provider (charges, via HTTPS). Pricing service (service): no outgoing connection. Bookings (database): no outgoing connection. Legacy inventory (database): no outgoing connection. Payment provider (external system): no outgoing connection. Perspective Team: Storefront: Booking app; Bookings: Booking service, Pricing service; Platform: API gateway, Bookings, Legacy inventory; not stated: Guest, Payment provider. The team named in the service catalogue runs each component.</desc><style>.chartlet-root{--chartlet-text:#172033;--chartlet-muted:#344054;--chartlet-grid:#d9dee8;--chartlet-zero:#667085;--chartlet-accent:#2563eb;--chartlet-background:#fff;--chartlet-color-1:#2563eb;--chartlet-color-2:#c2410c;--chartlet-color-3:#475569;--chartlet-color-4:#111827;max-width:100%;height:auto;font-family:Inter,ui-sans-serif,system-ui,sans-serif;color:var(--chartlet-text)}#chartlet-b56804eaa07d6435 .chartlet-title{font-size:22px;font-weight:650;fill:var(--chartlet-text)}#chartlet-b56804eaa07d6435 .chartlet-label,#chartlet-b56804eaa07d6435 .chartlet-tick,#chartlet-b56804eaa07d6435 .chartlet-value,#chartlet-b56804eaa07d6435 .chartlet-value-inverse,#chartlet-b56804eaa07d6435 .chartlet-axis-title{font-size:12px;fill:var(--chartlet-muted)}#chartlet-b56804eaa07d6435 .chartlet-value,#chartlet-b56804eaa07d6435 .chartlet-value-inverse{font-weight:600}#chartlet-b56804eaa07d6435 .chartlet-value{fill:var(--chartlet-text)}#chartlet-b56804eaa07d6435 .chartlet-value-inverse{fill:var(--chartlet-background)}#chartlet-b56804eaa07d6435 .chartlet-axis-title{font-weight:600}#chartlet-b56804eaa07d6435 .chartlet-grid{stroke:var(--chartlet-grid);stroke-width:1}#chartlet-b56804eaa07d6435 .chartlet-zero{stroke:var(--chartlet-zero);stroke-width:1.5}#chartlet-b56804eaa07d6435 .chartlet-bar,#chartlet-b56804eaa07d6435 .chartlet-point{fill:var(--chartlet-accent)}#chartlet-b56804eaa07d6435 .chartlet-line{fill:none;stroke:var(--chartlet-accent);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}#chartlet-b56804eaa07d6435 .chartlet-background{fill:var(--chartlet-background)}.chartlet-root{--chartlet-node:#eef3fd;--chartlet-lane:#f7f9fc;--chartlet-lane-head:#eef1f6;--chartlet-shadow:rgba(16,24,40,.09);--chartlet-role-blue:#2563eb;--chartlet-role-blue-fill:#eef3fd;--chartlet-role-green:#15803d;--chartlet-role-green-fill:#ecfdf3;--chartlet-role-amber:#b45309;--chartlet-role-amber-fill:#fff7e8;--chartlet-role-teal:#0f766e;--chartlet-role-teal-fill:#e9faf7;--chartlet-role-violet:#6d28d9;--chartlet-role-violet-fill:#f3efff;--chartlet-role-gray:#667085;--chartlet-role-gray-fill:#f7f8fa;--chartlet-role-red:#b42318;--chartlet-role-red-fill:#fef3f2}.chartlet-root.chartlet-theme-dark{--chartlet-node:#1a2436;--chartlet-lane:#121925;--chartlet-lane-head:#18212f;--chartlet-shadow:rgba(0,0,0,.45);--chartlet-role-blue:#7ea6ff;--chartlet-role-blue-fill:#1a2436;--chartlet-role-green:#4ade80;--chartlet-role-green-fill:#132a1d;--chartlet-role-amber:#fbbf24;--chartlet-role-amber-fill:#2b2210;--chartlet-role-teal:#2dd4bf;--chartlet-role-teal-fill:#0f2a27;--chartlet-role-violet:#b69cff;--chartlet-role-violet-fill:#231c38;--chartlet-role-gray:#9aa7bd;--chartlet-role-gray-fill:#161d29;--chartlet-role-red:#f97066;--chartlet-role-red-fill:#2d1616}#chartlet-b56804eaa07d6435 .chartlet-role-blue{fill:var(--chartlet-role-blue-fill);stroke:var(--chartlet-role-blue)}#chartlet-b56804eaa07d6435 .chartlet-role-green{fill:var(--chartlet-role-green-fill);stroke:var(--chartlet-role-green)}#chartlet-b56804eaa07d6435 .chartlet-role-amber{fill:var(--chartlet-role-amber-fill);stroke:var(--chartlet-role-amber)}#chartlet-b56804eaa07d6435 .chartlet-role-teal{fill:var(--chartlet-role-teal-fill);stroke:var(--chartlet-role-teal)}#chartlet-b56804eaa07d6435 .chartlet-role-violet{fill:var(--chartlet-role-violet-fill);stroke:var(--chartlet-role-violet)}#chartlet-b56804eaa07d6435 .chartlet-role-gray{fill:var(--chartlet-role-gray-fill);stroke:var(--chartlet-role-gray)}#chartlet-b56804eaa07d6435 .chartlet-role-red{fill:var(--chartlet-role-red-fill);stroke:var(--chartlet-role-red)}#chartlet-b56804eaa07d6435 .chartlet-diagram-rim{fill:none;stroke:var(--chartlet-role-teal);stroke-width:1.5}#chartlet-b56804eaa07d6435 .chartlet-diagram-shadow{fill:var(--chartlet-shadow);stroke:none;rx:7px}#chartlet-b56804eaa07d6435 .chartlet-diagram-chip{fill:var(--chartlet-background);stroke:var(--chartlet-grid);stroke-width:1;rx:4px}#chartlet-b56804eaa07d6435 .chartlet-diagram-chip-text{font-size:12px;fill:var(--chartlet-text)}#chartlet-b56804eaa07d6435 .chartlet-diagram-badge{fill:var(--chartlet-accent);stroke:var(--chartlet-background);stroke-width:2}#chartlet-b56804eaa07d6435 .chartlet-diagram-badge-text{font-size:10px;font-weight:700;fill:var(--chartlet-background)}#chartlet-b56804eaa07d6435 .chartlet-flow-node{stroke-width:1.5;stroke-linejoin:round;rx:7px}#chartlet-b56804eaa07d6435 .chartlet-flow-start{stroke-width:2}#chartlet-b56804eaa07d6435 .chartlet-flow-end{stroke-width:3}#chartlet-b56804eaa07d6435 .chartlet-flow-external{stroke-dasharray:5 3}#chartlet-b56804eaa07d6435 .chartlet-flow-inner{stroke:var(--chartlet-role-blue);stroke-width:1}#chartlet-b56804eaa07d6435 .chartlet-flow-label{font-size:13px;font-weight:600;fill:var(--chartlet-text)}#chartlet-b56804eaa07d6435 .chartlet-flow-sublabel{font-size:11px;fill:var(--chartlet-muted)}#chartlet-b56804eaa07d6435 .chartlet-flow-edge{fill:none;stroke:var(--chartlet-zero);stroke-width:1.4;stroke-linejoin:round}#chartlet-b56804eaa07d6435 .chartlet-flow-dashed{stroke-dasharray:5 4}#chartlet-b56804eaa07d6435 .chartlet-flow-dotted{stroke-dasharray:1 4;stroke-linecap:round}#chartlet-b56804eaa07d6435 .chartlet-flow-main{stroke:var(--chartlet-accent);stroke-width:2.2}#chartlet-b56804eaa07d6435 .chartlet-flow-head{fill:var(--chartlet-zero);stroke:var(--chartlet-zero);stroke-width:1;stroke-linejoin:round}#chartlet-b56804eaa07d6435 .chartlet-flow-main-head{fill:var(--chartlet-accent);stroke:var(--chartlet-accent)}#chartlet-b56804eaa07d6435 .chartlet-flow-lane{fill:var(--chartlet-lane);stroke:var(--chartlet-grid);stroke-width:1}#chartlet-b56804eaa07d6435 .chartlet-flow-lane-alt{fill:var(--chartlet-background)}#chartlet-b56804eaa07d6435 .chartlet-flow-lane-head{fill:var(--chartlet-lane-head);stroke:none}#chartlet-b56804eaa07d6435 .chartlet-flow-lane-label{font-size:11px;font-weight:650;fill:var(--chartlet-muted);letter-spacing:.04em}#chartlet-b56804eaa07d6435 .chartlet-flow-group{fill:var(--chartlet-accent);fill-opacity:.04;stroke:var(--chartlet-zero);stroke-width:1;stroke-dasharray:4 3;rx:10px}#chartlet-b56804eaa07d6435 .chartlet-flow-group-label{font-size:11px;font-weight:600;fill:var(--chartlet-muted)}#chartlet-b56804eaa07d6435 .chartlet-arch-head{fill:var(--chartlet-role-violet-fill);stroke:var(--chartlet-role-violet);stroke-width:1.5}#chartlet-b56804eaa07d6435 .chartlet-arch-dot{fill:var(--chartlet-role-blue);stroke:none}.chartlet-root{--chartlet-part-5:#0f766e;--chartlet-part-6:#6d28d9;--chartlet-part-7:#b45309;--chartlet-part-8:#be185d}.chartlet-root.chartlet-theme-dark{--chartlet-part-5:#2dd4bf;--chartlet-part-6:#b69cff;--chartlet-part-7:#fbbf24;--chartlet-part-8:#f472b6}#chartlet-b56804eaa07d6435 .chartlet-part{stroke:none}#chartlet-b56804eaa07d6435 .chartlet-part-1{fill:var(--chartlet-color-1)}#chartlet-b56804eaa07d6435 .chartlet-part-2{fill:var(--chartlet-color-2)}#chartlet-b56804eaa07d6435 .chartlet-part-3{fill:var(--chartlet-color-3)}#chartlet-b56804eaa07d6435 .chartlet-part-4{fill:var(--chartlet-color-4)}#chartlet-b56804eaa07d6435 .chartlet-part-5{fill:var(--chartlet-part-5)}#chartlet-b56804eaa07d6435 .chartlet-part-6{fill:var(--chartlet-part-6)}#chartlet-b56804eaa07d6435 .chartlet-part-7{fill:var(--chartlet-part-7)}#chartlet-b56804eaa07d6435 .chartlet-part-8{fill:var(--chartlet-part-8)}#chartlet-b56804eaa07d6435 .chartlet-legend{font-size:12px;fill:var(--chartlet-muted)}#chartlet-b56804eaa07d6435 .chartlet-part-none{fill:none;stroke:var(--chartlet-muted);stroke-width:1;stroke-dasharray:2 2}</style><rect x="428.839" y="45.5" width="678.93" height="344" class="chartlet-flow-group"/><text x="436.839" y="58.5" text-anchor="start" class="chartlet-flow-group-label">Cloud account</text><rect x="932.709" y="165.5" width="163.06" height="212" class="chartlet-flow-group"/><text x="940.709" y="178.5" text-anchor="start" class="chartlet-flow-group-label">Data zone</text><g class="chartlet-f chartlet-f-0 chartlet-f-1"><polyline points="128,308.5 208.276,308.5" class="chartlet-flow-edge"><title>Guest → Booking app: books</title></polyline><polyline points="208.276,312 216.276,308.5 208.276,305 208.276,312" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-f-1 chartlet-f-2"><polyline points="320.276,308.5 432.839,308.5" class="chartlet-flow-edge"><title>Booking app → API gateway: [HTTPS]</title></polyline><polyline points="432.839,312 440.839,308.5 432.839,305 432.839,312" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-f-2 chartlet-f-3"><polyline points="545.699,308.5 626.639,308.5 626.639,329.5 642.824,329.5" class="chartlet-flow-edge"><title>API gateway → Booking service: routes</title></polyline><polyline points="642.824,333 650.824,329.5 642.824,326 642.824,333" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-f-3 chartlet-f-4"><polyline points="775.574,302.5 898.354,302.5 898.354,104.5 945.554,104.5" class="chartlet-flow-edge"><title>Booking service → Pricing service: asks price</title></polyline><polyline points="945.554,108 953.554,104.5 945.554,101 945.554,108" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-f-3 chartlet-f-5"><polyline points="775.574,320.5 908.431,320.5 908.431,229.5 936.709,229.5" class="chartlet-flow-edge"><title>Booking service → Bookings: [SQL]</title></polyline><polyline points="936.709,233 944.709,229.5 936.709,226 936.709,233" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-f-3 chartlet-f-6"><polyline points="775.574,338.5 898.354,338.5 898.354,329.5 938.534,329.5" class="chartlet-flow-edge"><title>Booking service → Legacy inventory: checks rooms</title></polyline><polyline points="938.534,333 946.534,329.5 938.534,326 938.534,333" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-f-3 chartlet-f-7"><polyline points="775.574,356.5 898.354,356.5 898.354,439.5 1128.17,439.5" class="chartlet-flow-edge"><title>Booking service → Payment provider: charges [HTTPS]</title></polyline><polyline points="1128.17,443 1136.17,439.5 1128.17,436 1128.17,443" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-n-0 chartlet-f-0 chartlet-f-1"></g><g class="chartlet-f chartlet-n-1 chartlet-f-0 chartlet-f-1 chartlet-f-2"></g><g class="chartlet-f chartlet-n-2 chartlet-f-1 chartlet-f-2 chartlet-f-3"></g><g class="chartlet-f chartlet-n-3 chartlet-f-2 chartlet-f-3 chartlet-f-4 chartlet-f-5 chartlet-f-6 chartlet-f-7"></g><g class="chartlet-f chartlet-n-4 chartlet-f-3 chartlet-f-4"></g><g class="chartlet-f chartlet-n-5 chartlet-f-3 chartlet-f-5"></g><g class="chartlet-f chartlet-n-6 chartlet-f-3 chartlet-f-6"></g><g class="chartlet-f chartlet-n-7 chartlet-f-3 chartlet-f-7"></g><g class="chartlet-f chartlet-f-0 chartlet-f-1"><rect x="132" y="283.5" width="43.6" height="21" class="chartlet-diagram-chip"/><text x="137" y="297.5" text-anchor="start" class="chartlet-diagram-chip-text">books</text></g><g class="chartlet-f chartlet-f-1 chartlet-f-2"><rect x="324.276" y="283.5" width="63.64" height="21" class="chartlet-diagram-chip"/><text x="329.276" y="297.5" text-anchor="start" class="chartlet-diagram-chip-text">[HTTPS]</text></g><g class="chartlet-f chartlet-f-2 chartlet-f-3"><rect x="549.699" y="283.5" width="50.32" height="21" class="chartlet-diagram-chip"/><text x="554.699" y="297.5" text-anchor="start" class="chartlet-diagram-chip-text">routes</text></g><g class="chartlet-f chartlet-f-3 chartlet-f-4"><rect x="779.574" y="277.5" width="71.2" height="21" class="chartlet-diagram-chip"/><text x="784.574" y="291.5" text-anchor="start" class="chartlet-diagram-chip-text">asks price</text></g><g class="chartlet-f chartlet-f-3 chartlet-f-5"><rect x="853.774" y="277.5" width="47.56" height="21" class="chartlet-diagram-chip"/><text x="858.774" y="291.5" text-anchor="start" class="chartlet-diagram-chip-text">[SQL]</text></g><g class="chartlet-f chartlet-f-3 chartlet-f-6"><rect x="779.574" y="360.5" width="91.84" height="21" class="chartlet-diagram-chip"/><text x="784.574" y="374.5" text-anchor="start" class="chartlet-diagram-chip-text">checks rooms</text></g><g class="chartlet-f chartlet-f-3 chartlet-f-7"><rect x="874.414" y="380.5" width="63.64" height="36" class="chartlet-diagram-chip"/><text x="879.414" y="394.5" text-anchor="start" class="chartlet-diagram-chip-text">charges</text><text x="879.414" y="409.5" text-anchor="start" class="chartlet-diagram-chip-text">[HTTPS]</text></g><g class="chartlet-f chartlet-n-0 chartlet-f-0 chartlet-f-1"><rect x="24" y="271" width="104" height="80" class="chartlet-diagram-shadow"/><rect x="24" y="268.5" width="104" height="80" class="chartlet-flow-node chartlet-role-violet"><title>Guest – not stated</title></rect><circle cx="76" cy="279.5" r="6" class="chartlet-arch-head"/><text x="76" y="308" text-anchor="middle" class="chartlet-flow-label">Guest</text><text x="76" y="322" text-anchor="middle" class="chartlet-flow-sublabel">not stated</text><rect x="36" y="336.5" width="80" height="6" class="chartlet-part chartlet-part-none"><title>not stated</title></rect></g><g class="chartlet-f chartlet-n-1 chartlet-f-0 chartlet-f-1 chartlet-f-2"><rect x="216.276" y="274" width="104" height="74" class="chartlet-diagram-shadow"/><rect x="216.276" y="271.5" width="104" height="74" class="chartlet-flow-node chartlet-role-blue"><title>Booking app – Storefront</title></rect><line x1="216.276" y1="283.5" x2="320.276" y2="283.5" class="chartlet-flow-inner"/><circle cx="224.276" cy="277.5" r="1.8" class="chartlet-arch-dot"/><circle cx="230.276" cy="277.5" r="1.8" class="chartlet-arch-dot"/><circle cx="236.276" cy="277.5" r="1.8" class="chartlet-arch-dot"/><text x="268.276" y="306" text-anchor="middle" class="chartlet-flow-label">Booking app</text><text x="268.276" y="320" text-anchor="middle" class="chartlet-flow-sublabel">Storefront</text><rect x="228.276" y="333.5" width="80" height="6" class="chartlet-part chartlet-part-1"><title>Storefront</title></rect></g><g class="chartlet-f chartlet-n-2 chartlet-f-1 chartlet-f-2 chartlet-f-3"><rect x="440.839" y="280" width="104.86" height="62" class="chartlet-diagram-shadow"/><rect x="440.839" y="277.5" width="104.86" height="62" class="chartlet-flow-node chartlet-role-blue"><title>API gateway – Platform</title></rect><text x="493.269" y="300" text-anchor="middle" class="chartlet-flow-label">API gateway</text><text x="493.269" y="314" text-anchor="middle" class="chartlet-flow-sublabel">Platform</text><rect x="452.839" y="327.5" width="80.86" height="6" class="chartlet-part chartlet-part-3"><title>Platform</title></rect></g><g class="chartlet-f chartlet-n-3 chartlet-f-2 chartlet-f-3 chartlet-f-4 chartlet-f-5 chartlet-f-6 chartlet-f-7"><rect x="650.824" y="289" width="124.75" height="86" class="chartlet-diagram-shadow"/><rect x="650.824" y="286.5" width="124.75" height="86" class="chartlet-flow-node chartlet-role-blue"><title>Booking service – Java · Bookings</title></rect><text x="713.199" y="321" text-anchor="middle" class="chartlet-flow-label">Booking service</text><text x="713.199" y="335" text-anchor="middle" class="chartlet-flow-sublabel">Java · Bookings</text><rect x="662.824" y="360.5" width="100.75" height="6" class="chartlet-part chartlet-part-2"><title>Bookings</title></rect></g><g class="chartlet-f chartlet-n-4 chartlet-f-3 chartlet-f-4"><rect x="953.554" y="76" width="121.37" height="62" class="chartlet-diagram-shadow"/><rect x="953.554" y="73.5" width="121.37" height="62" class="chartlet-flow-node chartlet-role-blue"><title>Pricing service – Go · Bookings</title></rect><text x="1014.239" y="96" text-anchor="middle" class="chartlet-flow-label">Pricing service</text><text x="1014.239" y="110" text-anchor="middle" class="chartlet-flow-sublabel">Go · Bookings</text><rect x="965.554" y="123.5" width="97.37" height="6" class="chartlet-part chartlet-part-2"><title>Bookings</title></rect></g><g class="chartlet-f chartlet-n-5 chartlet-f-3 chartlet-f-5"><polyline points="944.709,201 944.709,263 947.078,264.294 954.024,265.5 965.074,266.536 979.474,267.33 996.243,267.83 1014.239,268 1032.234,267.83 1049.004,267.33 1063.404,266.536 1074.454,265.5 1081.4,264.294 1083.769,263 1083.769,201 1081.4,199.706 1074.454,198.5 1063.404,197.464 1049.004,196.67 1032.234,196.17 1014.239,196 996.243,196.17 979.474,196.67 965.074,197.464 954.024,198.5 947.078,199.706 944.709,201 944.709,201" class="chartlet-diagram-shadow"/><polyline points="944.709,198.5 944.709,260.5 947.078,261.794 954.024,263 965.074,264.036 979.474,264.83 996.243,265.33 1014.239,265.5 1032.234,265.33 1049.004,264.83 1063.404,264.036 1074.454,263 1081.4,261.794 1083.769,260.5 1083.769,198.5 1081.4,197.206 1074.454,196 1063.404,194.964 1049.004,194.17 1032.234,193.67 1014.239,193.5 996.243,193.67 979.474,194.17 965.074,194.964 954.024,196 947.078,197.206 944.709,198.5 944.709,198.5" class="chartlet-flow-node chartlet-role-teal"><title>Bookings – Postgres · Platform</title></polyline><polyline points="944.709,198.5 947.078,199.794 954.024,201 965.074,202.036 979.474,202.83 996.243,203.33 1014.239,203.5 1032.234,203.33 1049.004,202.83 1063.404,202.036 1074.454,201 1081.4,199.794 1083.769,198.5" class="chartlet-diagram-rim"/><text x="1014.239" y="224" text-anchor="middle" class="chartlet-flow-label">Bookings</text><text x="1014.239" y="238" text-anchor="middle" class="chartlet-flow-sublabel">Postgres · Platform</text><rect x="956.709" y="247.5" width="115.06" height="6" class="chartlet-part chartlet-part-3"><title>Platform</title></rect></g><g class="chartlet-f chartlet-n-6 chartlet-f-3 chartlet-f-6"><polyline points="946.534,301 946.534,363 948.841,364.294 955.605,365.5 966.364,366.536 980.386,367.33 996.715,367.83 1014.239,368 1031.762,367.83 1048.091,367.33 1062.113,366.536 1072.873,365.5 1079.637,364.294 1081.944,363 1081.944,301 1079.637,299.706 1072.873,298.5 1062.113,297.464 1048.091,296.67 1031.762,296.17 1014.239,296 996.715,296.17 980.386,296.67 966.364,297.464 955.605,298.5 948.841,299.706 946.534,301 946.534,301" class="chartlet-diagram-shadow"/><polyline points="946.534,298.5 946.534,360.5 948.841,361.794 955.605,363 966.364,364.036 980.386,364.83 996.715,365.33 1014.239,365.5 1031.762,365.33 1048.091,364.83 1062.113,364.036 1072.873,363 1079.637,361.794 1081.944,360.5 1081.944,298.5 1079.637,297.206 1072.873,296 1062.113,294.964 1048.091,294.17 1031.762,293.67 1014.239,293.5 996.715,293.67 980.386,294.17 966.364,294.964 955.605,296 948.841,297.206 946.534,298.5 946.534,298.5" class="chartlet-flow-node chartlet-role-teal"><title>Legacy inventory – Platform</title></polyline><polyline points="946.534,298.5 948.841,299.794 955.605,301 966.364,302.036 980.386,302.83 996.715,303.33 1014.239,303.5 1031.762,303.33 1048.091,302.83 1062.113,302.036 1072.873,301 1079.637,299.794 1081.944,298.5" class="chartlet-diagram-rim"/><text x="1014.239" y="324" text-anchor="middle" class="chartlet-flow-label">Legacy inventory</text><text x="1014.239" y="338" text-anchor="middle" class="chartlet-flow-sublabel">Platform</text><rect x="958.534" y="347.5" width="111.41" height="6" class="chartlet-part chartlet-part-3"><title>Platform</title></rect></g><g class="chartlet-f chartlet-n-7 chartlet-f-3 chartlet-f-7"><rect x="1136.17" y="411" width="139.83" height="62" class="chartlet-diagram-shadow"/><rect x="1136.17" y="408.5" width="139.83" height="62" class="chartlet-flow-node chartlet-flow-external chartlet-role-gray"><title>Payment provider – not stated</title></rect><text x="1206.085" y="431" text-anchor="middle" class="chartlet-flow-label">Payment provider</text><text x="1206.085" y="445" text-anchor="middle" class="chartlet-flow-sublabel">not stated</text><rect x="1148.17" y="458.5" width="115.83" height="6" class="chartlet-part chartlet-part-none"><title>not stated</title></rect></g><text x="24" y="538" text-anchor="start" class="chartlet-legend">Team:</text><rect x="72.28" y="530" width="16" height="8" class="chartlet-part chartlet-part-1"/><text x="94.28" y="538" text-anchor="start" class="chartlet-legend">Storefront</text><rect x="182.8" y="530" width="16" height="8" class="chartlet-part chartlet-part-2"/><text x="204.8" y="538" text-anchor="start" class="chartlet-legend">Bookings</text><rect x="276.76" y="530" width="16" height="8" class="chartlet-part chartlet-part-3"/><text x="298.76" y="538" text-anchor="start" class="chartlet-legend">Platform</text><rect x="374.8" y="530" width="16" height="8" class="chartlet-part chartlet-part-none"/><text x="396.8" y="538" text-anchor="start" class="chartlet-legend">not stated</text></svg><label class="chartlet-hotspot" id="chartlet-b56804eaa07d6435-hs-0" for="chartlet-b56804eaa07d6435-focus-0"></label><label class="chartlet-hotspot" id="chartlet-b56804eaa07d6435-hs-1" for="chartlet-b56804eaa07d6435-focus-1"></label><label class="chartlet-hotspot" id="chartlet-b56804eaa07d6435-hs-2" for="chartlet-b56804eaa07d6435-focus-2"></label><label class="chartlet-hotspot" id="chartlet-b56804eaa07d6435-hs-3" for="chartlet-b56804eaa07d6435-focus-3"></label><label class="chartlet-hotspot" id="chartlet-b56804eaa07d6435-hs-4" for="chartlet-b56804eaa07d6435-focus-4"></label><label class="chartlet-hotspot" id="chartlet-b56804eaa07d6435-hs-5" for="chartlet-b56804eaa07d6435-focus-5"></label><label class="chartlet-hotspot" id="chartlet-b56804eaa07d6435-hs-6" for="chartlet-b56804eaa07d6435-focus-6"></label><label class="chartlet-hotspot" id="chartlet-b56804eaa07d6435-hs-7" for="chartlet-b56804eaa07d6435-focus-7"></label></div><p class="chartlet-source">Source: Architecture handbook, booking model</p><details class="chartlet-data" data-viz-text><summary>Show chart data</summary><table><caption>Data for Booking platform: who runs what</caption><thead><tr><th scope="col">Component</th><th scope="col">Kind</th><th scope="col">Boundary</th><th scope="col">Team</th><th scope="col">Connects to</th></tr></thead><tbody><tr><th scope="row">Guest</th><td>person</td><td></td><td>not stated</td><td>Booking app (books)</td></tr><tr><th scope="row">Booking app</th><td>frontend</td><td></td><td>Storefront</td><td>API gateway (via HTTPS)</td></tr><tr><th scope="row">API gateway</th><td>service</td><td>Cloud account</td><td>Platform</td><td>Booking service (routes)</td></tr><tr><th scope="row">Booking service</th><td>service</td><td>Cloud account</td><td>Bookings</td><td>Pricing service (asks price), Bookings (via SQL), Legacy inventory (checks rooms), Payment provider (charges, via HTTPS)</td></tr><tr><th scope="row">Pricing service</th><td>service</td><td>Cloud account</td><td>Bookings</td><td></td></tr><tr><th scope="row">Bookings</th><td>database</td><td>Cloud account › Data zone</td><td>Platform</td><td></td></tr><tr><th scope="row">Legacy inventory</th><td>database</td><td>Cloud account › Data zone</td><td>Platform</td><td></td></tr><tr><th scope="row">Payment provider</th><td>external system</td><td></td><td>not stated</td><td></td></tr></tbody></table></details></figure></div>