aboutsummaryrefslogtreecommitdiff
path: root/landing/layouts/index.html
blob: 231ff6110ef734b8a30477334f05aed09bedaea2 (plain)
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
{{ define "main" }}

<section class="hero">
  <div class="container hero-inner">
    <span class="eyebrow">Clean data, on tap</span>
    <h1 class="hero-title">
      Structured data,<br />
      <span class="accent">served simply.</span>
    </h1>
    <p class="hero-sub">
      Tidy Index delivers clean, well-organized datasets through a single API
      designed for humans, machines, and LLM agents alike.
    </p>
    <div class="hero-cta">
      <a href="#contact" class="btn btn-primary">Request access</a>
      <a href="#how" class="btn btn-ghost">See how it works</a>
    </div>

    <div class="hero-visual" aria-hidden="true">
      <div class="code-card">
        <div class="code-card-head">
          <span class="dot dot-a"></span>
          <span class="dot dot-b"></span>
          <span class="dot dot-c"></span>
          <span class="code-card-title">GET&nbsp; /v1/datasets/cities</span>
        </div>
<pre class="code-card-body"><code><span class="tk-p">{</span>
  <span class="tk-k">"id"</span>: <span class="tk-s">"cities"</span>,
  <span class="tk-k">"updated"</span>: <span class="tk-s">"2026-04-09T08:14:00Z"</span>,
  <span class="tk-k">"records"</span>: <span class="tk-p">[</span>
    <span class="tk-p">{</span> <span class="tk-k">"name"</span>: <span class="tk-s">"Lisbon"</span>, <span class="tk-k">"population"</span>: <span class="tk-n">548703</span> <span class="tk-p">}</span>,
    <span class="tk-p">{</span> <span class="tk-k">"name"</span>: <span class="tk-s">"Kyoto"</span>,  <span class="tk-k">"population"</span>: <span class="tk-n">1463723</span> <span class="tk-p">}</span>,
    <span class="tk-p">{</span> <span class="tk-k">"name"</span>: <span class="tk-s">"Quito"</span>,  <span class="tk-k">"population"</span>: <span class="tk-n">2011388</span> <span class="tk-p">}</span>
  <span class="tk-p">]</span>
<span class="tk-p">}</span></code></pre>
      </div>
    </div>
  </div>
</section>

<section id="what" class="section">
  <div class="container narrow">
    <span class="eyebrow center">What is Tidy Index</span>
    <h2 class="section-title center">We&rsquo;ve already done the cleanup.</h2>
    <p class="section-lede center">
      Scraping. Reformatting. Reconciling. Re-scraping when the source changes
      shape. We do all of that &mdash; once, properly &mdash; so you don&rsquo;t
      have to do any of it.
    </p>
  </div>
</section>

<section id="formats" class="section section-soft">
  <div class="container">
    <span class="eyebrow center">Pick your shape</span>
    <h2 class="section-title center">One dataset. Every shape you need.</h2>
    <p class="section-lede center">
      Ask for JSON, get JSON. Ask for chunks, get chunks. Same data underneath &mdash;
      no reformatting, no glue code.
    </p>

    <div class="format-grid">
      <article class="format-card">
        <div class="format-icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
            <path d="M8 4 4 12l4 8"/>
            <path d="m16 4 4 8-4 8"/>
          </svg>
        </div>
        <h3>JSON</h3>
        <p>Stable schemas, stable IDs, ETags on every response. Drop it straight into your code.</p>
      </article>

      <article class="format-card">
        <div class="format-icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
            <path d="M4 4h16v16H4z"/>
            <path d="M4 9h16"/>
            <path d="M9 4v16"/>
          </svg>
        </div>
        <h3>XML &amp; CSV</h3>
        <p>For the pipelines that have been around longer than your team has. Strict, well-formed, no surprises.</p>
      </article>

      <article class="format-card">
        <div class="format-icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
            <circle cx="12" cy="12" r="8"/>
            <path d="M12 8v4l2 2"/>
          </svg>
        </div>
        <h3>LLM chunks</h3>
        <p>Already chunked, already cited, already embedding-ready. Drop them into your retriever and stop fighting tokenizers.</p>
      </article>

      <article class="format-card">
        <div class="format-icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
            <path d="M3 12h4l3-8 4 16 3-8h4"/>
          </svg>
        </div>
        <h3>Streaming</h3>
        <p>Webhooks and server-sent events the moment something changes. No polling, no stale caches.</p>
      </article>
    </div>
  </div>
</section>

<section id="how" class="section">
  <div class="container">
    <span class="eyebrow center">Who it&rsquo;s for</span>
    <h2 class="section-title center">Same data. Three kinds of readers.</h2>
    <p class="section-lede center">
      People, programs, and agents all want different things from the same
      dataset. Tidy Index gives each of them what they expect.
    </p>

    <div class="audience-grid">
      <div class="audience-card">
        <div class="audience-num">01</div>
        <h3>For humans</h3>
        <p>
          A real web UI. Skim a schema, preview a few rows, grab a snapshot,
          and copy a working curl command without leaving the page.
        </p>
      </div>

      <div class="audience-card audience-card-feature">
        <div class="audience-num">02</div>
        <h3>For computers</h3>
        <p>
          Boring REST, the way you like it. OpenAPI specs, semver, ETags,
          idempotent reads, and rate limits we&rsquo;ll actually tell you about.
        </p>
      </div>

      <div class="audience-card">
        <div class="audience-num">03</div>
        <h3>For LLM agents</h3>
        <p>
          Endpoints shaped like tool calls. Chunks shaped like context. Every
          response carries its own provenance, so the model never has to guess
          where the data came from.
        </p>
      </div>
    </div>
  </div>
</section>

<section class="section section-soft">
  <div class="container narrow">
    <span class="eyebrow center">Why Tidy Index</span>
    <h2 class="section-title center">Less wrangling. More building.</h2>

    <ul class="value-list">
      <li>
        <span class="value-check" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <polyline points="20 6 9 17 4 12"/>
          </svg>
        </span>
        <div>
          <strong>Curated, not crawled.</strong>
          <p>A human looks at every dataset before it ships. We&rsquo;d rather have ten that are right than ten thousand that are almost right.</p>
        </div>
      </li>
      <li>
        <span class="value-check" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <polyline points="20 6 9 17 4 12"/>
          </svg>
        </span>
        <div>
          <strong>Schemas that don&rsquo;t move under you.</strong>
          <p>Versioned endpoints, deprecation windows, and a changelog you can subscribe to. If something&rsquo;s about to break, you&rsquo;ll be the first to know.</p>
        </div>
      </li>
      <li>
        <span class="value-check" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <polyline points="20 6 9 17 4 12"/>
          </svg>
        </span>
        <div>
          <strong>Every record has a receipt.</strong>
          <p>Each row links back to where it came from. Your auditors will love it. Your models will stop making things up.</p>
        </div>
      </li>
      <li>
        <span class="value-check" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <polyline points="20 6 9 17 4 12"/>
          </svg>
        </span>
        <div>
          <strong>One key, every format.</strong>
          <p>JSON, XML, CSV, or LLM chunks. Flip a header &mdash; same data, different shape.</p>
        </div>
      </li>
    </ul>
  </div>
</section>

<section id="contact" class="section">
  <div class="container narrow">
    <div class="cta-card">
      <span class="cta-glow" aria-hidden="true"></span>
      <h2 class="cta-title">Ready when you are.</h2>
      <a href="mailto:hello@tidyindex.com" class="btn btn-primary btn-lg cta-btn">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
          <circle cx="7.5" cy="15.5" r="5.5"/>
          <path d="m11.5 11.5 9.5-9.5"/>
          <path d="m17 5 3 3"/>
          <path d="m14 8 3 3"/>
        </svg>
        API Key
      </a>
    </div>
  </div>
</section>

{{ end }}