chore: add BACKLOG.md

This commit is contained in:
Falkan
2026-03-18 23:07:05 -04:00
parent 1dd2f0c5d3
commit 8bdde05ca7

View File

@@ -1,47 +1,42 @@
# humor-units Backlog
Issues and improvements to address eventually. Not blockers.
Items are roughly ordered by priority. Move to DONE when shipped.
---
## Bugs
## TODO
*(none yet)*
### Uniform font size
Get actual text measurements of output card values and render all cards in a group
at a uniform font size. JS must be minimal — no heavy layout libraries.
The requirement is *real* uniformity based on measurements, not "close enough."
## Improvements
### Custom dropdown (typeahead fix)
Native `<select>` accumulates keystrokes into a browser-managed search string.
Switching letters requires backspace to clear the accumulated string first.
Fix requires replacing the native select with a custom dropdown component
that handles keyboard search with a clean reset-on-idle timer.
### UI: "Clear" button hover feedback in light/Dan mode
In dark mode the "Clear" button text lightens on hover, giving visual feedback. In light
mode and Dan mode it currently does nothing visible. Should have a matching subtle
highlight (e.g. text darkens, underline appears, or border darkens).
---
### Admin: tooltips / descriptions for units
Allow users to attach an optional `description` string to each unit. On the front end,
show it as a tooltip when hovering over the unit name or symbol. A single `description`
field is sufficient — no need to distinguish between tooltip text and description text.
## DONE
Data shape change: add optional `description?: string` to the `Unit` type.
### Admin: group sort order (alphabetical vs. defined)
Per-group setting controlling whether units are displayed on the front end in:
- **Defined order** — the order they appear in `units.json` (current implicit behaviour)
- **Alphabetical order** — sorted by label at render time
Data shape change: add optional `sortOrder?: 'defined' | 'alpha'` to the `Group` type
(default: `'defined'`).
### Admin: unsaved-form guard on "Add Unit" / "Add Group"
If the user is in the middle of filling out a create/edit form and clicks "+ Add Unit"
or "+ Add Group", the current form should be auto-saved before opening the new one.
If the save fails (e.g. missing required field), highlight the erroring field and block
navigation until it is resolved — don't silently discard the in-progress work.
### Admin: configure YOLO mode label and description via admin page
The YOLO mode toggle label and description are currently configurable only by editing
`data/config.json` directly (`yoloLabel`, `yoloDescription` fields). Add a settings
section to the admin page where these can be edited in-browser and saved via a new
`PUT /admin/api/config` endpoint.
Add a "Delete" option to the bulk action dropdown so multiple units can be deleted at
once. Should show a confirmation dialog listing the units to be deleted before
committing.
- Hidden flag on Unit and Group (server-side filtered, admin checkbox)
- Description placeholders: `{id}`, `{id:label}`, `{id:plural}`, `{id:symbol}`, `{id:description}`
Two-pass resolver with cycle fallback to Label (symbol)
- Drag handle contrast fix (opacity on --pico-color, primary-inverse on selected rows, magenta in Dan Mode)
- Custom tooltip (500ms hover delay, no mouse movement required, Dan Mode styled)
- ⓘ indicator on units with descriptions
- Enter to save / Escape to discard in admin forms
- Auto-save on unit/group selection in admin
- Domain-based branding (humorunits.com / dickloads.com) via src/lib/brand.ts
- YOLO toggle visibility: auto (show when >1 group) or never — admin Settings panel
- Group alwaysShowLabel flag
- Production server setup (npm run start / build:watch + serve with nodemon)
- Editable unit/group IDs with full cascade (group refs, baseUnitId refs, {id:*} in descriptions)
- Alpha sort tiebreak: labelPlural primary, symbol secondary
- Infinite loop fix: $effect → onMount + in-flight guards on loadData/loadConfig
- Sort-alpha button per group in admin tree (⇅)
- Settings button moved to admin header
- sortPosition pin: optional 1-based fixed slot per unit, inserts into float list
- Dropdown optgroup dividers matching group order and visibility rules