Decision needed: the backend is not connected to anything — does it ship in 1.0? #25
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The finding
The Go backend is live, builds, has CI, and is deployed as its own image — and nothing uses it. Verified on
mainatfbfe1df:The SPA never calls it. Grepping
src/main.jsforreports,clientId, or/api/returns zero matches. The frontend collects all the telemetry thatPOST /api/v1/reportsis designed to receive and never sends any of it.nginx never routes to it.
nginx.confhas noproxy_pass— onlytry_files(line 20) and the/assets/block (line 24). The Go service is not behind this nginx. The two components have no network path between them.The report schema exists on both sides but is unexercised.
backend/internal/handlers/report.go:10-28definesreportSample,reportHost,reportwith aclientId/geo/hosts/timestampshape that clearly anticipates the frontend's data model, but no code produces it.So the ingest endpoint is a fully-built, internet-facing, unauthenticated write path (see #20) serving no traffic and no purpose in the current deployment.
Why this needs a decision from you
Several open issues change shape depending on the answer, and I do not want implementers guessing:
reportbufdeserves depends on whether it is production code or a prototype.Options
(a) Wire it up — the backend is part of 1.0.
Frontend gains a reporting client that POSTs periodically;
nginx.confgains alocation /api/withproxy_passto the backend; the two images get a compose file or equivalent so they are deployable together. This makes #19/#20/#22/#23 genuine 1.0 blockers and adds real work: a reporting client, a retention/quota policy forDATA_DIR(currently unbounded —reportbuf.go:161-198has no retention, andbackend/README.md:62lists it as an open TODO), and an answer to what the stored data is actually for.(b) Ship 1.0 frontend-only; the backend stays in-tree but unreleased.
Tag 1.0.0 on the SPA. The backend keeps building in CI so it does not rot, but is explicitly documented as unreleased and not deployed. #19/#20/#23 drop off the 1.0 milestone and become post-1.0. #22 (shutdown data loss) and #21 (tests) stay, at reduced priority, because they are correctness debt either way.
(c) Remove the backend from the repo.
Delete it, or move it to its own repository. Cleanest possible 1.0: the README's current "zero-dependency SPA, no backend required" framing becomes true again, and roughly a third of the open backlog evaporates. Reversible via git history.
Recommendation
(b). The backend is well-built and clearly intended, so deleting it (c) discards real work for a tagging convenience. But (a) is a substantial feature — a reporting client, a retention policy, and a deployment story — and none of it is written down as a requirement anywhere. Gating the first tag on inventing that scope is how 1.0 slips indefinitely.
(b) lets the SPA — which is finished and works — get its tag, while keeping the backend healthy in CI until you decide what it is for. It also immediately de-risks the security posture, because an unexposed endpoint cannot be abused.
If you pick (b), I would additionally suggest closing #20 as post-1.0 rather than leaving it open against the milestone, and adding an explicit line to the README stating the backend is unreleased so the next reader does not assume it is deployed.
What I need
Pick (a), (b), or (c). Assigning to you. I will re-scope the affected issues and the
1.0.0milestone accordingly.Meanwhile I am proceeding with the work that is correct under all three options: #14 (lint config is invalid), #15 (dotfiles), #16 (unified gate), #17 (Dockerfile pattern), #18 (frontend security headers), #24 (documentation accuracy). None of those depend on this answer.