diff options
Diffstat (limited to 'landing/layouts')
| -rw-r--r-- | landing/layouts/_default/baseof.html | 32 | ||||
| -rw-r--r-- | landing/layouts/index.html | 223 | ||||
| -rw-r--r-- | landing/layouts/partials/footer.html | 16 | ||||
| -rw-r--r-- | landing/layouts/partials/header.html | 20 |
4 files changed, 291 insertions, 0 deletions
diff --git a/landing/layouts/_default/baseof.html b/landing/layouts/_default/baseof.html new file mode 100644 index 0000000..89a0bd7 --- /dev/null +++ b/landing/layouts/_default/baseof.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html lang="{{ .Site.LanguageCode | default "en" }}"> +<head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} — {{ .Site.Title }}{{ end }}</title> + <meta name="description" content="{{ with .Description }}{{ . }}{{ else }}{{ .Site.Params.description }}{{ end }}" /> + + <meta property="og:title" content="{{ .Site.Title }}" /> + <meta property="og:description" content="{{ .Site.Params.description }}" /> + <meta property="og:type" content="website" /> + <meta property="og:url" content="{{ .Site.BaseURL }}" /> + + <meta name="twitter:card" content="summary_large_image" /> + <meta name="twitter:title" content="{{ .Site.Title }}" /> + <meta name="twitter:description" content="{{ .Site.Params.description }}" /> + + <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=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"> + + <link rel="stylesheet" href="{{ "css/style.css" | relURL }}" /> + <link rel="icon" type="image/svg+xml" href="{{ "favicon.svg" | relURL }}" /> +</head> +<body> + {{ partial "header.html" . }} + <main> + {{ block "main" . }}{{ end }} + </main> + {{ partial "footer.html" . }} +</body> +</html> 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 /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’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 — once, properly — so you don’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 — + 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 & 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’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’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’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’t move under you.</strong> + <p>Versioned endpoints, deprecation windows, and a changelog you can subscribe to. If something’s about to break, you’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 — 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 }} diff --git a/landing/layouts/partials/footer.html b/landing/layouts/partials/footer.html new file mode 100644 index 0000000..d6588fe --- /dev/null +++ b/landing/layouts/partials/footer.html @@ -0,0 +1,16 @@ +<footer class="site-footer"> + <div class="container footer-inner"> + <div class="footer-brand"> + <span class="brand-mark" aria-hidden="true"> + <svg viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> + <rect x="4" y="6" width="24" height="3" rx="1.5" fill="currentColor"/> + <rect x="4" y="14" width="18" height="3" rx="1.5" fill="currentColor" opacity="0.7"/> + <rect x="4" y="22" width="12" height="3" rx="1.5" fill="currentColor" opacity="0.4"/> + </svg> + </span> + <span>Tidy Index</span> + </div> + <p class="footer-tagline">Structured data, served simply.</p> + <p class="footer-meta">© {{ now.Year }} Tidy Index. All rights reserved.</p> + </div> +</footer> diff --git a/landing/layouts/partials/header.html b/landing/layouts/partials/header.html new file mode 100644 index 0000000..5f6d85b --- /dev/null +++ b/landing/layouts/partials/header.html @@ -0,0 +1,20 @@ +<header class="site-header"> + <div class="container header-inner"> + <a href="{{ "/" | relURL }}" class="brand" aria-label="Tidy Index home"> + <span class="brand-mark" aria-hidden="true"> + <svg viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> + <rect x="4" y="6" width="24" height="3" rx="1.5" fill="currentColor"/> + <rect x="4" y="14" width="18" height="3" rx="1.5" fill="currentColor" opacity="0.7"/> + <rect x="4" y="22" width="12" height="3" rx="1.5" fill="currentColor" opacity="0.4"/> + </svg> + </span> + <span class="brand-name">Tidy Index</span> + </a> + <nav class="site-nav" aria-label="Primary"> + <a href="#what">What</a> + <a href="#formats">Formats</a> + <a href="#how">How it works</a> + <a href="#contact" class="nav-cta">Get access</a> + </nav> + </div> +</header> |
