Backend:
- Go - Programming language
- Gin - HTTP web framework
- oapi-codegen - OpenAPI code generator
- zerolog - Structured logging
Frontend:
- React - UI framework
- TypeScript - Type-safe JavaScript
- Vite - Build tool and dev server
Deployment:
- Docker - Containerization
Contains the OpenAPI specification (openapi.yaml) and all API-related code. The generated code (gen.go) lives here along with the API implementation files (server.go, server_*.go).
Houses the HTTP server setup and embedded frontend. The web/ subdirectory is populated during the Docker build with the compiled frontend.
React application source code built with Vite and TypeScript.
Application entry point that initializes logging and starts the server.
Contains common development commands including build, run, generate, fmt, and lint. See the Development Workflow document for details on each command.
api/openapi.yamldefines the API specificationapi/server.gocontains//go:generate go tool oapi-codegen -config ./oapi-codegen.yaml ./openapi.yaml- Running
go generate ./...triggers oapi-codegen api/gen.gois generated with types, interfaces, and routing codeapi/server_*.gofiles implement the generated interface methods
Adding a new endpoint: define it in openapi.yaml, run make generate, implement the handler method in a server_*.go file. The generated code automatically registers the route with Gin.
The compiled frontend lives in server/web/ after the build process. The //go:embed web directive in server/server.go compiles the entire directory into the Go binary at build time. At runtime, handleStatic() serves these files from the embedded filesystem. Requests to paths starting with /api are handled by API routes; all other requests are served from the embedded files. If a requested file doesn't exist, index.html is served to enable client-side routing for the Single Page Application (SPA).