{"course":{"slug":"building-apps-with-ai","title":"Building Apps with AI","url":"https://addaly.com/learn/building-apps-with-ai","level":"beginner","track":"build"},"lesson":{"slug":"building-one-real-thing","title":"Building one real thing","url":"https://addaly.com/learn/building-apps-with-ai/building-one-real-thing","position":87,"of":87,"minutes":10,"answer":"The course is finished when a stranger has used something you built for a week, and the checklist of what 'built' means is the whole course in one page.","keyIdea":"The course is finished when a stranger has used something you built for a week, and the checklist of what 'built' means is the whole course in one page."},"body":{"format":"markdown","text":"## The brief\n\nFind one person with one real, small need. A tutor who takes bookings on WhatsApp and loses track. A shop that writes orders in a notebook. A club that keeps its roster in a spreadsheet three people edit. Somebody you can talk to, whose problem fits in a paragraph, and who will use what you build for a week and tell you what is wrong with it.\n\nThat last clause is the whole assignment. Everything in this course was about what happens when somebody other than you uses the thing. A demo you use yourself exercises none of it.\n\n## The specification, first\n\nBefore a prompt, the specification block's output, on one page:\n\n- The entities: three or four tables, with the columns every table needs.\n- The actions: who can do what to which row.\n- The rules: the things that must be true, and what happens when a rule is broken.\n- The failure paths: the empty state, the wrong password, the double submission, the person on a phone in a train.\n- The acceptance checks: the two-minute experiments, written before any code, that would show each feature working or not.\n\nShow it to the person it is for. They will correct it. That correction is cheaper now than after the first build.\n\n## What built means\n\nThe checklist, which is the course in one page. Each line is a lesson, and each has a test you can run.\n\n**The machine and the model.** A rules file the tool reads, with the forbidden lists for git and the database. The stack named in the specification and not chosen by the model.\n\n**Reading and checking.** Every change read as a diff before being committed. The smallest experiment, run, for every claim the agent made.\n\n**Save points.** A git history of at least twenty commits, each a working state, with messages that say what became true. A branch per feature. A remote. No secret in the history: the scan run and clean.\n\n**Shipping.** Deployed on a free host, with a domain, HTTPS, environment variables scoped per environment, a version stamp in the footer that matches the latest commit, and a health route being pinged.\n\n**The parts that persist.** A real database with migrations in a folder and run as a deploy step. Sign-in through a library. Sessions as the only source of identity. Uploads in object storage, if there are any. A backup restored into a fresh database, with the date recorded.\n\n**A model inside.** One AI feature, called from a server route, with a timeout and streaming, the prompt in a file, output validated, three caps in place, a fallback message for the provider's bad hour, and an eval set of twenty inputs that runs in one command.\n\n**The holes.** The three-account script passing. The bundle and history scan clean. Every route with a schema at the top. The admin route gated by an allowlist and returning 404 to everyone else. A bot check on sign-up.\n\n**Running it.** Error tracking with source maps and scrubbing. A report button. A privacy notice that names the model provider. A deletion path that includes the backups. A README that a developer could run from.\n\n## The stranger's rubric\n\nGive the app to the person it is for, and to one more person who has never seen it, and watch. Not over their shoulder; ask them to use it for a week and to press the report button whenever something is confusing or wrong. The measure of the capstone is what comes back: the reports, what each turned out to be, and what changed. Three reports found and fixed is a pass. Zero reports means either a very small app or a report button nobody found.\n\n## The write-up\n\nOne page, honest, kept in the repository:\n\n- What the app does and who it is for.\n- What broke during the build, how you found it, and which lesson's technique found it.\n- What the strangers reported and what each turned out to be.\n- What you would not build this way: the line from the closing lesson, applied to this project.\n- What you cannot yet explain about your own app.\n\nThat last item is the important one. It is the list the learning path is for, and it is the honest answer to the question every module of this course has asked: do you know what you have made, or does it merely work?\n\n## After\n\nThe exam at the end of this course tests the mechanisms. The capstone tests whether they hold under a stranger's hands, which is the only test that has ever mattered for software. Keep the app running. In three months, the complaint list, the eval set and the git log will be a better record of what you learned than any certificate, and they will be yours."},"check":{"question":"Two learners finish the capstone. One built a booking app for a real tutor who has used it for two weeks and reported three problems, all fixed. The other built a polished demo with more features that nobody outside the project has used. Which has completed the course, and why?","options":[{"text":"The second, because more features demonstrate more of the course's techniques and a polished demo is what a portfolio needs when the goal is to be taken seriously.","correct":false,"tempting":"Features exercised by their author test nothing the course teaches; every module was about what happens when somebody else uses the thing."},{"text":"Neither, because a real course requires a formal examination rather than a project.","correct":false,"tempting":"The exam exists too, and it tests the mechanisms; the project is where the mechanisms are shown to hold."},{"text":"Both equally, since the checklist is about the techniques applied, not about who used the result.","correct":false,"tempting":"The checklist ends with a stranger and a week for a reason; the techniques exist to survive that, and unused they are unverified."},{"text":"The first, because three real problems found and fixed by a stranger's use is the only evidence the course counts, and a demo nobody used has none.","correct":true}]},"prev":{"slug":"the-learning-path-from-here","title":"The learning path from here, with the model as tutor","url":"https://addaly.com/learn/building-apps-with-ai/the-learning-path-from-here"},"next":null,"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Building one real thing', in Building Apps with AI. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/building-apps-with-ai/building-one-real-thing (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Building one real thing","courseTitle":"Building Apps with AI","module":{"index":9,"slug":"what-it-costs-and-where-this-stops","title":"What it costs, running it, and where this stops"},"answer":null,"keyIdea":"The course is finished when a stranger has used something you built for a week, and the checklist of what ‘built’ means is the whole course in one page.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"h2","id":"the-brief","runs":[{"text":"The brief"}]},{"t":"p","runs":[{"text":"Find one person with one real, small need. A tutor who takes bookings on WhatsApp and loses track. A shop that writes orders in a notebook. A club that keeps its roster in a spreadsheet three people edit. Somebody you can talk to, whose problem fits in a paragraph, and who will use what you build for a week and tell you what is wrong with it."}]},{"t":"p","runs":[{"text":"That last clause is the whole assignment. Everything in this course was about what happens when somebody other than you uses the thing. A demo you use yourself exercises none of it."}]},{"t":"h2","id":"the-specification-first","runs":[{"text":"The specification, first"}]},{"t":"p","runs":[{"text":"Before a prompt, the specification block’s output, on one page:"}]},{"t":"ul","items":[[{"text":"The entities: three or four tables, with the columns every table needs."}],[{"text":"The actions: who can do what to which row."}],[{"text":"The rules: the things that must be true, and what happens when a rule is broken."}],[{"text":"The failure paths: the empty state, the wrong password, the double submission, the person on a phone in a train."}],[{"text":"The acceptance checks: the two-minute experiments, written before any code, that would show each feature working or not."}]]},{"t":"p","runs":[{"text":"Show it to the person it is for. They will correct it. That correction is cheaper now than after the first build."}]},{"t":"h2","id":"what-built-means","runs":[{"text":"What built means"}]},{"t":"p","runs":[{"text":"The checklist, which is the course in one page. Each line is a lesson, and each has a test you can run."}]},{"t":"p","runs":[{"text":"The machine and the model.","b":true},{"text":" A rules file the tool reads, with the forbidden lists for git and the database. The stack named in the specification and not chosen by the model."}]},{"t":"p","runs":[{"text":"Reading and checking.","b":true},{"text":" Every change read as a diff before being committed. The smallest experiment, run, for every claim the agent made."}]},{"t":"p","runs":[{"text":"Save points.","b":true},{"text":" A git history of at least twenty commits, each a working state, with messages that say what became true. A branch per feature. A remote. No secret in the history: the scan run and clean."}]},{"t":"p","runs":[{"text":"Shipping.","b":true},{"text":" Deployed on a free host, with a domain, HTTPS, environment variables scoped per environment, a version stamp in the footer that matches the latest commit, and a health route being pinged."}]},{"t":"p","runs":[{"text":"The parts that persist.","b":true},{"text":" A real database with migrations in a folder and run as a deploy step. Sign-in through a library. Sessions as the only source of identity. Uploads in object storage, if there are any. A backup restored into a fresh database, with the date recorded."}]},{"t":"p","runs":[{"text":"A model inside.","b":true},{"text":" One AI feature, called from a server route, with a timeout and streaming, the prompt in a file, output validated, three caps in place, a fallback message for the provider’s bad hour, and an eval set of twenty inputs that runs in one command."}]},{"t":"p","runs":[{"text":"The holes.","b":true},{"text":" The three-account script passing. The bundle and history scan clean. Every route with a schema at the top. The admin route gated by an allowlist and returning 404 to everyone else. A bot check on sign-up."}]},{"t":"p","runs":[{"text":"Running it.","b":true},{"text":" Error tracking with source maps and scrubbing. A report button. A privacy notice that names the model provider. A deletion path that includes the backups. A README that a developer could run from."}]},{"t":"h2","id":"the-stranger-s-rubric","runs":[{"text":"The stranger’s rubric"}]},{"t":"p","runs":[{"text":"Give the app to the person it is for, and to one more person who has never seen it, and watch. Not over their shoulder; ask them to use it for a week and to press the report button whenever something is confusing or wrong. The measure of the capstone is what comes back: the reports, what each turned out to be, and what changed. Three reports found and fixed is a pass. Zero reports means either a very small app or a report button nobody found."}]},{"t":"h2","id":"the-write-up","runs":[{"text":"The write-up"}]},{"t":"p","runs":[{"text":"One page, honest, kept in the repository:"}]},{"t":"ul","items":[[{"text":"What the app does and who it is for."}],[{"text":"What broke during the build, how you found it, and which lesson’s technique found it."}],[{"text":"What the strangers reported and what each turned out to be."}],[{"text":"What you would not build this way: the line from the closing lesson, applied to this project."}],[{"text":"What you cannot yet explain about your own app."}]]},{"t":"p","runs":[{"text":"That last item is the important one. It is the list the learning path is for, and it is the honest answer to the question every module of this course has asked: do you know what you have made, or does it merely work?"}]},{"t":"h2","id":"after","runs":[{"text":"After"}]},{"t":"p","runs":[{"text":"The exam at the end of this course tests the mechanisms. The capstone tests whether they hold under a stranger’s hands, which is the only test that has ever mattered for software. Keep the app running. In three months, the complaint list, the eval set and the git log will be a better record of what you learned than any certificate, and they will be yours."}]}],"check":{"question":[{"text":"Two learners finish the capstone. One built a booking app for a real tutor who has used it for two weeks and reported three problems, all fixed. The other built a polished demo with more features that nobody outside the project has used. Which has completed the course, and why?"}],"options":[{"text":[{"text":"The second, because more features demonstrate more of the course’s techniques and a polished demo is what a portfolio needs when the goal is to be taken seriously."}],"correct":false,"tempting":[{"text":"Features exercised by their author test nothing the course teaches; every module was about what happens when somebody else uses the thing."}]},{"text":[{"text":"Neither, because a real course requires a formal examination rather than a project."}],"correct":false,"tempting":[{"text":"The exam exists too, and it tests the mechanisms; the project is where the mechanisms are shown to hold."}]},{"text":[{"text":"Both equally, since the checklist is about the techniques applied, not about who used the result."}],"correct":false,"tempting":[{"text":"The checklist ends with a stranger and a week for a reason; the techniques exist to survive that, and unused they are unverified."}]},{"text":[{"text":"The first, because three real problems found and fixed by a stranger’s use is the only evidence the course counts, and a demo nobody used has none."}],"correct":true,"tempting":null}],"order":[1,3,0,2],"why":null},"prev":{"slug":"the-learning-path-from-here","title":"The learning path from here, with the model as tutor","minutes":9},"next":null}}