- Live URL set to https://savesave.duckdns.org and repo URL added
- Compute row + cost table updated for VM.Standard.E2.1.Micro (was A1.Flex)
- Explain the A1 → E2.1.Micro switch (Out of host capacity) and the local
Vite build + 2 GB swap mitigations for the 1 GB RAM limit
- Frontend service description updated for single-stage Dockerfile
- New section 2.5 (Ports) and 2.6 (Deployment workflow) for defense talking points
- Prerequisites mention Node 18+ for local Vite build and Git Bash on Windows
- OCI quota check switched to E2.1.Micro limit name
- .gitattributes added to repo layout
Public-cloud deployment of a single-user expense tracker:
- 4-container stack: Caddy (HTTPS via Let's Encrypt), nginx (React/Vite SPA), Express API, Postgres 16
- Repeatable deployment via prepare-app.sh using only OCI CLI (no web console)
- Persistent Postgres volume, auto-restart policies, healthchecks, backup + restore scripts
- DuckDNS dynamic DNS for the public hostname; secrets isolated to gitignored .env
Author: Gigi Saji
Live URL: https://savesave.duckdns.org