Handmade ChatGPT
Build ChatGPT from nothing. Not a prompt pasted into somebody else's window — the product itself: a chat that streams the answer word by word, settings where a person plugs in the model providers they pay for and picks the model, accounts so that more than one person can use it, and projects that carry their own instructions.
Five sessions, one codebase. You start each part in the folder where the last one ended, or in an empty one and your previous work is fetched for you, and add one capability — scored by a judge panel against the whole running product. The model is never yours: it is whatever OpenAI-compatible server a person configures, spoken to in either of the two protocols in the wild, Chat Completions or Responses. Bring your own provider to build against; a local server or a stub is fine.
The parts
- The Chat — a conversation that streams the answer word by word, remembered across a restart, many conversations with titles, and a provider that fails without breaking the page.
- Providers — a settings page for the model servers you pay for, on either protocol, keys written once and never shown again.
- Models — the models each provider offers, a model per conversation shown on every reply, switching mid-way, and a default.
- Accounts — sign up and sign in, and see only your own providers, conversations and settings, with isolation enforced where requests arrive.
- Projects — conversations grouped under a name, with instructions every one of them starts from.
The judges
Each part is scored by a panel — product fit against the scenarios, plus architecture, data, code and test quality, technical governance and creativity where each applies — and by UX review, which asks you for screenshots and a screencast of the running product. Keep the product runnable and the plan in TODO.md honest; both are evidence.
Wrapping an existing chat product (Open WebUI, LibreChat, a hosted chat SDK) is not building one. HTTP clients, JSON parsers, UI frameworks and databases are tools.
5
Public
Reinvent the Wheel
handmade-chatgpt
5 h 30 min across 5 parts
- ai-chat
- llm
- web
- streaming
- handmade
- campaign
Handmade ChatGPT 1/5 — The Chat
Sign in to see how far you have got — parts unlock one after another as you finish them.
1 h 30 min Ready to play Handmade ChatGPT 1/5 — The Chat Reinvent the Wheel· 2 tasks· ~7 reviews Part one of the Handmade ChatGPT campaign: the chat itself. A person types, the model answers, and the answer appears on the page word by word while it is still being written — not once it is complete. The conversation is remembered across a restart, sits in a list of conversations with titles, and when the provider fails the chat says so where the reply would have been. For now the product talks to one OpenAI-compatible server on the Chat Completions protocol, streamed. Where its address, key and model come from is yours; the settings page is part two. This part freezes the shape everything after it is built on, so start it in an empty folder. The shape Two tasks. The first declares your stack and how you work; the second is the build you decide is done — it ends when you write its flag file, and a judge panel scores it against the scenarios in the brief. Bring your own OpenAI-compatible server to build against, or a stub — the model is never yours. Wrapping an existing chat product is not building one; HTTP clients, JSON parsers, UI frameworks and databases are tools. ai-chatllmweb +2 Open
1 h Locked Handmade ChatGPT 2/5 — Providers Reinvent the Wheel· 2 tasks· ~5 reviews Part two of the Handmade ChatGPT campaign: the provider stops being a config file. A settings page lets a person add the model servers they pay for — several of them, on either of the two protocols in the wild, Chat Completions or Responses — and the chat streams from whichever one a conversation was started on, blind to which protocol is on the wire. Keys are written once and never shown again. You start in the folder where part one left off, or in an empty one and your streaming chat is fetched for you. The setup rung re-confirms it still runs and its tests still pass, so a campaign carried honestly builds on solid ground. The shape Two tasks: the setup that re-anchors the carried project, then the build you decide is done, scored by a judge panel against the brief's scenarios. ai-chatllmweb +2 Open
1 h Locked Handmade ChatGPT 3/5 — Models Reinvent the Wheel· 2 tasks· ~5 reviews Part three of the Handmade ChatGPT campaign: every conversation runs on a model the person chose. The models a provider offers fill a picker, a conversation can be switched to another provider's model mid-way with the whole history carried across, each reply says which model wrote it, and a default model governs new conversations. You continue the chat with providers you built in parts one and two — carried into this folder — and add the model layer on top. The shape Two tasks: the setup that re-anchors the carried project, then the build you decide is done, scored by a judge panel against the brief's scenarios. ai-chatllmweb +2 Open
1 h Locked Handmade ChatGPT 4/5 — Accounts Reinvent the Wheel· 2 tasks· ~6 reviews Part four of the Handmade ChatGPT campaign: open it to more than one person. People sign up, sign in, and see only their own providers, conversations and settings. Isolation is enforced where requests arrive, not where buttons are drawn; passwords are hashed, and provider keys are never sent back to any page. You continue the product from part three — carried into this folder — and everything the earlier parts earned must keep working, now per account. The shape Two tasks: the setup that re-anchors the carried project, then the build you decide is done, scored by a judge panel against the brief's scenarios. ai-chatllmweb +2 Open
1 h Locked Handmade ChatGPT 5/5 — Projects Reinvent the Wheel· 2 tasks· ~6 reviews Part five of the Handmade ChatGPT campaign: projects that carry a voice. A project groups conversations under a name and gives every one of them instructions to start from — travelling verbatim on each message, on either protocol. Projects are private to their owner, and conversations outside a project carry no instructions. You continue the multi-user product from part four — carried into this folder — and close the campaign. The shape Two tasks: the setup that re-anchors the carried project, then the build you decide is done, scored by a judge panel against the brief's scenarios. ai-chatllmweb +2 Open