Commit Graph

86 Commits

Author SHA1 Message Date
lerko f89ca8acb9 feat(tui): add split-pane detail, compact date headers, and input drawer
Three layout improvements for better space utilization:

- Compact date headers: date labels render as left gutter column instead
  of standalone lines, saving one line per date group in stream view
- Input drawer: capture bar expands to 4-line drawer with border, hints,
  and live preview of parsed entity/search query
- Split-pane detail: wide terminals (>=100 cols) show list and detail
  side-by-side with h/l focus switching, falling back to full-screen
  detail on narrow terminals
2026-05-19 19:55:37 -04:00
lerko e09919b679 fix: harden API, DB schema, and CLI safety
- Add 'reminder' to glyph CHECK constraint (was accepted by parser but
  rejected by DB)
- Default serve bind to 127.0.0.1, add --host flag for LAN access
- Validate card_data as JSON in Store.Create/Update/Promote
- Return pagination envelope {data,total,limit,offset} from list endpoint
- Append absorb breadcrumb to source entity before soft-delete
- Add Levenshtein fuzzy match to catch command typos before routing to add
- Replace DDL string-matching migrations with versioned schema_version table
- Update web UI and API tests for envelope response format
2026-05-19 18:30:17 -04:00
lerko babf1d6620 fix(tui): harden EDITOR handling and SQL sort/order validation
Split EDITOR env var on whitespace so multi-word values like
"code --wait" work correctly. Add allow-list switch for sort column
and order direction at the query boundary to prevent future callers
from passing unsanitized values into SQL.
2026-05-17 23:24:58 -04:00
lerko 77222ff1b8 feat(tui): add interactive run mode for checklists and fill mode for templates
Run mode (r key on checklist cards): cursor navigates steps, space
toggles done/undone, r resets all, esc saves changes to DB and exits.
Persists step state — improvement over web which discards on exit.

Fill mode (f key on template cards): tab/shift-tab navigates slots,
type to fill values, enter resolves template and copies to clipboard
with use count increment. Esc cancels without copying.

Both modes are sub-states of detail view, keeping architecture simple.
2026-05-17 21:53:55 -04:00
lerko 1066c0bc7d feat(tui): add search via capture bar and absorb flow
Search uses existing parse grammar ?prefix — type `?query #tag` in
capture bar to filter entities client-side. Substring match on
body+title+description with AND tag filtering. Esc clears search.

Absorb via m key on fluid entities — opens source picker showing all
other entities, enter merges source into target. Uses existing
store.Absorb() backend.
2026-05-17 21:35:44 -04:00
lerko ce335cabd6 feat(tui): add cards view, mode switching, promote picker, and card detail
Stream/cards toggle with 1/2 keys. Cards view with intent filtering
(tab cycles grab/read/fill/all), sort cycling (s key), pinned-first
ordering, and affordance badges. Promote picker (p key) with card type
selection and auto-detection from body content. Detail view renders
card_data per type: checklist steps, template slots, decision fields,
link URLs.

Extracts generateCardData to internal/carddata for reuse across cmd
and tui packages.
2026-05-17 21:14:14 -04:00
lerko c2ea63dd16 feat(tui): add status bar, help overlay, tag filter, and entity actions
Status bar with entity count and context-sensitive key hints. Help
overlay via ? key. Tag filter via # with cursor-navigable tag list.
Todo toggle (x), pin (!), promote (p), demote (D), copy (c), edit (e)
via $EDITOR. Delete confirmation with 3s timeout. Date-grouped list
with completed todo and pinned indicators. Esc clears active tag filter.

Adds CompletedAt/ClearCompleted to EntityUpdate for todo toggling.
2026-05-17 20:33:34 -04:00
lerko 36999cd825 feat(tui): add bubbletea terminal UI with entity list, detail, and capture
Adds `nib tui` command and `make tui` target. Scrollable entity list
with j/k navigation, enter for detail view, `a` to capture new entries
using the existing parse grammar, and `d` to delete.
2026-05-17 20:07:45 -04:00
lerko d995d1e708 Merge pull request 'feat(serve): add TLS support' (#29) from fix/copy-clipboard into main
Reviewed-on: #29
2026-05-17 21:51:22 +00:00
lerko dd8878ebcf feat(serve): add TLS support with --tls-cert and --tls-key flags
Adds make cert target for self-signed dev certs and development guide.
2026-05-17 14:53:14 -04:00
lerko 805467486b feat(dev): add air live-reload with make watch 2026-05-17 14:18:08 -04:00
lerko 4980714583 fix(api): check http errors before using response in tests 2026-05-17 14:10:40 -04:00
lerko 6d8170d219 build: add Makefile for dev, test, and build orchestration 2026-05-17 14:08:22 -04:00
lerko 73c6a315c1 Merge pull request 'feat/community-themes' (#28) from feat/community-themes into main
Reviewed-on: #28
2026-05-17 17:50:39 +00:00
lerko d5fa6cc56b feat(themes): replace cycle button with popover theme picker
Click theme button opens panel grouped by dark/light. Hover previews
theme live, click confirms. Dismiss on outside-click or Escape.
2026-05-17 13:41:40 -04:00
lerko 8555d0da19 feat(themes): add catppuccin latte, rosé pine dawn, and solarized light
Light variant community themes. Total theme count: 13.
2026-05-17 13:30:06 -04:00
lerko ec907d0e0d feat(themes): add gruvbox, rosé pine, tokyo night, and solarized dark
Tier 2 community themes mapped to nib's token system.
Total theme count: 10 (3 original + 3 tier 1 + 4 tier 2).
2026-05-17 13:28:35 -04:00
lerko a854f02854 feat(themes): add catppuccin mocha, nord, and dracula themes
Community-standard palettes mapped to nib's 18-token design system.
Theme cycle extended: dark → paper → tinycard → catppuccin → nord → dracula.
2026-05-17 13:28:10 -04:00
lerko 824192f581 Merge pull request 'fix: UI issues #23-25 + note card type + promote modal' (#26) from fix/ui-issues-23-24-25 into main
Reviewed-on: #26
2026-05-17 17:04:16 +00:00
lerko c2506ef7fd feat(ui): restructure promote modal into read/grab/fill columns
Card types grouped by intent: read (note, link, decision),
grab (snippet), fill (template, checklist). 3-column grid layout
with stacked buttons and intent headers.
2026-05-17 13:01:04 -04:00
lerko 2b177eeae9 feat(cards): add 'note' card type for readable markdown content
New card type renders body as styled markdown with no copy/fill/run
affordance. Glyph: ¶, color: --note.

Migration uses transaction to safely rebuild table constraint.
Checks both 'note' presence and modified_at column to catch
partial migration state.
2026-05-17 12:49:43 -04:00
lerko 840084fbb0 fix(ui): render full card content in mobile inline expansion
Promoted cards now show decision/steps/link/body sections in inline
detail instead of just a body preview. Fullscreen removes line clamp.
2026-05-17 11:05:10 -04:00
lerko 4ec876b2d2 fix(ui): mobile capture sticky, post-delete focus, inline markdown
- Capture bar stays visible on mobile via sticky positioning (#25)
- Cursor moves to adjacent entry after delete instead of resetting (#24)
- Inline expansion renders styled markdown via .exp-body.md selectors (#23)
2026-05-17 10:40:04 -04:00
lerko e66b7d19f6 chore: tidy before tag
Update .gitignore (add .local/, remove stale spec entry).
Remove TODO.md (moved to .local/done/).
Remove docs/ISSUE_TEMPLATE.md (moved to .local/).
2026.05.2
2026-05-16 23:20:58 -04:00
lerko 38db465cc2 chore: add issue templates (bug + feature)
Gitea-native yaml templates for web UI, local markdown copy for reference.
2026-05-16 23:06:50 -04:00
lerko 7023806e1a Merge pull request 'fix/mobile-view' (#22) from fix/stream-zoom-ui into main
Reviewed-on: #22
2026-05-17 02:50:40 +00:00
lerko fa960ec204 feat(ui): inline expansion for cards view at mobile
Same accordion pattern as stream: card-row gets entity-exp markup,
selectEntity/expandInline/dismissPeek/Escape all handle .card-row.
Fullscreen expand works for both views.
2026-05-16 22:46:01 -04:00
lerko ad44d35d9b fix(ui): render markdown in mobile inline expansion
Use renderMd instead of escHtml for exp-body content.
Add .md class for consistent markdown styling.
2026-05-16 22:38:38 -04:00
lerko 35df7dcb69 fix(ui): card fullscreen transparency in mobile stream
Explicit .is-card.exp-full selector overrides card background/border/margin
so fullscreen overlay is fully opaque.
2026-05-16 22:35:43 -04:00
lerko 694dfe1c89 feat(ui): inline expansion for mobile stream entries
Replace bottom-sheet peek with inline accordion at ≤900px.
Entries expand in-place with grid-template-rows animation (0.2s).
Body clamped to 3 lines; fullscreen uncaps it.
Selection toggles DOM classes instead of re-rendering for fluid j/k nav.
2026-05-16 22:32:41 -04:00
lerko 180757827b fix(ui): mobile breakpoint layout and peek interactions
Grid forced to single-column at ≤900px for all panel states.
Resize handles hidden, transitions killed to prevent slivers.
Peek pane gets mobile toolbar (expand/dismiss buttons).
Escape dismisses peek at any viewport. Z toggles full-screen
peek at mobile instead of no-op zen toggle.
2026-05-16 21:53:12 -04:00
lerko 3084152695 Merge pull request 'feat(ui): add favicon (diamond split-tip nib)' (#21) from feat/favicon into main
Reviewed-on: #21
2026-05-17 01:26:35 +00:00
lerko f449562b27 feat(ui): add favicon (diamond split-tip nib)
SVG favicon — gold nib shape on transparent background, no container.
Fills the full viewBox for maximum visibility at 16px.
2026-05-16 21:24:44 -04:00
lerko 1c5f6836f5 Merge pull request 'feat/resizable-panels' (#20) from feat/resizable-panels into main
Reviewed-on: #20
2026-05-17 00:48:39 +00:00
lerko ff190e395b feat(ui): context-sensitive z key (focus mode)
- Nothing selected: z toggles zen (hide both panels)
- Item selected: z expands peek to full width (focus mode)
- z again or Esc exits focus mode and deselects
- j/k still cycle items while in focus mode
2026-05-16 20:46:23 -04:00
lerko 0316076bf8 feat(ui): resizable rail and peek pane
- Drag handles between rail/center and center/peek
- Rail: 120–360px range, peek: 250–700px range
- Widths persisted in localStorage
- Handles hidden when panel is collapsed (zen mode)
- Transition disabled during drag for smooth resize
2026-05-16 20:42:20 -04:00
lerko a399c4fb15 Merge pull request 'feat(ui): self-host fonts, remove Google Fonts CDN' (#19) from feat/solidify-fonts into main
Reviewed-on: #19
2026-05-17 00:01:23 +00:00
lerko 03e982281c feat(ui): self-host fonts, remove Google Fonts CDN
- Bundle Satoshi (sans) and JetBrains Mono in web/fonts/
- New fonts.css with @font-face declarations
- Remove Google Fonts preconnect and stylesheet link
- Update --sans token: Satoshi replaces Space Grotesk/Inter
- Zero external font requests, works fully offline
- Keep extra fonts (Geo, Mooli, StackSansNotch) for future use
2026-05-16 19:58:11 -04:00
lerko 5fd324e4bb Merge pull request 'feat(ui): render markdown in peek pane' (#18) from feat/peek-markdown into main
Reviewed-on: #18
2026-05-16 23:52:57 +00:00
lerko b456dca4b3 feat(ui): render markdown in peek pane
- Add marked.js for full markdown rendering
- Stream peek body renders as markdown
- Card peek non-code content renders as markdown
- Code/snippet cards keep escaped pre/code display
- Styled: headers, lists, blockquotes, inline code, code blocks, links, hr
- Graceful fallback to escHtml if marked fails to load
2026-05-16 19:47:53 -04:00
lerko 4c3cdc55c6 Merge pull request 'feat(ui): zen mode and panel toggles' (#17) from feat/zen-mode into main
Reviewed-on: #17
2026-05-16 23:43:40 +00:00
lerko 9ea00c235b feat(ui): zen mode and panel toggles
- z: toggle zen mode (hide both sidebars)
- [: toggle tag rail
- ]: toggle peek pane
- Panel state persisted in localStorage
- CSS grid transition for smooth collapse
2026-05-16 19:40:44 -04:00
lerko b580ed46b0 Merge pull request 'feat/theme-and-sort' (#16) from feat/theme-and-sort into main
Reviewed-on: #16
2026-05-16 23:35:30 +00:00
lerko ef647aea7a feat(ui): sort dropdown for cards, capture bar prominence
- Cards sort dropdown: newest, oldest, most used — wired to reload
- Capture bar: larger font, more padding, accent glow on focus
- Prompt glyph scales up for visibility
2026-05-16 19:01:44 -04:00
lerko 35fe97a166 feat(ui): add tinycard theme
- New [data-theme="tinycard"] token block with purple accent palette
- Theme toggle cycles dark → paper → tinycard
- Load Inter font for tinycard sans stack
2026-05-16 19:00:25 -04:00
lerko 1f2daf4d0e Merge pull request 'fix(ui): tag counts, j/k nav, stream layout, search alignment' (#15) from fix/ui-bugs-phase1 into main
Reviewed-on: #15
2026-05-16 22:49:27 +00:00
lerko 8bfa9b15ed fix(ui): tag counts, j/k nav, stream layout, search alignment
- Tag rail counts now reflect cards-only when in cards view
  (ListTags accepts cardsOnly filter, JS passes it per view)
- j/k navigation scoped to visible (intent/search filtered) list
- scrollSelectedIntoView works in both stream and cards view
- Entity items wrap title/desc/preview in .entity-content flex
  container so tags/pills align right consistently
- Title no longer eaten by description/body (flex-shrink + min-width)
- Search bar centered in header with margin auto
- switchView awaits loadEntities+loadTags to fix stale intent counts
2026-05-16 18:42:05 -04:00
lerko ab07f631a7 Merge pull request 'feat: UI redesign, capture grammar, demo command' (#14) from develop into main
Reviewed-on: #14
2026-05-16 20:07:28 +00:00
lerko db3f88508e Merge pull request 'fix(ui): edit pill in stream peek, unified edit mode' (#13) from fix/ui-polish into develop 2026-05-16 19:22:52 +00:00
lerko 1c6ba2b34c fix(ui): add edit pill to stream peek, unify edit mode across views 2026-05-16 13:42:44 -04:00