Make the timeline the default view, paginated and configurable
The day-grouped timeline is now the site root (/, /page/N/); the flat square grid moves to /grid/ (/grid/page/N/). Both are linked from the profile header, separated by a divider. Timeline pages pack whole day-groups until they reach the page size, never splitting a day across a page boundary, so appended pages never repeat a date heading — the infinite-scroll handler relies on this. Page size is configurable via -page-size (default 60), threaded through the Generator and exposed as services.photogallery.pageSize in the NixOS module.
This commit is contained in:
@@ -45,9 +45,10 @@ Missing sidecar → filename as caption, today as date. Photos sort newest first
|
||||
- Gruvbox dark hard colour scheme
|
||||
- Crimson Pro (serif) for headings and captions — configurable via `-serif-family` / `-fonts-url`
|
||||
- Manjari for Malayalam text (bio line), via `-ml-family`
|
||||
- 3-column square grid → 2-column on mobile, 60 photos per page (`/`, `/page/2/`, …)
|
||||
- Two views of the same photos, both 3-column square grid → 2-column on mobile, both with infinite-scroll load-more. Page size is configurable via `-page-size` (default 60; NixOS `services.photogallery.pageSize`):
|
||||
- **Timeline is the site root** (`/`, `/page/2/`, …). Photos grouped by calendar day: one ISO date heading (`2026-06-14`) + count per day, then the square grid. `groupByDay` collapses the newest-first list into consecutive same-day runs; `chunkDayGroups` packs whole days into pages targeting `pageSize`, never splitting a day across a page boundary (so appended pages never duplicate a heading — the load-more JS relies on this).
|
||||
- **Grid** (`/grid/`, `/grid/page/2/`, …) is the flat square grid, linked from the profile header.
|
||||
- Single photo page with sidebar and newer/older navigation
|
||||
- Timeline page (`/timeline/`) groups photos by calendar day: one ISO date heading (`2026-06-14`) + count per day, then the same square grid. Linked from the profile header; `groupByDay` in `generator.go` collapses the newest-first photo list into consecutive same-day runs, so it is not paginated.
|
||||
|
||||
### Photo page navigation
|
||||
|
||||
@@ -130,8 +131,9 @@ nix build # succeeds
|
||||
| `server.go` | Upload API + optional static file serving |
|
||||
| `watcher.go` | fsnotify watcher with 500ms debounce |
|
||||
| `assets.go` | `//go:embed` for templates and static |
|
||||
| `templates/timeline.html` | Site root: photos grouped by day, paginated |
|
||||
| `templates/grid.html` | Flat square grid at `/grid/`, paginated |
|
||||
| `templates/photo.html` | Single photo page, neighbour links and prefetch |
|
||||
| `templates/timeline.html` | Timeline page, photos grouped by day |
|
||||
| `static/photo-nav.js` | Arrow-key and swipe navigation |
|
||||
| `module.nix` | NixOS module (systemd service, tmpfiles, nginx vhost) |
|
||||
| `flake.nix` | `buildGoModule` package + devShell + nixosModules |
|
||||
|
||||
Reference in New Issue
Block a user