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
old4ever
8ee5688168
feat(sign-in): add icons, use ghost variant and sm size for header buttons
2026-04-08 00:56:13 -04:00
old4ever
59bc8fee38
feat(auth): redesign auth pages with glass UI and motion animations
...
- error page: replace Card with glass-strong panel, add AlertTriangle icon
- signin page: add framer-motion entrance animation, CalendarDays branding,
Loader2 spinner while loading, merge isPending/session checks
- signout page: replace Card with glass-strong panel, add LogOut icon,
tighten user identity display
2026-04-08 00:56:08 -04:00
old4ever
c6086bdcc7
refactor(layout): switch to Geist fonts, redesign header, default to dark theme
...
- Replace Magra with Geist Mono font
- Rename font variables to geistSans/geistMono
- Apply both font variables to body
- Redesign sticky header with glass-strong and CalendarDays icon
- Wrap main content in max-w-4xl centered container
- Add glass-strong className to Toaster
- Default theme changed to dark
2026-04-08 00:56:03 -04:00
old4ever
22fe3ec97b
style: overhaul design tokens, shadows, animations, and glass utilities
...
- Replace warm/mixed color palette with clean cool blue-grey tokens
- Reduce border-radius from 1.25rem to 0.75rem
- Rewrite shadow system using oklch with proper depth scale
- Switch fonts from custom serif/sans to Geist Sans/Mono CSS vars
- Add CSS animation keyframes (fade-in, slide-up, slide-down, scale-in)
- Add glass, glass-card, and glass-strong utility classes
2026-04-08 00:55:55 -04:00
old4ever
40dfde34a2
deps: add framer-motion and radix-ui packages
2026-04-08 00:55:48 -04:00
old4ever
865bef63ac
chore: add .chrome to .gitignore
2026-04-08 00:55:45 -04:00
old4ever
9e27b41efe
chore: migrate ui skills to bun
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2026-04-07 23:18:56 -04:00
old4ever
c4865a6d20
feat: install ui skills
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2026-04-07 23:17:14 -04:00
old4ever
d002bbc29e
♿ ️ feat: fix accessibility warnings, PWA icons, and form field attributes
...
- add DialogDescription (sr-only) to EventDialog to satisfy Radix UI
aria-describedby requirement and silence the React console warning
- add htmlFor/id pairing to the all-day checkbox label in EventDialog
- add id and name attributes to all raw form fields (textarea, checkbox)
in event-dialog to resolve biome a11y lint warnings (4 fields fixed)
- add name attribute to hidden file inputs in image-picker and ics-file-picker
- generate public/icon-192x192.png and public/icon-512x512.png so the PWA
manifest no longer returns 404 for the app icons
2026-04-07 23:08:48 -04:00
old4ever
cbd2559169
🐛 fix: normalize AI-generated dates to valid ISO offset datetimes
...
- add normalizeAiDateString() to coerce bare ISO datetimes, date-only
strings, and fractional-second variants into offset-aware format
- apply via z.preprocess in AiEventResponseItemSchema so Zod validation
no longer rejects AI responses missing a timezone offset
- fix system prompt to use toISOString() (unambiguous UTC) and clarify
expected datetime format for the AI model
- install bun-types and add to tsconfig so bun:test resolves cleanly
- add 8 behaviour-driven tests covering all normalizer edge cases
2026-04-07 23:01:42 -04:00
old4ever
f3ccbf5db5
fix: ignore .chrome dir that breaks turbopack
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2026-04-07 22:59:41 -04:00
old4ever
735350a4d1
chore: create .chrome directory
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2026-04-07 17:06:19 -04:00
old4ever
685241c92f
chore: update skills
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2026-04-07 17:06:08 -04:00
old4ever
7ffcb4dc43
chore: add dokploy mcp
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2026-04-07 16:12:28 -04:00
old4ever
be70a4579f
Merge pull request 'feat: multimodal AI event creation with image support' ( #1 ) from image-parse into main
2026-04-07 15:21:27 -04:00
old4ever
f38b0188df
🚨 fix: resolve all linter and typecheck warnings across codebase
2026-04-07 14:42:24 -04:00
old4ever
54ca910609
🔧 chore: add biome config for Tailwind CSS and CSS module declarations
2026-04-07 14:42:17 -04:00
old4ever
fab0d2ff47
refactor(components): derive ImagePicker variant types from buttonVariants
...
Replace manually duplicated variant/size type literals with
VariantProps<typeof buttonVariants> for type safety and
consistency with the Button component.
2026-04-07 13:11:42 -04:00
old4ever
a7716d87df
fix(components): add unoptimized image prop, overflow containment, and accessibility
...
Add unoptimized prop to image preview to support blob URLs, contain
overflow on preview container, replace div with semantic section
element in DragDropContainer with aria-label, and import shared
image constants.
2026-04-07 13:11:35 -04:00
old4ever
096f548ec3
refactor(page): extract AI handler helpers and add client-side image validation
...
Break down the monolithic handleAiCreate into focused helpers
(sendAiRequest, persistAiEvents, populateEventForm), add client-side
image file validation before upload, and use toast.promise finally
callback for loading state cleanup.
2026-04-07 13:11:26 -04:00
old4ever
79f98ebfd3
refactor(api): simplify AI event route with extracted utilities and env-based model
...
Replace inline JSON extraction with the shared json-utils module,
extract chat response content parsing into a dedicated helper, make
the AI model configurable via AI_MODEL env var, and improve error
messages for production safety.
2026-04-07 13:11:15 -04:00
old4ever
7bb4f2be9d
refactor(types): strengthen Zod schemas with regex validation and derive CalendarEvent
...
Add regex-based data URL validation for images, compute binary size
from base64 for accurate 10MB limit, enforce datetime strings with
offset for start/end fields, and derive CalendarEvent from the AI
response item type to eliminate field duplication.
2026-04-07 13:11:05 -04:00
old4ever
dc4204a740
refactor(lib): extract shared image constants and JSON parsing utilities
...
Move image extensions, MIME types, and size limit into a dedicated
constants module. Extract JSON-from-text parsing into a pure utility
function for reuse across the codebase.
2026-04-07 13:10:59 -04:00
old4ever
a0a7e021a8
style: standardize import ordering, type imports, and formatting in source files
...
Sort imports alphabetically, convert value imports to type-only where
appropriate, normalize indentation to tabs, and sort exports
alphabetically across UI components, pages, and lib modules.
2026-04-07 13:10:49 -04:00
old4ever
cbae9fa1c9
style: standardize formatting in opencode tooling files
...
Reformat JSON configs and TypeScript scripts to use consistent
tab indentation, semicolons, and double quotes.
2026-04-07 13:10:35 -04:00
old4ever
4e09059a3d
chore(deps): add @typescript/native-preview, biome lint integration, and typecheck script
...
Add @typescript/native-preview for tsgo typechecking, integrate biome
check into the lint script, and add a dedicated typecheck script.
2026-04-07 13:10:16 -04:00
old4ever
95de6ae46a
feat(page): wire image upload state, base64 conversion, and API integration into home page
2026-04-07 11:58:10 -04:00
old4ever
5e888ce7ae
feat(components): add image preview, picker, and clear controls to AIToolbar
2026-04-07 11:58:01 -04:00
old4ever
94de1dde0e
feat(components): add image drag-drop support to DragDropContainer
2026-04-07 11:57:47 -04:00
old4ever
c02c6ece5d
feat(components): add ImagePicker file upload component
2026-04-07 11:57:32 -04:00
old4ever
8d1b04f646
feat(api): refactor AI event route with Zod validation, multimodal image support, and JSON extraction
2026-04-07 11:57:22 -04:00
old4ever
3d6999312c
feat(lib): add AI event Zod schemas for request validation and response parsing
2026-04-07 11:57:11 -04:00
old4ever
6944215578
chore(deps): add zod dependency
2026-04-07 11:57:01 -04:00
old4ever
f8213883df
chore: zod skill
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2026-04-07 11:31:34 -04:00
old4ever
c2263602c4
chore: install openagent opencode
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2026-04-07 11:31:26 -04:00
old4ever
b4c03ff25e
style(ui): standardize UI component file formatting
2026-04-07 08:10:13 -04:00
old4ever
fd5716f39e
style(components): standardize main component file formatting
2026-04-07 08:10:05 -04:00
old4ever
954e73c007
style(app): standardize app page file formatting
2026-04-07 08:09:56 -04:00
old4ever
48ef4f60df
style(api): standardize API route file formatting
2026-04-07 08:09:49 -04:00
old4ever
e39ba6be97
style(lib): standardize utils file formatting
2026-04-07 08:09:43 -04:00
old4ever
3b7c246a47
style(lib): standardize rfc5545-types file formatting
2026-04-07 08:09:40 -04:00
old4ever
5be55cec7c
style(lib): standardize events-db file formatting
2026-04-07 08:09:36 -04:00
old4ever
dab77befc2
style(auth): standardize auth file formatting
2026-04-07 08:09:32 -04:00
old4ever
076cf8acd0
style(db): standardize database source file formatting
2026-04-07 08:09:26 -04:00
old4ever
ae8d547486
style(public): standardize manifest.json formatting
2026-04-07 08:09:19 -04:00
old4ever
3d9e2452c4
style(db): standardize database migration file formatting
2026-04-07 08:09:15 -04:00
old4ever
db9d6399dd
style(config): standardize configuration file formatting
2026-04-07 08:09:09 -04:00
old4ever
a897e8ead1
feat(lib): add OpenRouter client implementation
2026-04-07 08:08:58 -04:00
old4ever
c3e3018018
feat(deps): add @openrouter/sdk dependency
2026-04-07 08:08:51 -04:00
old4ever
be389c6cfa
style(skills): standardize utility-types.ts formatting
2026-04-07 08:08:44 -04:00
old4ever
ada8e03a04
chore(config): add OpenRouterTeam to skill selector repos
2026-04-07 08:08:36 -04:00
old4ever
956de68591
style(skills): standardize skill metadata JSON formatting
2026-04-07 08:08:28 -04:00
old4ever
e25f917b9a
chore(skills): add create-agent and typescript-sdk skills
2026-04-07 08:08:01 -04:00
old4ever
3fec791f28
Merge branch 'betterauth-migration'
2026-04-06 23:38:56 -04:00
old4ever
5922a835cb
style: fix unused variable warnings
...
Prefix unused error variables with underscore to indicate
intentionally unused catch parameters.
2026-04-06 23:27:32 -04:00
old4ever
bd861e56c0
chore: remove stale FIXME.md
...
Remove outdated FIXME file about minimatch types from 2025.
2026-04-06 23:26:26 -04:00
old4ever
403f41f078
fix(auth): sanitize error messages in error page
...
Add basic XSS sanitization by removing angle brackets from error
URL parameters before rendering.
2026-04-06 23:26:09 -04:00
old4ever
4e7c56eec9
fix(ui): add error handling and loading state to sign-in
...
Add try/catch with toast notification and loading state for sign-in
button to improve UX and error visibility.
2026-04-06 23:25:40 -04:00
old4ever
8d9329050d
fix(ui): add error handling to sign-out
...
Add try/catch with toast notification for sign-out failures.
2026-04-06 23:24:40 -04:00
old4ever
e1fd7dc5a3
feat(api): add input validation to AI endpoints
...
Add prompt validation to ai-event (non-empty string, max 2000 chars)
and events array length validation to ai-summary (max 100 items)
to prevent abuse and injection attacks.
2026-04-06 23:24:15 -04:00
old4ever
a4656520f8
fix(db): ensure pgcrypto extension for UUID generation
...
Add CREATE EXTENSION IF NOT EXISTS pgcrypto to migration for
compatibility with older PostgreSQL versions.
2026-04-06 23:23:26 -04:00
old4ever
3b5934dbfd
fix(auth): correct session check in sign-out page
...
Change !session to !session?.user to properly detect unauthenticated
state. useSession() returns an object, not null.
2026-04-06 23:23:08 -04:00
old4ever
cfa93da149
refactor(auth): remove unused SessionProvider wrapper
...
Remove the passthrough AuthSessionProvider component and its usage
in layout. better-auth hooks work without a provider wrapper.
2026-04-06 23:22:33 -04:00
old4ever
c6017b2f78
fix(db): wrap migration in transaction
...
Add BEGIN/COMMIT transaction wrapper to migration to ensure
atomicity and prevent partial migration failures.
2026-04-06 23:21:42 -04:00
old4ever
bcd488e2d3
fix(auth): use correct sign-in method for genericOAuth
...
Add genericOAuthClient plugin to auth client and change sign-in
call from signIn.social() to signIn.oauth2() with correct
providerId parameter.
2026-04-06 23:20:39 -04:00
old4ever
c3026c8262
feat(api): add auth check to ai-summary endpoint
...
Require authentication for ai-summary endpoint to prevent
unauthorized API key usage and cost leakage.
2026-04-06 23:18:46 -04:00
old4ever
4c6f880a3f
feat(auth): configure trustedOrigins for CSRF protection
...
Add trustedOrigins to better-auth config to ensure proper origin
validation behind reverse proxy.
2026-04-06 23:18:20 -04:00
old4ever
ece03a9124
feat(auth): validate required env vars at startup
...
Add explicit validation for BETTER_AUTH_SECRET, BETTER_AUTH_URL, and
Authentik config variables. Set secret explicitly in better-auth config
to prevent silent session loss on restart.
2026-04-06 23:17:51 -04:00
old4ever
2a808f8ca1
fix(db): preserve OAuth user verified status during migration
...
Update emailVerified type conversion to set OAuth users (those with
account records) as verified before converting timestamp to boolean.
2026-04-06 23:16:58 -04:00
old4ever
afb27eb66d
fix(db): remove authenticator references from relations
...
Remove dropped authenticator table references from drizzle relations
to prevent drizzle-kit from attempting to recreate the table.
2026-04-06 23:16:34 -04:00
old4ever
15be2399c6
refactor: migrate session usage to better-auth API
2026-04-06 22:41:57 -04:00
old4ever
d7d52ef1a8
refactor: migrate auth pages to better-auth client
2026-04-06 22:41:37 -04:00
old4ever
490c601dc1
refactor: remove next-auth SessionProvider wrapper
2026-04-06 22:41:25 -04:00
old4ever
08a894577b
refactor: replace next-auth with better-auth core and client
2026-04-06 22:41:11 -04:00
old4ever
febc57b240
refactor: update DB schema for better-auth conventions
2026-04-06 22:41:00 -04:00
old4ever
3ab77cc21f
refactor: update env vars for better-auth
2026-04-06 22:40:41 -04:00
old4ever
8a500f07de
refactor: replace next-auth with better-auth dependency
2026-04-06 22:40:27 -04:00
old4ever
d8875e587e
feat: add PostgreSQL dev container compose file
2026-04-06 22:40:15 -04:00
old4ever
47251dad3f
chore: add debug.log to .gitignore
2026-04-06 22:40:01 -04:00
old4ever
35a7f0a7c2
ai skills
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2026-04-06 20:48:30 -04:00
old4ever
f70a416fea
devenv update
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2026-04-06 20:48:24 -04:00
old4ever
206f028fdf
init ruler
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2026-04-06 20:48:07 -04:00
old4ever
4db02f47bf
Merge branch 'main' of git.cloud.dmytros.dev:old4ever/local-cal
2026-04-06 20:40:10 -04:00
old4ever
10ad239259
build: update bun lockfile version
2025-12-12 09:31:20 -05:00
old4ever
755076351b
security: bump nextjs version
2025-12-12 09:31:03 -05:00
old4ever
28c982ee37
fix: docker build
2025-12-12 09:27:02 -05:00
old4ever
d7dc911db4
Update next to fix react2shell CVE
...
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev >
2025-12-06 09:34:25 -05:00
old4ever
f20f3d66a1
Simplify dropdown menu labels in event card
...
Remove redundant "event" text from Edit and Delete menu items for cleaner UI
2025-08-22 13:38:57 -04:00
old4ever
824768ce93
Add RRuleDisplay component and clean up unused imports
...
- Create new RRuleDisplay component for better recurrence rule formatting
- Replace Badge with RRuleDisplay in EventCard for improved UX
- Remove unused imports across multiple files (CalendarEvent, Badge, Card components)
- Remove unused catch parameter in ai-event route
2025-08-22 13:35:13 -04:00
old4ever
eb73f9f929
Refactor event management into reusable components
...
- Extract EventCard, EventsList, and event dialog into separate components
- Add new AI toolbar and drag-drop container components
- Simplify main page.tsx by removing inline component definitions
- Improve code organization and maintainability
2025-08-22 12:33:07 -04:00
old4ever
6ab2946e8a
refactor events list as shadcn cards
2025-08-20 14:12:32 -04:00
old4ever
cde44ee2d7
fix grammar
2025-08-20 14:11:53 -04:00
old4ever
655517a27c
animate button clicks for UX
2025-08-20 14:07:22 -04:00
old4ever
9a836fc866
refactor ai event creation into a promise toast
2025-08-20 13:14:29 -04:00