* 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.
* plan: add install.cat support
AGENT_PLAN_ANCHOR
## Original User Request (verbatim)
Vamos resolver a issue https://github.com/Rohithgilla12/data-peek/issues/108 para isso faça em clone do projeto em uma pasta temporária, crie os devidos arquivos install.sh e install.ps1 e atualize o README.md sempre seguindo as recomendações de https://install.cat ao final faça um PR para o repositório original. Antes do PR me mostre a mensagem para aprovação. Quando tudo concluir, apagar pasta local. Provavelmente teremos que fazer um fork para PR. O cli gh está disponível e autenticado.
Pergunte aos planners também, exceto o planClaude que está falhando.
implement
## Objective
Add install.cat-compatible root installer scripts and README guidance, prepare and create an upstream PR after user approval of the PR message, then remove the temporary local clone.
## Execution Plan
- [ ] Step 1: Add root install.sh and install.ps1 with dynamic release asset selection and platform-specific installation flows.
- [ ] Step 2: Update README.md to make install.cat the primary install path while preserving manual alternatives.
- [ ] Step 3: Validate the new scripts and docs in this environment.
- [ ] Step 4: Commit the implementation, push a fork branch, and draft the PR message for approval.
- [ ] Step 5: Create the upstream PR after approval and delete the temporary clone.
## Do
- Keep install.sh compatible with sh for install.cat piping.
- Use release asset pattern matching instead of hardcoded versioned URLs.
- Automate the macOS xattr cleanup noted in the README.
- Pause before gh pr create to show the exact PR title and body for approval.
## Do Not
- Create the PR before user approval of the PR message.
- Delete the temporary clone before the PR is created.
- Change unrelated application code or release workflows.
## References
- https://github.com/Rohithgilla12/data-peek/issues/108
- https://install.cat
- README.md
- apps/desktop/electron-builder.yml
- .github/workflows/build.yml
- .github/PULL_REQUEST_TEMPLATE.md
## Risks and Dependencies
- Release asset names may drift and must be matched dynamically.
- macOS and Windows install flows cannot be fully executed from this Linux environment.
- Pushing the branch depends on gh authentication and fork availability.
* chore(agent): [Step 1/5] add install scripts
PLAN_REF: e082f4f7cbafc0d8e50d4e79ff1b37629b8fcccf
PREVIOUS_STEP: e082f4f7cbafc0d8e50d4e79ff1b37629b8fcccf — plan initialized
## Completed in This Step
- Added a POSIX-compatible root install.sh for install.cat on macOS and Linux
- Added a root install.ps1 that downloads and runs the latest Windows installer
- Used live GitHub release asset pattern matching instead of hardcoded versions
## References Used
- https://install.cat
- apps/desktop/electron-builder.yml
- .github/workflows/build.yml
- homebrew/Casks/data-peek.rb
## Debts and Warnings
- Windows runtime could not be executed from this Linux environment
- macOS DMG flow was validated statically but not run end-to-end here
## Progress (ref: e082f4f7cbafc0d8e50d4e79ff1b37629b8fcccf)
- [x] Step 1: Add root install.sh and install.ps1 with dynamic release asset selection and platform-specific installation flows.
- [ ] Step 2: Update README.md to make install.cat the primary install path while preserving manual alternatives.
- [ ] Step 3: Validate the new scripts and docs in this environment.
- [ ] Step 4: Commit the implementation, push a fork branch, and draft the PR message for approval.
- [ ] Step 5: Create the upstream PR after approval and delete the temporary clone.
## Next Step
chore(agent): [Step 2/5] update README install flow
* chore(agent): [Step 2/5] update README install flow
PLAN_REF: e082f4f7cbafc0d8e50d4e79ff1b37629b8fcccf
PREVIOUS_STEP: 492f01106bf3a336b7871d207bf8ad7d019d4967 — added install.cat installer scripts
## Completed in This Step
- Reworked the installation section to make install.cat the primary path
- Kept Homebrew and manual download options as secondary install methods
- Updated the macOS xattr guidance to match the installed app bundle name
## References Used
- README.md
- https://install.cat
- .github/PULL_REQUEST_TEMPLATE.md
## Debts and Warnings
- README install instructions for Windows were updated based on static script review only
## Progress (ref: e082f4f7cbafc0d8e50d4e79ff1b37629b8fcccf)
- [x] Step 1: Add root install.sh and install.ps1 with dynamic release asset selection and platform-specific installation flows.
- [x] Step 2: Update README.md to make install.cat the primary install path while preserving manual alternatives.
- [x] Step 3: Validate the new scripts and docs in this environment.
- [ ] Step 4: Commit the implementation, push a fork branch, and draft the PR message for approval.
- [ ] Step 5: Create the upstream PR after approval and delete the temporary clone.
## Next Step
chore(agent): [Step 4/5] push fork branch and draft PR message
* fix: allow sudo prompts from install.cat shell pipe
PLAN_REF: e082f4f7cbafc0d8e50d4e79ff1b37629b8fcccf
## Completed in This Step
- Routed sudo calls through /dev/tty so the macOS installer can prompt when install.sh is piped into sh
- Kept the install.cat shell flow unchanged while avoiding stdin conflicts from curl piping
## References Used
- Reviewer report for 492f011735
- https://install.cat
## Debts and Warnings
- macOS and Windows runtime flows are still statically validated in this Linux environment
## Progress (ref: e082f4f7cbafc0d8e50d4e79ff1b37629b8fcccf)
- [x] Step 1: Add root install.sh and install.ps1 with dynamic release asset selection and platform-specific installation flows.
- [x] Step 2: Update README.md to make install.cat the primary install path while preserving manual alternatives.
- [x] Step 3: Validate the new scripts and docs in this environment.
- [x] Step 4: Commit the implementation, push a fork branch, and draft the PR message for approval.
- [ ] Step 5: Create the upstream PR after approval and delete the temporary clone.
## Next Step
chore(agent): [Step 5/5] create PR after approval and clean temp clone
* fix: address PR review follow-ups
PLAN_REF: e082f4f7cbafc0d8e50d4e79ff1b37629b8fcccf
## Completed in This Step
- Hardened release downloads with retries and explicit https README commands
- Improved installer portability and robustness across PowerShell and macOS app discovery
- Scoped asset URL extraction to browser_download_url fields and checked interactive installer exit codes
## References Used
- PR #116 review comments
- https://install.cat
- https://cli.github.com/manual/gh_pr_review
## Debts and Warnings
- Checksum verification remains deferred because the installer flow still needs a dependency-light manifest strategy
- pwsh is still unavailable in this Linux environment, so PowerShell execution remains statically validated
## Progress (ref: e082f4f7cbafc0d8e50d4e79ff1b37629b8fcccf)
- [x] Step 1: Add root install.sh and install.ps1 with dynamic release asset selection and platform-specific installation flows.
- [x] Step 2: Update README.md to make install.cat the primary install path while preserving manual alternatives.
- [x] Step 3: Validate the new scripts and docs in this environment.
- [x] Step 4: Commit the implementation, push a fork branch, and draft the PR message for approval.
- [ ] Step 5: Create the upstream PR after approval and delete the temporary clone.
## Next Step
fix: reply to remaining PR review threads and keep the branch updated
* fix: restore installer portability
PLAN_REF: e082f4f7cbafc0d8e50d4e79ff1b37629b8fcccf
## Completed in This Step
- Removed curl retry flags that are unavailable on older distributions
- Relaxed browser_download_url parsing to tolerate whitespace in GitHub API responses
## References Used
- Reviewer report for 1391a61ddd
## Debts and Warnings
- Checksum verification remains deferred for a future dependency-light implementation
## Progress (ref: e082f4f7cbafc0d8e50d4e79ff1b37629b8fcccf)
- [x] Step 1: Add root install.sh and install.ps1 with dynamic release asset selection and platform-specific installation flows.
- [x] Step 2: Update README.md to make install.cat the primary install path while preserving manual alternatives.
- [x] Step 3: Validate the new scripts and docs in this environment.
- [x] Step 4: Commit the implementation, push a fork branch, and draft the PR message for approval.
- [ ] Step 5: Create the upstream PR after approval and delete the temporary clone.
## Next Step
fix: update PR threads after follow-up review
- Dock/taskbar click now restores the last focused window instead of always focusing the first
- Window titles now include database names for better identification (e.g., "Data Peek — mydb")
- When multiple windows connect to the same database, numbers are appended (e.g., "Data Peek — mydb — 1")
- Last focused window ID is tracked across all window focus events
- Connection name is communicated via IPC when renderer's active connection changes
Fixes build failure caused by duplicated client construction and
try/catch blocks with wrong indentation in both adapters. esbuild
saw "Expected finally but found async" due to the malformed syntax.
Updates the cask auto-update workflow to push formula changes to
Rohithgilla12/homebrew-tap instead of committing to this repo.
Requires HOMEBREW_TAP_TOKEN secret for cross-repo push.
Detailed task-by-task plan for Phase 0 (prototype validation) with
exact code, commands, and expected outputs. High-level outlines for
Phases 1-7 (full migration) to be detailed after prototype passes.
PRD for migrating desktop app from Electron to Electrobun (issue #110).
Covers architecture comparison, phased migration strategy, risk register,
and key decisions (system webview, Bun SQLite storage, typed RPC).
* fix: improve database adapter stability and error handling
- Fix SSH tunnel config mutation: tunnel host/port now passed via overrides instead of mutating original config, preventing race conditions with concurrent queries
- Fix connection cleanup safety: add .catch(() => {}) to all connection.end() calls in finally blocks to prevent errors from skipping tunnel cleanup
- Add global error handlers for uncaught exceptions and unhandled promise rejections to prevent silent crashes
- Add try/catch wrapper around service initialization so the app window opens even if some services fail
- Ensure query cancellation tunnel cleanup works correctly with nested cleanup guards
* fix: Move connection establishment inside try blocks
Addresses review comments about ensuring finally blocks run when
connection fails. Previously, if client.connect()/pool.connect()/
createConnection() threw an error, the finally block would not
execute, potentially leaking SSH tunnels.
Changes:
- PostgreSQL: Move client.connect() inside try in getSchemas
- MySQL: Restructure all methods to create connection inside try,
with null checks in finally/catch blocks
- MSSQL: Move pool.connect() inside try in all methods
* 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>
* fix: Add SSL certificate verification options for cloud databases
Support disabling SSL certificate verification for AWS RDS, Azure, and other cloud databases where certificate verification fails through VPN connections.
- Add SSLConnectionOptions interface with rejectUnauthorized and ca options
- Update PostgresAdapter to use configurable SSL options
- Update MySQLAdapter for consistent SSL handling
- Add UI toggle to enable/disable server certificate verification
- Include helpful description about when to disable verification
Fixes#94
* fix: improve SSL configuration error handling and add CA certificate input
- Add proper error handling when CA certificate file cannot be read
(previously failed silently, now throws descriptive error)
- Add CA certificate path input field in connection dialog UI
- Make SSL default behavior explicit with rejectUnauthorized: true
* fix(telemetry): respect connection overhead toggle in benchmark stats
The MIN/MAX/AVG/P90/P95/P99 stats were not updating when the "Conn.
overhead" toggle was changed. Now stats are recalculated to exclude
TCP and DB handshake phases when the toggle is off.
Fixes#100
* fix(telemetry): adjust timeline phase offsets when hiding connection overhead
The timeline visualization was broken when connection overhead was hidden
because phase startOffset values weren't being adjusted. Now subtracts
connection phase durations from start offsets for proper timeline scaling.
* refactor(telemetry): move percentile and stdDev to shared package
Extracted calcPercentile and calcStdDev functions to @data-peek/shared
to avoid code drift between main process (telemetry-collector.ts) and
renderer process (telemetry-panel.tsx). Also fixed getConnectionOverheadMs
to use the phases variable with proper benchmark fallback.
AI responses with type 'query' were not displaying the SQL preview when
the explanation field was null/undefined. This happened because the
condition required both sql AND explanation to be truthy.
The backend Zod schema uses .nullish() for explanation, allowing null or
undefined values. However, the frontend was strictly requiring explanation,
causing SQL queries to silently disappear when the AI didn't provide one.
Changes:
- Make explanation optional in AIQueryData interface
- Make explanation optional in StoredQueryData interface
- Remove explanation requirement from response condition check
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* fix: sync query tab connection when active connection changes
When switching database connections, query tabs now automatically update their
connection reference to execute against the newly selected connection instead of
the previously stored one. Table preview, ERD, and table designer tabs remain
bound to their original connection as they are tied to specific database objects.
Fixes#93
* refactor: remove unused updateTabConnectionId function
* Connection sidebar -> UI changes for better user experience, making password visible on click | icon added for same
* Toggle Pass Button Logic Reversed
* Tooltip added for password show UI
* Removed comment in global.css -> edited at DD/MM/YYYY
* feat: add keyboard shortcuts for data editing
Add keyboard shortcuts for mouseless data editing workflow:
- Cmd+S: Save pending changes (when in edit mode)
- Cmd+Shift+Z: Discard all changes
- Cmd+Shift+N: Add new row with form
- Escape: Exit edit mode
Changes:
- Add keyboard event listeners in EditableDataTable component
- Add "Data" menu with shortcuts in menu bar
- Add IPC listeners for menu events (save, discard, add row)
- Update edit toolbar tooltips with shortcut hints
- Add "Data Editing" section to Settings keyboard shortcuts
Closes request from user for mouseless editing support.
* fix: address CodeRabbit review feedback
- Change Add Row shortcut from Cmd+Shift+N to Cmd+Shift+I to avoid
collision with New Window shortcut
- Fix key check for Shift+key combinations (use uppercase 'I' and 'Z')
- Use platform-agnostic keys utility in tooltips instead of hardcoded
Mac symbols (⌘⇧Z -> keys.mod+keys.shift+Z)
- Use ref pattern for keyboard handlers to avoid stale closures in
useEffect hooks
* docs: add data editing keyboard shortcuts
- Add Data Editing section to keyboard-shortcuts.mdx with new shortcuts
(Cmd+S, Cmd+Shift+Z, Cmd+Shift+I, Escape)
- Add Keyboard Shortcuts section to inline-editing.mdx
* fix: address self-review findings for keyboard shortcuts
- Change add row shortcut from Cmd+Shift+I to Cmd+Shift+A (avoids
DevTools conflict on Windows/Linux)
- Extract hasChanges computed value for better readability
- Move keyboardHandlersRef update to useLayoutEffect for React 18+
correctness
- Update documentation with new shortcut
* feat: add SQL export (INSERT statements) option
- Add exportToSQL function to generate INSERT statements from query results
- Add SQL export option in query results export dropdown
- Add Export as CSV/JSON/SQL options in table right-click menu
- Support proper escaping for SQL values, identifiers, and keywords
- Works with full table export and current query results
* feat: improve SQL export with better type handling and add tests
- Add database dialect support (PostgreSQL, MySQL, MSSQL)
- Add batch INSERT mode for efficient exports
- Add transaction wrapper option (BEGIN/COMMIT)
- Add header comments with row count and timestamp
- Improve type handling:
- Date/time types with proper formatting
- UUID types
- Binary/bytea types with dialect-specific hex format
- BigInt support
- Special floats (NaN, Infinity) for PostgreSQL
- JSONB cast for PostgreSQL
- PostgreSQL array literal format
- Add 72 comprehensive unit tests covering:
- CSV escaping
- SQL value escaping for all data types
- SQL identifier quoting per dialect
- SQL keyword detection
- Full export function behavior
---------
Co-authored-by: Claude <noreply@anthropic.com>
* feat: add connection duplication, materialized view support, and autocomplete keywords
- Add duplicate button to connection dropdown for quick connection cloning
- Add materialized view support to PostgreSQL adapter with column fetching
- Display materialized views in schema explorer with teal styling and mview badge
- Add filter toggle for materialized views in schema explorer
- Add SQL keywords: MATERIALIZED, REFRESH, CONCURRENTLY, DATA for autocomplete
* test: add tests for materialized views and connection duplication
- Add TableInfo type tests for materialized_view support
- Add schema explorer filtering tests for materialized views
- Add SQL keywords tests verifying MATERIALIZED, REFRESH, CONCURRENTLY, DATA
- Add connection duplication logic tests
* fix: correct window title and add dynamic Window menu
- Change HTML title from "Electron" to "Data Peek" so windows show
correct name in taskbar/dock when right-clicking
- Add dynamic Window menu that lists all open windows
- Windows can be focused from the menu by clicking on them
- Menu updates automatically when windows are created, closed, or focused
- Fix test import paths and use correct type values
* feat: add materialized views for enhanced data analytics
- Introduced multiple materialized views to aggregate and summarize key metrics, including monthly revenue, organization metrics, user activity, API key usage, subscription health, event analytics, feature flag rollout, and project activity.
- Each view is designed to optimize data retrieval for dashboards and reporting, improving performance and insights for users.
- Created unique and standard indexes for efficient querying of the materialized views.
* refactor: address code review feedback for materialized views PR
- Use formatted data_type instead of udt_name for materialized view columns
- Simplify isNullable check to boolean comparison only
- Extract SQL_KEYWORDS to shared constants file to eliminate duplication
- Add error handling to connection duplication with try/catch
- Add @/ alias to vitest config for test resolution
---------
Co-authored-by: Claude <noreply@anthropic.com>
- 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.
- Updated robots.txt to disallow API access for all user agents.
- Introduced new SEO configuration in seo.ts, including meta tag generation and structured data functions.
- Implemented sitemap generation in sitemap.ts to dynamically create XML sitemaps based on documentation pages.
- Updated root and documentation routes to utilize new SEO features, including meta tags and structured data for better search engine visibility.
* feat: improve user experience based on feedback
Schema Explorer:
- Add schema focus feature for Supabase users with many default schemas
- Users can now focus on a single schema, filtering out all others
Edit Mode:
- Fix enum data type handling by adding enumValues to ColumnInfo
- Add multiline text editor for long text columns (opens automatically for content >100 chars or multiline)
- Add expand button to open multiline editor for any text column
Dashboards:
- Fix widget configuration not showing up (Configure menu item was not wired)
- Add EditWidgetDialog that shows all options in a single view
- Add SQL autocompletion in widget SQL editor using Monaco
- Add quick data preview table in widget configuration
- Consolidate widget creation into single-view instead of step-by-step flow
* feat: redesign add widget dialog with single-page layout and data preview
- Convert multi-step wizard to single-page form for faster configuration
- Add live data preview table showing query results (first 5 rows)
- Fix duplicate LIMIT clause bug when previewing queries
- Fix keyboard shortcuts intercepting input in dialogs
- Improve UI with compact inputs, segmented controls, and better spacing
- Add SQL autocompletion support via schema context
---------
Co-authored-by: Claude <noreply@anthropic.com>
* 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
The SSH tunnel was hardcoding '127.0.0.1' as the destination host in
forwardOut instead of using the configured database host. This caused
connection timeouts when using SSH jump servers to connect to remote
databases.
Changes:
- Save original database host/port before modifying config
- Use actual database host in forwardOut call
- Set config.host to '127.0.0.1' so database client connects via tunnel
Closes#77