Commit Graph

44 Commits

Author SHA1 Message Date
Christoph K.
4d7ff23457 Fix CI test: mount DEPLOY_DIR instead of subdirectory
Some checks failed
Deploy to NAS / deploy (push) Failing after 14s
Docker daemon can't bind-mount a subdirectory that it can't independently
verify — mount the parent and set -w /src/backend instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 20:57:32 +02:00
Christoph K.
86627f94b1 Add public feed, admin area, self-registration, visibility & hashtags
Some checks failed
Deploy to NAS / deploy (push) Failing after 26s
- Public feed (/) with infinite scroll via Intersection Observer
- Self-registration (/register)
- Admin area (/admin/entries, /admin/users) with user management
- journal_entries: visibility (public/private) + hashtags fields
- users: is_admin flag
- DB schema updated (recreate DB to apply)
- CI: run go test via docker run (golang:1.25-alpine) — fixes 'go not found'

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 20:53:31 +02:00
Christoph K.
034d16e059 Add Go backend unit and handler tests; wire test step into CI
Some checks failed
Deploy to NAS / deploy (push) Failing after 14s
- Introduce store interfaces (TrackpointStorer, StopStorer, SuggestionStorer)
  in internal/db/interfaces.go so handlers can be tested without a real DB.
- Refactor HandleSingleTrackpoint, HandleBatchTrackpoints, HandleListDays,
  HandleListTrackpoints, HandleListStops, HandleListSuggestions to accept
  the new interfaces instead of concrete *db.*Store pointers (no behaviour
  change; concrete types satisfy the interfaces implicitly).
- internal/api/ingest_test.go: 13 handler tests covering happy path,
  invalid JSON, invalid timestamp, missing event_id/device_id, out-of-range
  lat/lon, empty/oversized batch, store errors, and idempotency (single + batch).
- internal/api/query_test.go: 14 handler tests covering missing query params
  (400) and empty-result-is-array guarantees for all four query endpoints.
- internal/auth/auth_test.go: 5 unit tests for HashPassword / VerifyPassword
  (correct password, wrong password, empty password, malformed hash, salt
  uniqueness).
- internal/db/trackpoints_test.go: 6 unit tests for the validateTrackpoint
  helper (happy path, missing fields, coordinate bounds, invalid source).
- .gitea/workflows/deploy.yml: add "Test" step (go test ./...) before
  "Build & Deploy" so a failing test aborts the deployment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 19:07:02 +02:00
Christoph K.
d1649ddfce Add OpenAPI 3.1 spec for REST API
All checks were successful
Deploy to NAS / deploy (push) Successful in 39s
Covers all endpoints: health, trackpoint ingest (single + batch),
query (days, trackpoints, stops, suggestions), journal entry creation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 19:03:03 +02:00
Christoph K.
45875502f8 Move infra/ content to doc/deployment.md; delete infra/ directory
All checks were successful
Deploy to NAS / deploy (push) Successful in 34s
docker-compose.yml lives in infra repo; deployment docs belong in doc/.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 18:50:42 +02:00
Christoph K.
156917ece1 Slim down infra/: keep only project-specific deployment docs
All checks were successful
Deploy to NAS / deploy (push) Successful in 34s
General infra setup (NAS, act_runner, Gitea Actions reference)
moved to separate infra repo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 18:49:17 +02:00
Christoph K.
ad65102fdc Update infra docs with complete working setup
All checks were successful
Deploy to NAS / deploy (push) Successful in 44s
- README.md: rewrite with accurate setup steps including all lessons learned
- CLAUDE.md: update with working CI/CD patterns and known pitfalls
- gitea-actions.md: new file documenting Gitea Actions usage, expressions,
  act_runner config, and troubleshooting for future projects

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 18:46:55 +02:00
Christoph K.
e2419411fa Fix health check: use wget instead of curl (docker:latest has no curl)
All checks were successful
Deploy to NAS / deploy (push) Successful in 46s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 18:37:49 +02:00
Christoph K.
286b48247e Fix session cookie: disable Secure flag for HTTP deployment
Some checks failed
Deploy to NAS / deploy (push) Failing after 2m12s
Secure: true requires HTTPS — cookie was not sent back on HTTP requests,
breaking the session after login.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 17:28:42 +02:00
Christoph K.
36766592d3 Mount NAS docker dir into job container
Some checks failed
Deploy to NAS / deploy (push) Failing after 2m8s
Allows git clone, .env write and docker compose to operate
on the actual NAS filesystem, not the container's tmpfs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 17:16:13 +02:00
Christoph K.
e240dfe39c Use vars.DEPLOY_DIR instead of secrets.DEPLOY_DIR
Some checks failed
Deploy to NAS / deploy (push) Failing after 11s
DEPLOY_DIR is a Variable in Gitea, not a Secret.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 17:14:17 +02:00
Christoph K.
cd1b8e23d2 Hardcode deploy dir path; remove DEPLOY_DIR secret dependency
Some checks failed
Deploy to NAS / deploy (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 17:13:03 +02:00
Christoph K.
691b49da40 Remove duplicate docker socket mount from workflow
Some checks failed
Deploy to NAS / deploy (push) Failing after 13s
act_runner propagates the socket automatically from the runner container.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 17:11:37 +02:00
Christoph K.
7f4a5a63c1 Use docker:latest container for deploy job
Some checks failed
Deploy to NAS / deploy (push) Failing after 7s
Runs job steps in docker:latest image with host socket mounted —
no need to mount host Docker binary.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 17:06:38 +02:00
Christoph K.
58729ad511 Fix docker path on Synology NAS
Some checks failed
Deploy to NAS / deploy (push) Failing after 5s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 17:02:37 +02:00
Christoph K.
4b0be2b5f9 Simplify deploy workflow: remove submodule handling
Some checks failed
Deploy to NAS / deploy (push) Failing after 4s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 17:00:10 +02:00
Christoph K.
d0b0b4f8bd Convert backend from submodule to regular directory
Some checks failed
Deploy to NAS / deploy (push) Failing after 4s
Remove submodule tracking; backend is now a plain directory in the repo.
Also update deploy workflow: remove --recurse-submodules.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 16:59:50 +02:00
Christoph K.
0bb7758a2f Fix workflow: use self-hosted runner label
Some checks failed
Deploy to NAS / deploy (push) Failing after 8s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 16:55:59 +02:00
Christoph K.
a00610b831 ci: trigger deploy workflow
Some checks failed
Deploy to NAS / deploy (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 16:55:14 +02:00
Christoph K.
db6726d6d7 Fix checkout: enable recursive submodule cloning
Some checks failed
Deploy to NAS / deploy (push) Failing after 46s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 16:43:34 +02:00
Christoph K.
0e4b01bcf2 delte
Some checks failed
Deploy to NAS / deploy (push) Failing after 52s
2026-04-07 16:25:15 +02:00
Christoph K.
dc671117f5 Fix workflow runner label to match act_runner defaults
Some checks failed
Deploy to NAS / deploy (push) Failing after 3m11s
Runner registered with default labels (ubuntu-latest) instead of
self-hosted — update runs-on to match.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 16:17:52 +02:00
Christoph K.
579597776c Add infra/docker-compose.yml for shared postgres stack
Some checks failed
Deploy to NAS / deploy (push) Has been cancelled
Move compose config from README into its own file; README now references it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 16:03:43 +02:00
Christoph K.
1fb015b0fc Remove pgAdmin from shared infra setup
Start without UI; pgAdmin can be added later as optional service.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 15:57:52 +02:00
Christoph K.
2a74ea3702 Update backend submodule
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 15:46:53 +02:00
Christoph K.
257d1e4062 Add Gitea CI/CD pipeline and shared infra setup
- docker-compose.yml: remove bundled postgres, connect to shared
  postgres via host-gateway:5433, add uploads volume, configurable port
- .gitea/workflows/deploy.yml: Gitea Actions workflow for automated
  deploy on push to main
- infra/README.md: step-by-step setup guide for NAS deployment
  (shared postgres, pgAdmin, act_runner, Gitea secrets)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 15:42:58 +02:00
Christoph K.
b865e5a283 Update backend submodule
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 10:19:27 +02:00
Christoph K.
de6e387c7b Update gitignore files for all components
Root: add OS/IDE/secrets patterns
webapp: add .vite/, .tsbuildinfo, .env.local
backend: add /createuser binary, bin/, uploads/ (submodule bump)
app: remove redundant entries, add *.hprof, *.class

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 09:57:31 +02:00
Christoph K.
23506bab7d Replace hardcoded DB credentials with env vars in docker-compose
Adds .env.example as a template and .gitignore to exclude the actual
.env file, preventing accidental credential commits.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 09:54:18 +02:00
Christoph K.
a49416854e Remove nginx/webapp container; single Go server serves SPA + API
- Add root Dockerfile: node build → copy dist into Go embed path → distroless binary
- Update docker-compose: one service (api on :9050), DB renamed ralph→pamietnik
- Remove references to RALPH/reisejournal across all docs and configs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 10:32:04 +02:00
Christoph K.
d1436abca8 Add Mermaid diagrams to architecture doc (implementation status, risk quadrant, production readiness)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 10:24:34 +02:00
Christoph K.
9775a22473 Add arc42 architecture documentation in doc/architecture.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 10:20:01 +02:00
Christoph K.
5abfa29e91 Remove migrate service from docker-compose; update README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 10:05:22 +02:00
Christoph K.
bf89ef01c7 Add hashtag requirements (REQ-TAG-*) and backlog tasks (T073-T087)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:59:23 +02:00
Christoph K.
bc2fa7b966 Apply typewriter/editorial UI style using system fonts only
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:57:03 +02:00
Christoph K.
48ff7104da Fix migrate service: use entrypoint instead of command
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:54:54 +02:00
Christoph K.
909e9b6813 Fix unused import in days-page.ts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:36:51 +02:00
Christoph K.
304ee6d0b5 Add package-lock.json for reproducible webapp builds
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:35:27 +02:00
Christoph K.
590d433d7e Document full build and deployment instructions in CLAUDE.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:30:17 +02:00
Christoph K.
4b730b1076 Add root docker-compose and webapp Dockerfile/nginx for full-stack deployment
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:29:17 +02:00
Christoph K.
07fdd3de31 Add webapp subproject (Vite + TypeScript + Web Components)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:25:50 +02:00
Christoph K.
37c56e7e3e Add project-specific Claude agents (6 standard agents)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:21:52 +02:00
Christoph K.
b6a40ea8c6 Add root CLAUDE.md with project overview and dev commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:19:54 +02:00
Christoph K.
2985b3c76e Initial commit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:15:47 +02:00