aboutsummaryrefslogtreecommitdiff
path: root/landing/layouts/index.html
diff options
context:
space:
mode:
authorbenj <benj@rse8.com>2026-04-09 15:22:43 +0800
committerbenj <benj@rse8.com>2026-04-09 15:22:43 +0800
commit5f56e0eaf8030f78077fc93b441296bb51fe9331 (patch)
treeab2bad3b7fb1e5bf40d4130f7a158d0ca7ddb011 /landing/layouts/index.html
parent862216a47ae42ec831d4c2cf0de18225f6971de5 (diff)
downloadtidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar.gz
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar.bz2
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar.lz
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar.xz
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar.zst
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.zip
Add initial Hugo landing page
First pass at the tidyindex.com marketing site, built with a custom minimal Hugo theme — light palette (white/soft blue), Inter + JetBrains Mono, hero with a JSON code preview, format/audience/value sections, and a single-button CTA. Also adds a top-level .gitignore for local Claude/IDE state. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'landing/layouts/index.html')
-rw-r--r--landing/layouts/index.html223
1 files changed, 223 insertions, 0 deletions
diff --git a/landing/layouts/index.html b/landing/layouts/index.html
new file mode 100644
index 0000000..231ff61
--- /dev/null
+++ b/landing/layouts/index.html
@@ -0,0 +1,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 }}