Derived from gap analysis against today's Go ecosystem and developer tooling market. Tasks are grouped by priority and category. Each task includes context on why it matters.
File: internal/generator/ (new file gen_api_server.go)
Why: api-server is registered in SupportedProjectTypesMap and SupportedFrameworksMap but has no entry in GeneratorRegistry. Selecting it returns a runtime error. This is a broken promise in the README and the web UI.
Acceptance criteria:
- New
APIServerGeneratorstruct implementing theGeneratorinterface - Registered in
GeneratorRegistryunder"api-server" - Supports all five declared frameworks:
gin,echo,fiber,chi,golly - Generated layout mirrors the microservice layout (handler, router, service layers)
- All addons (cache, database, logging, AI, vectorstore) work with the new type
- Unit tests added in
generators_test.go
Why: gRPC is the dominant microservice-to-microservice transport in Go. Absence is a major competitive gap vs. tools like buf. No other Go scaffolder covers this well.
Acceptance criteria:
- New framework option
grpcundermicroserviceandapi-serverproject types - Generated layout includes a sample
.protofile, abuf.yaml, andbuf.gen.yaml - Generated
server.goregisters a gRPC server with a health check service -
go.modwired withgoogle.golang.org/grpcandgoogle.golang.org/protobuf - Makefile includes a
prototarget that runsbuf generate - README explains the
buf generatestep
Why: Connect is the modern HTTP/1.1 + HTTP/2 gRPC-compatible protocol gaining rapid adoption in 2024-25. Used at Buf, PlanetScale, and others. Acceptance criteria:
- New framework option
connectundermicroserviceandapi-serverproject types - Generated layout includes a
.protofile and a Connect handler -
go.modwired withconnectrpc.com/connect - Sample health endpoint using the Connect protocol
Why: GraphQL is a top request in any API-oriented Go scaffolder. gqlgen is the dominant Go GraphQL library.
Acceptance criteria:
- New framework option
gqlgenunderapi-serverproject type - Generated layout includes a
schema.graphqls,gqlgen.yml, and resolver stubs -
go.modwired withgithub.com/99designs/gqlgen - Generated
main.gostarts the GraphQL server with a playground handler
Why: Claude is one of the two most widely used LLM APIs as of 2025. Absence is a notable gap for an AI-first scaffolder. Acceptance criteria:
- New framework option
anthropicunderai-agentproject type - New addon value
anthropicunder theaiaddon category -
DependencyMapentry forgithub.com/anthropics/anthropic-sdk-go -
GenerateLLMClientcase foranthropic(llm/client.go) -
GenerateAgentContentcase foranthropic(agent/agent.go — tool-use loop) -
GenerateToolsContentcase foranthropic(tools/tools.go — tool definitions) -
GenerateAIAddonContentcase foranthropic(internal/ai/client.go)
Why: OpenTelemetry is the de-facto tracing and metrics standard in 2025. Every serious microservice template includes it. Currently no observability option exists. Acceptance criteria:
- New addon category
observabilitywith valueotel - Registered in
SupportedAddonsMapandaddonRegistry - Generated
internal/telemetry/telemetry.goinitialises an OTLP trace exporter and a Prometheus metrics exporter -
DependencyMapentries forgo.opentelemetry.io/oteland related packages -
go.modincludes all otel dependencies when selected - Works across microservice, api-server, and ai-agent project types
Why: prometheus/client_golang is the default metrics library for Go services and the most commonly added dependency after a web framework.
Acceptance criteria:
- New addon value
prometheusunder aobservability(orother) category - Generated
internal/metrics/metrics.goregisters a default metrics registry and a/metricshandler -
DependencyMapentry forgithub.com/prometheus/client_golang -
/metricsroute wired into the framework-specific router when selected
Why: slog was added in Go 1.21 and is now the idiomatic structured logging choice. It should be the first option listed, before zap and logrus.
Acceptance criteria:
- New addon value
slogunder theotheraddon category -
GenerateLoggingAddoncase forslog(no external dependency — stdlib only) - Generated
internal/logger/logger.gosets up a JSONslog.Loggerbacked byos.Stdout -
SupportedAddonsMapupdated
Why: CI is expected in every new repo. A generated .github/workflows/ci.yml that runs make test and make build removes a manual step that most developers would otherwise copy-paste.
Acceptance criteria:
- Generated
.github/workflows/ci.ymlfor all project types - Workflow runs on
pushandpull_requesttomain - Steps: checkout, setup-go (using the selected Go version),
make tidy,make build,make test - Optional: add
golangci-lintstep when lint config is also generated (see T-015)
Why: sqlc (type-safe SQL codegen) is very popular in the Go community in 2024-25 and is the preferred alternative to ORMs for many developers.
Acceptance criteria:
- New addon value
sqlcunder thedatabasecategory - Generated
sqlc.yamlconfiguration file - Sample
query.sqlandschema.sqlin adb/directory - Generated
internal/database/database.gousing thedatabase/sqlstdlib withpgxdriver -
DependencyMapentry forgithub.com/sqlc-dev/sqlcandgithub.com/jackc/pgx/v5 - Makefile
generatetarget runssqlc generate
Why: MongoDB is very common in Go services. Its official driver is mature and widely used. Acceptance criteria:
- New addon value
mongodbunder thedatabasecategory - Generated
internal/database/database.gowithmongo.Connectand a ping health check -
DependencyMapentry forgo.mongodb.org/mongo-driver/v2 - Connection string loaded from
MONGODB_URIenvironment variable
Why: zerolog is already present in DependencyMap (registry.go:129) but is not in SupportedAddonsMap — it is unreachable dead code. It is one of the most popular Go logging libraries.
Acceptance criteria:
- Add
zerologtoSupportedAddonsMap["other"] -
GenerateLoggingAddoncase forzerolog - Generated
internal/logger/logger.gosets up azerolog.Loggerwith a console writer
Why: viper is already in DependencyMap (registry.go:130) but not in SupportedAddonsMap — unreachable dead code. Config management is a common need alongside any framework.
Acceptance criteria:
- New addon category
configwith valueviper - Registered in
SupportedAddonsMapandaddonRegistry - Generated
internal/config/config.gothat loads from env vars and an optionalconfig.yaml - Sample
config.yamlincluded in the generated project -
DependencyMapentry confirmed / used
Why: The tool itself has a docker-compose.yml but generated projects get none. A user who selects Redis + Postgres addons should get a compose file that starts those services locally.
Acceptance criteria:
-
docker-compose.ymlgenerated when any infrastructure addon (cache, database) is selected - Services reflect the selected addons (e.g.
redis:7-alpinefor Redis,postgres:17-alpinefor GORM/ent/pgvector) - Environment variables in the compose file match those expected by the generated addon code (
DATABASE_URL,REDIS_ADDR, etc.) - Generated only when at least one infrastructure addon is selected
Why: .golangci.yml is standard in production Go repos. Linting setup is expected by teams adopting a new project scaffold.
Acceptance criteria:
- Generated
.golangci.ymlwith a sensible default ruleset (errcheck,govet,staticcheck,unused,gosimple) - Makefile
linttarget:golangci-lint run ./... -
.github/workflows/ci.yml(T-009) includes a lint step
Why: air is the standard live-reload tool for Go web development. An .air.toml prevents developers from having to look up the config on day one.
Acceptance criteria:
- Generated
.air.tomlfor microservice, api-server, and ai-agent project types -
build.cmdpoints to the correct main package path -
build.binpoints to the binary output path matching the Makefile - Makefile
devtarget:air
Why: Projects generating LLM clients, database connections, or cache connections require environment variables at startup. Without .env.example, users have no reference for what to set.
Acceptance criteria:
-
.env.examplegenerated for any project that requires env vars (AI, database, cache addons) - File lists all expected variables with placeholder values and a one-line comment per variable
-
.gitignorealready excludes.env(confirmed) —.env.examplemust NOT be excluded
Why: When multiple addons in the same category are selected, only the first is generated (gen_ai_addon.go:17, gen_ai_agent.go:121). The second selection is silently ignored with no warning to the user.
Acceptance criteria:
- Either generate all selected addons in a category (preferred), or
- Return a validation error / warning when more than one addon in a mutually-exclusive category is selected
- Web UI and CLI clearly communicate single-select vs multi-select constraints per category
- Existing tests updated; new test covering multi-addon selection
Why: Generated projects have a make test target that runs against empty packages. No test files are generated, making the test target a no-op.
Acceptance criteria:
- Generated
internal/handler/handler_test.gowith a basic HTTP handler test usingnet/http/httptest - Generated
internal/service/service_test.gowith a basic interface-level test - Tests pass immediately after
go mod tidywithout modification -
testifyadded togo.modwhen test files are generated
Why: The vast majority of production Go services target Kubernetes. Basic Deployment, Service, and ConfigMap manifests remove significant boilerplate.
Acceptance criteria:
- New optional flag
--kubernetes/kubernetesSupport boolinCreateProjectRequest - Generated
k8s/deployment.yaml,k8s/service.yaml,k8s/configmap.yaml - Manifests reference the correct container image name matching the project name
-
ConfigMapkeys match the env vars expected by the generated code - Web UI exposes the option alongside the existing Docker toggle
Why: sqlx is already in DependencyMap (registry.go:126-127) but not in SupportedAddonsMap — unreachable dead code. It is a popular lightweight alternative to GORM.
Acceptance criteria:
- Add
sqlxtoSupportedAddonsMap["database"] -
GenerateDatabaseAddoncase forsqlx - Generated
internal/database/database.gowithsqlx.Connectand a ping health check - Connection string loaded from
DATABASE_URL
Why: GORM's generated code is hardcoded to gorm.io/driver/postgres. Users targeting MySQL, SQLite, or SQL Server get unusable code.
Acceptance criteria:
- GORM addon accepts a sub-option for driver:
postgres(default),mysql,sqlite - Generated
database.goimports and uses the correct driver package -
DependencyMapincludes entries forgorm.io/driver/mysqlandgorm.io/driver/sqlite
Why: Generated projects that require OPENAI_API_KEY, DATABASE_URL, etc. will panic on startup in a local dev environment without those vars set. Loading a .env file prevents a confusing first-run experience.
Acceptance criteria:
- When any addon requiring env vars is selected,
github.com/joho/godotenvis added togo.mod - Generated
main.go(or the appropriate init path) callsgodotenv.Load()at startup - Load is best-effort (non-fatal if
.envis absent) — appropriate for production use
Why: The generated Dockerfile always runs go build -o main . which does not match the project layout for microservices (where main is at cmd/<name>/) or CLI apps.
Acceptance criteria:
-
GenerateDockerfileusesrequest.ProjectTypeandrequest.Nameto set the correct build path - Microservice / api-server:
go build -o bin/<name> ./cmd/<name> - CLI app:
go build -o bin/<name> . - AI agent:
go build -o bin/<name> . - CMD in final stage uses the correct binary path
Why: Streaming LLM responses and real-time event feeds are common. No scaffold for WebSocket or SSE exists, even in the AI agent project type where streaming is most relevant. Acceptance criteria:
- New addon value
websocketunder atransportorothercategory - Generated
internal/ws/handler.gowith a basic echo WebSocket handler usinggorilla/websocketornhooyr.io/websocket - Alternatively, an SSE handler option for AI agent streaming responses
- Wired into the framework-specific router when selected
Why: Integration tests against real databases/caches are the standard. testcontainers-go is the dominant library for this pattern in Go.
Acceptance criteria:
- When a database or cache addon is selected, generate an optional
internal/database/integration_test.go - Uses
testcontainers-goto spin up the correct container (postgres, redis, etc.) - Test verifies the connection can be established
-
DependencyMapentry forgithub.com/testcontainers/testcontainers-go
Why: Generated README.md files contain only # <name>\n\n<description>. They don't mention the selected Go version, framework, or addons, making them less useful as onboarding docs.
Acceptance criteria:
- Generated README includes: Go version, project type, framework, selected addons
- Next-steps section is framework-aware (e.g. gRPC README mentions
make proto, AI agent README mentions setting API keys) - README is generated consistently across all project types
Why: buf is the modern replacement for raw protoc calls. Any gRPC scaffold should use buf rather than manual protoc invocations.
Acceptance criteria:
- Generated
buf.yaml(module config) andbuf.gen.yaml(code generation config) -
buf.gen.yamlconfigured to generate Go and gRPC stubs into agen/directory - Makefile
prototarget usesbuf generate(not rawprotoc) -
.gitignoreexcludes thegen/directory (since it is derived from.protofiles)
Why: DependencyMap contains entries for zerolog, viper, sqlx, httptest, and testify that are never reachable through any supported addon or project type. This is confusing for contributors.
Acceptance criteria:
- Each entry in
DependencyMapis either reachable via a registered addon/framework, or removed -
zerolog→ resolved by T-012 -
viper→ resolved by T-013 -
sqlx→ resolved by T-021 -
testify/httptest→ resolved by T-019
Why: Generated go.mod is never accompanied by a go.sum. Users must run go mod tidy immediately after generation. If the network is unavailable or a dependency version has been retracted, the first run fails confusingly.
Acceptance criteria:
- Generated
README.mdprominently listsgo mod tidyas the mandatory first step (abovemake run) - Alternatively, investigate generating a minimal
go.sumat generation time by resolving the dependency graph server-side - The web UI "what to do next" panel explicitly calls out
go mod tidy
| ID | Title | Priority |
|---|---|---|
| T-001 | Implement api-server generator |
Critical |
| T-002 | Add gRPC / protobuf scaffold | High |
| T-003 | Add Connect framework support | High |
| T-004 | Add GraphQL (gqlgen) scaffold |
High |
| T-005 | Add Anthropic Claude AI provider | High |
| T-006 | Add OpenTelemetry observability addon | High |
| T-007 | Add Prometheus metrics addon | High |
| T-008 | Add slog logging option |
High |
| T-009 | Generate GitHub Actions CI workflow | High |
| T-010 | Add sqlc database addon |
Medium |
| T-011 | Add MongoDB database addon | Medium |
| T-012 | Expose zerolog logging addon |
Medium |
| T-013 | Expose viper config addon |
Medium |
| T-014 | Generate docker-compose.yml for dev deps |
Medium |
| T-015 | Add golangci-lint config |
Medium |
| T-016 | Add air live-reload config |
Medium |
| T-017 | Generate .env.example |
Medium |
| T-018 | Fix multi-addon silent drop bug | Medium |
| T-019 | Generate handler and service unit tests | Medium |
| T-020 | Add Kubernetes manifests option | Medium |
| T-021 | Expose sqlx database addon |
Polish |
| T-022 | Support multiple GORM drivers | Polish |
| T-023 | Add godotenv loading for secret-requiring projects |
Polish |
| T-024 | Fix Dockerfile binary path per project type | Polish |
| T-025 | Add WebSocket / SSE scaffold | Polish |
| T-026 | Add testcontainers-go integration test scaffold |
Polish |
| T-027 | Improve generated README with project metadata | Polish |
| T-028 | Add buf toolchain support for gRPC |
Polish |
| T-029 | Remove or expose dead code in DependencyMap |
Housekeeping |
| T-030 | Add go.sum guidance to generated projects |
Housekeeping |
| TASKS.md has been created with 30 tasks across 4 priority tiers. Here's the structure: | ||
| Critical (1 task) |
- T-001 — api-server generator is completely missing/broken at runtime High Impact (8 tasks)
- T-002 through T-009 covering gRPC, Connect, GraphQL, Anthropic, OpenTelemetry, Prometheus, slog, and GitHub Actions CI Medium Impact (11 tasks)
- T-010 through T-020 covering sqlc, MongoDB, dead-code logging addons (zerolog, viper), docker-compose for generated projects, golangci-lint, air, .env.example, the silent multi-addon bug, test generation, and Kubernetes manifests Polish / Housekeeping (10 tasks)
- T-021 through T-030 covering sqlx, multi-driver GORM, godotenv, Dockerfile binary path fix, WebSocket/SSE, testcontainers, README improvements, buf toolchain, and dead-code cleanup Each task has a clear rationale, references the specific file/line where the gap exists, and has acceptance criteria so a contributor knows exactly when it's done.