summaryrefslogtreecommitdiff
path: root/docs/goals-and-scope.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/goals-and-scope.md')
-rw-r--r--docs/goals-and-scope.md102
1 files changed, 102 insertions, 0 deletions
diff --git a/docs/goals-and-scope.md b/docs/goals-and-scope.md
new file mode 100644
index 0000000..89af1c3
--- /dev/null
+++ b/docs/goals-and-scope.md
@@ -0,0 +1,102 @@
+# Goals & Scope
+
+## Goals
+
+1. **Fast.** Visible image on screen within ~100 ms of launch for a typical
+ camera JPEG. UI thread never blocks on decode. Flipping through a few
+ hundred shots in a session must feel frictionless.
+2. **Native.** Looks and behaves like a GNOME/Fedora app: libadwaita styling
+ (decision pending), header bar, system themes, HiDPI, gestures.
+3. **Keyboard and mouse, equally first-class.** Every GUI element has a
+ corresponding hotkey (shown on the element) or is reachable through a
+ keyboard-navigable menu; and conversely, every action that has a hotkey is
+ also reachable through the GUI (a header-bar button or a menu item).
+ Sensible vi-ish bindings so the `feh`/`nsxiv` audience feels at home.
+4. **Two views, one window.** A thumbnail grid for overview and a large
+ single-picture view for detail. Flip between them instantly; both are
+ keyboard-driven. Minimal chrome in either.
+5. **Directory-aware.** Given one file, navigate its siblings without a separate
+ browse step. Prev/next, wrap, default sort by filename (EXIF capture-time as
+ an option), filter by extension, **hide RAW sidecars by default** (toggle to
+ reveal). The grid shows the whole folder at a glance.
+6. **Culling-friendly deletion.** `d` bins the current picture into a local
+ `./Trash` folder (recoverable, lives with the shoot); `D` deletes it
+ permanently. The grid dim-marks trashed items so you can see progress.
+7. **Triage by moving.** Mark any number of pictures and send them to a
+ configured destination folder with `m` → a quick popup whose entries each
+ carry an auto-assigned hotkey. Destinations are user-configurable (an
+ ordered list of name → path pairs).
+8. **Modern formats.** PNG, JPEG, GIF, WebP, plus JPEG XL / AVIF / HEIF
+ (pluggable loaders).
+9. **Good citizen.** `.desktop` file, MIME handler for `image/*`, AppStream
+ metadata, Fedora RPM packaging, man page.
+10. **Self-documenting UI.** The interface explains itself: hotkeys printed on
+ their elements, tooltips on every control, a `?` shortcuts overlay,
+ badges/counters/toasts that narrate state, and an info overlay for EXIF.
+ A user should not need the manual to use it.
+11. **Hand off to other tools.** `e` opens the current image in a configurable
+ external program (GIMP, identify, another viewer, …) via a popup with
+ auto-assigned hotkeys. ggaze stays open and responsive while the external
+ tool runs.
+12. **Run shell scripts.** `!` runs a configurable shell script (e.g.
+ `~/scripts/usbimport`) asynchronously through `/bin/sh -c`, with `%f`/`%d`
+ placeholders, and rescans the folder on completion.
+13. **Quick non-destructive enhance.** `a` applies a configurable GEGL preset
+ (auto-fix, brightness, contrast, saturation, sharpen, denoise, …) as a
+ live preview; `s` exports an enhanced **copy**. ggaze **never auto-saves** — navigating away from an un-exported
+ preview prompts Save/Discard/Cancel. The original is never modified. GEGL
+ is optional; the core viewer stays fast without it.
+14. **Copy to clipboard.** `Ctrl+c` copies the current image (pixels, PNG) —
+ or, with marks, the marked files (URIs) — to the clipboard, so it can be
+ pasted into other apps (Katogram, GIMP, file managers) like gthumb.
+15. **Crop, straighten & rotate.** `c`, `R`, and `[`/`]` are non-destructive
+ GEGL tools for cropping, leveling the horizon, and 90° rotation; `s`
+ exports the result, the original is never modified. GEGL is optional.
+16. **Compare before/after.** Hold `Space` to flash the original image;
+ release to see the modified preview — to judge whether to `s` save. Large
+ view; needs an active preview.
+17. **Correct orientation.** Honor EXIF Orientation on load so portrait and
+ tilted camera shots display upright automatically; manual rotate/straighten
+ compose on top.
+18. **Open anything.** Accept a file **or a folder** as the argument
+ (`ggaze ~/Downloads/Camera/` opens the grid), and accept drag-and-drop of a
+ file or folder onto the window to open it.
+19. **Live folder monitoring.** Watch the current directory with `GFileMonitor`
+ so external additions/deletions (e.g. `usbimport` writing files) show up
+ without a manual reload.
+://20. **Tested.** ≥80% unit-test coverage on the plain-C modules (navigator,
+ detect, thumbnail, mover, opener, runner, enhancer, trash, settings),
+ measured via gcov/lcov with a coverage gate so it doesn't regress.
+21. **Audited quality.** Run the `auditing-code-quality` skill (adapted for C:
+ `c-best-practices` + `find-code-bugs` + `solid-principles` +
+ `beyond-solid-principles`, findings tracked via `agent-task-management`)
+ at each milestone boundary and before release; fix all HIGH/MEDIUM findings.
+
+## Non-goals (at least initially)
+
+- **Full image editing** (layers, masks, crop-save, annotate). Quick
+ non-destructive enhance + export-copy via GEGL is in scope (goal 13); deep
+ editing is not.
+- **RAW development.** May show embedded JPEG preview later, but no demosaic.
+ GEGL does not demosaic either.
+- **Library / catalog / albums / tags.** That is beets-for-photos, not this.
+- **Cloud / network sources.** Local files only.
+- **Batch processing in-app.** Bulk convert/resize is a job for the `!` runner
+ (`gegl` CLI) or external tools, not ggaze's UI.
+- **GEGL as a hard dependency.** It stays an optional feature; a minimal build
+ is a plain fast viewer.
+
+## Target user & workflow
+
+Someone who just downloaded a shoot from their camera into a folder and wants
+to cull it: flip through fast (bursts produce many near-identical frames),
+glance at EXIF (shutter/aperture/ISO/timestamp) to pick the sharpest or best-timed
+shot, trash the rejects, and move on to editing the keepers elsewhere.
+
+Typical session: `ggaze ~/Downloads/Camera/IMG_0001.jpg` opens the folder as
+a thumbnail grid, `Enter` jumps into the large view, hold `l` (or `→`) to scrub forward,
+`d` to bin obvious misses into `./Trash` (or `D` to delete outright), `v` to
+mark keepers, `m` then `1` to ship them to "irregular ninja", `i` when a
+frame is borderline, `e` to open a keeper in GIMP, `Esc` back to the
+grid, `q` to leave. No library, no
+database, no sidecar state — just the folder, faster. \ No newline at end of file