-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
226 lines (215 loc) · 64.9 KB
/
index.html
File metadata and controls
226 lines (215 loc) · 64.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Offscale - Automating the API lifecycle, from spec to package. Generate typed SDKs and interactive API docs.">
<title>Offscale - SDKs & Interactive API Docs</title>
<link rel="stylesheet" href="styles.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/devicon.min.css" />
<style>
.hero-pipeline {
background-color: #fdfdfd;
border-bottom: 4px solid var(--primary);
padding: 80px 0;
text-align: center;
}
.hero-pipeline .hero-title .static-text {
color: #1a1a1a;
}
.hero-pipeline .hero-subtitle {
color: #4a5568;
max-width: 800px;
}
.accent-primary { color: var(--primary); font-weight: 700; }
</style>
</head>
<body>
<header class="header" role="banner">
<div class="container">
<a href="index.html" style="color: inherit; text-decoration: none;"><h1 class="logo">Offscale</h1></a>
<nav class="main-nav" role="navigation" aria-label="Main Navigation" style="align-items: center;">
<a href="index.html" class="active" style="opacity: 1;">SDKs & Docs</a>
<a href="ecosystem.html">Ecosystem</a>
<button popovertarget="consulting-popover" id="consulting-link" style="background: none; border: none; color: inherit; font: inherit; text-decoration: line-through; opacity: 0.6; cursor: help; padding: 0;" aria-label="Consulting (Closed)">Consulting</button>
<a href="https://github.com/SamuelMarks/cdd-ctl" target="_blank" rel="noopener" aria-label="cdd-ctl on GitHub" style="display: flex; align-items: center; justify-content: center; opacity: 1; margin-left: 16px;">
<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" style="width: 24px; height: 24px;">
<path d="M12 2C6.477 2 2 6.477 2 12c0 4.42 2.865 8.166 6.839 9.489.5.092.682-.217.682-.482 0-.237-.008-.866-.013-1.7-2.782.603-3.369-1.34-3.369-1.34-.454-1.156-1.11-1.462-1.11-1.462-.908-.62.069-.608.069-.608 1.003.07 1.531 1.03 1.531 1.03.892 1.529 2.341 1.087 2.91.831.092-.646.35-1.086.636-1.336-2.22-.253-4.555-1.11-4.555-4.943 0-1.091.39-1.984 1.029-2.683-.103-.253-.446-1.27.098-2.647 0 0 .84-.269 2.75 1.025A9.578 9.578 0 0112 6.836c.85.004 1.705.114 2.504.336 1.909-1.294 2.747-1.025 2.747-1.025.546 1.377.203 2.394.1 2.647.64.699 1.028 1.592 1.028 2.683 0 3.842-2.339 4.687-4.566 4.935.359.309.678.919.678 1.852 0 1.336-.012 2.415-.012 2.743 0 .267.18.578.688.48C19.138 20.161 22 16.418 22 12c0-5.523-4.477-10-10-10z"/>
</svg>
</a>
<button id="theme-toggle" class="theme-toggle" aria-label="Toggle Dark Mode" style="background: none; border: none; font-size: 1.25rem; cursor: pointer; margin-left: 16px;">🌙</button>
</nav>
</div>
</header>
<main role="main">
<section class="hero hero-pipeline">
<div class="container">
<h2 class="hero-title" tabindex="0">
<span class="static-text" style="margin-right: 0;">OpenAPI in. Packages and Docs out. <span class="accent-primary">Zero touches.</span></span>
</h2>
<p class="hero-subtitle" style="margin-top: 24px; margin-bottom: 32px;">Generating code is only half the battle. Automate your entire developer experience pipeline. Build, test, publish idiomatic clients directly to native registries, and deploy interactive HTML docs—without a single click.</p>
<a href="https://github.com/SamuelMarks/cdd-ctl" target="_blank" rel="noopener" style="display: inline-block; background-color: var(--primary); color: white; padding: 14px 28px; border-radius: 8px; font-weight: 500; font-size: 1.1rem; text-decoration: none; box-shadow: 0 4px 6px rgba(255, 106, 0, 0.25); transition: transform 0.2s ease, box-shadow 0.2s ease;">Get Started on GitHub →</a>
</div>
</section>
<section class="features" aria-label="Key Features">
<div class="container features-grid">
<!-- Column 1 -->
<article class="feature-card" tabindex="0">
<div class="card-diagram" aria-hidden="true">
<svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="mindmapDiagram inline-svg" style="max-width: 418.277px; width: 100%; height: auto; max-height: 160px; object-fit: contain;" viewBox="5 5 418.2774353027344 279.8509826660156" role="graphics-document document" aria-roledescription="mindmap"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:hsl(206.4, 100%, 100%);}#my-svg .error-text{fill:#000000;stroke:#000000;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#ff6a00;stroke:#ff6a00;}#my-svg .marker.cross{stroke:#ff6a00;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;}#my-svg p{margin:0;}#my-svg .edge{stroke-width:3;}#my-svg .section--1 rect,#my-svg .section--1 path,#my-svg .section--1 circle,#my-svg .section--1 polygon,#my-svg .section--1 path{fill:hsl(26.4, 100%, 70.0980392157%);}#my-svg .section--1 text{fill:#333;}#my-svg .node-icon--1{font-size:40px;color:#333;}#my-svg .section-edge--1{stroke:hsl(26.4, 100%, 70.0980392157%);}#my-svg .edge-depth--1{stroke-width:17;}#my-svg .section--1 line{stroke:rgb(0, 85.4, 152.4999999999);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-0 rect,#my-svg .section-0 path,#my-svg .section-0 circle,#my-svg .section-0 polygon,#my-svg .section-0 path{fill:hsl(-93.6, 100%, 70.0980392157%);}#my-svg .section-0 text{fill:#333;}#my-svg .node-icon-0{font-size:40px;color:#333;}#my-svg .section-edge-0{stroke:hsl(-93.6, 100%, 70.0980392157%);}#my-svg .edge-depth-0{stroke-width:14;}#my-svg .section-0 line{stroke:rgb(85.4, 152.4999999999, 0);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-1 rect,#my-svg .section-1 path,#my-svg .section-1 circle,#my-svg .section-1 polygon,#my-svg .section-1 path{fill:hsl(206.4, 100%, 75%);}#my-svg .section-1 text{fill:#333;}#my-svg .node-icon-1{font-size:40px;color:#333;}#my-svg .section-edge-1{stroke:hsl(206.4, 100%, 75%);}#my-svg .edge-depth-1{stroke-width:11;}#my-svg .section-1 line{stroke:rgb(127.5, 56.1, 0);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-2 rect,#my-svg .section-2 path,#my-svg .section-2 circle,#my-svg .section-2 polygon,#my-svg .section-2 path{fill:hsl(56.4, 100%, 70.0980392157%);}#my-svg .section-2 text{fill:#333;}#my-svg .node-icon-2{font-size:40px;color:#333;}#my-svg .section-edge-2{stroke:hsl(56.4, 100%, 70.0980392157%);}#my-svg .edge-depth-2{stroke-width:8;}#my-svg .section-2 line{stroke:rgb(0, 9.15, 152.4999999999);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-3 rect,#my-svg .section-3 path,#my-svg .section-3 circle,#my-svg .section-3 polygon,#my-svg .section-3 path{fill:hsl(86.4, 100%, 70.0980392157%);}#my-svg .section-3 text{fill:#333;}#my-svg .node-icon-3{font-size:40px;color:#333;}#my-svg .section-edge-3{stroke:hsl(86.4, 100%, 70.0980392157%);}#my-svg .edge-depth-3{stroke-width:5;}#my-svg .section-3 line{stroke:rgb(67.1, 0, 152.4999999999);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-4 rect,#my-svg .section-4 path,#my-svg .section-4 circle,#my-svg .section-4 polygon,#my-svg .section-4 path{fill:hsl(116.4, 100%, 70.0980392157%);}#my-svg .section-4 text{fill:#333;}#my-svg .node-icon-4{font-size:40px;color:#333;}#my-svg .section-edge-4{stroke:hsl(116.4, 100%, 70.0980392157%);}#my-svg .edge-depth-4{stroke-width:2;}#my-svg .section-4 line{stroke:rgb(143.3499999999, 0, 152.4999999999);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-5 rect,#my-svg .section-5 path,#my-svg .section-5 circle,#my-svg .section-5 polygon,#my-svg .section-5 path{fill:hsl(146.4, 100%, 70.0980392157%);}#my-svg .section-5 text{fill:#333;}#my-svg .node-icon-5{font-size:40px;color:#333;}#my-svg .section-edge-5{stroke:hsl(146.4, 100%, 70.0980392157%);}#my-svg .edge-depth-5{stroke-width:-1;}#my-svg .section-5 line{stroke:rgb(152.4999999999, 0, 85.4);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-6 rect,#my-svg .section-6 path,#my-svg .section-6 circle,#my-svg .section-6 polygon,#my-svg .section-6 path{fill:hsl(176.4, 100%, 70.0980392157%);}#my-svg .section-6 text{fill:#333;}#my-svg .node-icon-6{font-size:40px;color:#333;}#my-svg .section-edge-6{stroke:hsl(176.4, 100%, 70.0980392157%);}#my-svg .edge-depth-6{stroke-width:-4;}#my-svg .section-6 line{stroke:rgb(152.4999999999, 0, 9.15);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-7 rect,#my-svg .section-7 path,#my-svg .section-7 circle,#my-svg .section-7 polygon,#my-svg .section-7 path{fill:hsl(236.4, 100%, 75%);}#my-svg .section-7 text{fill:#333;}#my-svg .node-icon-7{font-size:40px;color:#333;}#my-svg .section-edge-7{stroke:hsl(236.4, 100%, 75%);}#my-svg .edge-depth-7{stroke-width:-7;}#my-svg .section-7 line{stroke:rgb(127.5, 119.85, 0);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-8 rect,#my-svg .section-8 path,#my-svg .section-8 circle,#my-svg .section-8 polygon,#my-svg .section-8 path{fill:hsl(296.4, 100%, 70.0980392157%);}#my-svg .section-8 text{fill:#333;}#my-svg .node-icon-8{font-size:40px;color:#333;}#my-svg .section-edge-8{stroke:hsl(296.4, 100%, 70.0980392157%);}#my-svg .edge-depth-8{stroke-width:-10;}#my-svg .section-8 line{stroke:rgb(9.15, 152.4999999999, 0);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-9 rect,#my-svg .section-9 path,#my-svg .section-9 circle,#my-svg .section-9 polygon,#my-svg .section-9 path{fill:hsl(326.4, 100%, 70.0980392157%);}#my-svg .section-9 text{fill:#333;}#my-svg .node-icon-9{font-size:40px;color:#333;}#my-svg .section-edge-9{stroke:hsl(326.4, 100%, 70.0980392157%);}#my-svg .edge-depth-9{stroke-width:-13;}#my-svg .section-9 line{stroke:rgb(0, 152.4999999999, 67.1);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-10 rect,#my-svg .section-10 path,#my-svg .section-10 circle,#my-svg .section-10 polygon,#my-svg .section-10 path{fill:hsl(356.4, 100%, 70.0980392157%);}#my-svg .section-10 text{fill:#333;}#my-svg .node-icon-10{font-size:40px;color:#333;}#my-svg .section-edge-10{stroke:hsl(356.4, 100%, 70.0980392157%);}#my-svg .edge-depth-10{stroke-width:-16;}#my-svg .section-10 line{stroke:rgb(0, 152.4999999999, 143.3499999999);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-root rect,#my-svg .section-root path,#my-svg .section-root circle,#my-svg .section-root polygon{fill:hsl(26.4, 100%, 70.0980392157%);}#my-svg .section-root text{fill:#333;}#my-svg .section-root span{color:#333;}#my-svg .section-2 span{color:#333;}#my-svg .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#my-svg .edge{fill:none;}#my-svg .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_mindmap-pointEnd" class="marker mindmap" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_mindmap-pointStart" class="marker mindmap" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><g class="subgraphs"/><g class="edgePaths"><path d="M223.577,153.054L220.747,158.818C217.917,164.582,212.257,176.11,206.597,187.638C200.937,199.166,195.276,210.694,192.446,216.457L189.616,222.221" id="edge_0_1" class="edge-thickness-normal edge-pattern-solid edge section-edge-0 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_1" data-points="W3sieCI6MjIzLjU3NzI5MTAzMDc1MTksInkiOjE1My4wNTM4NTk2NjY3NjE1M30seyJ4IjoyMDYuNTk2NzQ0ODIxMjkzMSwieSI6MTg3LjYzNzY0Mzk1ODQzNjA2fSx7IngiOjE4OS42MTYxOTg2MTE4MzQzLCJ5IjoyMjIuMjIxNDI4MjUwMTEwNn1d"/><path d="M228.819,124.652L228.202,117.926C227.586,111.2,226.352,97.747,225.119,84.295C223.886,70.842,222.652,57.39,222.036,50.664L221.419,43.937" id="edge_0_2" class="edge-thickness-normal edge-pattern-solid edge section-edge-1 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_2" data-points="W3sieCI6MjI4LjgxODg5MTU0OTUwNCwieSI6MTI0LjY1MTk1OTk2MjQ5NDE1fSx7IngiOjIyNS4xMTg5MzkyNjcyODA5LCJ5Ijo4NC4yOTQ2NTc3OTk2NTQyfSx7IngiOjIyMS40MTg5ODY5ODUwNTc3OCwieSI6NDMuOTM3MzU1NjM2ODE0MjZ9XQ=="/><path d="M240.942,150.046L246.092,155.054C251.242,160.061,261.541,170.076,271.84,180.091C282.139,190.106,292.438,200.121,297.588,205.128L302.738,210.136" id="edge_0_3" class="edge-thickness-normal edge-pattern-solid edge section-edge-2 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_3" data-points="W3sieCI6MjQwLjk0MjM0Njk2NjQ1OTc1LCJ5IjoxNTAuMDQ2NDQxMDA1MDgyNDR9LHsieCI6MjcxLjg0MDAxMzg4NTU3NTcsInkiOjE4MC4wOTExNDYyODc3NTA5Mn0seyJ4IjozMDIuNzM3NjgwODA0NjkxNiwieSI6MjEwLjEzNTg1MTU3MDQxOTR9XQ=="/><path d="M244.631,143.642L253.44,146.114C262.25,148.586,279.869,153.53,297.489,158.474C315.108,163.419,332.727,168.363,341.537,170.835L350.347,173.307" id="edge_0_4" class="edge-thickness-normal edge-pattern-solid edge section-edge-3 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_4" data-points="W3sieCI6MjQ0LjYzMDUxNTIzOTg4MDMsInkiOjE0My42NDE5MzkzMzEzODI2Mn0seyJ4IjoyOTcuNDg4NjIxODcxMzUxOCwieSI6MTU4LjQ3NDQ3NzI3NjE4MjQ4fSx7IngiOjM1MC4zNDY3Mjg1MDI4MjMzNCwieSI6MTczLjMwNzAxNTIyMDk4MjM1fV0="/><path d="M219.735,128.832L213.6,122.52C207.466,116.207,195.197,103.583,182.929,90.958C170.66,78.333,158.391,65.709,152.257,59.397L146.123,53.084" id="edge_0_5" class="edge-thickness-normal edge-pattern-solid edge section-edge-4 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_5" data-points="W3sieCI6MjE5LjczNDUyMDQ5NzEzOTA3LCJ5IjoxMjguODMyMTA3NTk0NjU1MzN9LHsieCI6MTgyLjkyODcwNTE3ODI1MSwieSI6OTAuOTU4MTQ0OTkzOTA1NTl9LHsieCI6MTQ2LjEyMjg4OTg1OTM2MjksInkiOjUzLjA4NDE4MjM5MzE1NTg3fV0="/><path d="M245.119,138.151L251.379,137.548C257.638,136.946,270.157,135.74,282.677,134.534C295.196,133.328,307.715,132.123,313.974,131.52L320.234,130.917" id="edge_0_6" class="edge-thickness-normal edge-pattern-solid edge section-edge-5 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_6" data-points="W3sieCI6MjQ1LjExOTI1OTk1ODIxNjE2LCJ5IjoxMzguMTUxMzIzODY1MTQzNX0seyJ4IjoyODIuNjc2NTgzMjk3MTY1MDUsInkiOjEzNC41MzQxODk1MDE3NzQyMn0seyJ4IjozMjAuMjMzOTA2NjM2MTEzOTQsInkiOjEzMC45MTcwNTUxMzg0MDQ5NX1d"/><path d="M217.601,147.748L209.294,153.133C200.987,158.518,184.372,169.288,167.757,180.057C151.143,190.827,134.528,201.597,126.22,206.982L117.913,212.366" id="edge_0_7" class="edge-thickness-normal edge-pattern-solid edge section-edge-6 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_7" data-points="W3sieCI6MjE3LjYwMTM2NzQ2NDYwMiwieSI6MTQ3Ljc0ODIzNDcyODQxNzMyfSx7IngiOjE2Ny43NTcyNDIyNjg5MjQ1MywieSI6MTgwLjA1NzM1MjY0NDM4NzA0fSx7IngiOjExNy45MTMxMTcwNzMyNDcwNywieSI6MjEyLjM2NjQ3MDU2MDM1Njc2fV0="/><path d="M244.231,134.317L253.943,130.671C263.655,127.024,283.079,119.732,302.502,112.439C321.926,105.147,341.35,97.854,351.062,94.208L360.774,90.562" id="edge_0_8" class="edge-thickness-normal edge-pattern-solid edge section-edge-7 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_8" data-points="W3sieCI6MjQ0LjIzMTIzNTc0MDY4ODA1LCJ5IjoxMzQuMzE3MDA1MDE2NTU5NTN9LHsieCI6MzAyLjUwMjQyMzQ3MjY4MDIsInkiOjExMi40Mzk0NzAyNTY0NjA4OH0seyJ4IjozNjAuNzczNjExMjA0NjcyNCwieSI6OTAuNTYxOTM1NDk2MzYyMjJ9XQ=="/><path d="M239.43,127.775L244.053,121.864C248.677,115.954,257.923,104.133,267.17,92.312C276.416,80.492,285.662,68.671,290.286,62.76L294.909,56.85" id="edge_0_9" class="edge-thickness-normal edge-pattern-solid edge section-edge-8 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_9" data-points="W3sieCI6MjM5LjQzMDE0MTk3NDE4MjU2LCJ5IjoxMjcuNzc0NTI3NjQwNTg1MjJ9LHsieCI6MjY3LjE2OTUwODM4OTQ4MywieSI6OTIuMzEyMjkyMDIwOTk0fSx7IngiOjI5NC45MDg4NzQ4MDQ3ODM0LCJ5Ijo1Ni44NTAwNTY0MDE0MDI3N31d"/><path d="M216.117,144.787L210.588,146.829C205.058,148.872,193.998,152.957,182.938,157.042C171.878,161.127,160.819,165.212,155.289,167.254L149.759,169.297" id="edge_0_10" class="edge-thickness-normal edge-pattern-solid edge section-edge-9 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_10" data-points="W3sieCI6MjE2LjExNzQ4OTc0NTAwNTEsInkiOjE0NC43ODY1MjU3MjM4ODI3fSx7IngiOjE4Mi45MzgyMDE2MTQxMjA1NCwieSI6MTU3LjA0MTYyNDA3ODIyMDU0fSx7IngiOjE0OS43NTg5MTM0ODMyMzYsInkiOjE2OS4yOTY3MjI0MzI1NTgzN31d"/><path d="M216.349,133.805L209.493,130.94C202.638,128.074,188.928,122.344,175.218,116.613C161.508,110.883,147.797,105.153,140.942,102.287L134.087,99.422" id="edge_0_11" class="edge-thickness-normal edge-pattern-solid edge section-edge-10 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_11" data-points="W3sieCI6MjE2LjM0ODU5MzUzMTY5NjQ4LCJ5IjoxMzMuODA0NzQ2NDE2Nzk0NH0seyJ4IjoxNzUuMjE3ODgyODk2MTMzOTEsInkiOjExNi42MTM0MzkzNTI3OTA4fSx7IngiOjEzNC4wODcxNzIyNjA1NzEzNSwieSI6OTkuNDIyMTMyMjg4Nzg3MjJ9XQ=="/><path d="M233.759,154.158L235.64,161.835C237.521,169.512,241.284,184.866,245.046,200.22C248.809,215.574,252.572,230.928,254.453,238.605L256.334,246.282" id="edge_0_12" class="edge-thickness-normal edge-pattern-solid edge section-edge-0 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_12" data-points="W3sieCI6MjMzLjc1ODU3NDE2ODMzODY3LCJ5IjoxNTQuMTU4MjM3MDk4ODgzMTJ9LHsieCI6MjQ1LjA0NjQwMzkwNjE1ODg0LCJ5IjoyMDAuMjIwMTQ1NzE3NDY0MDV9LHsieCI6MjU2LjMzNDIzMzY0Mzk3OSwieSI6MjQ2LjI4MjA1NDMzNjA0NDk4fV0="/><path d="M215.192,139.279L203.758,139.042C192.324,138.805,169.457,138.331,146.59,137.857C123.723,137.383,100.856,136.91,89.423,136.673L77.989,136.436" id="edge_0_13" class="edge-thickness-normal edge-pattern-solid edge section-edge-1 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_13" data-points="W3sieCI6MjE1LjE5MTU2NTMxNjc4MjMyLCJ5IjoxMzkuMjc4NTc5MDAzNDc1Njd9LHsieCI6MTQ2LjU5MDI2Njk0ODUwMDU4LCJ5IjoxMzcuODU3MTQ1MDQzMDM4Mzd9LHsieCI6NzcuOTg4OTY4NTgwMjE4ODUsInkiOjEzNi40MzU3MTEwODI2MDEwN31d"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="edge_0_1" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_2" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_3" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_4" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_5" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_6" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_7" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_8" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_9" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_10" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_11" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_12" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_13" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g class="node mindmap-node section-root section--1" id="node_0" transform="translate(230.18834639700117, 139.5893155993084)"><circle class="basic label-container" style="" r="32.4921875" cx="0" cy="0"/><g class="label" style="" transform="translate(-22.4921875, -9)"><rect/><foreignObject width="44.984375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>OpenAPI</p></span></div></foreignObject></g></g><g class="node mindmap-node section-0" id="node_1" transform="translate(183.00514324558503, 235.6859723175637)"><path id="node-1" class="node-bkg node-0" style="" d="M-23.59375 9 v-18 q0,-5 5,-5 h37.1875 q5,0 5,5 v18 q0,5 -5,5 h-37.1875 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-23.59375" y1="14" x2="23.59375" y2="14"/><g class="label" style="" transform="translate(-3.59375, -9)"><rect/><foreignObject width="7.1875" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>C</p></span></div></foreignObject></g></g><g class="node mindmap-node section-1" id="node_2" transform="translate(220.04953213756062, 29)"><path id="node-2" class="node-bkg node-0" style="" d="M-29.8828125 9 v-18 q0,-5 5,-5 h49.765625 q5,0 5,5 v18 q0,5 -5,5 h-49.765625 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-29.8828125" y1="14" x2="29.8828125" y2="14"/><g class="label" style="" transform="translate(-9.8828125, -9)"><rect/><foreignObject width="19.765625" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>C++</p></span></div></foreignObject></g></g><g class="node mindmap-node section-2" id="node_3" transform="translate(313.4916813741502, 220.59297697619343)"><path id="node-3" class="node-bkg node-0" style="" d="M-26.7421875 9 v-18 q0,-5 5,-5 h43.484375 q5,0 5,5 v18 q0,5 -5,5 h-43.484375 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-26.7421875" y1="14" x2="26.7421875" y2="14"/><g class="label" style="" transform="translate(-6.7421875, -9)"><rect/><foreignObject width="13.484375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>C#</p></span></div></foreignObject></g></g><g class="node mindmap-node section-3" id="node_4" transform="translate(364.7888973457025, 177.35963895305656)"><path id="node-4" class="node-bkg node-0" style="" d="M-27.28125 9 v-18 q0,-5 5,-5 h44.5625 q5,0 5,5 v18 q0,5 -5,5 h-44.5625 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-27.28125" y1="14" x2="27.28125" y2="14"/><g class="label" style="" transform="translate(-7.28125, -9)"><rect/><foreignObject width="14.5625" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Go</p></span></div></foreignObject></g></g><g class="node mindmap-node section-4" id="node_5" transform="translate(135.66906395950082, 42.32697438850278)"><path id="node-5" class="node-bkg node-0" style="" d="M-32.109375 9 v-18 q0,-5 5,-5 h54.21875 q5,0 5,5 v18 q0,5 -5,5 h-54.21875 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-32.109375" y1="14" x2="32.109375" y2="14"/><g class="label" style="" transform="translate(-12.109375, -9)"><rect/><foreignObject width="24.21875" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Java</p></span></div></foreignObject></g></g><g class="node mindmap-node section-5" id="node_6" transform="translate(335.16482019732894, 129.47906340424004)"><path id="node-6" class="node-bkg node-0" style="" d="M-35.625 9 v-18 q0,-5 5,-5 h61.25 q5,0 5,5 v18 q0,5 -5,5 h-61.25 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-35.625" y1="14" x2="35.625" y2="14"/><g class="label" style="" transform="translate(-15.625, -9)"><rect/><foreignObject width="31.25" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Kotlin</p></span></div></foreignObject></g></g><g class="node mindmap-node section-6" id="node_7" transform="translate(105.32613814084789, 220.52538968946567)"><path id="node-7" class="node-bkg node-0" style="" d="M-30.6171875 9 v-18 q0,-5 5,-5 h51.234375 q5,0 5,5 v18 q0,5 -5,5 h-51.234375 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-30.6171875" y1="14" x2="30.6171875" y2="14"/><g class="label" style="" transform="translate(-10.6171875, -9)"><rect/><foreignObject width="21.234375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>PHP</p></span></div></foreignObject></g></g><g class="node mindmap-node section-7" id="node_8" transform="translate(374.8165005483593, 85.28962491361335)"><path id="node-8" class="node-bkg node-0" style="" d="M-38.4609375 9 v-18 q0,-5 5,-5 h66.921875 q5,0 5,5 v18 q0,5 -5,5 h-66.921875 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-38.4609375" y1="14" x2="38.4609375" y2="14"/><g class="label" style="" transform="translate(-18.4609375, -9)"><rect/><foreignObject width="36.921875" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Python</p></span></div></foreignObject></g></g><g class="node mindmap-node section-8" id="node_9" transform="translate(304.1506703819648, 45.03526844267958)"><path id="node-9" class="node-bkg node-0" style="" d="M-32.90625 9 v-18 q0,-5 5,-5 h55.8125 q5,0 5,5 v18 q0,5 -5,5 h-55.8125 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-32.90625" y1="14" x2="32.90625" y2="14"/><g class="label" style="" transform="translate(-12.90625, -9)"><rect/><foreignObject width="25.8125" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Ruby</p></span></div></foreignObject></g></g><g class="node mindmap-node section-9" id="node_10" transform="translate(135.68805683123992, 174.49393255713267)"><path id="node-10" class="node-bkg node-0" style="" d="M-31.40625 9 v-18 q0,-5 5,-5 h52.8125 q5,0 5,5 v18 q0,5 -5,5 h-52.8125 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-31.40625" y1="14" x2="31.40625" y2="14"/><g class="label" style="" transform="translate(-11.40625, -9)"><rect/><foreignObject width="22.8125" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Rust</p></span></div></foreignObject></g></g><g class="node mindmap-node section-10" id="node_11" transform="translate(120.24741939526666, 93.6375631062732)"><path id="node-11" class="node-bkg node-0" style="" d="M-32.9765625 9 v-18 q0,-5 5,-5 h55.953125 q5,0 5,5 v18 q0,5 -5,5 h-55.953125 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-32.9765625" y1="14" x2="32.9765625" y2="14"/><g class="label" style="" transform="translate(-12.9765625, -9)"><rect/><foreignObject width="25.953125" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Shell</p></span></div></foreignObject></g></g><g class="node mindmap-node section-0" id="node_12" transform="translate(259.9044614153165, 260.8509758356197)"><path id="node-12" class="node-bkg node-0" style="" d="M-33.6640625 9 v-18 q0,-5 5,-5 h57.328125 q5,0 5,5 v18 q0,5 -5,5 h-57.328125 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-33.6640625" y1="14" x2="33.6640625" y2="14"/><g class="label" style="" transform="translate(-13.6640625, -9)"><rect/><foreignObject width="27.328125" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Swift</p></span></div></foreignObject></g></g><g class="node mindmap-node section-1" id="node_13" transform="translate(62.9921875, 136.12497448676834)"><path id="node-13" class="node-bkg node-0" style="" d="M-47.9921875 9 v-18 q0,-5 5,-5 h85.984375 q5,0 5,5 v18 q0,5 -5,5 h-85.984375 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-47.9921875" y1="14" x2="47.9921875" y2="14"/><g class="label" style="" transform="translate(-27.9921875, -9)"><rect/><foreignObject width="55.984375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>TypeScript</p></span></div></foreignObject></g></g></g></g></svg>
</div>
<h3>100% Automated Generation</h3>
<p>Commit an OpenAPI spec and watch our GitOps pipeline instantly synthesize perfectly typed client libraries across 13 major languages. No human intervention, no configuration drift, just code.</p>
</article>
<!-- Column 2 -->
<article class="feature-card" tabindex="0">
<div class="lang-icons" aria-hidden="true" style="display: flex; flex-wrap: wrap; gap: 14px; justify-content: center; font-size: 2.25rem; color: var(--text-primary); margin-bottom: 24px; min-height: 48px; align-items: center;">
<i class="devicon-python-plain" title="PyPI"></i>
<i class="devicon-rust-plain" title="Crates.io"></i>
<i class="devicon-npm-original-wordmark" title="npm"></i>
<i class="devicon-go-plain" title="Go Modules"></i>
<i class="devicon-java-plain" title="Maven"></i>
<i class="devicon-ruby-plain" title="RubyGems"></i>
<i class="devicon-apple-original" title="CocoaPods"></i>
<i class="devicon-csharp-plain" title="NuGet"></i>
</div>
<h3>Direct to Registries</h3>
<p>Don't just dump generated files into a repo. Our automated pipeline handles the complex lifecycle: version bumping, dependency resolution, packaging, and publishing directly to PyPI, npm, crates.io, Maven, and more.</p>
</article>
</div>
</section>
<!-- Big Feature Section: Interactive Docs -->
<section class="features" style="background-color: #f9fbfd; border-top: 1px solid #e1e4e8; padding: 80px 0;" aria-label="Interactive API Documentation Frontend">
<div class="container">
<div style="text-align: center; margin-bottom: 48px;">
<h2 style="font-size: 2.5rem; color: #1a1a1a; margin-bottom: 16px;">The Ultimate API Docs Frontend</h2>
<p style="font-size: 1.25rem; color: #4a5568; max-width: 800px; margin: 0 auto;">We don't just generate SDK code; we generate the perfect developer portal to match.</p>
</div>
<div style="display: flex; flex-wrap: wrap; gap: 48px; align-items: center;">
<div style="flex: 1 1 min(400px, 100%);">
<ul style="list-style: none; padding: 0; display: flex; flex-direction: column; gap: 24px;">
<li>
<h4 style="font-size: 1.25rem; color: #1a1a1a; margin-bottom: 8px;">🚀 Zero-Config Static HTML</h4>
<p style="color: #4a5568; line-height: 1.6;">Your documentation is compiled into lightning-fast, static HTML, CSS, and JS. No databases, no servers—just drop it into an S3 bucket or GitHub Pages and it works instantly.</p>
</li>
<li>
<h4 style="font-size: 1.25rem; color: #1a1a1a; margin-bottom: 8px;">💻 Real Code Snippets</h4>
<p style="color: #4a5568; line-height: 1.6;">Because we generate the SDKs, we also generate perfectly accurate copy-paste code snippets for every endpoint in all 13 supported languages.</p>
</li>
<li>
<h4 style="font-size: 1.25rem; color: #1a1a1a; margin-bottom: 8px;">⚡ Interactive API Explorer</h4>
<p style="color: #4a5568; line-height: 1.6;">Allow your users to make live API calls directly from the browser. Test request payloads, view raw responses, and debug integrations without leaving your documentation.</p>
</li>
</ul>
</div>
<div style="flex: 1 1 min(500px, 100%); background-color: var(--surface); border-radius: 12px; padding: 32px; box-shadow: var(--shadow-3); text-align: center; overflow: hidden; box-sizing: border-box;">
<svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart inline-svg" style="max-width: 736.969px; width: 100%; height: auto; max-height: 300px; object-fit: contain;" viewBox="0 0 736.96875 269" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:14px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:hsl(206.4, 100%, 100%);}#my-svg .error-text{fill:#000000;stroke:#000000;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#ff6a00;stroke:#ff6a00;}#my-svg .marker.cross{stroke:#ff6a00;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:14px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#000000;}#my-svg .cluster-label span{color:#000000;}#my-svg .cluster-label span p{}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#fff1e6;stroke:#ff6a00;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#ff6a00!important;stroke-width:0;stroke:#ff6a00;}#my-svg .arrowheadPath{fill:#0b0b0b;}#my-svg .edgePath .path{stroke:#ff6a00;stroke-width:2.0px;}#my-svg .flowchart-link{stroke:#ff6a00;fill:none;}#my-svg .edgeLabel{background-color:hsl(-93.6, 100%, 95.0980392157%);text-align:center;}#my-svg .edgeLabel p{background-color:hsl(-93.6, 100%, 95.0980392157%);}#my-svg .edgeLabel rect{opacity:0.5;background-color:hsl(-93.6, 100%, 95.0980392157%);fill:hsl(-93.6, 100%, 95.0980392157%);}#my-svg .labelBkg{background-color:rgba(241, 230.0000000001, 255, 0.5);}#my-svg .cluster rect{fill:hsl(206.4, 100%, 100%);stroke:hsl(206.4, 60%, 90%);stroke-width:1px;}#my-svg .cluster text{fill:#000000;}#my-svg .cluster span{color:#000000;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(206.4, 100%, 100%);border:1px solid hsl(206.4, 60%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:hsl(-93.6, 100%, 95.0980392157%);text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:hsl(-93.6, 100%, 95.0980392157%);padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:hsl(-93.6, 100%, 95.0980392157%);fill:hsl(-93.6, 100%, 95.0980392157%);}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"><path d="M153.813,134.5L157.979,134.5C162.146,134.5,170.479,134.5,178.146,134.5C185.813,134.5,192.813,134.5,196.313,134.5L199.813,134.5" id="L_A_B_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A_B_0" data-points="W3sieCI6MTUzLjgxMjUsInkiOjEzNC41fSx7IngiOjE3OC44MTI1LCJ5IjoxMzQuNX0seyJ4IjoyMDMuODEyNSwieSI6MTM0LjV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M308.561,109L321.468,96.417C334.374,83.833,360.187,58.667,381.538,46.083C402.888,33.5,419.776,33.5,428.22,33.5L436.664,33.5" id="L_B_C_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_C_0" data-points="W3sieCI6MzA4LjU2MTEwNzY3MzI2NzMsInkiOjEwOX0seyJ4IjozODYsInkiOjMzLjV9LHsieCI6NDQwLjY2NDA2MjUsInkiOjMzLjV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M361,134.5L365.167,134.5C369.333,134.5,377.667,134.5,385.333,134.5C393,134.5,400,134.5,403.5,134.5L407,134.5" id="L_B_D_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_D_0" data-points="W3sieCI6MzYxLCJ5IjoxMzQuNX0seyJ4IjozODYsInkiOjEzNC41fSx7IngiOjQxMSwieSI6MTM0LjV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M308.561,160L321.468,172.583C334.374,185.167,360.187,210.333,376.937,222.917C393.688,235.5,401.375,235.5,405.219,235.5L409.063,235.5" id="L_B_E_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_E_0" data-points="W3sieCI6MzA4LjU2MTEwNzY3MzI2NzMsInkiOjE2MH0seyJ4IjozODYsInkiOjIzNS41fSx7IngiOjQxMy4wNjI1LCJ5IjoyMzUuNX1d" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M529.711,33.5L538.822,33.5C547.932,33.5,566.154,33.5,582.56,42.19C598.967,50.88,613.559,68.26,620.855,76.95L628.15,85.64" id="L_C_F_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_F_0" data-points="W3sieCI6NTI5LjcxMDkzNzUsInkiOjMzLjV9LHsieCI6NTg0LjM3NSwieSI6MzMuNX0seyJ4Ijo2MzAuNzIyNDY0MDg4MjUxNiwieSI6ODguNzAzNjEzMDIxMjc0ODJ9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M559.375,134.5L563.542,134.5C567.708,134.5,576.042,134.5,583.708,134.5C591.375,134.5,598.375,134.5,601.875,134.5L605.375,134.5" id="L_D_F_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_D_F_0" data-points="W3sieCI6NTU5LjM3NSwieSI6MTM0LjV9LHsieCI6NTg0LjM3NSwieSI6MTM0LjV9LHsieCI6NjA5LjM3NSwieSI6MTM0LjV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M557.313,235.5L561.823,235.5C566.333,235.5,575.354,235.5,587.16,226.81C598.967,218.12,613.559,200.74,620.855,192.05L628.15,183.36" id="L_E_F_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_E_F_0" data-points="W3sieCI6NTU3LjMxMjUsInkiOjIzNS41fSx7IngiOjU4NC4zNzUsInkiOjIzNS41fSx7IngiOjYzMC43MjI0NjQwODgyNTE2LCJ5IjoxODAuMjk2Mzg2OTc4NzI1Mn1d" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_A_B_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_B_C_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_B_D_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_B_E_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_C_F_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_D_F_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_E_F_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="flowchart-A-0" transform="translate(80.90625, 134.5)"><rect class="basic label-container" style="" x="-72.90625" y="-25.5" width="145.8125" height="51"/><g class="label" style="" transform="translate(-42.90625, -10.5)"><rect/><foreignObject width="85.8125" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>OpenAPI Spec</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-B-1" transform="translate(282.40625, 134.5)"><rect class="basic label-container" style="" x="-78.59375" y="-25.5" width="157.1875" height="51"/><g class="label" style="" transform="translate(-48.59375, -10.5)"><rect/><foreignObject width="97.1875" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Offscale Engine</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-C-3" transform="translate(485.1875, 33.5)"><rect class="basic label-container" style="" x="-44.5234375" y="-25.5" width="89.046875" height="51"/><g class="label" style="" transform="translate(-14.5234375, -10.5)"><rect/><foreignObject width="29.046875" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>SDKs</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-D-5" transform="translate(485.1875, 134.5)"><rect class="basic label-container" style="" x="-74.1875" y="-25.5" width="148.375" height="51"/><g class="label" style="" transform="translate(-44.1875, -10.5)"><rect/><foreignObject width="88.375" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Code Snippets</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-E-7" transform="translate(485.1875, 235.5)"><rect class="basic label-container" style="" x="-72.125" y="-25.5" width="144.25" height="51"/><g class="label" style="" transform="translate(-42.125, -10.5)"><rect/><foreignObject width="84.25" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>HTML/CSS/JS</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-F-9" transform="translate(669.171875, 134.5)"><circle class="basic label-container" style="" r="59.796875" cx="0" cy="0"/><g class="label" style="" transform="translate(-52.296875, -21)"><rect/><foreignObject width="104.59375" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Interactive<br />Developer Portal</p></span></div></foreignObject></g></g></g></g></g></svg>
</div>
</div>
</div>
</section>
<!-- Interactive Demo Banner -->
<section id="demo" aria-labelledby="demo-heading" style="background-color: var(--primary); color: white; padding: 64px 0; text-align: center; border-top: 1px solid rgba(255,255,255,0.1);">
<div class="container">
<h2 id="demo-heading" style="font-size: 2.25rem; margin-bottom: 16px;">Interactive Live Demo</h2>
<p style="font-size: 1.25rem; opacity: 0.9; max-width: 600px; margin: 0 auto 32px auto;">Want to see the pipeline in action? We are building a fully interactive sandbox where you can paste your OpenAPI spec and watch the generation happen in real-time.</p>
<div style="display: inline-flex; align-items: center; background-color: rgba(255,255,255,0.15); border-radius: 999px; padding: 12px 24px; font-weight: 500; font-size: 1.1rem;">
<span style="display: inline-block; width: 10px; height: 10px; border-radius: 50%; background-color: #3fb950; margin-right: 12px; box-shadow: 0 0 8px #3fb950;"></span>
Coming Soon
</div>
</div>
</section>
<!-- Comparison Tables Section -->
<section id="comparison" class="comparison-section" aria-labelledby="comparison-heading" style="background-color: white; border-top: 1px solid #e1e4e8;">
<div class="container">
<div style="text-align: center; margin-bottom: 48px;">
<h2 id="comparison-heading" style="font-size: 2.5rem; color: #1a1a1a; margin-bottom: 16px;">Why Offscale?</h2>
<p style="font-size: 1.25rem; color: #4a5568; max-width: 800px; margin: 0 auto;">See how our independent, end-to-end pipeline compares to VC-backed SDK generators.</p>
</div>
<div class="table-container">
<table class="comparison-table">
<thead>
<tr>
<th style="width: 25%;">Language Support</th>
<th class="highlight" style="width: 20%;">Offscale</th>
<th style="width: 18%;">Speakeasy</th>
<th style="width: 18%;">Stainless</th>
<th style="width: 19%;">Postman / Fern</th>
</tr>
</thead>
<tbody>
<tr><td>Python</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td></tr>
<tr><td>TypeScript</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td></tr>
<tr><td>Go</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td></tr>
<tr><td>Java</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td></tr>
<tr><td>C#</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td></tr>
<tr><td>PHP</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td></tr>
<tr><td>Ruby</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td></tr>
<tr><td>Kotlin</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ No</span></td></tr>
<tr style="background-color: #fafbfc;"><td><strong>Rust</strong></td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td></tr>
<tr style="background-color: #fafbfc;"><td><strong>Swift</strong></td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td></tr>
<tr style="background-color: #fafbfc;"><td><strong>C++</strong></td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td></tr>
<tr style="background-color: #fafbfc;"><td><strong>C</strong></td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td></tr>
<tr style="background-color: #fafbfc;"><td><strong>Shell / Bash</strong></td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td></tr>
<tr>
<td style="font-weight: 700;">Total Supported</td>
<td class="highlight" style="font-weight: 700; font-size: 1.1rem;">13</td>
<td style="font-weight: 700;">7</td>
<td style="font-weight: 700;">8</td>
<td style="font-weight: 700;">6</td>
</tr>
</tbody>
</table>
</div>
<div class="table-container">
<table class="comparison-table">
<thead>
<tr>
<th style="width: 25%;">Automation & DevEx</th>
<th class="highlight" style="width: 20%;">Offscale</th>
<th style="width: 18%;">Speakeasy</th>
<th style="width: 18%;">Stainless</th>
<th style="width: 19%;">Postman / Fern</th>
</tr>
</thead>
<tbody>
<tr><td>OpenAPI to Typed SDK</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td></tr>
<tr><td>CLI Code Generation</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td></tr>
<tr><td>Auto-Publish Packages*</td><td class="highlight"><span class="check-yes">✅ Free</span></td><td><span class="check-partial">💰 Paid Tier</span></td><td><span class="check-partial">💰 Paid Tier</span></td><td><span class="check-partial">💰 Paid Tier</span></td></tr>
<tr><td>Static HTML Docs</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ Hosted Only</span></td><td><span class="check-no">❌ Hosted Only</span></td><td><span class="check-no">❌ Hosted Only</span></td></tr>
<tr><td>13-Language Snippets</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ Partial</span></td><td><span class="check-no">❌ Partial</span></td><td><span class="check-no">❌ Partial</span></td></tr>
<tr><td>Interactive API Testing</td><td class="highlight"><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-no">❌ No</span></td><td><span class="check-yes">✅ Yes</span></td></tr>
<tr><td>Terraform Generation</td><td class="highlight"><span class="check-no">❌ No</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ No</span></td></tr>
<tr><td>MCP Integration</td><td class="highlight"><span class="check-no">❌ No</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-yes">✅ Yes</span></td><td><span class="check-no">❌ No</span></td></tr>
</tbody>
</table>
</div>
<p style="font-size: 0.85rem; color: #666; text-align: left; padding: 0 8px;">* Native registry publishing including PyPI, npm, crates.io, Maven, RubyGems, CocoaPods, and NuGet.</p>
</div>
</section>
</main>
<!-- Native HTML Popover API -->
<div id="consulting-popover" popover class="custom-popover" aria-labelledby="popover-title">
<h3 id="popover-title" class="popover-title">Consulting Services</h3>
<p class="popover-body">Consultancy has been closed down in favour of product business as of March 2026.</p>
<button class="popover-button" popovertarget="consulting-popover" popovertargetaction="hide">Acknowledge</button>
</div>
<footer class="footer" role="contentinfo">
<div class="container">
<p>© 2026 Offscale. Automating the API lifecycle, from spec to package.</p>
<div class="footer-links">
<a href="https://github.com/SamuelMarks/cdd-ctl" target="_blank" rel="noopener" aria-label="cdd-ctl on GitHub">
<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" style="width: 24px; height: 24px; vertical-align: middle; margin-right: 4px;">
<path d="M12 2C6.477 2 2 6.477 2 12c0 4.42 2.865 8.166 6.839 9.489.5.092.682-.217.682-.482 0-.237-.008-.866-.013-1.7-2.782.603-3.369-1.34-3.369-1.34-.454-1.156-1.11-1.462-1.11-1.462-.908-.62.069-.608.069-.608 1.003.07 1.531 1.03 1.531 1.03.892 1.529 2.341 1.087 2.91.831.092-.646.35-1.086.636-1.336-2.22-.253-4.555-1.11-4.555-4.943 0-1.091.39-1.984 1.029-2.683-.103-.253-.446-1.27.098-2.647 0 0 .84-.269 2.75 1.025A9.578 9.578 0 0112 6.836c.85.004 1.705.114 2.504.336 1.909-1.294 2.747-1.025 2.747-1.025.546 1.377.203 2.394.1 2.647.64.699 1.028 1.592 1.028 2.683 0 3.842-2.339 4.687-4.566 4.935.359.309.678.919.678 1.852 0 1.336-.012 2.415-.012 2.743 0 .267.18.578.688.48C19.138 20.161 22 16.418 22 12c0-5.523-4.477-10-10-10z"/>
</svg>
GitHub
</a>
</div>
</div>
</footer>
<script src="script.js"></script>
</body>
</html>