For most of April and May I was trying to teach myself ML off arXiv, and it was not going well. I would open a paper, get maybe three or four paragraphs in, hit something I did not know, Google it, land on a second paper, hit another gap, and eventually just close the tab and go do something else. There is a specific kind of tired that comes from doing this for a couple of hours and having nothing to show for it. If you have done it, you know.

I do not have a proper base in this stuff. I did not go to school for it and I do not have anyone around me who did. If you asked me to derive backprop right now I would probably fumble it and go look it up, which is embarrassing to admit publicly but I would rather admit it than pretend. Most of what I know is patchy and out of order. Some parts of transformers I understand reasonably well because I got obsessed with them for a week in March. Some parts of basic linear algebra I do not understand at all because I skipped that week in school. My mental map of the field looks like a piece of Swiss cheese.

Anyway, I got annoyed and built something.


The first thing I built was not the compiler. It was just a nicer way to read arxiv.org. The actual site is fine as an archive, I want to be clear I am not dunking on Cornell, they have kept the thing running for thirty years and that is honestly amazing. But if you are trying to actually keep up with a field, and not just look up one paper you already heard about, the interface is not really built for it. Categories are these huge undifferentiated lists. Search is basically string matching. There is no way to track what you have read, no way to say "show me more like this", no keyboard shortcuts, none of the affordances that make a modern reader feel modern.

So I sat down for about a week and built a reader over the top. Keyboard shortcuts, an actually useful search, a library you can pin things into, category feeds that rank by something other than upload time. I built it because I wanted it, and I was pretty sure that if I liked it, at least some other people would too.

It worked in the sense that I read more papers. It did not fix the actual problem, which was not that arXiv was hard to browse. It was that the papers themselves were, for me specifically, unreadable. Not in some general sense, they are perfectly good papers, they just assume you have already done the reading I have not done. A better feed on top of a corpus I cannot read is still a corpus I cannot read. It just gets me to the wall faster.

There was a Sunday in May where I saved eleven papers to the library and opened zero of them. I remember sitting on the balcony after and thinking, ok, this is not working. Something has to change or I am just going to spend the summer larping as someone who reads papers.


The obvious answer was to put some kind of AI on top of it and I resisted this for a while. Not for any deep reason. Mostly because every second tool right now is "chat with your PDF" and I did not want to build the nine hundredth version of that. It felt like a lazy shape. And honestly, chatting with a paper does not help me. I have tried. I ask a question, I get an answer that sounds fine, I still cannot read the next paragraph, and now I have a chat log to feel productive about.

What I actually wanted, when I thought about it for long enough, was not a conversation. I wanted somebody to write me a lesson. Something in the shape of a textbook chapter. Here is what you need to know first. Here is the idea in plain English. Here is the math, rendered properly. Here are the four papers that actually matter and here is one line on why each of them is on the list. Something I could open at night and finish before I fell asleep, and come away actually knowing the shape of a thing.

That is basically what ArcXiv turned into, after about four weeks of building it, hating it, throwing it away, and building it again. You type a topic. It plans a curriculum. Prereqs first, then chapters in a sensible order, equations in real LaTeX, a reading list at the end. Any section can be toggled between Skim, Standard and Deep so you can move fast the first time and drill down later. If a section is not landing you can hit regenerate with a hint, "give me an analogy", "go deeper on the math", and it rewrites in place.

My test was stupidly practical. Open a lesson at nine, close it at eleven, and know more than I did at nine. Not "I saved a resource for later." Not "I had an interesting chat." I should understand the rough shape of the thing and know which papers to read next. Most of the time now, I do.


A short detour into the guts, because a couple of people always ask.

The compiler is not one big prompt, it is four passes. The first pass does the outline. Given your topic it plans the whole spine, chapter titles, section titles, what each section is supposed to teach, prerequisites, glossary, the tags. This is the pass I have rewritten the most times. If the outline is off, everything downstream is quietly off in the same direction, and it is very hard to notice.

The second pass writes the sections. This happens in parallel, one call per section, but each call is fed the closing paragraph of the previous section and the intro of its chapter, so the prose threads instead of each section starting from scratch. This one was the hardest to get right. When I first shipped it the sections read fine on their own and then read like Wikipedia when you strung them together. Every section would re-introduce the topic like it was talking to a stranger. Feeding it the previous close is such a small thing to describe and it took me the better part of a week to actually make it work.

The third pass is visuals. Diagrams generated from a spec, not stock images. The fourth pass is the sidecar, papers with a reason each, glossary entries. Both are grounded in actual arXiv metadata from a Kaggle dump I ingested at the start, so IDs resolve to real records and the reader can open the cited paper in the same tab.

The plumbing is Cloudflare, D1 for users, RDS Postgres for the paper metadata, KV for the paper cache, a Durable Object sitting in front of the arXiv API so I do not get rate limited. Search is Typesense. Front end is TanStack Start, which I picked mostly because I wanted to learn it. The AI part lives in its own worker so streaming is isolated from the rest of the app. Every compiled lesson is cached under a hash of the prompt corpus, which means when I meaningfully change a prompt, the whole cache invalidates automatically, which has saved me from myself several times.

None of that is the interesting part though. The interesting part, at least to me, is that this is shape number six or seven. I built flat stages first, which felt like homework. Then flashcards, which nobody wants. Then a chat-with-a-paper thing, which was fine and hollow. Then summaries, which is a Wikipedia article you did not ask for. Then a roadmap-then-questions thing which I actually thought was going to work and did not. It was only when I stopped trying to invent some new format and just went "ok, I want a book, write me a book" that the reader started to feel like something I would actually use. I probably should have started there.


One thing I want to say, because it is a decision I made on purpose and I keep having to defend it. You do not need to sign in to use ArcXiv. The feed is open. Search is open. Every paper page is open. You can browse the site for an hour without me knowing who you are, and I would rather it be that way.

Almost every product person I have talked to about this thinks I am making a mistake. Signups are how you measure a product, they say. Signups are how you build a moat. Signups are how you retarget people later. And I hear all of that and I still do not want to do it. Half the reason I built this thing in the first place was because arxiv.org lets me read a paper without asking who I am, and every other tool that promises to help me read papers wants an email address, then a plan, then a card, and by the time I get to the paper I have forgotten why I wanted to read it.

The numbers are actually kind of funny. About a hundred people have signed in, ever. On a normal day the site does something like five to ten thousand unique visitors, and the total traffic sits around twenty to twenty-five thousand. Which means basically nobody signs in and a lot of people read. That is almost exactly the ratio I was hoping for. The signed in users get the compiler and their own library, and that is a fair trade because the compiler is expensive. Everyone else gets the reader for free and leaves whenever they want.

Is this a good business decision? Probably not. I built the version I wanted to find. If somebody uses ArcXiv for an hour, closes the tab, and never tells me, fine. I have been that person.


I want to say something about the awkward part of this, because if I do not, someone will say it in a reply and they will be right.

I have built a tool that outputs long-form lessons on diffusion models and mean field games and quantum error correction. I have not taken a real course in any of those fields. There is an obvious reading of this where I am the exact thing I wrote about in the last essay, someone larping the researcher role, using a tool to look like they have done the work. I have thought about that a lot, probably too much, and I do not have a clean answer.

The best I can say is that building the tool has made me learn more, not less. To design the outline pass I had to read enough actual lessons to have opinions about what a good one looks like. To make the reading list feature work I had to spend enough time in the actual arXiv corpus to know which papers people usually cite and which ones are just noise. To make Skim and Deep behave differently I had to know what a skim of transformers should even feel like, versus a deep read. Every product decision quietly forced me to learn the thing I was building around.

Whether that is a "real" way to learn is a question I am not going to try to settle in a blog post at midnight. What I know is that I have finished more lessons on ArcXiv in the last two months than I would have finished textbook chapters, and I am not sure the gap between those two things is as big as I used to think. If it turns out I am wrong about that, and I am quietly building myself a very sophisticated way to avoid learning, I would rather find out sooner than later. I will keep an eye on it.


Anyway, it is at arcxiv.org if you want to poke around. The reader is free, no account. The compiler is five lessons a day on a free account which is enough to figure out if it is useful to you. Email me if you have thoughts, or if you find a lesson that is quietly wrong somewhere, because I promise you there are some.

I built this because I was bad at reading arXiv and did not want that to be permanent. I am still bad, just less bad. Good enough.