To make the blog 💯 less haunted.
- Go 1.26+
- just for the task recipes
- golangci-lint v2 for linting and formatting
If you use Nix, a flake-based dev shell provides all of the
above (plus gopls, air for hot reloading, and editor language servers):
nix developjust build # build the binary into ./bin/deghosting
just run [args...] # build and run, passing through arguments
just install # install into $GOBIN / $GOPATH/binjust fmt # format with golangci-lint formatters (gofumpt + goimports)
just fmt-check # show formatting diffs without writing
just lint # run golangci-lint
just test # run the test suite
just test-race # run tests with the race detector and coverage
just tidy # go mod tidy + verify
just check # fmt-check + lint + test
just clean # remove build artifactsRun just with no arguments to list all available recipes.
Tests use Go's standard testing package. Prefer table-driven tests with named
cases, keep CLI tests close to the run(args, stdin, stdout, stderr) entrypoint,
and reserve shelling out for behavior that cannot be covered in-process. Run
just test for normal changes and just test-race when touching concurrency,
shared state, or I/O-heavy code.
cmd/deghosting/ CLI entrypoint
internal/cli/ CLI parsing and input/output validation
internal/deghosting/ conversion orchestration and Ghost-to-Zola workflow
internal/download/ concurrent asset download worker pool
internal/ghost/ Ghost export parsing and source data model
internal/zola/ generated Zola post model and Markdown rendering