Ship Your First Web App · Module 2 · Make it real
The three features that make apps feel real
7 min read · lesson 4 of 5
Users can't articulate it, but three 'boring' features separate a demo from an app: persistence, feedback and failure states.
1. Persistence
Data survives reload. On-device storage (localStorage) covers single-user apps in ten lines. The test: reload the page — is everything still there?
2. Feedback
Every tap does something visible within 100ms: a spinner, a toast, a state change. Silence feels broken, even when code is running fine.
3. Failure states
What happens offline, on empty input, on a failed fetch? Ship a designed empty state, an error message with a retry, and graceful offline behaviour. Apps are judged by their worst moments, not their best.
Add them in that order. Persistence without feedback still feels broken; feedback without persistence feels fake.
Practice
Audit your project against the three. Whichever fails the reload-tap-fail test is your next task.