F-01: Repo scaffold (bookshelf-qqz.1) #1

Merged
zombor merged 1 commit from bd-bookshelf-qqz.1 into main 2026-05-20 17:00:29 +00:00
Owner

Initial Go module scaffold for the bookshelf project — first child of the Foundation epic (bookshelf-qqz).

Summary

  • go mod init git.zombor.net/zombor/bookshelf
  • cmd/bookshelf/main.go prints version, exits 0
  • internal/ vertical-slice skeleton (library, books, shelves, bookdrop, metadata, reading, users, sync, files, httpserver, handler, tmpl, config, observability) + internal/db/{migrations,queries,sqlc}, templates/{layouts,pages}, static/{css,js/controllers,js/vendor}, data/
  • Makefile placeholder targets: build/test/lint/coverage/sqlc/migrate-up/migrate-down/docker/dev
  • Multi-stage Dockerfile: golang:1.26-alpine -> gcr.io/distroless/static-debian12:nonroot, CGO_ENABLED=0
  • docker-compose.yml: app + MySQL 8.4, named volume, mysqladmin healthcheck, depends_on: service_healthy
  • .dockerignore, .editorconfig

Out of scope (separate beads)

Config (F-02), observability (F-03), DB/migrations/sqlc (F-04/05), HTTP server (F-06), templates+static+Stimulus (F-07/08/09), coverage gate (F-10), CI (F-11), Grimmory baseline (F-12).

Test plan

  • make build produces ./bin/bookshelf
  • ./bin/bookshelf runs and exits 0
  • go vet ./... passes
  • go test ./... passes (vacuously)
  • docker compose config validates

Closes bead bookshelf-qqz.1 on merge.

Initial Go module scaffold for the bookshelf project — first child of the Foundation epic (bookshelf-qqz). ## Summary - go mod init git.zombor.net/zombor/bookshelf - cmd/bookshelf/main.go prints version, exits 0 - internal/ vertical-slice skeleton (library, books, shelves, bookdrop, metadata, reading, users, sync, files, httpserver, handler, tmpl, config, observability) + internal/db/{migrations,queries,sqlc}, templates/{layouts,pages}, static/{css,js/controllers,js/vendor}, data/ - Makefile placeholder targets: build/test/lint/coverage/sqlc/migrate-up/migrate-down/docker/dev - Multi-stage Dockerfile: golang:1.26-alpine -> gcr.io/distroless/static-debian12:nonroot, CGO_ENABLED=0 - docker-compose.yml: app + MySQL 8.4, named volume, mysqladmin healthcheck, depends_on: service_healthy - .dockerignore, .editorconfig ## Out of scope (separate beads) Config (F-02), observability (F-03), DB/migrations/sqlc (F-04/05), HTTP server (F-06), templates+static+Stimulus (F-07/08/09), coverage gate (F-10), CI (F-11), Grimmory baseline (F-12). ## Test plan - [x] make build produces ./bin/bookshelf - [x] ./bin/bookshelf runs and exits 0 - [x] go vet ./... passes - [x] go test ./... passes (vacuously) - [x] docker compose config validates Closes bead bookshelf-qqz.1 on merge.
Initialize the Go module (git.zombor.net/zombor/bookshelf) and lay down the
vertical-slice skeleton from project-conventions.md:

- cmd/bookshelf/main.go that prints a version string and exits 0
- internal/ packages with doc.go: library, books, shelves, bookdrop,
  metadata, reading, users, sync, files, httpserver, handler, tmpl,
  config, observability
- internal/db/{migrations,queries,sqlc} as placeholder directories
- templates/{layouts,pages}, static/{css,js/controllers,js/vendor}, data/
- Makefile with build/test/lint/coverage/sqlc/migrate-up/migrate-down/
  docker/dev targets (later beads fill in sqlc, migrate, coverage gate)
- Multi-stage Dockerfile: golang:1.26-alpine builder ->
  gcr.io/distroless/static-debian12:nonroot, CGO_ENABLED=0 static binary
- docker-compose.yml with app + MySQL 8.4, named volume, mysqladmin
  healthcheck, app depends_on db with condition: service_healthy
- .dockerignore, .editorconfig
- .gitignore additions for bin/, coverage.out, *.test

Verified: make build produces ./bin/bookshelf, go vet ./... passes,
go test ./... passes vacuously, docker compose config validates.
zombor merged commit ca03b00b2f into main 2026-05-20 17:00:29 +00:00
zombor deleted branch bd-bookshelf-qqz.1 2026-05-20 17:00:29 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
zombor/pergamum!1
No description provided.