You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|[`docs/IMPLEMENTATION.md`](docs/implementation.md)| Full build log, phase by phase: local dev → Kind/K8s → CI/CD → monitoring → AWS/Terraform |
134
134
|[`docs/ARCHITECTURE.md`](docs/architecture.md)| Full topology diagram and Architecture Decision Records (ADRs) — the *why* behind each choice |
135
135
|[`docs/TROUBLESHOOTING.md`](docs/troubleshooting.md)| Real incidents hit while building this, in Symptom → Investigation → Root Cause → Fix → Lesson format |
136
-
|[`AWS_IMPLEMENTATION_GUIDE.md`](docs/AWS_IMPLEMENTATION_GUIDE.md)| Full click-by-click Phase 2 walkthrough — account setup through teardown |
136
+
|[`docs/AWS_IMPLEMENTATION_GUIDE.md`](docs/AWS_IMPLEMENTATION_GUIDE.md)| Full click-by-click Phase 2 walkthrough — account setup through teardown |
137
137
|[`app/README.md`](app/README.md)| API endpoints, environment variables, schema, local run instructions |
The local application stack is defined in [`docker-compose.yaml`](../docker-compose.yaml).
65
44
66
-
Note: the top-level `version:` key is intentionally omitted — Docker Compose v2 no longer requires it, and including it now produces an `is obsolete` warning.
45
+
It provides:
67
46
68
-
`depends_on`only controls **start order**, not readiness — Postgres can still be mid-initialization when the API container starts.
47
+
- BeyondSquare API
48
+
- PostgreSQL
49
+
- Redis
50
+
- persistent PostgreSQL volume
51
+
- environment-variable based configuration
69
52
53
+
`depends_on` controls startup order but does not guarantee dependency readiness. The application therefore implements retry-with-backoff during startup.
54
+
55
+
See [`IMPLEMENTATION.md`](docs/implementation.md) for the execution flow.
70
56
---
71
57
## 3. Kubernetes — Kustomize layout
72
58
@@ -155,8 +141,6 @@ AWS deployment and remains an independently deployable option.
Copy file name to clipboardExpand all lines: docs/implementation.md
+7-18Lines changed: 7 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -79,24 +79,13 @@ A small REST service (FastAPI/Express-equivalent) exposing:
79
79
-`GET /cache-demo` — first call returns `{"source":"generated"}`, subsequent calls within the cache window return `{"source":"cache"}`, proving Redis is actually in the read path.
80
80
-`GET /metrics` — Prometheus exposition format, via a client library (`prom-client` or equivalent). No code changes are needed later to start scraping it — this is intentional.
81
81
82
-
### 1.2 Dockerfile — multi-stage, production style
The API is containerized using the Dockerfile in `app/Dockerfile`.
85
+
86
+
The image uses a multi-stage build and runs the application as a non-root user.
87
+
88
+
See [`app/Dockerfile`](../app/Dockerfile) for the current implementation.
100
89
101
90
Multi-stage build → smaller final image (no build toolchain shipped). Non-root `USER app` → a security best practice worth naming explicitly in an interview.
0 commit comments