<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nebbet.no/cmd, branch main</title>
<subtitle>[no description]</subtitle>
<id>https://git.ivar.systems/nebbet.no/atom?h=main</id>
<link rel='self' href='https://git.ivar.systems/nebbet.no/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.ivar.systems/nebbet.no/'/>
<updated>2026-04-04T15:06:03Z</updated>
<entry>
<title>fix: check vips.Startup error and tidy go.mod indirect annotation</title>
<updated>2026-04-04T15:06:03Z</updated>
<author>
<name>ivar</name>
<email>i@oiee.no</email>
</author>
<published>2026-04-04T15:06:03Z</published>
<link rel='alternate' type='text/html' href='https://git.ivar.systems/nebbet.no/commit/?id=18be2a543038ffe59d0bfcfce56a51418d543d6a'/>
<id>urn:sha1:18be2a543038ffe59d0bfcfce56a51418d543d6a</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: wire MediaHandler routes and govips lifecycle</title>
<updated>2026-04-04T14:51:05Z</updated>
<author>
<name>ivar</name>
<email>i@oiee.no</email>
</author>
<published>2026-04-04T14:51:05Z</published>
<link rel='alternate' type='text/html' href='https://git.ivar.systems/nebbet.no/commit/?id=87deaec8c519ee477439922f1cbecb8c90cbe5af'/>
<id>urn:sha1:87deaec8c519ee477439922f1cbecb8c90cbe5af</id>
<content type='text'>
- Add RegisterUploadRoute to admin Server (POST /admin/upload/image, auth-protected)
- Import govips/v2 and internal/media in main.go
- Replace static /media/ file handler with mediaSrv.HandleServe for on-the-fly image conversion
- Call vips.Startup/Shutdown around server lifetime

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>.</title>
<updated>2026-04-04T14:34:46Z</updated>
<author>
<name>ivar</name>
<email>i@oiee.no</email>
</author>
<published>2026-04-04T14:34:46Z</published>
<link rel='alternate' type='text/html' href='https://git.ivar.systems/nebbet.no/commit/?id=a6355e7a6530af3335c4cd8af05f1e9c8b978169'/>
<id>urn:sha1:a6355e7a6530af3335c4cd8af05f1e9c8b978169</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: resolve Gin routing conflict with catch-all static files handler</title>
<updated>2026-04-03T12:28:51Z</updated>
<author>
<name>ivar</name>
<email>i@oiee.no</email>
</author>
<published>2026-04-03T12:28:51Z</published>
<link rel='alternate' type='text/html' href='https://git.ivar.systems/nebbet.no/commit/?id=a21fa502891a6d2f0600485b1b76762ecc178fd0'/>
<id>urn:sha1:a21fa502891a6d2f0600485b1b76762ecc178fd0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: update cmdServe to use Gin engine directly</title>
<updated>2026-04-03T12:26:21Z</updated>
<author>
<name>ivar</name>
<email>i@oiee.no</email>
</author>
<published>2026-04-03T12:26:21Z</published>
<link rel='alternate' type='text/html' href='https://git.ivar.systems/nebbet.no/commit/?id=dfa5b9d69308af36a53c66d6c5a3e9b735f0c6a9'/>
<id>urn:sha1:dfa5b9d69308af36a53c66d6c5a3e9b735f0c6a9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: convert admin handlers to Gin context-based signatures</title>
<updated>2026-04-03T12:22:23Z</updated>
<author>
<name>ivar</name>
<email>i@oiee.no</email>
</author>
<published>2026-04-03T12:22:23Z</published>
<link rel='alternate' type='text/html' href='https://git.ivar.systems/nebbet.no/commit/?id=33310be68544d3381ac6e9899790f4a106e17e8f'/>
<id>urn:sha1:33310be68544d3381ac6e9899790f4a106e17e8f</id>
<content type='text'>
- Remove old ServeHTTP method (no longer needed with Gin routing)
- Update all 6 handler methods to use *gin.Context instead of http.ResponseWriter, *http.Request
- Convert handler signatures: handleList, handleNew, handleNewPost, handleEdit, handleDelete
- Remove render() helper (use c.HTML() directly)
- Update renderError() to accept gin.Context instead of http.ResponseWriter
- Update postFromForm() to extract form data from gin.Context using c.PostForm()
- Update main.go to use adminSrv.NewServer() and adminSrv.Engine()
- All handlers now use Gin methods: c.HTML(), c.PostForm(), c.Param(), c.Redirect()
- Path parameters now extracted via c.Param("slug") instead of function arguments
- HTTP status codes and error handling fully migrated to Gin patterns

Build verified: go build ./cmd/nebbet succeeds

Co-Authored-By: Claude Haiku 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add post management admin UI and switch to modernc.org/sqlite</title>
<updated>2026-03-31T10:44:10Z</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-03-31T10:44:10Z</published>
<link rel='alternate' type='text/html' href='https://git.ivar.systems/nebbet.no/commit/?id=aa23774abb90c168c9ba2559d6bf381bc9fc55ba'/>
<id>urn:sha1:aa23774abb90c168c9ba2559d6bf381bc9fc55ba</id>
<content type='text'>
- Replace custom CGO sqlite driver with modernc.org/sqlite (registered as
  "sqlite3"); a local compat shim under compat/sqlite/ provides the same
  import path and WAL-mode behaviour using system libsqlite3 while network
  access is unavailable — swapping to the real pure-Go package later only
  requires removing the replace directive and running go get.

- Add internal/admin/server.go: HTTP handler for /admin/ that serves a
  server-side-rendered post management UI (list, new, edit, delete). Posts
  are stored as Markdown files under content/posts/ and rebuilt via the
  existing Builder after every write. Basic auth is checked against the
  .passwords file when it exists.

- Add cmd/nebbet/main.go: unified CLI with build, watch, serve (HTTP server
  with admin + file server + watch), and user subcommands.

- Update builder.BuildAll to skip content/admin/ — admin pages are served
  dynamically and must never appear in the static output directory.

- Mark content/admin/index.md as draft so the old static placeholder is
  not built even if the admin skip logic is bypassed.

- Fix .gitignore: use /nebbet (root-only) so the pattern no longer
  accidentally ignores the cmd/nebbet/ source directory.

https://claude.ai/code/session_01WLuSGxJhNs2cFM2zJzSsTx
</content>
</entry>
</feed>
