What a Pull
Free microlearning for your feed.
not yet reviewed by publik

How to install What a Pull
Every step written out, for people who have never opened a terminal. Pick the setup you have.
README
Open in GitHubWhat a Pull
Pull something worth keeping.
An open-source knowledge feed. Short, source-anchored ideas from books, films, documentaries, podcasts, papers, essays and talks — that you can question, argue with, keep, and actually remember.
What other learning apps call premium, we call learning. Unlimited saves. Offline reading. Audio. Full history. Daily curated knowledge. $0.
Why this exists
Microlearning apps are good at the first thirty seconds and bad at everything after. You scroll, you tap a card, you feel briefly smarter, and a week later you cannot say what you read. The loop is scroll → like → forget → scroll.
What a Pull is built for a different loop:
Discover → Pull → Understand → Save → Recall → Go deeper
Every idea is anchored to a real source you can open — a byline and a link to the original, on every source page. Every idea can be argued with. And the app keeps a model of what you already know, so it stops re-teaching it.
What makes it different
Built, and working today:
| The Delta | The app knows what you already know, and refuses to spend your time on it. Open a source: "You already know 14 of these 18. Here are the 4 that are new." It reports time saved, not time spent. |
| Interleaved Recall | Questions arrive inside the feed at unpredictable moments — bounded, seeded, and dismissible. A Review tab is a chore people skip; a question at the right moment gets answered. |
| Half-Life | No streak guilt. Ideas decay; Review shows what is fading. Sessions end on Enough. |
| Say It Back | Explain an idea in your own words, then compare it with the card and grade yourself. Self-graded — the model-graded version is designed and not built (explanations.gap_score is never written). |
| Studio | Have your own text summarised — an essay, a paper, or the highlights you imported. Private, never published, under the same per-reader quota and a global daily spend cap. The one place a model sees something of yours, said on the screen before you type. |
| Conviction Ledger | Mark what you believe, not just what you saved. convictions records it and Your progress reads it back — every stance, what it used to be, and how many times it moved. "You agreed with this in March, here is the case against it" works where somebody has written an opposing edge, which today means the hand-seeded works. |
Designed, with the data being collected and no screen yet. Named here because a half-built feature is easier to trust when it says so:
| Idea Lineage | pull_relations carries ancestor, descendant and opposing edges, and a source page shows one hop of them. Tracing a chain across centuries needs the relation-extraction step, which is unwritten — so today only the hand-seeded works have edges at all. |
Stack
React 19 · Vite 8 · PWA — over Supabase (Postgres 17, pgvector, pgmq, Auth, Edge
Functions). No LLM ever runs in the read path: ranking, search and the Delta are SQL and
vector maths, which is what makes the free tier affordable. Measured, not asserted: 101
generated summaries have cost $1.50 in total, about $0.015 each, and every call writes to
cost_ledger.
There is no router and no data-fetching library. The handful of real URLs are matched
by pure helpers in apps/web/src/lib/routes.ts and driven by history.pushState in
App.tsx; requests go through supabase-js where they are needed, and what is kept
for offline reading is written to IndexedDB.
Using the hosted service
The hosted app at https://whatapull.vercel.app/ is governed by two documents, and both are in this repository rather than on a landing page nobody can diff:
- Privacy Policy — what is collected, which three processors ever see it, and why your reading history never reaches a language model.
- Terms of Service — including the five capabilities that stay free permanently, and the DMCA process.
They render inside the app at /privacy and /terms, from these exact files, ahead of
the sign-in gate — terms you can only read after accepting them are not terms. Every
revision is a commit, so what changed and when is public history.
Running your own instance makes you the operator of your own service; those documents describe ours, not yours.
Contributing
Contribution status: this repository is currently a read-only public preview. External pull requests and issues are temporarily closed while the project stabilises; the contribution channels described below will reopen later.
Start with CONTRIBUTING.md — setup, the contribution policy
(DCO sign-off, and what is expected if you used an AI assistant), and how a change gets
reviewed. docs/contributing-map.md lists work that is
genuinely self-contained. CLAUDE.md holds the seven laws that govern changes;
AGENTS.md describes the maintainer-side review gate. Security reports go to
SECURITY.md, never to a public issue. Docs live in docs/.
Licence
GNU AGPL v3 (AGPL-3.0-only). Copyright © 2026 Jai Sharma and the
What a Pull contributors — see NOTICE.
The code is open and stays open. You may read it, run it, modify it and share it. The one condition that matters: if you run a modified version and let other people use it over a network, you must offer those users the complete source of what you are running, under the same licence. That is an offer to the people using your instance — not a duty to publish to the world, and running a modified copy privately for yourself triggers nothing. It is the "Affero" part, and it is the whole reason this licence rather than the GPL, which a hosted fork can sidestep entirely.
What the relicense does not do. It does not reach backwards. Every commit made before it remains MIT, and because those commits are still public, anyone can fetch one today and take MIT rights in it — not just people who already had a copy. A licence granted cannot be withdrawn, and publishing it keeps granting it.
So the AGPL governs this version and everything after it. In practice that means the protection arrives with new work rather than covering what is already out, which is the normal and unavoidable shape of a relicense.
You may sell it. The AGPL is not a non-commercial licence and this project does not want one. Host it and charge for it, fold it into something you sell, compete with us — all of that is permitted, and the condition above is the only price: the people using your instance get its source. What nobody can do is take it closed.
External contributions will be welcome when the channels reopen, and there is no CLA. Inbound is outbound — what you send is released under the AGPL, the same terms the project is already on, so nothing you contribute can be relicensed out from under you, by the maintainers or anyone else. Contributions count as open source, because the AGPL is OSI-approved — a licence forbidding commercial use would not be, which is a second reason this project does not use one.
See Contributing above for where to start.
The hosted service's generated content, community submissions and user libraries are separate, are governed by the Terms, and are not part of this repository.
The five stay free regardless. Audio, offline, unlimited history, unlimited stashing
and curated Daily Pulls are free forever — that is law 3 in CLAUDE.md, and no licence
change touches it.