Inspiration

It started with a frustration I couldn't shake. Somewhere around 8 billion people walk around on this planet observing things every single day: weird clouds, dying bees, a neighbor's kid asking why the sky does that thing. Almost none of it goes anywhere. Science is bottlenecked by institutional capacity, not by curiosity. Curiosity is basically infinite. The design and the community is what's missing.

I kept thinking about the old citizen science stories. Einstein in a patent office. Faraday with no formal education. And my favorite: the first human being to walk on the Moon wasn't a career military man or a credentialed academic. Neil Armstrong was a civilian astronaut, a self-described "white-socks, pocket-protector, nerdy engineer" who got there on curiosity, skill, and an unreasonable amount of persistence. The people who changed everything didn't wait for permission or a lab budget. They just had a question and a way to chase it. So the question that became Citizen Science was: what would it look like if we built the infrastructure so the next breakthrough really could come from anyone, anywhere? Not a hashtag. Actual infrastructure. Experiments, mentors, data, credits, a network.

What it does

Citizen Science is a distributed discovery network. A few of the things you can actually do in it right now:

  • Browse 25 of humanity's biggest challenges and submit real solutions, with a leaderboard tracking contributors.
  • Run and publish experiments through CitizenX. Host events, publish findings, follow other people's work.
  • Talk to history. Our "Talk to" feature lets you have a conversation with figures like Einstein and Tesla, with streaming avatars and cloned voices, built on top of researched life stories so the answers aren't generic.
  • Use the science copilot, an AI assistant that helps you design experiments, analyze field notes, and find verified science video clips mid-conversation.
  • Learn from mentors, enroll in courses, and earn credits. Credits are the currency of the platform: subscriptions give you a monthly pool, top-up packs never expire, and every AI feature draws from real usage.
  • Walk the Nobel Footsteps. Follow the experimental path of actual laureates and try to reproduce what they did.

There's also a whole directory of roughly 300 scientists and inventors, historical and living, each with a researched profile. The network isn't just about the future. It's about standing on the right shoulders.

How we built it

Gemini is the brain of the platform, and it's doing more jobs than you'd think:

  • The science copilot, a streaming chat assistant that helps members design experiments and reason through ideas. It runs with Google Search grounding enabled, so when it cites a fact it actually pulled it from the web instead of confabulating.
  • The field-notes analyzer. You paste in raw observations from an experiment and Gemini structures them into findings, patterns, and suggested next steps.
  • The avatar brain for the "Talk to" feature. When you chat with Einstein or Tesla, Gemini generates the answers conditioned on a researched life story, while D-ID streams the talking video and ElevenLabs handles voice.
  • A research pipeline that seeded the directory. Grounded Gemini agents researched roughly 300 scientists and inventors and wrote their profiles straight into the database, which is how a team of one ends up with that much real content.
  • A relevance gate that vets candidate video interviews for historical figures before they ever reach a profile page.

For deployment, everything ships as one Docker container on Google Cloud Run serving both the React app and the API from a single origin. That sounds like a boring detail and it is, until you learn that SameSite cookie rules make split-origin auth a nightmare, so collapsing to one origin was the move that made sessions actually work in production. Database migrations apply automatically at container startup, and they're written to be idempotent so a redeploy can never brick the schema.

Auth is session cookies signed with a server secret, plus "Continue with Google" OAuth. The OAuth flow stores its PKCE handshake in the database rather than cookies and binds it with a signed nonce, because on autoscale you can't trust that the same instance sees the start and finish of a login.

Payments are Stripe, wired through webhooks so subscriptions, top-up packs, and founder plans all reconcile, and everything money-related runs in one transaction. The whole system is built to be idempotent: migrations replay, seeders re-run safely, webhook handlers survive being called twice. When you're a team of one, the ops burden is a feature decision.

The whole thing was built in Replit. That is the IDE, the dev environment, and the place where every prototype got its first run. Having the database, the shell, and the editor in one browser tab meant I could go from "what if the copilot could analyze field notes" to a working endpoint in an afternoon, which happened more than once.

Under the hood it's a TypeScript monorepo (pnpm workspaces) with a React front end, an Express API, and PostgreSQL with Drizzle as the ORM. The whole API contract is defined in OpenAPI and codegen'd into typed hooks and Zod schemas, which saved me from an entire category of bugs.

Challenges we ran into

Oh, where to start.

The Gemini free tier caps you at roughly 20 grounded requests a day. When your seeding pipeline needs a thousand research calls, that wall is very real. I had to make every seeder resumable and idempotent, and drive them in timed batches. Long-running background processes also kept dying between shell calls, which is a fun thing to discover at hour six.

Stripe integration, and the migration runner silently no-opped when bundled wrong, which surfaced as "relation stripe.accounts does not exist" in production. Good times.

Getting cookies to work on deployment meant collapsing everything to a single origin, because SameSite=Lax doesn't care about your architecture diagrams. And D-ID voice cloning for Tesla is still pending on their side, so there's literally a task in my queue titled "give Tesla his real cloned voice once it appears." I think I have to make another payment over there.

Also: teaching an AI interviewer to stop asking questions. Models genuinely cannot count their own questions, so the server has to count answers and inject a forced-close instruction. That one took embarrassingly long to figure out.

Accomplishments that we're proud of

The scope, honestly. This went from an idea to a working platform with real auth, real payments, a research pipeline that populated a 300-figure directory with grounded facts, streaming AI avatars you can have a conversation with, and a credit economy that actually meters guests and users correctly.

I'm also proud that the boring parts are boring. Migrations replay cleanly. Seeders re-run without duplicating anything. Webhooks are atomic. Nobody demos that stuff at a hackathon, but it's the difference between a prototype and a product.

And the Nobel Footsteps feature might be my favorite thing I've ever built. The idea that a kid anywhere can follow the exact experimental path of a laureate, step by step, is the whole thesis of the project in one feature.

What we learned

People over technology, as a design principle. Every feature that worked was one that lowered the barrier for a curious person to do something real. Every feature that didn't was me showing off.

Technically: make everything idempotent before you need it to be, because you will need it to be. Ground your AI in search or accept that it's fiction. And quota limits aren't edge cases. Design for them from day one, because your seeding pipeline will hit them at the worst possible moment.

Also learned that "how hard can it be" is a dangerous sentence, and that I'll say it again anyway.

What's next for Citizen Science

The directory figures become real members. Living scientists can claim their profiles, get verified, and start mentoring directly. The outreach pipeline for that is already built, just gated until the emails are right.

Then the network effects: upvotes and comments on solutions, real-time notifications, message threads instead of single messages, and letting members edit and manage their own experiments and events. Basically taking the platform from "built by one person" to "run by the community," which is the entire point.

Long term, this is aimed at the XPRIZE vision: a billion people contributing to discovery. The math is simple. Breakthroughs scale with curious people multiplied by real infrastructure. If even a fraction of the world's curiosity gets pointed at real problems, everything changes. We're building the infrastructure so that curiosity finally has somewhere to go.

Built With

Share this project:

Updates