# Build

> Step-by-step projects that each build a real program from an empty file, with the code beside the text and a challenge along the way.

This is the Markdown version of https://osl-lang.org/build. Every page of the OSL docs has one: add .md to its path. https://osl-lang.org/llms.txt lists them all.

Each project starts with a few lines that do something and grows one small step at a time. The program sits beside the text, the lines each step adds are highlighted, and a "try it" tab runs it. Quizzes and challenges along the way check that it stuck.

They assume you've done [the course](/learn.md).

- [Build a command-line tool](/build/cli-tool.md): Build `todo`, a command-line task list that keeps its data in a JSON file, then compile it into a program you can run from anywhere.
- [Build a web API](/build/web-api.md): Build Shorty, a link shortener with a JSON API, redirects, validation, visit counts and a token-protected route group.
- [Build a realtime chat](/build/realtime-chat.md): Build a chat room with `std:serve` and `std:ws`: WebSocket handlers, nicknames kept on each connection, JSON messages, broadcast and a browser page.
- [Build a desktop app](/build/desktop-app.md): Build a pomodoro timer with `std:ui` and `std:window`: a class with state and actions, a view in tags, styles and a theme, then show it on the web and in a window.
- [Build a game](/build/game.md): Build Snake with `std:raylib`, keeping the rules in plain code you can run and test as text, and drawing the board in a window at the end.
- [Build a terminal dashboard](/build/terminal-dashboard.md): Build a live terminal dashboard with `std:tui`: progress bars, tables, boxes and charts as text, a model you can test, and a redraw loop that reads keys.
- [Build a chat bot](/build/chat-bot.md): Build a dice and trivia bot for originChats: command handling you can test as plain functions, embeds and polls, then wire it to a server.
