diff --git a/IMPLEMENTATION.md b/IMPLEMENTATION.md new file mode 100644 index 0000000..e69de29 diff --git a/landing/index.html b/landing/index.html index a4b9639..5bbe118 100644 --- a/landing/index.html +++ b/landing/index.html @@ -1,178 +1,188 @@ - + - - - - Queryx — Agent-native search API - - - - - + + + + + + Queryx — Agent-Native Search API + + + +
+
+ - -
-
-
x402 payments on Base
-

Search the web.
Pay per query.
No accounts.

-

The search API built for agents. 5x cheaper than Perplexity. Native x402 micropayments on Base.

- -
-
- - -
-
-

Simple pricing

-

Pay per query. No subscriptions. No API keys. No accounts.

-
-
-
/v1/search
-
$0.001
-
Web search + AI synthesis. Fast, structured JSON with sources and confidence scores.
-
-
-
/v1/search/news
-
$0.001
-
News-focused search. Results sorted by recency with publication dates.
-
- -
-
-

How we compare

-
-
- - Price/query - x402 - No account - Agent JSON -
-
- Queryx - $0.001 - - - -
-
- Perplexity - $0.005–0.014 - × - × - × -
-
- Tavily - $0.004 - × - × - +
+

Agent-native search API

+

Search the web. Pay per query. No accounts.

+

+ Queryx uses x402 payments on Base so agents can run search in real time and only pay for each request. + Start at $0.001/query with structured JSON output. +

+ +
    +
  • No signup flow
  • +
  • No subscription lock-in
  • +
  • Built for autonomous agents
  • +
-
-
+
- -
-
-

Quick start

-

One curl. That's it.

-
-
- bash - -
-
curl -H "PAYMENT-SIGNATURE: <x402-sig>" \
-  "https://queryx.run/v1/search?q=Fed+rate+decision+2026"
-
-
- View response -
-
- json +
+
+
+

Pricing

+

Simple endpoint pricing with transparent per-query costs.

+ +
+
+

/v1/search

+

$0.001/query

+

General web search for fast retrieval and citation-ready results.

+
+ +
+

/v1/search/news

+

$0.001/query

+

Recent headlines and publisher coverage optimized for up-to-date context.

+
+ +
+

/v1/search/deep

+

$0.005/query

+

Higher-depth crawling and extraction for hard, multi-source questions.

+
-
{
-  "query": "Fed rate decision 2026",
-  "answer": "The Federal Reserve held rates steady at 4.25-4.50% in its January 2026 meeting, citing persistent inflation concerns...",
-  "sources": [
+
+          
+

Competitor comparison

+
+
+ Provider + Price / query +
+
+ Perplexity + $0.005–0.014 +
+
+ Tavily + $0.004 +
+
+ Queryx + $0.001–0.005 +
+
+
+
+
+ +
+
+

Quick start

+

One call, one payment proof, one JSON response.

+ +
+
+ curl + +
+
curl -X POST https://api.queryx.io/v1/search \
+  -H "Content-Type: application/json" \
+  -H "x402-payment: <base-payment-proof>" \
+  -d '{"query":"latest ethereum L2 news","limit":5}'
+ +
+ Show example JSON response +
{
+  "query": "latest ethereum L2 news",
+  "results": [
+    {
+      "title": "L2 rollups continue to grow in transaction volume",
+      "url": "https://example.com/article-1",
+      "snippet": "New data shows sustained growth across major L2 ecosystems.",
+      "source": "Example News",
+      "published_at": "2026-03-03T18:10:00Z"
+    },
     {
-      "title": "Fed Holds Rates Steady in January 2026",
-      "url": "https://reuters.com/markets/fed-jan-2026",
-      "snippet": "The Federal Reserve maintained its benchmark rate...",
-      "published": "2026-01-29T18:00:00Z"
+      "title": "Base ecosystem update",
+      "url": "https://example.com/article-2",
+      "snippet": "Developers ship new tools for payments and agent workflows.",
+      "source": "Example Wire",
+      "published_at": "2026-03-03T14:42:00Z"
     }
   ],
-  "confidence": 0.92,
-  "freshness": {
-    "fetchedAt": "2026-02-27T10:30:00Z",
-    "resultsAge": "29d"
-  },
-  "model": "queryx-fast-v1",
-  "tokens": { "in": 312, "out": 187 }
+  "count": 2
 }
+
+
-
-
-
+ - -
-
-

How it works

-
-
-
🔍
-
1
-

Agent sends query

-

Your agent hits the API with a search query and an x402 payment signature.

-
-
-
-
-
2
-

Payment verified

-

x402 USDC micropayment verified on Base in under 100ms. No accounts, no API keys.

-
-
-
-
📊
-
3
-

Structured JSON returned

-

Search results synthesized by AI with sources, confidence scores, and freshness metadata.

+
+
+

How it works

+
+
+
1
+

Query

+

Send your search request to a Queryx endpoint with your payload.

+
+
+
2
+

x402 payment on Base

+

Attach an x402 payment proof on Base. You pay exactly per request.

+
+
+
3
+

Structured JSON

+

Receive clean, structured JSON designed for agent pipelines and tools.

+
+
-
-
-
+ + - - + - - - + + + \ No newline at end of file diff --git a/landing/script.js b/landing/script.js new file mode 100644 index 0000000..74ad5cc --- /dev/null +++ b/landing/script.js @@ -0,0 +1,51 @@ +(function () { + var copyButtons = document.querySelectorAll("[data-copy]"); + for (var i = 0; i < copyButtons.length; i += 1) { + copyButtons[i].addEventListener("click", function (event) { + var button = event.currentTarget; + var selector = button.getAttribute("data-copy"); + if (!selector) return; + + var source = document.querySelector(selector); + if (!source) return; + + var text = source.textContent || ""; + var original = button.textContent; + + function setLabel(label) { + button.textContent = label; + window.setTimeout(function () { + button.textContent = original || "Copy"; + }, 1200); + } + + if (navigator.clipboard && navigator.clipboard.writeText) { + navigator.clipboard + .writeText(text) + .then(function () { + setLabel("Copied"); + }) + .catch(function () { + setLabel("Failed"); + }); + } else { + var temp = document.createElement("textarea"); + temp.value = text; + temp.style.position = "fixed"; + temp.style.opacity = "0"; + document.body.appendChild(temp); + temp.select(); + try { + document.execCommand("copy"); + setLabel("Copied"); + } catch (err) { + setLabel("Failed"); + } + document.body.removeChild(temp); + } + }); + } + + var yearEl = document.getElementById("year"); + if (yearEl) yearEl.textContent = String(new Date().getFullYear()); +})(); \ No newline at end of file diff --git a/landing/styles.css b/landing/styles.css index ed8aeaa..f288011 100644 --- a/landing/styles.css +++ b/landing/styles.css @@ -1,22 +1,20 @@ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - :root { --bg: #0a0a0a; --surface: #141414; - --surface-2: #1a1a1a; - --border: #262626; - --accent: #6366f1; - --accent-glow: rgba(99, 102, 241, 0.15); + --surface-2: #1b1b1b; --text: #f4f4f5; - --muted: #71717a; - --green: #10b981; - --red: #ef4444; - --font: 'Inter', system-ui, -apple-system, sans-serif; - --mono: 'JetBrains Mono', 'Fira Code', monospace; + --muted: #b3b3bc; + --accent: #6366f1; + --danger: #ef4444; + --border: #262626; + --radius: 14px; + --max-width: 1100px; +} + +*, +*::before, +*::after { + box-sizing: border-box; } html { @@ -24,470 +22,366 @@ html { } body { + margin: 0; background: var(--bg); color: var(--text); - font-family: var(--font); + font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; line-height: 1.6; - -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; +} + +img, +svg { + display: block; + max-width: 100%; +} + +a { + color: var(--text); + text-decoration: none; } .container { - max-width: 1080px; - margin: 0 auto; - padding: 0 24px; + width: min(100% - 2rem, var(--max-width)); + margin-inline: auto; } -/* Hero */ .hero { - padding: 120px 0 100px; - text-align: center; - position: relative; - overflow: hidden; + border-bottom: 1px solid var(--border); + background: radial-gradient(1200px 400px at 80% -20%, rgba(99, 102, 241, 0.18), transparent 60%), var(--bg); } -.hero::before { - content: ''; - position: absolute; - top: -200px; - left: 50%; - transform: translateX(-50%); - width: 800px; - height: 800px; - background: radial-gradient(circle, var(--accent-glow) 0%, transparent 70%); - pointer-events: none; +.nav { + padding: 1rem 0; + display: flex; + align-items: center; + justify-content: space-between; } -.badge { - display: inline-block; - padding: 6px 16px; - border: 1px solid var(--border); - border-radius: 100px; - font-size: 13px; +.brand { + font-weight: 700; + letter-spacing: 0.2px; +} + +.nav-link { color: var(--muted); - margin-bottom: 32px; + font-size: 0.95rem; +} + +.nav-link:hover, +.nav-link:focus-visible { + color: var(--text); +} + +.hero-content { + padding: 4.5rem 0 4rem; + max-width: 760px; +} + +.eyebrow { + display: inline-block; + background: rgba(99, 102, 241, 0.15); + border: 1px solid rgba(99, 102, 241, 0.35); + color: #c7c8ff; + font-size: 0.8rem; letter-spacing: 0.02em; + border-radius: 999px; + padding: 0.25rem 0.6rem; + margin: 0 0 1rem; } -.hero h1 { - font-size: clamp(36px, 6vw, 64px); - font-weight: 700; - line-height: 1.1; - margin-bottom: 24px; - letter-spacing: -0.03em; +h1, +h2, +h3 { + line-height: 1.2; + margin: 0; } -.subtitle { - font-size: 18px; +h1 { + font-size: clamp(2rem, 5vw, 3.4rem); + max-width: 20ch; +} + +.subheadline { + margin-top: 1rem; color: var(--muted); - max-width: 520px; - margin: 0 auto 40px; - line-height: 1.7; + max-width: 64ch; } -.cta-row { +.hero-cta { + margin-top: 1.6rem; display: flex; - gap: 16px; - justify-content: center; + gap: 0.8rem; flex-wrap: wrap; } .btn { display: inline-flex; align-items: center; - padding: 12px 28px; - border-radius: 8px; - font-size: 15px; - font-weight: 500; - text-decoration: none; - transition: all 0.2s; - cursor: pointer; - border: none; + justify-content: center; + min-height: 42px; + padding: 0.55rem 0.95rem; + border-radius: 10px; + border: 1px solid transparent; + font-weight: 600; + font-size: 0.95rem; } .btn-primary { background: var(--accent); - color: white; + color: #fff; } -.btn-primary:hover { - background: #5558e6; - transform: translateY(-1px); - box-shadow: 0 8px 30px rgba(99, 102, 241, 0.3); +.btn-primary:hover, +.btn-primary:focus-visible { + filter: brightness(1.08); } .btn-secondary { + border-color: var(--border); background: var(--surface); color: var(--text); - border: 1px solid var(--border); } -.btn-secondary:hover { - border-color: #404040; +.btn-secondary:hover, +.btn-secondary:focus-visible { + border-color: #353535; background: var(--surface-2); } -/* Sections */ -section { - padding: 100px 0; +.hero-points { + margin: 1.2rem 0 0; + padding-left: 1.1rem; + color: var(--muted); + display: grid; + gap: 0.15rem; } -h2 { - font-size: 32px; - font-weight: 700; - margin-bottom: 12px; - letter-spacing: -0.02em; +.section { + padding: 4.2rem 0; } -.section-sub { - color: var(--muted); - font-size: 16px; - margin-bottom: 48px; +.section h2 { + font-size: clamp(1.5rem, 2.8vw, 2.1rem); } -/* Pricing */ -.pricing { - text-align: center; +.section-lead { + margin: 0.65rem 0 1.4rem; + color: var(--muted); } -.price-grid { +.pricing-grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 20px; - margin-bottom: 64px; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 1rem; } -.price-card { +.card { background: var(--surface); border: 1px solid var(--border); - border-radius: 12px; - padding: 32px 28px; - text-align: left; - transition: border-color 0.2s; -} - -.price-card:hover { - border-color: #404040; + border-radius: var(--radius); + padding: 1rem; } -.price-card.featured { - border-color: var(--accent); - position: relative; +.endpoint-card h3 { + font-size: 1.05rem; + margin-bottom: 0.4rem; } -.price-card.featured::before { - content: 'Popular'; - position: absolute; - top: -10px; - right: 20px; - background: var(--accent); - color: white; - font-size: 11px; - font-weight: 600; - padding: 2px 10px; - border-radius: 100px; - letter-spacing: 0.05em; - text-transform: uppercase; +.price { + font-size: 1.7rem; + font-weight: 700; + margin: 0.3rem 0 0.5rem; } -.endpoint { - font-family: var(--mono); - font-size: 14px; - color: var(--accent); - margin-bottom: 16px; +.price span { + color: var(--muted); + font-size: 0.95rem; + margin-left: 0.2rem; font-weight: 500; } -.price { - font-size: 36px; - font-weight: 700; - margin-bottom: 12px; - letter-spacing: -0.02em; -} - -.price-desc { +.endpoint-card p:last-child { + margin: 0; color: var(--muted); - font-size: 14px; - line-height: 1.6; } -/* Comparison */ -.comparison { - max-width: 700px; - margin: 0 auto; +.competitor-card { + margin-top: 1rem; } -.comparison h3 { - font-size: 18px; - font-weight: 600; - margin-bottom: 20px; +.competitor-card h3 { + font-size: 1rem; + margin-bottom: 0.75rem; } -.comp-table { +.compare-table { border: 1px solid var(--border); - border-radius: 12px; + border-radius: 10px; overflow: hidden; } -.comp-row { +.compare-table .row { display: grid; - grid-template-columns: 1.2fr 1fr 0.7fr 0.7fr 0.7fr; - padding: 14px 20px; - font-size: 14px; - border-bottom: 1px solid var(--border); - align-items: center; + grid-template-columns: 1fr auto; + gap: 1rem; + padding: 0.65rem 0.8rem; + border-top: 1px solid var(--border); } -.comp-row:last-child { - border-bottom: none; +.compare-table .row:first-child { + border-top: 0; } -.comp-header { - background: var(--surface); +.compare-table .header { + background: #101010; color: var(--muted); - font-weight: 500; - font-size: 12px; - text-transform: uppercase; - letter-spacing: 0.06em; -} - -.comp-row.highlight { - background: rgba(99, 102, 241, 0.06); + font-size: 0.9rem; } -.provider { +.danger { + color: var(--danger); font-weight: 600; } -.cheap { color: var(--green); font-weight: 600; font-family: var(--mono); font-size: 13px; } -.expensive { color: var(--red); font-family: var(--mono); font-size: 13px; } -.yes { color: var(--green); font-size: 18px; font-weight: 700; } -.no { color: var(--red); font-size: 16px; } - -/* Quickstart */ -.quickstart { - text-align: center; +.accent { + color: var(--accent); + font-weight: 700; } -.code-block { - background: var(--surface); - border: 1px solid var(--border); - border-radius: 12px; +.code-card { + padding: 0; overflow: hidden; - text-align: left; - max-width: 700px; - margin: 0 auto; } .code-header { display: flex; - justify-content: space-between; align-items: center; - padding: 10px 16px; + justify-content: space-between; + background: #101010; border-bottom: 1px solid var(--border); - background: var(--surface-2); -} - -.code-lang { - font-family: var(--mono); - font-size: 12px; + padding: 0.6rem 0.8rem; color: var(--muted); + font-size: 0.9rem; } .copy-btn { - background: transparent; - border: 1px solid var(--border); - color: var(--muted); - font-size: 12px; - padding: 4px 12px; - border-radius: 6px; + border: 1px solid #323232; + background: #191919; + color: var(--text); + border-radius: 8px; + padding: 0.3rem 0.6rem; + font-size: 0.82rem; cursor: pointer; - font-family: var(--font); - transition: all 0.2s; } -.copy-btn:hover { - color: var(--text); - border-color: #404040; +.copy-btn:hover, +.copy-btn:focus-visible { + background: #222; } pre { - padding: 20px; + margin: 0; overflow-x: auto; + padding: 1rem; + background: #111111; + color: #e7e7ea; + font-size: 0.87rem; + line-height: 1.5; } code { - font-family: var(--mono); - font-size: 13px; - line-height: 1.7; - color: #e4e4e7; + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; } -.key { color: #818cf8; } -.str { color: #34d399; } -.num { color: #fbbf24; } - -.response-toggle { - max-width: 700px; - margin: 16px auto 0; - text-align: left; +.json-details { + border-top: 1px solid var(--border); + background: var(--surface); } -.response-toggle summary { +.json-details summary { cursor: pointer; + list-style: none; + padding: 0.75rem 1rem; color: var(--muted); - font-size: 14px; - padding: 12px 0; - transition: color 0.2s; -} - -.response-toggle summary:hover { - color: var(--text); -} - -.response-toggle .code-block { - margin-top: 8px; + user-select: none; } -/* How it works */ -.how-it-works { - text-align: center; +.json-details summary::-webkit-details-marker { + display: none; } -.steps { - display: flex; - align-items: flex-start; - justify-content: center; - gap: 20px; - flex-wrap: wrap; +.json-details summary::after { + content: "+"; + float: right; + color: var(--accent); + font-weight: 700; } -.step { - flex: 1; - min-width: 220px; - max-width: 300px; - padding: 32px 24px; - background: var(--surface); - border: 1px solid var(--border); - border-radius: 12px; - position: relative; +.json-details[open] summary::after { + content: "−"; } -.step-icon { - font-size: 32px; - margin-bottom: 8px; +.steps-grid { + margin-top: 1rem; + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 1rem; } .step-num { - display: inline-flex; - align-items: center; - justify-content: center; - width: 28px; - height: 28px; - border-radius: 50%; - background: var(--accent); - color: white; - font-size: 13px; + width: 2rem; + height: 2rem; + border-radius: 999px; + display: inline-grid; + place-items: center; + background: rgba(99, 102, 241, 0.16); + border: 1px solid rgba(99, 102, 241, 0.35); + color: #d7d8ff; font-weight: 700; - margin-bottom: 16px; + margin-bottom: 0.6rem; } -.step h3 { - font-size: 16px; - font-weight: 600; - margin-bottom: 8px; -} - -.step p { - color: var(--muted); - font-size: 14px; - line-height: 1.6; +.step-card h3 { + margin-bottom: 0.35rem; + font-size: 1.04rem; } -.step-arrow { +.step-card p { + margin: 0; color: var(--muted); - font-size: 24px; - align-self: center; - padding-top: 40px; } -/* Footer */ -footer { +.footer { border-top: 1px solid var(--border); - padding: 40px 0; + padding: 1rem 0; + background: #090909; } .footer-inner { display: flex; - justify-content: space-between; align-items: center; - flex-wrap: wrap; - gap: 16px; -} - -.footer-links { - display: flex; - gap: 24px; -} - -.footer-links a, -.footer-credit a { + justify-content: space-between; + gap: 1rem; color: var(--muted); - text-decoration: none; - font-size: 14px; - transition: color 0.2s; + font-size: 0.92rem; } -.footer-links a:hover, -.footer-credit a:hover { +.footer a { color: var(--text); } -.footer-credit { - color: var(--muted); - font-size: 14px; -} - -/* Mobile */ -@media (max-width: 768px) { - .hero { - padding: 80px 0 60px; - } - - section { - padding: 60px 0; - } - - .comp-row { - grid-template-columns: 1.2fr 1fr 0.6fr 0.6fr 0.6fr; - padding: 12px 14px; - font-size: 13px; - } - - .step-arrow { - display: none; - } - - .steps { - flex-direction: column; - align-items: center; - } - - .step { - max-width: 100%; - } -} - -@media (max-width: 480px) { - .hero h1 { - font-size: 32px; +@media (max-width: 900px) { + .pricing-grid, + .steps-grid { + grid-template-columns: 1fr; } - .comp-row { - grid-template-columns: 1fr 1fr; - gap: 4px; + .hero-content { + padding: 3.4rem 0 3.2rem; } - .comp-row span:nth-child(n+3) { - display: none; + .section { + padding: 3.2rem 0; } -} +} \ No newline at end of file