academia.sh: can theory and a real field problem live in the same lesson?
A free, publicly open, text-first learning platform that holds textbook theory and problems actually met in the industry inside a single lesson flow.
What it does today
Live as a free learning platform with no signup wall: the field–curriculum–course–unit–lesson hierarchy, full-text search, progress tracking and verifiable certificates all work. Anyone who wants to read the computer-science curriculum can use it today.
- Started
- August 2026 — Ongoing
Form
Technologies
Unlike video course platforms, academia.sh makes writing the primary medium: readable, searchable, quotable, permanent in the browser. academia.sh is an attempt to present knowledge the way a textbook does — discipline, curriculum, course, unit, lesson — and all of it is free. The first body of content is computer science, but the model is multi-disciplinary from the start: adding mathematics or linguistics means writing lessons, not changing the schema.
That is not the interesting part. The interesting part is this: a lesson that carries only theory becomes lecture notes, and one that carries only field problems becomes a blog post. What does it cost to hold both in one flow — to write, right after the definition, where that definition breaks in practice?
Holding theory and the field problem in one lesson
A field problem is not a separate “exercise” entity; it sits in the lesson’s own text, as the continuation of the theory. The problems are not invented examples either: they are the ones actually met in the industry. That choice keeps the lesson a single entity.
Splitting it would have produced two products — text to read on one side, a list of exercises to solve on the other — and the moment it split, progress, search and assessment would have split with it. Staying single shows up in two places:
Progress. Completion is tracked per lesson, and the denominator is “published active lessons”. Reading a lesson’s theory while skipping its problem is not a state that exists; they are the same lesson. Assessment follows the same principle: a quiz asks about the whole lesson, not the theory alone.
Search. On a text-first platform search is not decoration, it is the spine —
what you cannot search on a video platform is the primary way in here. Postgres
full-text search: weights are title A, intro B, body C; ranking is ts_rank_cd,
snippets ts_headline. search_vector is not a generated column, and
cannot be — though the reason is not to_tsvector, whose two-argument form is
immutable. The problem is that the dictionary sits on the row as text and has
to be cast to regconfig; that cast is not considered immutable, so Postgres
refuses the expression in a generated column. A trigger builds the vector
instead.
Free, no signup wall, text-first
What came out is an open, free education platform that does only its job: no paywall, no ads, no layer pulling attention away from the content. The content does not originate in the application database either — it lives as markdown in a separate GitHub repository, and the platform feeds from there. That separation also shapes what comes next: the curriculum is kept in the one form that can genuinely be opened to contributions, plain text. Today I am the only author; that does not have to stay true.
The stack is plain: Laravel 13, Blade + Livewire, Tailwind, PostgreSQL 16,
Redis, with Filament for administration. Markdown renders on the server
(league/commonmark + tempest/highlight), so there is no Node at runtime.
One certificate decision is worth naming: holder_name and course_title are
frozen at issue time. A name changed later does not alter a printed document,
and un-checking a lesson does not revoke the certificate — undoing a mark is an
error correction, not a revocation. The verification page is public but carries
noindex, nofollow: a person’s name should not surface in search results.
There is no repository layer. Eloquent already plays that role; anything holding
a workflow is an Action, stateless capabilities are a Service. Quality gates
are Pest, Pint and Larastan at level 6.
Is the model really discipline-agnostic
The list of remaining work is not why it continues. I believe knowledge should be public, free and open: the obstacle in front of learning should be the difficulty of the knowledge itself — not a payment screen, a signup wall or a company deciding to shut something down. Both the text-first medium and the content living in its own repository follow from that: readable, copyable and continuable by someone else if they want to continue it.
The genuinely open question sits on the content side, and it is not technical. The schema is multi-disciplinary, but the model’s condition is that every lesson also carries a problem from the field. I can write that for computer science because I have been working in that field for years. Adding a second discipline needs no migration — it needs an author. Whether the model is actually discipline-agnostic will only show once that author is found.
The research behind this work
All researchLaravel's preload curve: 123 files buy eight times what the last 1,912 do
How far can a curated preload take Laravel, and what does each slice cost in start-up time?
Finding
The curve is not proportional to volume. The first 1,592 files — Laravel's own framework — buy 30 ms and add 1.2 seconds to start-up. The next 1,094 Symfony files buy 9.5 ms for free. The **123 files** after that (psr, carbon) buy 15.7 ms, more than the 1,094 before them. And the last 1,912 buy 1.8 ms while adding another 1.2 seconds. So the blanket preload the earlier record measured as a ceiling is the worst point on the curve that is not the origin: stopping at 2,809 files gives 12.77 ms for 1,514 ms of start-up, while 4,721 files ask 2,691 ms to reach 10.96 ms.
measured 15 days ago
opcache preload cuts the deploy bill by up to fourteen times — but five of seven frameworks do not hand it to you
With `opcache.preload` on, how long is the first request seven PHP frameworks serve after a deploy, what does the gain cost, and who can actually have it?
Finding
Preload shortens the cold first request by between 3.5× and 14.2×: Symfony drops from 35.58 ms to 2.50 ms, down to Phalcon's bare figure. But only two of the seven candidates — Symfony and CodeIgniter — publish a preload file of their own; for the other five the gain sits on the table waiting for the user to write one. Writing one is not as easy as it looks: a preload generated blindly from the classmap never brings Symfony up at all, and on CodeIgniter it does worse (5.29 ms) than the hand-picked official file (3.13 ms). And the cost does not vanish: Laravel's classmap preload takes the 62 ms it saves each visitor and writes it back as 2,340 ms of php-fpm start-up.
measured 15 days ago