feat: bold Swiss/constructivist design overhaul Typography: - Inter for body text, Oswald for headings (bold condensed) - ALL CAPS labels, large type hierarchy, tight letter-spacing Colors: - Black (#1a1a1a) background on UI elements, white text - Red (#c62828) accent for hover states, underlines, CTA buttons - Light gray (#f5f5f5) page background for contrast Layout: - Black nav bar with red bottom border, red hover states - Red accent underline blocks (3px x 3rem) on page headings - No border-radius anywhere β sharp rectangular constructivist forms - Full-width 6-column gallery grid with 2px gaps All pages redesigned: home, browse, upload, login, image detail, and image viewer overlay. π Generated with Crush Assisted-by: Crush:deepseek-reasoner
Maxwell Jensen maxwelljensen@posteo.net
Wed, 13 May 2026 16:14:34 +0200
feat: make tags clickable with usage counts, larger and more prominent
- Tags in ImageViewer and detail page are now clickable pill buttons
- Clicking a tag navigates to /browse?tag=<tagname>
with the filter auto-applied on mount
- Browse page reads ?tag= URL param on initial load
- Tags display usage count badge (sorted mostβleast frequent)
- Larger pill sizing with hover effects in both viewer and detail page
- New GetImageTagsWithCounts DB function joins tags+image_tags
for usage counts returned in GET /api/images/{id} as tags_detail
π Generated with Crush
Assisted-by: Crush:deepseek-reasoner
Maxwell Jensen maxwelljensen@posteo.net
Wed, 13 May 2026 16:02:30 +0200
feat: make browse grid 6 columns and full-width - Grid layout set to repeat(6, 1fr) with responsive breakpoints for smaller screens - Removed layout max-width constraint on browse page via :global(main) override - Header and pagination get their own padding within the full-width layout - Increased per page to 60 for better coverage at 6 columns π Generated with Crush Assisted-by: Crush:deepseek-reasoner
Maxwell Jensen maxwelljensen@posteo.net
Wed, 13 May 2026 15:50:15 +0200
feat: redesign browse grid with Chevereto-style card layout and hover overlay - Compact grid with 2px gaps and dark image backgrounds (aspect-ratio 16:10) - Image fills card via object-fit: cover with subtle scale-on-hover - Gradient overlay on hover shows filename, dimensions, and truncated tags - Removed rounded corners and info text below cards for cleaner look π Generated with Crush Assisted-by: Crush:deepseek-reasoner
Maxwell Jensen maxwelljensen@posteo.net
Wed, 13 May 2026 15:44:59 +0200
feat: add image overlay viewer with keyboard navigation and idle UI fade Replaces full-page navigation with a Chevereto-inspired lightbox overlay when clicking thumbnails in the browse grid. Supports prev/next via buttons and arrow keys, close via Esc/click-outside, auto-hiding controls after 3s of inactivity, and a bottom info bar with metadata and download. π Generated with Crush Assisted-by: Crush:deepseek-reasoner
Maxwell Jensen maxwelljensen@posteo.net
Wed, 13 May 2026 15:34:07 +0200
fix: preserve all tags on upload and return empty array on no match
Tags beyond the first were silently dropped because `r.FormValue("tags")`
returns only the first value when the frontend sends each tag as a
separate FormData field. Changed to `r.Form["tags"]`.
Nil slices in API responses (`var images []Image`) marshalled to JSON
`null`, causing a TypeError in the Svelte template (`null.length`),
making "Loading..." persist forever. Initialized all API-facing slices
with `make()` so they marshal as `[]`.
π Generated with Crush
Assisted-by: Crush:deepseek-reasoner
Maxwell Jensen maxwelljensen@posteo.net
Wed, 13 May 2026 15:16:05 +0200
feat: implement core backend API and SvelteKit SPA Full MVP implementation of the weimar media repository: - CLI commands for user CRUD, image deletion, password reset - HTTP API with auth (cookie sessions), upload, browse, download, thumbnail serving, and tag autocomplete - SQLite-backed storage with migrations - Hash-partitioned disk storage with EXIF stripping and thumbnails - SvelteKit SPA with login, upload, browse grid, and image detail pages - Makefile build flow: SvelteKit build -> Go embed -> single binary
Maxwell Jensen maxwelljensen@posteo.net
Wed, 13 May 2026 14:03:41 +0200
feat: initial project scaffolding Single-binary media repository for home servers β Go backend with embedded SvelteKit SPA. - Cobra CLI with viper config (TOML, env vars WEIMAR_*, flags) - Commands: serve, users, image, version - HTTP server with Go 1.22+ ServeMux, API route stubs, SPA fallback - SvelteKit frontend with adapter-static (SPA mode, 5 routes) - Build pipeline: Makefile, GoReleaser, UPX compression - ldflags-based version and build date injection π Generated with Crush Assisted-by: Crush:deepseek-reasoner
Maxwell Jensen maxwelljensen@posteo.net
Wed, 13 May 2026 11:05:44 +0200