100 Commits
Author SHA1 Message Date
9b182ce834 fix: handle null rowCount in deleteStaleUnverifiedDomainsByCutoff (#452)
Drizzle's delete result types rowCount as number | null, but the
function returns Promise<number>. Default null to 0.

https://claude.ai/code/session_01SZj5CYMSH9LESfUaPazv8s

Co-authored-by: Claude <noreply@anthropic.com>
2026-05-18 09:45:46 -04:00
jakeandGitHub dded81d431 fix: optimize stale domain cleanup N+1 delete pattern (#449) 2026-05-18 08:54:22 -04:00
jakeandGitHub 3c51306622 Delete benchmark.mjs 2026-05-18 08:38:48 -04:00
jakeandGitHub dd09027b1d fix: optimize string allocations in sync-blocklist cron parsing (#450)
Replaced `text.split("\n")` and heavy string operations (`trim`, `startsWith`, `includes`, etc) with an optimized, index-based string scanner using `indexOf("\n")` and `charCodeAt`.
This drastically reduces memory allocation and string garbage collection for large blocklist files.

Benchmark results:
- Original implementation: ~3650ms per 100 runs
- Optimized implementation: ~2360ms per 100 runs
- Measured Improvement: ~35% faster execution time.
2026-05-18 08:37:22 -04:00
jakeandGitHub 5e68e5fb1a fix: optimize DNS record deletion filtering logic (#451)
Replaced the two-pass `.filter().map()` iteration for calculating obsolete DNS records with a single-pass `.reduce()`. This optimization avoids unnecessary intermediate array allocations, reducing runtime overhead for parsing large sets of existing DNS records.
2026-05-18 08:36:53 -04:00
6d2dcb35fd chore(deps): bump Next.js and React security releases (#446)
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-05-08 15:31:24 -04:00
jake deace77d5b chore: bump more deps 2026-04-26 20:46:50 -04:00
jakeandGitHub e908cf148e fix(safe-fetch): use system DNS resolver for SSRF validation to prevent DoH mismatch (#440)
* fix: align safe-fetch SSRF DNS validation with system resolver

* fix: add DNS lookup timeout to safe-fetch and fix mock types
2026-04-26 20:24:56 -04:00
jake 4c0d3092bc chore: remove Claude Code and Claude Code Review GitHub Actions workflows 2026-04-26 20:21:56 -04:00
jakeandGitHub 3538a43a7f chore: bump next to 16.2 (#433)
* chore: update dependencies and fix vitest config for Node test parallelism

Bump Node to 24.14.1, TypeScript to 6.0.2, turbo 2.9.6, biome 2.4.12, better-auth to 1.6.3, React to 19.2.5, Next.js to 16.2.3, @trpc/* to 11.16.0, @tanstack/react-query to 5.99.0, and various other minor/patch bumps across the monorepo.
Add a next/image mock for Vitest and replace vite-tsconfig-paths with Vite's built-in tsconfigPaths option.
Set fileParallelism: false on the Node test pool to prevent MSW resetHandlers() races between test files.
Fix infiniteQueryOptions call signature in use-notifications-data to pass options as the second argument.
Fix optional chaining on map.getLayer() to guard against a null map reference.

* chore: migrate from biome to oxlint+oxfmt
2026-04-26 18:23:41 -04:00
jake 7c6ad2723d chore: remove renovate configuration and add dependabot configuration 2026-03-02 12:05:41 -05:00
jake 2292235d19 fix: regenerate better-auth schema with sessions and verifications tables enabled 2026-03-01 14:50:33 -05:00
jakeandClaude Opus 4.6 10255df646 feat: add better-auth infra plugin
Update dependencies across the monorepo including better-auth 1.5.0,
@trpc/* 11.11.0, ai SDK, turbo 2.8.12, and various minor/patch bumps.
Add @better-auth/infra for dash() and sentinelClient() plugins.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 13:57:14 -05:00
jakeandGitHub 8a57a90078 chore: add Vercel OSS Program badge to README 2026-02-27 13:17:23 -05:00
jakeandGitHub 8ba2a99bde Update README.md 2026-02-21 11:20:12 -05:00
jake 17eadb8072 fix: remove 'system' role from chat request schema 2026-02-21 10:05:12 -05:00
jake acb2b70de9 refactor: update titles and add annotations for MCP tool definitions 2026-02-21 09:47:16 -05:00
jakeandClaude Opus 4.6 c2486fd828 fix: mock both DoH providers in headers fetch test to prevent flaky timeout
The test only mocked Cloudflare DNS, but resolveHostIps picks provider
order by domain hash. When Google was tried first it returned empty
records, triggering a retry + fallback that added enough latency to
intermittently exceed the 5s test timeout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 11:14:44 -05:00
jakeandClaude Opus 4.6 95490ce5ef fix: add nativeButton={false} to ToolsDropdown trigger
The DropdownMenuTrigger renders a TooltipTrigger wrapping a div, not a
   native <button>, so Base UI's nativeButton check needs to be disabled.

   Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 11:13:27 -05:00
jakeandClaude Opus 4.6 a655ffab3b fix: resolve React Compiler and react-doctor diagnostics
Move render-phase ref writes into useEffect, replace derived state
useEffect with useMemo, extract JSX from try/catch, fix memoization
dependencies, add passive event listeners, and add missing href.

Raises react-doctor score from 73 to 77 (54 → 45 errors).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 16:00:47 -05:00
jake 879240f2e9 refactor: update Drawer component to use base-ui 2026-02-17 15:09:12 -05:00
jake 89836aa54d fix: use a single TooltipProvider for the whole app 2026-02-17 14:04:33 -05:00
jake fb28016ce0 chore: bump deps 2026-02-17 13:50:35 -05:00
jakeandClaude Opus 4.6 69dceaab33 perf(chat): lazy-load AI chat bundle via next/dynamic
ChatClient and its ~1MB+ of dependencies (AI SDK, motion, etc.) were
shipped to every visitor. Insert a lightweight gate component that only
loads the chat chunk when AI features are enabled.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:02:04 -05:00
jake 7611758386 fix: remove excessive workflow maxRetries 2026-02-02 19:05:44 -05:00
jakeandClaude Opus 4.5 74f7ca59a8 fix(chat): prevent gradient blur from bleeding outside FAB circle
Add rounded-[inherit] to the mesh gradient background so it clips
to the parent's border-radius before the blur filter expands it.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 13:16:30 -05:00
jake 4baa720aa2 chore: bump deps 2026-01-31 21:55:20 -05:00
jakeandClaude Opus 4.5 e5911d5f0f refactor: consolidate duplicate code into shared packages
- Add structured logging to @domainstack/safe-fetch via @domainstack/logger
- Make @domainstack/blob file-type agnostic (remove image-specific logic)
- Move storeImage() from blob to @domainstack/image package
- Remove duplicate files from web app (puppeteer, storage, blob, image)
- Remove unused dependencies from web app package.json
- Update all consumers to use consolidated package imports

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 15:03:20 -05:00
jakeandClaude Opus 4.5 d6adc6b7fc fix(ratelimit): catch Redis errors to prevent route handler 500s
If limiter.limit() throws (e.g., Redis connection error), the exception
bubbled up through checkRateLimit without being caught. Since checkRateLimit
was called outside the route handler's try/catch block, this caused the
handler to return undefined instead of a Response, triggering:

"No response is returned from route handler"

The fix wraps the Redis call in a try/catch that fails open, consistent
with the existing fail-open strategy for missing identifiers or Redis.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 14:06:24 -05:00
edeeca04ec refactor: extract shared packages and convert db repos to direct functions (#380)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 13:53:04 -05:00
jake b6df2e57b2 fix(a11y): add cursor-not-allowed to disabled button wrappers
Apply disabled cursor styling to wrapper divs since they intercept
pointer events. Refactor linked-account-row to only use tooltip
wrapper when button is actually disabled.
2026-01-30 17:05:07 -05:00
jake 7d086115ed chore: update dependencies and add clean script
- Added a new "clean" script to package.json for removing build artifacts.
- Updated devDependencies to include "shx" for shell command execution.
- Bumped versions of several packages including pg, @posthog/ai, and @posthog/nextjs-config.
- Adjusted pnpm-lock.yaml and pnpm-workspace.yaml to reflect updated package versions.
2026-01-30 16:43:14 -05:00
jake c86866bd05 refactor: remove bookmarklet components and related pages
- Deleted the BookmarkletsPage and InterceptedBookmarkletsPage components.
- Removed the BookmarkletContent component, which handled the rendering of bookmarklet functionality.
- Updated the AppFooter to integrate bookmarklet functionality directly within a dropdown menu, enhancing accessibility and user experience.
2026-01-30 14:14:57 -05:00
jake c741215dd0 fix(a11y): add focusableWhenDisabled to disabled buttons with tooltips
Allows disabled buttons to remain focusable for keyboard navigation
and tooltip display, replacing the previous div wrapper workaround.
2026-01-29 20:58:32 -05:00
jake 1127afe0c1 fix(chat): update chat-fab and chat-mode-selector components
- Adjusted className in ChatFab for improved styling.
- Replaced IconBrandChrome with IconDeviceLaptop in ChatModeSelector for better representation of local mode.
- Updated icon usage in local mode selection to enhance UI consistency.
2026-01-29 16:38:00 -05:00
jakeGitHubcubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
e82d6d6e2b feat(chat): add on-device browser model support (#375)
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-01-29 16:01:58 -05:00
jake 071731cbd1 fix: enhance system prompt with markdown instructions 2026-01-29 02:51:28 -05:00
jakeandClaude Opus 4.5 3d5ed4245a refactor: extract linked accounts logic to useLinkedAccounts hook
Move query and mutation logic from AccountPanel to a dedicated hook:
- Query for linked accounts with loading/error states
- Unlink mutation with optimistic updates and rollback
- Link provider function with error handling
- Derived state (linkedProviderIds, canUnlink)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 23:26:06 -05:00
jakeandClaude Opus 4.5 74bd5b4d37 refactor(settings): extract useNotificationPreferences hook
Move queries and 2 mutations from NotificationsPanel into dedicated
hook. Hook handles global preference updates and domain muting with
optimistic updates. Component now focuses on UI rendering.

Reduced component from 252 to ~110 lines.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 23:17:29 -05:00
jakeandClaude Opus 4.5 bc0eab0a44 refactor(calendar): extract useCalendarFeed hook
Move query and 4 mutations (enable, disable, rotate, delete) from
CalendarInstructions into dedicated hook. Hook handles all cache
manipulation and optimistic updates. Component now focuses on UI.

Reduced component from 446 to ~350 lines.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 23:09:48 -05:00
jakeandClaude Opus 4.5 623467901c refactor(dashboard): pass hook results directly to provider
Update DashboardProvider to accept filterHook and paginationHook
results directly instead of destructuring and reconstructing.
Reduces boilerplate in dashboard-client.tsx.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 22:56:11 -05:00
jakeandClaude Opus 4.5 aba45a415e refactor(notifications): extract useNotificationsData hook
Move all query and mutation logic from NotificationsPopover into a
dedicated hook. Improves separation of concerns - popover handles
UI state, hook handles data fetching with optimistic updates.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 22:50:40 -05:00
jakeandClaude Opus 4.5 2ecff2b845 refactor(dashboard): simplify grid card props to accept domain object
Accept TrackedDomainWithDetails directly instead of 12 individual props.
Reduces prop drilling and simplifies parent component.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 22:47:01 -05:00
jakeandClaude Opus 4.5 2672c81cae refactor: simplify chat state management
- Move chat open state to Jotai atom for programmatic control
- Remove redundant submitError state (useChat already provides error)
- Remove clearError callback and onClearError prop
- Simplify sendMessage to silently reject empty input

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 22:36:05 -05:00
jakeandClaude Opus 4.5 d5234da41f refactor: migrate dashboard selection state to Jotai atoms
Move selection state from React Context to Jotai for cleaner architecture:
- Add dashboard-atoms.ts with selection atoms and derived state
- Add use-dashboard-selection.ts hook using the atoms
- Slim down DashboardContext from 363 to 210 lines
- Remove selection state/actions from context (now in Jotai)
- Update 7 consumer components to use new selection hook

Selection is now global via Jotai - no provider boundary needed.
Context retains only: actions, filters, pagination (forwarded from hooks).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 22:29:46 -05:00
jakeandClaude Opus 4.5 8c4c7904c0 refactor: extract dashboard hooks and remove snapshot system
Extract composition pattern hooks from large client components:
- use-dashboard-filters: URL-synced filter state via nuqs
- use-dashboard-pagination: URL/localStorage-synced pagination
- use-dashboard-mutations: TanStack Query mutations with optimistic updates
- use-chat-persistence: Chat message persistence to Zustand store
- use-section-tracking: Scroll-based active section detection

Remove redundant snapshot system (dashboard-store.ts):
- Browser history via router.back() already preserves filter state
- Snapshot was capturing already-cleared state due to nuqs timing
- Reduces ~200 lines of unnecessary abstraction

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 21:31:19 -05:00
jake b968a2f714 fix: prevent duplicate screenshot workflows on re-hover
Lift useScreenshot hook to ScreenshotPopover so polling continues when the popover closes. Previously, the query lived inside PopoverContent which unmounts on close, causing re-hover to start a second workflow run.
2026-01-28 18:26:16 -05:00
jake 235cd42a33 fix: false positive chatbot errors from API 2026-01-28 17:42:55 -05:00
jake c3f7d92524 refactor: move more domain utilities into core package
- Added new client-safe domain utilities, including `normalizeDomainInput` and `isValidDomain`, to the `@domainstack/core` package for improved domain handling in client-side applications.
- Updated various components and hooks to utilize the new domain utilities, enhancing code consistency and maintainability.
- Removed deprecated domain utility imports from the codebase to streamline functionality and reduce redundancy.
- Introduced tests for the new domain utilities to ensure robust behavior and accuracy in domain processing.
2026-01-28 16:49:26 -05:00
jake d0f5818cad fix: handle embedded bmp images in ico files 2026-01-28 15:34:18 -05:00
jake 0e7279998f chore: run @next/codemod agents-md
https://vercel.com/blog/agents-md-outperforms-skills-in-our-agent-evals
2026-01-28 14:41:03 -05:00
jake 7334040eef fix: prevent false network error messages in chat UI
The error classification was too broad - any error containing 'fetch'
was shown as a network error. This caused server errors from the
WorkflowChatTransport (e.g., 'Failed to fetch chat: 500') to be
incorrectly displayed as connection problems.

Now only actual browser-level network failures trigger the connection
error message (TypeError with 'failed to fetch', ECONNREFUSED, etc.).
2026-01-28 13:01:03 -05:00
jake e01208b5d6 chore: restructure database and repository management
- Introduced new repository files for various entities including blocked domains, calendar feeds, certificates, and more to enhance modularity and maintainability.
- Removed deprecated files related to verification and blocked domains to streamline the codebase.
- Updated database schema with new indices and constraints to improve query performance and data integrity.
- Added new utility functions and types for better type safety and clarity in repository interactions.
- Enhanced testing coverage for new repository functionalities to ensure robust behavior across the application.
2026-01-27 23:04:01 -05:00
jake 17e7f6b26e feat: enhance DNS and provider functionality with new tests
- Added comprehensive tests for DNS query functions, including `queryDohProvider` and `filterAnswersByType`, ensuring robust handling of various response scenarios.
- Introduced a new test suite for provider catalog parsing, validating input and error handling for provider configurations.
- Implemented tests for rule evaluation logic, covering various header and MX-related rules to ensure accurate detection.
- Created tests for TLS certificate fetching, verifying correct handling of certificate chains and error scenarios.
- Added WHOIS lookup tests to validate error handling and response parsing for domain queries.
2026-01-27 20:20:33 -05:00
jake c445e45ced chore: update deps
- Removed deprecated dependencies from package.json, specifically `@sparticuz/chromium` and `puppeteer-core`.
- Updated various package versions across the project, including `next`, `@ai-sdk/gateway`, `@ai-sdk/react`, and others to their latest compatible versions.
- Introduced a catalog for shared dependencies in pnpm workspace configuration to streamline version management.
- Adjusted peer dependencies for `zod` in the core package to ensure compatibility.
- Enhanced overall dependency management for improved maintainability and consistency across the codebase.
2026-01-27 19:56:23 -05:00
jake 8bf00a25c7 feat: introduce @domainstack/core package for shared domain utilities
- Added a new `@domainstack/core` package to centralize domain-related functionalities, including provider detection, DNS-over-HTTPS queries, TLS certificate fetching, and WHOIS/RDAP lookups.
- Updated existing modules to utilize the new core package, enhancing maintainability and consistency across the codebase.
- Removed deprecated utilities and streamlined imports to improve code clarity and organization.
- Enhanced tests for the new package to ensure robust functionality and error handling.
2026-01-27 19:34:06 -05:00
jake d3fed4feb5 refactor: streamline user-agent handling and remove deprecated constants
- Removed the hardcoded USER_AGENT from various modules, replacing it with process.env.EXTERNAL_USER_AGENT for consistency.
- Deleted the unused constants file and cleaned up related imports across the codebase.
- Updated the safe-fetch package to support optional user-agent handling and improved logging capabilities.
- Enhanced tests for safe-fetch to ensure robust functionality and error handling.
2026-01-27 15:04:59 -05:00
jake 68c7818f85 fix: update skeleton components for improved layout and styling
- Adjusted the width of the suffix skeleton in `KeyValueSkeleton` for better alignment.
- Enhanced the `CopyButton` in `KeyValue` with additional margin and text styling for improved visibility.
- Renamed the icon variable in `ReportSectionSkeleton` for clarity and updated the class names for better responsiveness.
- Modified the `RegistrationSectionSkeleton` to use a smaller width for the "Created" and "Expires" labels, improving overall layout consistency.
2026-01-27 14:25:42 -05:00
jake 906d5893ab feat: introduce safe-fetch package for enhanced fetching capabilities
- Added a new `@domainstack/safe-fetch` package to provide a secure and efficient way to fetch resources with SSRF protection.
- Implemented features to validate DNS resolution, handle redirects, and enforce size limits on responses.
- Integrated the new safe-fetch functionality into existing components and workflows, replacing previous fetch implementations.
- Updated various modules to utilize the new safe-fetch methods, ensuring consistent user-agent handling and improved error management.
- Removed deprecated fetch utilities to streamline the codebase.
2026-01-27 14:10:01 -05:00
jake 4e39b9e488 refactor: introduce constants and types packages
- Created a new `constants` package to centralize shared constants across the application.
- Added constants for domain management, email configurations, and HTTP headers.
- Updated existing components and workflows to utilize the new constants for improved maintainability and consistency.
- Removed deprecated constants from previous locations to streamline the codebase.
2026-01-27 12:29:11 -05:00
jake b18fe5eb09 fix: preferences store hydration logic
- Updated the `usePreferencesHydrated` hook to set the initial hydration state to false and check hydration status immediately after the effect runs.
- Improved the cleanup function for the hydration subscription to ensure proper unsubscription.
- Added documentation reference for checking store hydration status.
2026-01-27 12:00:17 -05:00
jake 63bafe607d refactor: update chat components and replace ChatTrigger with ChatServer
- Replaced `ChatTrigger` with `ChatServer` in the layout for improved chat functionality.
- Introduced a new `ChatFab` component for initiating chat interactions with animated effects.
- Refactored `ChatClient` to manage chat state and suggestions more effectively.
- Updated `ChatPanel` to enhance user experience with better message handling and loading indicators.
- Adjusted styles and animations for improved usability across devices.
2026-01-27 11:41:46 -05:00
jake 4b112210f8 refactor: extract typescript-config and ui packages
- Introduced TypeScript configuration files for various project setups including base, Next.js, and React library.
- Added a new UI component library with foundational components such as Button, Modal, and Accordion.
- Updated existing components to utilize the new UI library for consistency and improved styling.
- Enhanced utility functions and hooks for better integration with the new component architecture.
2026-01-27 10:58:21 -05:00
jake 2f01d9598c refactor: implement dashboard context for state management
- Introduced a new `DashboardContext` to manage selection and domain actions across dashboard components.
- Replaced individual prop drilling for selection and actions with context hooks for cleaner component structure.
- Updated `ArchivedDomainsList`, `DashboardClient`, `DashboardContent`, `DashboardGrid`, and `DashboardTable` to utilize the new context.
- Removed the deprecated `useDashboardSelection` hook in favor of context-based selection management.
- Enhanced bulk action handling and selection state persistence across component updates.
2026-01-27 03:08:25 -05:00
jake 4daf240c42 feat: integrate Jotai for state management in search and chat components
- Added Jotai for managing UI state in chat and search components, replacing Zustand stores.
- Updated `ChatTriggerClient` to use local state for UI interactions.
- Refactored search components to utilize Jotai atoms for managing search focus and pending domain state.
- Removed unused Zustand stores for header and home search, streamlining state management.
2026-01-27 00:14:30 -05:00
jake 879364a34f refactor: update chat component to use Sheet instead of Popover
- Replaced Popover with Sheet for chat UI on non-mobile devices to enhance layout and usability.
- Added vibration feedback on chat button click.
- Streamlined chat header actions and improved accessibility with updated icons.
- Adjusted styles and animations for better user experience.
2026-01-26 22:39:27 -05:00
jakeandGitHub 2a1386bcf7 feat: integrate Zustand for state management (#365) 2026-01-26 21:22:18 -05:00
jake 97c4471321 chore(deps): it never ends... 2026-01-26 20:56:43 -05:00
jake f3806b5ab0 feat: enhance geoip lookup handling and caching
- Added LRU cache for Cloudflare IP check results to optimize repeated checks across requests.
- Refactored IP fetching logic to improve error handling and response parsing.
- Introduced Redis caching for GeoIP lookups to reduce external API calls and improve performance.
- Updated domain normalization to utilize LRU caching for repeated lookups.
2026-01-26 18:50:28 -05:00
jake 730cc92ac5 refactor: optimize hooks and UI interactions
- Updated `RawDataDialog` to use a functional state update for toggling line wrapping.
- Refactored `useBulkOperations` to utilize built-in mutation states instead of manual loading states.
- Simplified `useDashboardPagination` by removing unnecessary memoization.
- Streamlined `useDashboardSelection` by eliminating redundant memoization for selected IDs.
- Enhanced `useScrollDirection` and `useTruncation` to use `startTransition` for smoother state updates during scroll and truncation calculations.
2026-01-26 17:51:11 -05:00
jake 60562a9524 refactor: improve subscription UI with shared components
- Introduced `PlanStatusCard` and `UpgradeCard` components to improve the display of subscription details and upgrade options.
- Updated `AddDomainContent` and `SubscriptionPanel` components to utilize the new cards for better user experience.
- Refactored existing code to remove redundant elements and streamline the layout.
2026-01-26 16:51:54 -05:00
jake 05a37be8b8 fix: one more haptic attempt before giving up 2026-01-26 15:29:53 -05:00
jake 3f5f37ff9b fix: biome performance 2026-01-26 11:22:17 -05:00
jake 06d782d3ea fix: revert drawer from vaul-base to vaul 2026-01-26 10:24:54 -05:00
jake 02f620a80c refactor: update icons in calendar instructions, dashboard, and domain registration components
- Replaced `IconPasswordFingerprint` with `IconShieldLock` in the CalendarInstructions component for improved security representation.
- Swapped `IconSortDescending` and `IconSortAscending` in the GridSortDropdown component to correct sort direction icons.
- Changed `IconMeteor` to `IconHandLoveYou` in the AddDomainContent component for better visual alignment with the plan description.
- Updated `IconSourceCode` to `IconZoomCode` in the RawDataDialog component to enhance clarity in the raw data view button.
2026-01-26 02:46:08 -05:00
jakeandGitHub 0517b91533 refactor: tabler icons (#364) 2026-01-26 02:03:50 -05:00
jake 7270038bba feat: add haptic feedback across chat components
- Introduced a new `VibrationProvider` to manage vibration functionality based on user interactions.
- Implemented vibration feedback in `PromptInputTextarea`, `Suggestion`, `ChatClient`, and `ChatTriggerClient` components to enhance user experience.
- Updated `Providers` to include the `VibrationProvider` for global access to vibration features.
2026-01-25 22:36:15 -05:00
jake b54ea2757a refactor: update layout handling and remove unused hook
- Introduced a new `DomainLayout` component to manage layout-specific CSS variables.
- Removed the `useLayoutVariables` hook as its functionality is now integrated directly into the layout components.
- Updated various components to utilize CSS variables for header and section navigation heights, ensuring consistent styling across the application.
- Cleaned up related styles and adjusted scroll margin calculations for improved layout behavior.
2026-01-25 20:42:06 -05:00
jake 5223974f72 chore: bring primitives up to date with shadcn improvements 2026-01-25 17:42:40 -05:00
jake 8035408b1d refactor: streamline cron job workflows
- Replaced batch processing with Promise.allSettled for improved efficiency in checking certificate, domain, and subscription expiries.
- Simplified logging to focus on the number of started workflows rather than detailed success/failure counts.
- Consolidated notification preference checks and expiry notification logic into shared workflow steps for better maintainability.
- Removed deprecated section revalidation workflow to reduce complexity and improve clarity in the codebase.
2026-01-24 23:43:01 -05:00
jake 2ae703c95f chore: bump deps 2026-01-24 22:04:05 -05:00
jake 7db3b518b2 refactor: enhance UI consistency and simplify component structure
- Removed unnecessary icons and adjusted text sizes in various components for a cleaner look.
- Streamlined modal and dialog components by reducing padding and margin inconsistencies.
- Improved layout of the Calendar Feed popover and Bookmarklet page for better user experience.
- Updated AlertDialog components to simplify structure and enhance readability.
2026-01-24 21:21:33 -05:00
jake a507a64b5d refactor: simplify settings UI and improve layout consistency
- Removed GearIcon from settings modal and tabs for a cleaner look.
- Adjusted padding and margin in various components for better spacing.
- Updated notification empty state and settings card styles for improved visual consistency.
- Enhanced modal styles to ensure proper background and border settings.
- Refactored notification matrix and settings content for better alignment and readability.
2026-01-24 19:19:43 -05:00
jake 954294390d feat: implement domain mute functionality
- Added mute/unmute capability for tracked domains, allowing users to manage notification preferences more effectively.
- Introduced `DomainMuteList` component for displaying and managing muted domains.
- Updated relevant components and hooks to support the new mute functionality, including optimistic updates for UI responsiveness.
- Removed the deprecated `DomainOverrides` component to streamline notification settings management.
- Adjusted database schema to include a `muted` field for tracked domains, replacing the previous notification overrides structure.
2026-01-24 18:40:22 -05:00
jake d78634b2ce fix: nitpicky ui consistency and a11y improvements 2026-01-24 17:40:36 -05:00
jake 968861c318 fix(chat): update scroll area height to ensure proper display
- Changed the height class for the Conversation component from `h-full` to `min-h-full` to improve layout consistency and prevent overflow issues in the chat interface.
2026-01-23 14:40:55 -05:00
jake 5b7f9f0641 chore: bump deps 2026-01-23 13:09:59 -05:00
jake ac192829ac ci: ignore bot PRs (renovate) for claude code actions 2026-01-23 12:53:04 -05:00
jake 602b354660 feat(swr): add max staleness to prevent returning very old data
Add maxAgeMs option to withSwrCache that refuses to return stale data
older than the threshold, instead waiting for fresh data like a cache
miss.

- Add MAX_AGE_* constants to ttl.ts (2-4x staleness TTL)
- Add fetchedAt to CacheResult for age calculation
- Update all 8 cache getters to return fetchedAt
- Apply maxAgeMs to domain router (except favicons which are cosmetic)

This ensures users don't see extremely outdated domain information
while still benefiting from SWR for moderately stale data.
2026-01-23 12:05:00 -05:00
jake 9cb1a70572 refactor(workflow): remove deduplication module and streamline workflow handling
- Deleted the deduplication module and its associated tests to simplify workflow management.
- Updated various components to directly start workflows without deduplication, enhancing clarity and reducing complexity.
- Adjusted background revalidation logic to fire-and-forget without relying on deduplication keys.
- Cleaned up imports and ensured consistent error handling across workflow triggers.
2026-01-22 14:20:53 -05:00
jake 42922c2186 chore(deps): update package versions and refactor icon usage
- Bumped versions of several dependencies including `@ai-sdk/gateway`, `@ai-sdk/react`, and `@opentelemetry/instrumentation-pino`.
- Refactored icon imports across components, replacing `IconBadge` with a new `Icon` component for improved consistency.
- Updated various components to utilize the new icon structure and adjusted styles for better visual alignment.
- Cleaned up unused imports and ensured proper icon usage throughout the application.
2026-01-22 13:12:30 -05:00
jake d1c33e943d fix: implement visual viewport hook for ios keyboard
- Introduced DrawerHandle component for improved drawer functionality.
- Updated DrawerContent to utilize DrawerHandle for better structure.
- Added useVisualViewport hook to track visual viewport size and keyboard presence, enhancing user experience on mobile devices.
2026-01-22 00:53:36 -05:00
jake 09c4338033 feat(chat): enhance AutoExpandTool with onExpand callback
- Added an optional onExpand prop to AutoExpandTool for triggering actions when the tool auto-expands.
- Updated useEffect to call onExpand when the stream is complete.
- Adjusted ChatClient to pass handleScrollToBottom as the onExpand handler.
- Improved ShimmeringText component styling for better visual consistency.
2026-01-21 22:49:05 -05:00
jake e4837d203a refactor(calendar): migrate from ical-generator to ts-ics for calendar feed generation
- Removed the ical-generator dependency and replaced it with ts-ics.
- Updated the calendar generation logic to utilize the new library's API.
- Enhanced event creation with improved structure and properties for better compatibility.
2026-01-21 21:06:51 -05:00
jake ad8025db46 chore(deps): bump base-ui to 1.1.0 2026-01-21 20:38:43 -05:00
jake 73fb6955d2 feat: enhance chat functionality with new suggestions and UI components
- Updated ChatClient to accept pre-generated suggestions from the server.
- Introduced ChatTriggerClient to manage chat interactions and settings.
- Refactored ChatTrigger to generate randomized suggestions based on Edge Config domains.
- Improved icon usage in ChatClient for better visual consistency.
- Adjusted AI preferences handling to ensure proper state management.
2026-01-21 19:02:26 -05:00
8e4505af9c feat(chat): add personality to Stacky's system prompt (#351)
Co-authored-by: Claude <noreply@anthropic.com>
2026-01-21 18:45:45 -05:00
jake a90f3f55d5 chore: bump deps 2026-01-21 18:42:37 -05:00
jakeandGitHub 329376d044 feat: integrate basic AI chat functionality for MCP server demo (#345) 2026-01-20 22:49:19 -05:00
jake d7c35c2109 refactor: update icon imports and replace unused icons in MCP page
- Removed the `@lobehub/icons` dependency and replaced its icons with those from `@icons-pack/react-simple-icons`.
- Updated the MCP page to use SVG icons directly for better performance and consistency.
- Cleaned up unused icon components to streamline the codebase.
2026-01-19 14:46:51 -05:00