Commit Graph
100 Commits
Author SHA1 Message Date
old4ever 251520fd29 test(ai-toolbar): cover primary generate action 2026-04-23 10:30:17 -04:00
old4ever 2590e1dbaf test(ai-toolbar): isolate split suites and action coverage 2026-04-23 05:52:48 -04:00
old4ever bd08e9fc63 test(ai-toolbar): split coverage and add fallback failure cases 2026-04-23 05:41:43 -04:00
old4ever 075d88a247 test(ai-toolbar): close remaining modifier and identity gaps 2026-04-23 05:22:57 -04:00
old4ever 42a888df76 fix(ai-toolbar): align attach and fallback modifier rules 2026-04-23 05:16:41 -04:00
old4ever 502bd6237a fix(ai-toolbar): align fallback shortcut and identity guards 2026-04-23 05:10:55 -04:00
old4ever 85f4066ce2 test(ai-toolbar): cover normalized clipboard paste paths 2026-04-23 05:04:00 -04:00
old4ever 35731fb684 fix(ai-toolbar): use stable clipboard fallback identities 2026-04-23 04:53:39 -04:00
old4ever d9aa035dce fix(ai-toolbar): tighten modifier and clipboard fallback guards 2026-04-23 04:47:11 -04:00
old4ever 470d76d46c fix(ai-toolbar): honor AI state in shortcuts and clipboard dedup 2026-04-23 04:39:27 -04:00
old4ever 6f7f727b27 test(ai-toolbar): complete modifier and dedup coverage 2026-04-23 04:31:21 -04:00
old4ever 1d2bbdf46c test(ai-toolbar): cover shortcut and dedup behavior 2026-04-22 23:54:01 -04:00
old4ever f2816247c1 test(ai-toolbar): reduce layout brittleness and cover shortcuts 2026-04-22 23:49:29 -04:00
old4ever 6f46925596 test(ai-toolbar): assert runtime layout and action states 2026-04-22 23:41:26 -04:00
old4ever 62e6be5742 test(ai-toolbar): replace stale layout contracts 2026-04-22 23:36:29 -04:00
old4ever c37c39a0ba fix(ai-toolbar): keep textarea paste on component path 2026-04-22 23:31:46 -04:00
old4ever b048e34891 test(ai-toolbar): prove textarea paste bypasses global listener 2026-04-22 23:28:22 -04:00
old4ever c92633e647 test(ai-toolbar): cover editable paste behavior 2026-04-22 23:25:08 -04:00
old4ever 46f7aff815 fix(ai-toolbar): ignore editable targets during global paste fallback 2026-04-22 23:19:18 -04:00
old4ever 8cc868c22a test(ai-toolbar): verify paste listener gating at component boundary 2026-04-22 23:15:29 -04:00
old4ever 9f23597e53 test(ai-toolbar): cover paste gating behavior 2026-04-22 17:58:14 -04:00
old4ever bfb29d3986 fix(ai-toolbar): gate paste capture on AI availability 2026-04-22 17:54:49 -04:00
old4ever e817fb52cf test(ai-toolbar): verify masonry prompt wrapping contract 2026-04-22 17:48:15 -04:00
old4ever a93d95ee2e fix(ai-toolbar): wrap masonry prompt cards correctly 2026-04-22 17:45:57 -04:00
old4ever e1a12d0c71 refactor(ai-toolbar): cluster example prompts in masonry layout 2026-04-22 17:42:29 -04:00
old4ever 8b17d75193 test(ai-toolbar): harden stacked preview regression 2026-04-22 17:39:34 -04:00
old4ever f5058803b6 test(ai-toolbar): harden stacked preview regression 2026-04-22 17:37:54 -04:00
old4ever 7b61703b01 refactor(ai-toolbar): stack attachment previews by row 2026-04-22 17:35:12 -04:00
old4ever 7efc22c19c test(ai-toolbar): tighten desktop layout regression 2026-04-22 17:32:31 -04:00
old4ever 4e4cca193c refactor(ai-toolbar): use 70-30 desktop composer split 2026-04-22 17:29:11 -04:00
old4ever 7df8419368 refactor(layout): promote AI capture above timeline on desktop
Give the composer full-width desktop space before the event timeline so capture stays prominent and the toolbar can keep its intended two-column composition. Add source-level regression tests to lock the new page hierarchy in place.
2026-04-22 11:34:37 -04:00
old4ever 88265678db refactor(header): improve mobile header layout with responsive action controls 2026-04-21 23:23:43 -04:00
old4ever 7f7c945396 feat(settings): add theme preference selector replacing header ModeToggle 2026-04-21 23:23:32 -04:00
old4ever 3e3c8056b1 feat(sign-in): make auth buttons responsive with icon-only mobile affordance 2026-04-21 23:23:20 -04:00
old4ever 7a917e5c22 feat(ui): drive mobile layouts from useIsMobile 2026-04-21 22:46:07 -04:00
old4ever 16bbd9ab08 chore(gitignore): ignore root screenshots 2026-04-21 22:45:55 -04:00
old4ever 71c84875fa feat: add use-mobile shadcn hook
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev>
2026-04-21 22:20:26 -04:00
old4ever a2d9782d8f refactor(ui): switch surfaces to shared shadow tokens 2026-04-21 21:43:17 -04:00
old4ever e0b6120cd3 refactor(theme): make light mode the default shell 2026-04-21 21:43:11 -04:00
old4ever 276fbad45e chore: legacy cleanup
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev>
2026-04-21 20:24:04 -04:00
old4ever 915e0b7cf8 feat: redesign
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev>
2026-04-21 20:23:15 -04:00
old4ever 420a971ff7 docs: customize DESIGN.md
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev>
2026-04-21 17:08:56 -04:00
old4ever 08ca19d2eb docs: add local cal redesign spec 2026-04-21 17:01:20 -04:00
old4ever 5d0a043626 chore: design.md inspired by vercel
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev>
2026-04-21 15:13:19 -04:00
old4ever 036278bab4 chore: add agent-browser skills
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev>
2026-04-21 12:23:35 -04:00
old4ever 77e778d8b0 chore: nuke openagentcontrol
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev>
2026-04-21 12:23:22 -04:00
old4ever 15f1e1ceb5 chore: add design.md
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev>
2026-04-20 20:59:55 -04:00
old4ever ddc7a82e0e refactor(ai-event): migrate to OpenRouter chat.send API
Replace the deprecated callModel / getText pattern with the chat.send
method and extract the response content via extractContentFromChatResponse.
This aligns with the current OpenRouter SDK interface.
2026-04-15 18:21:23 -04:00
old4ever 6bc84d5b58 feat(date-time-picker): add native date input alongside calendar popover
Replace the button-only trigger with a native <input type="date"> (or
datetime-local when not all-day) paired with an icon button that opens
the calendar popover.  This gives users direct keyboard entry while
keeping the rich calendar + quick-shortcut picker accessible.

- Add getInputValue helper to format the current value for the native
  input.
- Import the Input component.
- Restructure the layout to place the input and popover trigger
  side-by-side.
2026-04-15 18:21:17 -04:00
old4ever 29bf4d2200 fix(time-picker): improve layout stability, a11y, and separator styling
- Change input group horizontal padding from px-3 to pl-3 pr-2 to
  better accommodate the trigger button.
- Add shrink-0 to the trigger button so it does not collapse in flex
  layouts.
- Mark the Clock icon with aria-hidden to keep it out of the
  accessibility tree.
- Forward the className prop in TimePickerSeparator and apply default
  muted-foreground text styling.
2026-04-15 18:21:09 -04:00
old4ever 8d7948298b fix(button): suppress Firefox inner focus ring and padding
Add [&::-moz-focus-inner]:border-0 and [&::-moz-focus-inner]:p-0 to
the base buttonVariants to prevent the extra inner dotted outline and
padding that Firefox renders on focused buttons.
2026-04-15 18:21:03 -04:00
old4ever 82d04e7a84 feat: add reusable date and time picker primitives 2026-04-11 00:02:51 -04:00
old4ever 1ad5603bf6 chore: remove database env example 2026-04-10 15:41:00 -04:00
old4ever 42989b1437 style: format recurrence helpers 2026-04-10 15:40:56 -04:00
old4ever f3350e0124 feat: simplify date picker shortcuts 2026-04-10 15:40:47 -04:00
old4ever 27492ee01f feat: add location autocomplete 2026-04-10 15:40:38 -04:00
old4ever 12849b2362 feat: add AI settings controls 2026-04-10 15:40:29 -04:00
old4ever e01a7ed1ad feat: use friendly event date labels 2026-04-09 17:41:37 -04:00
old4ever 12f2fd95dc refactor: centralize event dialog form state 2026-04-09 17:41:26 -04:00
old4ever 911e5735a4 feat: add shared recurrence helpers 2026-04-09 17:41:04 -04:00
old4ever 95bc5db9a8 refactor: move calendar chrome into the home page 2026-04-09 13:25:52 -04:00
old4ever 22224bebc6 feat: redesign local calendar workspace 2026-04-09 13:25:30 -04:00
old4ever f05e6f5792 feat: clarify AI draft messaging in toolbar 2026-04-09 11:59:45 -04:00
old4ever ecff8bebb1 feat: review single AI-generated events before saving 2026-04-09 11:59:32 -04:00
old4ever aef22f704f ♿️ feat: keep event actions menu visible 2026-04-09 01:10:37 -04:00
old4ever e4953ee42e chore: update skills
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev>
2026-04-09 01:04:00 -04:00
old4ever 92f60d3a9a 📱 fix: hide keyboard shortcuts trigger on mobile 2026-04-09 00:59:15 -04:00
old4ever 513aafcebc feat: support multiple image uploads for AI event generation 🖼️
- Updated OpenRouter integration to accept an array of image URLs
- Updated ImagePicker to use the `multiple` attribute natively
- Added `appendImagesDeduped` for handling client-side image deduplication
- Enhanced clipboard pasting to extract multiple images at once
- Rendered multiple images in a horizontal thumbnail strip in the AIToolbar
- Added tests to cover multi-image logic and AI request mapping
2026-04-08 20:46:43 -04:00
old4ever cac201a4d2 feat: add document-level paste and Ctrl/Cmd+V handler for image clipboard support 2026-04-08 19:58:40 -04:00
old4ever 1c864f162e feat: handle image paste in AI toolbar textarea via onPaste handler 2026-04-08 19:58:36 -04:00
old4ever b3121ed532 refactor: remove strict MIME-type allowlist check from validateImageFile 2026-04-08 19:58:05 -04:00
old4ever d850d88a3a test: add unit tests for extractImageFromClipboard 2026-04-08 19:58:03 -04:00
old4ever 2d34bbebc4 feat: add extractImageFromClipboard utility with broad image/* MIME matching 2026-04-08 19:58:01 -04:00
old4ever 722c0f0f7d 🚸 feat: redesign AI toolbar with two-zone layout and HoverCard shortcuts popover
- Split composer into AI zone (primary accent) and data actions zone (neutral)
- Move Attach/Generate to labeled footer bar below textarea (left/right aligned)
- Add info icon with HoverCard (hover preview) + Popover (pinned click) showing identical keyboard shortcuts content using shadcn HoverCard to fix theme inconsistency vs Tooltip
- Expose imperative triggerRef on ImagePicker for keyboard shortcut access
- Wire TooltipProvider in root layout; install shadcn kbd and hover-card
- Unauthenticated state shows locked CTA with real sign-in button weight
- Add behavioral contract tests for footer bar, info trigger, and zone layout
2026-04-08 13:08:36 -04:00
old4ever 650d1d5f95 🩹 fix: restore textarea placeholder padding in ai-toolbar
Replace px-0 py-0 override with px-3 py-1 so placeholder text is
never flush against the edge. The ::placeholder pseudo-element
inherits box padding from the textarea; zeroing it out removed all
visual breathing room for the hint text.

Also adds tests/textarea.test.ts that locks down this behaviour via
class-string assertions on the resolved cn() output.
2026-04-08 09:19:59 -04:00
old4ever b93669a416 🔥 fix: remove border and background from empty events skeleton 2026-04-08 09:15:05 -04:00
old4ever 9dfd4ef326 ✨ feat: add Google and Apple OAuth via better-auth socialProviders 2026-04-08 09:12:50 -04:00
old4ever e59476dea9 fix: remove fixed height and icon margins from sign-in buttons 2026-04-08 01:51:22 -04:00
old4ever 86bb20baf4 fix: remove icon margin overrides from mode toggle menu items 2026-04-08 01:51:17 -04:00
old4ever 1ef63d8070 fix: remove fixed height and icon margins from event actions toolbar 2026-04-08 01:51:12 -04:00
old4ever 0f46e9322f refactor: mobile-first AI toolbar layout 2026-04-08 01:50:06 -04:00
old4ever 0807779c9b feat: make AI summary notification dismissable 2026-04-08 01:47:29 -04:00
old4ever a3000def67 fix: remove redundant shadcn component className overrides 2026-04-08 01:43:55 -04:00
old4ever a819cbfced fix: normalize action button icon spacing and text size 2026-04-08 01:33:33 -04:00
old4ever de6407170d fix: align component styling inconsistencies 2026-04-08 01:29:51 -04:00
old4ever 8eda6c89e2 feat: replace all vanilla HTML elements with shadcn components
- Install skeleton and tooltip shadcn components
- event-dialog: textarea → Textarea, duration chips → Button ghost
- date-time-picker: raw button trigger → Button outline, quick-date chips → Button ghost
- event-card: <a> URL link → Button link asChild
- sign-in: animate-pulse div → Skeleton
- ai-toolbar: animate-pulse div → Skeleton, event count span → Badge secondary
- event-actions-toolbar: event count span → Badge secondary
2026-04-08 01:17:18 -04:00
old4ever 1cee73702b feat: add quick duration selectors (+15 min, +30 min, +1h, +3h) in event dialog 2026-04-08 01:07:14 -04:00
old4ever 6884a87e3c feat: add Today / Next week / Next month quick selectors to date picker 2026-04-08 01:04:34 -04:00
old4ever cc5ce95e1b feat: replace raw date/time inputs with shadcn Calendar + Select picker
- Add popover shadcn component (radix-ui based)
- Create DateTimePicker component: Calendar popover for date + hour/minute
  selects for time, allDay-aware, emits ISO / YYYY-MM-DD strings
- Replace datetime-local / date <Input> fields in EventDialog with DateTimePicker
- Remove unused CalendarIcon and Clock imports from event-dialog
2026-04-08 01:02:47 -04:00
old4ever 19228b0a71 feat(ui): add Separator component 2026-04-08 00:57:07 -04:00
old4ever 26a82681c4 refactor(page): move event actions into AIToolbar, remove standalone EventActionsToolbar 2026-04-08 00:57:02 -04:00
old4ever 2fc21ee929 feat(ai-toolbar): merge event actions into toolbar, add motion animations and AI summary panel
- Add event action props (events, onAddEvent, onImport, onExport, onClearAll)
- Show skeleton loading state while session is pending
- Render event action buttons (Add, Import, Export, Clear) in action bar
- Add AnimatePresence for image preview attach/remove
- Replace Card summary panel with animated glass-card panel
- Inline AI Summarize button into action bar when authenticated
- Add Sparkles icon to AI command section header
2026-04-08 00:56:58 -04:00
old4ever 8d7cc5b2a5 style(recurrence-picker): tighten spacing and use muted xs labels 2026-04-08 00:56:52 -04:00
old4ever a26787a026 feat(event-dialog): redesign with glass-strong styling, icon-decorated inputs, and Cancel button
- Apply glass-strong to DialogContent
- Add LucideMapPin and CalendarIcon/Clock icons to input fields
- Replace native checkbox with Checkbox + Label component
- Unify allDay date inputs into single relative-positioned blocks
- Add Cancel button to DialogFooter
- Rename Save to Create for new events
2026-04-08 00:56:49 -04:00
old4ever e000d41474 feat(event-actions-toolbar): redesign with icon buttons, sm size, and event count badge 2026-04-08 00:56:43 -04:00
old4ever 5c7003fd13 feat(drag-drop-container): replace border highlight with animated glass overlay on drag 2026-04-08 00:56:38 -04:00
old4ever 8b54a661fe feat(events-list): add AnimatePresence for list transitions and improve empty state 2026-04-08 00:56:35 -04:00
old4ever c80322f20a feat(event-card): redesign with motion layout animations, improved date formatting, and contextual metadata
- Wrap card in motion.div with layout/enter/exit animations
- Replace Card/CardHeader/CardContent with flat glass-card div
- Add hover-reveal action menu with opacity transition
- Improve date formatting with locale options for month/day/time
- Show end time inline next to start
- Add ExternalLink for event URLs
- Add icons to dropdown menu items with DropdownMenuSeparator
2026-04-08 00:56:28 -04:00
old4ever 2992cfbccd feat(rrule-display): display recurrence rule as a Badge instead of plain text 2026-04-08 00:56:21 -04:00
old4ever 625e019ae7 feat(mode-toggle): simplify component, add icons to menu items and active state highlight 2026-04-08 00:56:17 -04:00