Build an example app
Start with a small HTTP app, then give it persistent notes, a background export worker, and private object storage. Choose one language; each path is self-contained.
| Tutorial | What you build | Builder |
|---|---|---|
| Node.js and Express | Express web app and Node worker | heroku-nodejs |
| Ruby on Rails | Rails API app and Ruby worker | heroku-ruby |
| Python and Flask | Flask with Gunicorn and a Python worker | heroku-python |
| Go | Standard-library HTTP server and Go worker | heroku-go |
| Rust and Axum | Axum web app and Rust worker | paketo-rust |
| Static HTML | NGINX site with a public bucket asset | paketo-web-servers |
Every server-side path follows the same sequence:
- Create and deploy a hello app.
- Store notes in PostgreSQL.
- Queue exports in Redis and process them in a separate worker.
- Store exports in a private S3-compatible bucket.
- Optionally replace PostgreSQL with MariaDB or MongoDB.
PostgreSQL, MariaDB, and MongoDB are alternative primary stores; Redis is the queue. You do not need all three primary databases for an app. The static path uses browser-safe public assets; it has no server process that can use database credentials.
Each chapter provides dashboard and CLI paths. Choose one path for each step; do not create the same resource twice. Both paths push source with Git. The prerequisites describe access, tooling, and availability checks. Local services let you try the same source on your computer.
These are learning apps without user accounts. Anyone with the app URL can read and create notes and request downloads, even though the backing bucket is private. Use sample text only. Add authentication, authorization, rate limits, and export retention before adapting the code to real users. Queued jobs and export status depend on Redis; notes remain in the primary database if Redis data is lost, and exports can be regenerated.
When you finish, follow Take an Example to Production. It connects the learning checkpoints to app design, migrations, availability, and recovery guidance.