An Apple-style demo store for the four-phone dumbphone lineup from
Phonebiz_Supplier_Pitch.pdf. Flask + SQLite, with a simulated
Stripe-style checkout (no real payments) and hand-drawn SVG product renders.
./ci.sh # full local CI: build image, smoke-test it, deploy
./ci.sh --no-deploy # build + test only
The pipeline: syntax check → docker build → boots a throwaway container on
port 5099 → runs ci/smoke_test.sh against it (all routes, a full payment
flow, SQLite persistence, input validation) → tags metanoia:latest →
docker compose up -d. Any failing stage aborts the pipeline; the throwaway
container is removed on exit either way.
Then open http://127.0.0.1:5000
Orders persist in the metanoia-data volume across restarts and redeploys.
Manage the deployed app with docker compose {logs,restart,down}.
docker compose down -v also wipes the order database.
python3 -m venv .venv # once
.venv/bin/pip install -r requirements.txt # once
.venv/bin/python app.py
| URL | What it is |
|---|---|
/ | Landing: hero, market stats, lineup, comparison table, 3-question phone-match quiz |
/phone/<slug> | Product pages: jelly-star, qin-f25, doov-r77-pro, dumber-mini |
/checkout/<slug> | Stripe-mimicking checkout (test mode) |
/success/<order id> | Order confirmation / receipt |
/admin/orders | All orders stored in SQLite |
Use card 4242 4242 4242 4242, any future expiry, any CVC.
Card numbers are Luhn-validated client-side; only the last 4 digits are sent
to the server. Orders land in metanoia.db (created and seeded on first run)
with a fake pi_… payment reference.
./release.sh patch # 0.1.0 -> 0.1.1
./release.sh minor # 0.1.0 -> 0.2.0
./release.sh major # 0.1.0 -> 1.0.0
./release.sh 1.2.3 # explicit version
The script refuses to run unless you are on a clean, up-to-date main.
It stamps VERSION, moves the [Unreleased] notes in CHANGELOG.md under
the new version, runs the full CI gate (./ci.sh --no-deploy), then creates
a Release vX.Y.Z commit, an annotated vX.Y.Z tag, pushes both, and tags
the Docker image metanoia:X.Y.Z.
On GitHub, two Actions workflows take it from there:
.github/workflows/ci.yml) — runs ./ci.sh --no-deploy on every
push and pull request to main..github/workflows/release.yml) — on every v* tag, re-runs
the CI gate and publishes the GitHub Release with the notes for that
version from CHANGELOG.md.Document changes as you go under ## [Unreleased] in CHANGELOG.md; the
release script turns them into the release notes. The running app shows its
version in the site footer.
static/img/, drawn to a shared
scale to match each phone's described form factor.metanoia.db to reset products and orders.Content type
Image
Digest
sha256:be0cf10e4…
Size
46.3 MB
Last updated
3 months ago
docker pull saashup/phonebiz