Commit graph

44 commits

Author SHA1 Message Date
Rohith Gilla
12e8ce3535
chore: add webapp scripts to root package.json 2026-04-03 11:08:25 +05:30
Rohith Gilla
be91a2587a
chore: release v0.18.0 2026-04-02 20:16:56 +05:30
Rohith Gilla
84841567d4
chore: release v0.17.0 2026-04-02 12:14:15 +05:30
Rohith Gilla
4bcff4c0b7
chore: release v0.16.1 2026-04-01 20:56:13 +05:30
Rohith Gilla
a3457e23c7
feat: add Remotion video app for launch videos (#121)
* feat: add Remotion video app and fix build errors

Add apps/video/ (@data-peek/video) — a Remotion app for generating
launch and demo videos. Includes a 30s v0.16.0 launch video composition
with animated feature showcases matching the brand identity.

Fix TypeScript build errors: duplicate variable declarations in
database adapters, missing crypto import in pg-notification-listener,
and inconsistent useEffect return paths in renderer components.

* fix: add missing nanoid dependency to desktop package

nanoid was imported in masking-store.ts but not declared in
package.json, causing CI build failures on Mac and Linux where
hoisting doesn't resolve it.

* fix: correct video duration and masking badge positioning

- Bump durationInFrames from 900 to 941 to match actual timeline
  (intro 120 + 6 features × 117 + transition 9 + outro 110)
- Add position: relative to DataMasking card so the absolute
  "masked" badge renders in the correct location
2026-03-19 13:42:00 +05:30
Rohith Gilla
e8adebe9c5
chore: release v0.16.0 2026-03-19 11:13:25 +05:30
Rohith Gilla
a168975867
feat: add 6 new features — stats, masking, CSV import, data gen, notifications, health monitor (#119)
* 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>
2026-03-18 08:18:55 +05:30
Rohith Gilla
19009b6457
chore: release v0.15.0 2026-03-07 13:18:34 +05:30
Rohith Gilla
ed455c3122
chore: release v0.14.0 2026-01-27 10:51:21 +05:30
Rohith Gilla
ebf4dad443
chore: release v0.13.2 2026-01-27 10:44:25 +05:30
Rohith Gilla
16910b936a
chore: release v0.13.1 2026-01-15 09:31:40 +05:30
Rohith Gilla
8a62a3eab9 chore: release v0.13.0 2026-01-06 08:34:29 +05:30
Rohith Gilla
8b2dfd2e65 chore: release v0.12.0 2026-01-01 10:01:17 +05:30
Rohith Gilla
6549dc6a1a chore: release v0.11.0 2025-12-24 19:09:59 +05:30
Rohith Gilla
6de4377f9b chore: release v0.10.1 2025-12-18 21:22:34 +05:30
Rohith Gilla
f2cfd165f9 chore: release v0.10.0 2025-12-18 20:31:32 +05:30
Rohith Gilla
505e1a139c chore: release v0.9.0 2025-12-16 18:26:32 +05:30
Rohith Gilla
8d9b533ad4 chore: release v0.8.1 2025-12-15 15:17:11 +05:30
Rohith Gilla
b668e4c0b8
feat: add server-side pagination for table previews (#68)
* feat: add server-side pagination for table previews

- Add page size selector with options (25, 50, 100, 250, 500)
- Persist user's preferred page size in settings
- Add jump-to-page input for quick navigation
- Show "Rows X-Y of Z" instead of "Page X of Y"
- Implement server-side pagination for table preview tabs:
  - Query uses LIMIT/OFFSET instead of loading all rows
  - COUNT query fetches total for pagination UI
  - Page changes trigger re-query with new offset
- Fix stale closure issue by reading fresh state from store

* chore: small fix
2025-12-15 15:15:35 +05:30
Rohith Gilla
448fa4895b chore: release v0.8.0 2025-12-12 12:51:38 +05:30
Rohith Gilla
256b06b3a1 chore: release v0.7.0 2025-12-11 12:31:44 +05:30
Rohith Gilla
8d023eee0d chore: release v0.6.2 2025-12-09 09:30:57 +05:30
Rohith Gilla
4a57d3c707 chore: release v0.6.1 2025-12-09 09:30:45 +05:30
Rohith Gilla
a64d964c60 chore: release v0.6.0 2025-12-09 08:36:59 +05:30
Rohith Gilla
bf6281c08e chore: release v0.5.3 2025-12-05 21:27:30 +05:30
Rohith Gilla
0f971d0352 chore: release v0.5.2 2025-12-05 08:20:41 +05:30
Rohith Gilla
fe092ceee7 chore: release v0.5.1 2025-12-04 21:48:49 +05:30
Rohith Gilla
3051178ce1 chore: release v0.5.0 2025-12-04 18:20:43 +05:30
Rohith Gilla
8781cb946c chore: release v0.4.0 2025-12-03 16:45:07 +05:30
Rohith Gilla
24b66e9f64 chore: release v0.3.0 2025-12-02 07:52:12 +05:30
Rohith Gilla
735061008a
feat: add support for multiple result sets and enhanced storage (#18)
* feat: add support for multiple result sets in query editor

Implements multiple result sets feature found in TablePlus, DBeaver, and DataGrip.
When executing multiple SQL statements separated by semicolons, each statement's
results are displayed in separate tabs within the results pane.

Changes:
- Add StatementResult and MultiStatementResult types to shared package
- Update PostgreSQL, MySQL, and MSSQL adapters with queryMultiple() method
- Add SQL statement splitter that respects string literals and comments
- Update tab store with multiResult support and activeResultIndex
- Add result set tabs UI in tab-query-editor when multiple statements present
- Each result shows row count, affected rows (for non-SELECT), and timing

The UI displays clickable result tabs above the data table when multiple
statements are executed. Green indicators show data-returning statements
(SELECT), blue for row-affecting statements (INSERT/UPDATE/DELETE).

* feat: add DpStorage facade with automatic corruption recovery

- Create storage.ts with DpStorage and DpSecureStorage classes
- Implement facade pattern for electron-store with auto-recovery
- Corrupted JSON files are automatically deleted and recreated
- Refactor all stores to use the new facade:
  - index.ts: connections, saved queries
  - license-service.ts: license data
  - window-state.ts: window bounds
  - ai-service.ts: AI config, chat history

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: add auto updated

* feat: add build:web and build:docs scripts for Vercel deployments

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: use safeStorage for encryption keys and improve updater UX

- Use Electron's safeStorage to derive machine-specific encryption keys
  for connections and saved queries stores instead of hardcoded values
- Fix updater comment/behavior mismatch: now correctly documents that
  automatic checks download silently while manual checks prompt user
- Add proper dialog handling for manual update checks (shows update
  available, no updates, and error dialogs appropriately)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-01 19:31:30 +05:30
Rohith Gilla
16d5a6b217
feat: integrate Turborepo for monorepo build orchestration (#15)
- Add turbo as dev dependency
- Create turbo.json with task configuration for build, lint, typecheck, dev
- Update root package.json scripts to use turbo run
- Add tsconfig.json to shared package (required for typecheck)
- Add .turbo to clean script

Benefits:
- Caching: Unchanged packages skip rebuilding (73ms cached vs 5.4s uncached)
- Parallelism: Independent tasks run concurrently
- Dependency ordering: shared package builds before dependent packages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-30 23:09:23 +05:30
Rohith Gilla
7bbebba0cb Merge branch 'claude/ai-postgres-client-01V5vquhVRH9x6YEJR2puRWV' 2025-11-30 22:30:16 +05:30
Rohith Gilla
c3788c4df4 chore: lock and yaml files 2025-11-30 22:29:08 +05:30
Rohith Gilla
dac87ec006 chore: release v0.2.0 2025-11-30 18:42:54 +05:30
Rohith Gilla
df475a818b chore: release v0.2.0 2025-11-30 18:40:37 +05:30
Rohith Gilla
b12e5ec687 feat: add bumpp 2025-11-30 18:40:00 +05:30
Rohith Gilla
79cecc2f1f
fix: pin electron version for electron-builder compatibility (#10)
* fix: pin electron version for electron-builder compatibility

Remove semver range (^) from electron dependency to fix
"Cannot compute electron version from installed node modules" error
during postinstall.

Fixes #6

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* chore: fix lock files

* chore: fix lock file

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-30 09:59:47 +05:30
Rohith Gilla
2425755879
feat: user feedback improvements and bug fixes (#5)
* db: drizzle migrations

* feat: implement user feedback!

Thanks @Mihaly_NC for the feedback!

* feat: expandable and collapsible query panel

* chore: formatting

* chore: bump version

* chore: fix a small oopsie
2025-11-29 17:21:56 +05:30
Rohith Gilla
d6b31d0559 chore: prepare for open source release 2025-11-29 10:57:24 +05:30
Rohith Gilla
0365a64af8 feat: add web app 2025-11-28 20:29:49 +05:30
Claude
3d03c39500
fix: use workspace scripts for platform builds
The root build:win/mac/linux scripts were calling electron-builder
directly, but it's only installed in the desktop workspace. Changed
to delegate to the workspace scripts via pnpm --filter.
2025-11-28 10:23:45 +00:00
Rohith Gilla
c278f9fc9a feat: fix a few things 2025-11-28 15:38:43 +05:30
Rohith Gilla
703c850744 🚀 chore: init commit 2025-11-26 15:53:53 +05:30