GitHub - brainsparker/you-sheets: Enrich any dataset with live-web research: CSV in, natural-language columns, cited values out. You.com Research API at lite effort. MIT. · GitHub
Skip to content

About

Enrich any dataset with live-web research: CSV in, natural-language columns, cited values out. You.com Research API at lite effort. MIT.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

you-sheets

Enrich any dataset with live-web research. CSV in, natural-language columns, cited values out: every cell is a real research call against the live web, with sources one click away.

Built from you-app-template, deployable to Webflow Cloud.

Why this exists

Data enrichment usually means a stale vendor database or a brittle scraping pipeline. This app shows the simpler shape: one research call per cell at lite effort (~5 seconds, about a cent), a plain-language instruction per column, and the source list kept on every value so you can check the work.

  • Columns are prompts: "Find the CEO's full name", "Latest funding round and amount", applied to every row with the row's data as context
  • Cited cells: click any enriched value to see the sources behind it
  • Nothing leaves the browser: the sheet lives in React state and localStorage; there is no server-side storage, and the visitor's API key stays in their browser (BYOK)
  • Polite by design: a 3-wide client-side pool drains the queue, backing off and retrying on rate limits, with per-cell retry for stragglers

Quickstart (local)

git clone https://github.com/brainsparker/you-sheets.git
cd you-sheets
npm install
npm run dev

Open http://localhost:3000, paste your You.com API key, add an enrichment column to the sample sheet, and hit run.

No key yet? Create one at you.com/platform. New accounts include $100 in API credits.

How it works

for each pending cell (3 at a time):
  input = column instruction + row data + "answer with only the value"
  POST /api/you/v1/research { input, research_effort: "lite" }
  cell.value  = output.content (cleaned)
  cell.sources = output.sources (the receipts)

Two implementation details worth stealing:

  1. The terse-answer contract lives in the prompt. lite effort does not support output_schema (the API returns 422), so the prompt pins the format instead: answer with only the value, or exactly Unknown. See cellPrompt() in src/lib/sheet-model.ts. For schema-enforced extraction at higher effort (and cost), see you-company-researcher.
  2. Concurrency is capped client-side (3 workers, jittered backoff, two retries on 429) in src/lib/enrich.ts. Rate limits vary by plan; a low cap keeps batch runs boring and predictable.

Cost math is shown before every run: cells x $0.012 (lite is $12 per 1k requests). A 100-row sheet with two enrichment columns costs about $2.40.

api.you.com does not serve CORS headers, so calls go through the app's locked-down proxy route with per-request key forwarding; nothing is stored server-side.

Key files:

File Purpose
src/components/SheetApp.tsx Grid UI, column/row management, run orchestration, cell detail panel
src/lib/enrich.ts Concurrency pool with backoff and retries
src/lib/sheet-model.ts Sheet types, CSV in/out, localStorage persistence, the cell prompt
src/app/api/you/[...path]/route.ts Locked-down proxy with per-request key forwarding

Deploy to Webflow Cloud

  1. Fork this repo and push to GitHub.
  2. webflow cloud init: authenticate, pick your site, choose a mount path (for example /demos/sheets).
  3. webflow cloud deploy. Every push to the tracked branch auto-deploys after that.

Cell calls are ~5 second lite requests, far inside the platform's 20 second request window, and the pool runs in the browser, so the platform's 6-connection outbound limit per request never applies.

Do not add export const runtime = "edge" to route handlers: Webflow Cloud builds with OpenNext, which rejects edge-runtime routes.

Replicate this

  1. Start from you-app-template.
  2. Model your grid client-side and treat each cell as (instruction, row context).
  3. Run cells through a small pool with research(apiKey, { input, research_effort: "lite" }).
  4. Keep output.sources on every value; enrichment without receipts is just guessing.

License

MIT. See LICENSE.

About

Enrich any dataset with live-web research: CSV in, natural-language columns, cited values out. You.com Research API at lite effort. MIT.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages