* Fix case-sensitive table names and cross-database identifier quoting
Use proper identifier quoting helpers (quoteIdentifier, buildFullyQualifiedTableRef)
everywhere SQL is constructed, instead of raw string interpolation. Fixes failures
with mixed-case table names on PostgreSQL (e.g. "Organization") and wrong quote
characters for MySQL/MSSQL.
* UI design improvements and unify color palette to blue across monorepo
- Migrate accent color from cyan (#22d3ee) to blue (#6b8cf5) across
web, docs, video, and email templates for brand consistency
- Improve light mode: stronger borders, darker muted text, distinct
chart colors (were all identical gray)
- Simplify empty states: remove icon circle, lead with keyboard
shortcut on CTA button
- Reduce sidebar density: group related sections, hide empty sections
when no connection is active, fewer separators
- Add toolbar hierarchy: vertical dividers between query actions and
utility actions, Focus button is now icon-only
- Update .impeccable.md and CLAUDE.md to reflect blue as canonical
accent color
* Fix health monitor ambiguous column errors and table sizes performance
- Qualify all column references in cache hit ratios query with table aliases
- Rewrite table sizes query to use OID-based size functions instead of
repeated string-based lookups, add LIMIT 50
- Cap table sizes card height at 500px with sticky header for scrollability
* Fix MSSQL LIMIT syntax in resolveFK, collapse duplicate LIKE branches
---------
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
* feat(web): overdrive marketing site with tabbed features, live terminal hero, and micro-interactions
- Add interactive terminal hero that types SQL queries and renders results
- Replace flat features grid with tabbed categories layout (AI, Performance, Editor, Data Tools, Security)
- Add feature card micro-interactions (flash, orbit, wiggle, scramble, color-cycle, key-press)
- Add parallax data substrate background for features section
- Extract shared feature data with tier system (hero/strong/solid)
- Include bento and manifest variants for future comparison
* fix: address PR review — consolidate animation shorthand, scope .group:hover
* docs: add design spec for 6 new features
Column Statistics, Data Masking, CSV Import, Data Generator,
DB Notifications, and Connection Health Monitor.
* docs: update spec with review fixes
Resolve all 15 review issues: naming conflicts, preload layer,
batch insert interface, guard clauses, confirmation dialogs, etc.
* docs: add implementation plan for 6 features
Fix critical issues from review: adapter connection pattern,
preload event subscription pattern, tab interface definitions,
ColumnStatsRequest type, and implementation notes.
* feat: add column statistics panel (Tasks 1.1-1.8)
Implement the Column Statistics feature allowing users to right-click a
column header and view min/max/nulls/distinct/histogram in a right sidebar
panel. Supports PostgreSQL (full implementation with median + histogram),
MySQL (CASE WHEN histogram, no median), and MSSQL (NTILE histogram +
PERCENTILE_CONT median). Includes shared types, IPC handler, Zustand
store, stats panel UI, and DataTable integration via onColumnStatsClick.
* feat: add Data Masking feature (renderer-only)
Adds blur-based data masking so users can hide sensitive columns during
demos, screenshots, and pair programming. Entirely renderer-only — no
IPC or main process changes.
- masking-store: Zustand store with manual per-tab masking, auto-mask
rules (email/password/ssn/token etc.), hover-to-peek, and persist
middleware for rules/settings only (runtime maskedColumns not persisted)
- masking-toolbar: dropdown UI for toggling auto-mask, managing rules,
adding custom regex patterns, and unmasking all columns for a tab
- data-table: accepts optional tabId, shows lock icon on masked headers,
adds Mask/Unmask to column dropdown, applies blur(5px) + userSelect:none
to masked cells with alt-hover peek support
- editable-data-table: same masking UX; masked cells block editing
- tab-query-editor: wires tabId into DataTable, renders MaskingToolbar
near Export, intercepts exports when masked columns are present and
shows an AlertDialog to confirm exporting with [MASKED] values
* feat(csv-import): implement CSV import feature (Tasks 3.1-3.5)
- Add shared types: CsvColumnMapping, CsvImportOptions, CsvImportRequest,
CsvImportProgress, CsvImportResult, BatchInsertOptions, BatchInsertResult
- Install papaparse for CSV parsing in renderer
- Create batch-insert.ts: parameterized INSERT with per-dialect placeholder
syntax (pg: $1/$2, mysql: ?, mssql: @p1/@p2), ON CONFLICT handling, and
cancellation support
- Add import-handlers.ts IPC handler for db:import-csv and db:import-cancel;
progress events pushed via event.sender.send('db:import-progress')
- Add import-store.ts Zustand store with 5-step wizard state, type inference
for new tables (integer/numeric/timestamp/boolean/text), and auto-mapping
- Create csv-import-dialog.tsx Sheet dialog: file drop zone, target selection,
column mapping, options (batch size/conflict/truncate/transaction), and
progress/result step
- Add "Import CSV" to schema explorer table context menu (both virtualized
and non-virtualized paths)
* feat: add Data Generator feature (Tasks 4.1-4.5)
Adds schema-aware fake data generation using @faker-js/faker. Users can
open a data-generator tab from the schema explorer context menu on any
table, configure per-column generators (faker, random-int/float/bool/date,
uuid, auto-increment, fk-reference, fixed, null), preview 5 sample rows,
and insert up to 10 000 rows in configurable batches with live progress.
- packages/shared: GeneratorType, ColumnGenerator, DataGenConfig,
DataGenProgress, DataGenResult types
- main: data-generator.ts engine with heuristics + faker dispatch
- main: data-gen-handlers.ts IPC for generate, cancel, preview
- preload + preload d.ts: generateData, cancelGenerate, generatePreview,
onGenerateProgress on window.api.db
- stores: DataGeneratorTab type added to tab-store; data-gen-store for
per-tab generator state and actions
- renderer: data-generator.tsx UI; schema-explorer "Generate Data" menu
item; tab-query-editor dispatch for data-generator tab type
* feat: add PostgreSQL LISTEN/NOTIFY dashboard (Chunk 5)
Implements a full LISTEN/NOTIFY panel for PostgreSQL connections:
- Shared types: PgNotificationEvent, PgNotificationChannel, PgNotificationStats
- Main process: dedicated pg.Client listener per connection with SSH tunnel
support, auto-reconnect with exponential backoff, and SQLite event history
(capped at 10k events per connection)
- IPC handlers under pg-notify: prefix; cleanup on app quit
- Preload: pgNotify namespace exposing subscribe/unsubscribe/send/getChannels/
getHistory/clearHistory/onEvent
- Store: usePgNotificationStore with rolling 60s stats and in-memory event cap
- Tab type: pg-notifications added to TabType union with deduplication
- UI: channel subscription bar, scrollable event log with JSON highlighting,
collapsible send panel and stats; PostgreSQL-only guard
- Sidebar: Notifications entry visible only for PostgreSQL connections
* feat(shared): add health monitor types (Task 6.1)
Add ActiveQuery, TableSizeInfo, CacheStats, LockInfo, and
DatabaseSizeInfo types to the shared package for IPC contract.
* feat(adapters): implement health monitor queries (Task 6.2)
Add getActiveQueries, getTableSizes, getCacheStats, getLocks, and
killQuery to DatabaseAdapter interface with implementations for
PostgreSQL, MySQL, MSSQL, and SQLite stub.
* feat(ipc): add health monitor IPC handlers (Task 6.3)
Register IPC handlers for db:active-queries, db:table-sizes,
db:cache-stats, db:locks, and db:kill-query channels.
* feat(preload): expose health monitor API to renderer (Task 6.4)
Add health namespace to preload bridge with activeQueries, tableSizes,
cacheStats, locks, and killQuery methods plus type declarations.
* feat(store): add health monitor Zustand store (Task 6.5)
Create useHealthStore with polling, fetch actions for all health
metrics, and kill query support.
* feat(ui): add health monitor dashboard tab (Task 6.6)
Add HealthMonitor component with 4-panel dashboard: active queries
with kill support, table sizes with sorting, cache hit ratios with
color coding, and lock/blocking detection. Integrate into tab system
and sidebar navigation.
* chore: apply prettier formatting
* fix: resolve empty block statement lint errors
* fix: add column stats to editable table and fix masking infinite loop
Column statistics dropdown now available in table preview (editable)
mode. Fixed MaskingToolbar infinite re-render caused by creating a new
empty array reference on every store snapshot.
* docs: update README, features, roadmap, and marketing site for 6 new features
Add Column Statistics, Data Masking, CSV Import, Data Generator,
Connection Health Monitor, and PostgreSQL Notifications to all
documentation and the marketing website features grid.
* Apply suggestions from code review
Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
---------
Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
* docs: add design context to CLAUDE.md and .impeccable.md
* feat: add subtle delight micro-interactions for query and edit flows
Add success/error flash on results area, fade-in animation for new
results, connection dot pulse during execution, and cell save highlight
for editable cells. All animations under 200ms, aligned with quiet
confidence design principle.
* feat(web): add scroll-triggered animations and micro-interactions
Add AnimateOnScroll component using IntersectionObserver for smooth
section reveals. Feature cards stagger in by column position. Screenshots
lift on hover. Buttons have satisfying press effect. Applied to Features,
Pricing, FAQ, and CTA sections.
- Updated string formatting to use double quotes consistently throughout the seo.ts file.
- Added semicolons for improved code clarity and consistency.
- Enhanced the structure of the PageMetadata interface and related functions for better readability and maintainability.
- Added a redirect from non-www to www for improved SEO.
- Updated sitemap and SEO-related URLs to use the www subdomain.
- Adjusted breadcrumbs component to reflect the new URL structure.
* fix: virtualize data tables to eliminate typing lag in Monaco editor
- Add TanStack Virtual row virtualization for datasets > 50 rows
- Measure header column widths and sync to virtualized rows using ResizeObserver
- Fix result switching in table-preview tabs by adding key prop and using active result columns
- Reduce DOM nodes from ~15,000 to ~1,000 for 500-row datasets
- Eliminates 5+ second typing delay caused by React reconciliation overhead
Closes#71
* fix: show all query result rows instead of limiting to page size
Previously, when running raw queries (including multi-statement queries),
results were incorrectly limited to the page size (e.g., 500 rows) instead
of showing all returned rows with client-side pagination.
The issue was that table-preview tabs with multi-statement queries used
paginatedRows which slices data to pageSize before passing to the component.
Now:
- EditableDataTable is only used for single-statement table-preview tabs
- DataTable with getAllRows() is used for query tabs and multi-statement
queries, passing all rows and letting TanStack Table handle pagination
* chore: fix dates
* chore: fix blog posts stuff
* style: Reformat SVG path definitions and MDXComponents type for improved readability.
* a11y: add ARIA attributes to virtualized table rows
- Add role="rowgroup" and aria-rowcount to virtualized container
- Add role="row" and aria-rowindex to each virtualized row
- Add role="cell" to each virtualized cell
- Enables screen readers to navigate virtualized tables correctly
- Add blog infrastructure using next-mdx-remote for MDX rendering
- Create blog listing page at /blog with terminal-inspired design
- Add dynamic blog post pages at /blog/[slug]
- Convert existing notes to blog posts (AI assistant, performance analyzer)
- Update sitemap to dynamically include blog posts
- Add Blog link to header and footer navigation
- Style blog content with terminal-themed code blocks and typography
* feat: add sitemaps for web and docs
- Add sitemap.ts for Next.js web app with 4 pages (/, /download, /privacy, /terms)
- Add sitemap.xml route for TanStack Start docs with all 31 documentation pages
- Configure appropriate priorities and change frequencies for SEO
* fix: use static sitemap for docs instead of dynamic route
- Replace dynamic sitemap.xml.ts route with static public/sitemap.xml
- Add robots.txt for docs site pointing to sitemap
- Add robots.ts for web app with sitemap reference and API exclusion
---------
* docs: add MSSQL and SQLite database support documentation
- Add Microsoft SQL Server documentation page
- Add SQLite database support documentation page
- Update database support index with all 4 supported databases
- Add feature comparison table for all databases
- Update meta.json to include new pages
* docs: comprehensive documentation update for v0.7.0 features
- Add AI Assistant feature documentation with BYOK setup guide
- Add SSH Tunnels documentation for secure remote connections
- Add Query Telemetry documentation with benchmark mode
- Add Command Palette documentation
- Add Multi-Window support documentation
- Update features index with new feature categories
- Update keyboard shortcuts with new shortcuts (Cmd+K, Cmd+I, etc.)
- Update settings documentation with query timeout and AI settings
- Update README with SQLite support, SSH tunnels, and latest features
- Update README to reflect macOS code signing (v0.4.0+)
* feat: update marketing website with latest features
- Add Query Telemetry feature with benchmark mode description
- Add SSH Tunnels feature for secure connections
- Update Multi-Database to include SQLite
- Update hero section to mention SQLite support
* docs: add images to feature documentation
- Add AI Assistant screenshots (query generation, chart generation)
- Add Command Palette screenshot
- Add TODO placeholders for telemetry and SSH tunnel screenshots
* fix: docs homepage button and light mode issues
- Update tagline to include all 4 databases (PostgreSQL, MySQL, SQL Server, SQLite)
- Replace hardcoded dark colors with Tailwind theme variables for light/dark mode support
- Fix button hover state to maintain text visibility
* feat: add query telemetry and multi-window images
Docs:
- Add query-telemetry.png to Query Telemetry page
- Add multi-window.png to Multi-Window page
- Add erd.png to ER Diagrams page
Web app:
- Add Query Telemetry screenshot section
- Add Multi-Window screenshot section
- Import AppWindow icon for multi-window section
* fix: use actual app icon on docs homepage
* fix: ensure docs homepage button text is visible
Use inline style for button text color to override theme styles
that were causing the "Read the Docs" text to be invisible on the
cyan background.
* refactor: use lucide-static icons on docs homepage
Replace inline SVG elements with lucide-static imports for cleaner,
more maintainable code. Added Icon helper component to render the
SVG strings with custom classes.
* fix: enable light/dark mode switching in docs
- Remove forcedTheme and hardcoded dark class from RootProvider
- Add separate light theme CSS variables
- Make color-scheme responsive to theme class
- Use CSS variables for grid pattern background
- Add theme-aware navbar background colors
* fix: address CodeRabbit review comments in docs
- Add cross-platform command palette shortcuts in settings
- Use Windows backslash convention for settings path
- Rename "Query plans (EXPLAIN)" to "Query execution plans"
- Fix compound adjective "Floating-point" in sqlite docs
- Replace vague "very large" with specific "10+ GB" sizing
- Add model maintenance note and provider error disclaimer
- Bundle external images locally to avoid URL fragility
- Fix backtick shortcut rendering in multi-window docs
- Remove TODO comment from ssh-tunnels docs
---------
Co-authored-by: Claude <noreply@anthropic.com>
* chore: fix uii/ux
* feat: add schema caching with background refresh and notifications
- Cache schemas and custom types in memory and disk for faster load times
- Background refresh when loading from cache to keep data fresh
- Add toast notifications to inform users of schema updates
- Show refresh spinner and cache status in schema explorer tooltip
- Fall back to stale cache with warning when refresh fails
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add periodic auto-update checks with toast notifications
- Add periodic update checks every 4 hours (in addition to startup check)
- Show toast notification when update is downloading
- Show persistent toast with "Restart Now" button when download completes
- Extend notification store to support action buttons
- Add IPC events for updater communication with renderer
- Create useAutoUpdater hook for listening to update events
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add side sheet for row insertion with smart field inputs
- Add AddRowSheet component with type-aware field inputs:
- UUID fields with generate button
- Date/time fields with picker and "Now" button
- Boolean fields with toggle switch
- Enum fields with dropdown selection
- JSON fields with textarea
- Add dropdown menu for Add Row with Form/Quick Add options
- Add duplicate row functionality with row action dropdown
- Auto-clear serial/identity PKs when duplicating rows
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: handle foreign key fields properly in add row sheet
- Check for FK before UUID type to prevent random UUID generation for FK columns
- Add searchable dropdown for FK fields that fetches values from referenced table
- Show loading state while FK values are being fetched
- Fall back to manual input if FK values can't be loaded
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: replace Select with Popover-based combobox for FK fields
The Select component doesn't work well with search input inside.
Using Popover with native input provides proper searchable combobox UX.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: formatter
* perf: add useCallback and useMemo optimizations to SmartField
- Wrap generateUUID, setNow, clearValue in useCallback to prevent
recreation on every render
- Add useMemo for FK value filtering to avoid recalculating on
every render
- Add self-review documentation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: remove duplicate db:invalidate-schema-cache handler
Removed duplicate IPC handler registration that was causing
"Attempted to register a second handler" error on startup.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: add row button available in normal mode
- Show "Add Row" button in normal view mode (not just edit mode)
- Clicking it opens the form sheet directly
- On submit, automatically enters edit mode and adds the row
- Provides a faster workflow for inserting data without manually
entering edit mode first
Adds `pnpm admin:grant-license` command to grant free licenses to
contributors without credit cards. Creates customer, generates license,
saves to DB, and sends welcome email via Resend.
Usage:
pnpm admin:grant-license --email contributor@example.com
pnpm admin:grant-license --email x@y.com --name "Name" --plan team
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Move license creation from license_key.created webhook to payment.succeeded
since we now manage licensing ourselves instead of using Dodo's license keys.
- Remove license_key.created event type and handler
- Create license directly on payment.succeeded
- Remove license key specific fields from webhook payload type
- Simplify getEventId helper
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add /privacy page with data collection, analytics, and security info
- Add /terms page with license terms, restrictions, and refund policy
- Both pages follow existing design patterns with Header/Footer
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>