Commit graph

73 commits

Author SHA1 Message Date
Rohith Gilla
1d7183e648
fix(ai): packaged app crashes on open from @ai-sdk provider-utils split
v0.21.0 ships a TypeError at require time:
  (0, import_provider_utils6.createProviderToolFactoryWithOutputSchema)
  is not a function

Cause: PR #158 added @ai-sdk/xai, @ai-sdk/mistral, @ai-sdk/deepseek.
All three pull @ai-sdk/provider-utils@4, while core ai@5 is pinned to
@ai-sdk/provider-utils@3. pnpm hoisting + electron-builder's asar pack
pick the wrong version at runtime and the app refuses to open.

Fix: drop the three SDK packages. All three services expose
OpenAI-compatible endpoints, so route them through createOpenAI with
the matching base URL — same pattern GLM and Ollama already use. User-
facing provider list is unchanged.

Also extract the provider switch into ai-providers.ts so it can be
unit-tested without pulling in Electron, and:

- ai-providers.test.ts smoke-tests createProviderClient for every
  AIProvider. Catches any future require-time crash from an @ai-sdk
  package.
- ai-deps.test.ts walks node_modules/@ai-sdk and asserts every package
  agrees on the provider-utils major version. This is the invariant
  that #158 violated; the suite now fails fast if it breaks again.

CI guardrails:

- New ci.yml runs typecheck + tests on every push/PR to main. There
  was no PR check before, which is how #158 landed green.
- build.yml and build-artifacts.yml gate all platform builds behind
  a new `verify` job running the same checks, so a broken main can
  never produce a release artifact.
- Artifact workflow now uses --frozen-lockfile like the release one.
2026-04-20 14:14:22 +05:30
tembo[bot]
e9787e7218
Add support for 4 AI models (#158)
* feat(ai): add support for deepseek, mistral, xai, and glm AI providers

Co-authored-by: Rohith <gillarohith1@gmail.com>

* Use dedicated AI SDK packages for DeepSeek, Mistral, and xAI

Replace createOpenAI shim with first-party SDK packages:
- @ai-sdk/deepseek (createDeepSeek) — surfaces reasoning tokens from R1
- @ai-sdk/mistral (createMistral)
- @ai-sdk/xai (createXai)

GLM retains createOpenAI since no dedicated SDK exists for Zhipu AI.

* chore: lock files

---------

Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
Co-authored-by: Rohith <gillarohith1@gmail.com>
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
2026-04-17 08:43:45 +05:30
Rohith Gilla
c9f8e4297d
feat: SQL Notebooks for team runbooks (#157)
* feat(notebooks): add shared types for notebooks and cells

* feat(notebooks): add SQLite storage layer with full CRUD

Implements NotebookStorage class backed by better-sqlite3 with WAL mode,
foreign-key cascading deletes, and full CRUD for notebooks and cells.

* feat(notebooks): add IPC handlers for notebook CRUD

* feat(notebooks): add preload bridge for notebook IPC

* feat(notebooks): add NotebookTab type and createNotebookTab action

Adds 'notebook' to TabType union, NotebookTab interface, notebookId to
PersistedTab, createNotebookTab action with deduplication, persistence
handling, and notebook type guards in tab-query-editor.tsx.

* feat(notebooks): add Zustand store for notebook state management

* feat(notebooks): add NotebookEditor component and wire into TabContainer

* feat(notebooks): add sidebar section for browsing and creating notebooks

* feat(notebooks): add export functions for .dpnb and Markdown formats

* feat(notebooks): add NotebookCell component and dependencies

Add react-markdown and remark-gfm for markdown cell rendering.
NotebookCell handles SQL execution, markdown rendering, result
pinning, and keyboard shortcuts.

* fix: address review feedback for SQL notebooks

- Wrap JSON.parse in try/catch for corrupt pinned_result data
- Fix IPC type mismatches: update/duplicate/updateCell return actual data
- Remove non-functional Run All button from notebook editor
- Replace confirm() dialog with immediate delete + toast notification
- Remove dead notebook placeholder branch in tab-query-editor
- Remove duplicate react-markdown/remark-gfm from root package.json

* chore: lock files

* docs(notebooks): add feature docs, demo runbook, and nav entry

- SQL Notebooks feature documentation page for docs site
- Demo runbook .dpnb file for ACME SaaS health checks
- Add sql-notebooks to features navigation

* content(notebooks): add release notes, social posts, and 3 blog posts

- Release notes for v0.20.0 (SQL Notebooks)
- Social media posts (Twitter, Reddit, Dev.to)
- Blog 11: Feature announcement
- Blog 12: Storage architecture deep dive
- Blog 13: Lazy-loading Monaco in notebook cells

* content(notebooks): add Threads posts and posting strategy

4 Threads posts: launch carousel thread, technical behind-the-scenes,
runbook showcase, and conversation starter. Includes posting cadence
and format tips.

* docs(notebooks): add demo recording script

* feat(video): add release video and demo video for SQL Notebooks

- ReleaseVideo020: 24s release announcement (4 feature scenes)
- NotebookDemo: 45s feature walkthrough with animated notebook mockup
  showing cells typing in, queries executing, results sliding in,
  keyboard navigation, and export formats

* feat(video): add new background music for notebook videos

Screen Saver by Kevin MacLeod (CC BY 4.0) as primary track,
Equatorial Complex as alternative. Both compositions updated
to use the new track.

* fix: apply CodeRabbit auto-fixes

Fixed 5 file(s) based on 5 unresolved review comments.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>

---------

Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
2026-04-14 19:07:13 +05:30
Rohith Gilla
f9a58e76b5
feat/make docs better (#152)
* docs(plan): add docs site revamp design

Root-causes the slow layout transitions on docs.datapeek.dev
(Framer Motion 500ms fade, sidebar tree re-sent per nav, version
lag) and plans phased fix: triage, version bumps, MDX brittleness,
prerender, brand polish, follow-up distinctive design pass.

* docs(plan): add docs site revamp implementation plan

Phased tasks covering Framer Motion / tree-reload removal,
version bumps (Fumadocs 16.7, TanStack 1.168), remark plugins
for resilient MDX parsing, CI types:check gate, prerender, and
typography polish. Validation checklist at the end.

* perf(docs): remove page fade-in and move tree to parent route

Framer Motion wrapper added a 500ms fade on every nav and the
sidebar tree was re-sent and re-transformed per navigation. Move
the tree to a new /docs parent layout route with staleTime:Infinity
and drop the motion wrapper + CSS fade-in on main.

Navigating /docs/* now feels instant.

* chore(docs): bump fumadocs to 16.7 / 14.2 and switch to useContent

fumadocs-ui/core 16.2.1 -> 16.7.x and fumadocs-mdx 14.0.4 -> 14.2.x.
fumadocs-mdx 14.2 tightened ClientLoader typings so getComponent()
returns FC<never> by default. Switch to clientLoader.useContent()
which is the canonical Fumadocs-on-TanStack pattern anyway — cleaner
and handles Suspense internally.

* chore(docs): bump tanstack router/start to 1.168/1.167

Bumps @tanstack/react-router to ^1.168.10, @tanstack/react-start to
^1.167.16, and @tanstack/react-router-devtools to ^1.166.11. Catches
~34 minor versions of hydration, loader, scroll restoration, and
routing fixes. No source changes required - existing createFileRoute,
createServerFn, inputValidator, and createRouter APIs remain compatible.

* fix(docs): harden MDX parsing and add types:check CI gate

Add remark-gfm + remark-smartypants to fumadocs MDX config so
prose containing numeric operators, comparisons, and angle
brackets parses cleanly without author discipline. The workaround
from 60282cd (backtick-wrapping operators) is no longer strictly
needed, though we leave existing wrappers in place.

Add .github/workflows/docs-types.yml that runs pnpm --filter docs
types:check on every PR touching apps/docs. This parses every MDX
file and fails the build if anything regresses — catches the kind
of issue that hit prod in 60282cd.

* docs(plan): capture post-revamp perf baseline and defer prerender

Prerender attempted but blocked by a race between tanstack-start-
plugin-core and nitro@3.0.1-alpha.1 in the preview-server handoff
(fetches the first route before the nitro child process has bound
to its port). Runtime is fine — only the prerender crawl fails.
Documented the deferral in the baseline file.

Baseline measurements taken against the non-prerendered production
build for future regression comparisons.

* style(docs): tighten typography scale and body rhythm

Smaller h1/h2/h3 (1.875/1.25/1.0625 rem) and body line-height 1.6
match the 'dense but scannable' principle in CLAUDE.md and bring
the docs closer to Linear/Raycast density without sacrificing
readability.

* docs(plan): mark docs revamp validation checklist and note follow-ups

Code-level items verified, visual items flagged for human check.
Honest on the LCP number: 7.8s under Lighthouse mobile throttling
does not meet the 1.5s target, though TBT is 0ms and server latency
is ~20ms so perceived perf is far better than the mobile score.
Broken-internal-links check dropped from Phase 2 — noted as
follow-up.

* fix(docs): scope prose link color so landing hero CTA is readable

The global \`a { color: var(--dp-accent) }\` rule was leaking into
\`routes/index.tsx\` and overriding the landing page CTA's inline
\`text-[#0a0a0b]\` class. Because the CTA background is also
var(--dp-accent), the button text was invisible-on-itself.

Scope the rule to \`article a\` so it only styles MDX prose
content (docs pages wrap in <article> via DocsPage; landing uses
<main> via HomeLayout). Sidebar, TOC, and navbar links already
have their own scoped rules and are unaffected.

This bug was pre-existing (introduced in 04268973, 2025-11-30) but
surfaced during the docs revamp visual review.

* fix(docs): resolve type checking errors and commit routeTree.gen.ts
2026-04-10 12:45:08 +05:30
Rohith Gilla
01b9272f9d
chore: lock files 2026-04-09 20:18:26 +05:30
Rohith Gilla
667e9480bb
fix(docs): resolve hydration crash and broken navigation (#151)
* fix(docs): resolve hydration crash and broken navigation

- Moved server-only `source.getPage()` calls from client-side `head()` into server-side `loader()`.
- Passed extracted metadata (title, description, breadcrumbs) to `head()` via `loaderData`.
- Relocated structured data injection to React component tree to fix hydration mismatches.
- Removed blocking third-party scripts from root route.

* chore(docs): remove playwright dep and dead getOrganizationStructuredData code

- Remove playwright from devDependencies (only used for one-off verification)
- Remove unused getOrganizationStructuredData import from __root.tsx
- Remove dead getOrganizationStructuredData function from seo.ts (zero callers)

---------

Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
2026-04-09 20:09:31 +05:30
Rohith Gilla
8ee81e199a
feat: overhauled marketing website and documentation with high-end animations (#150)
* feat: revamped marketing website and documentation with high-end animations and glassmorphism

- Redesigned marketing site (apps/web) with a terminal-inspired, professional aesthetic.
- Implemented Hero v2 with cinematic, spring-based animations matching the release video.
- Added interactive Pokemon Buddy draggable widget inspired by the desktop app.
- Integrated react-scan for performance auditing.
- Applied consistent glassmorphism, border-flow animations, and Geist Mono typography.
- Revamped Databases, Blog, Comparison, and Download pages for visual consistency.
- Updated documentation (apps/docs) landing page with matching motion choreography and living background.
- Fixed fs module resolution issues in the web app and optimized build stability for React 19.

* chore(docs): remove internal marketing playbook and tracker files

Remove Reddit playbook and analytics tracker docs from the public documentation set, and update marketing navigation to keep the docs section consistent.

Made-with: Cursor

* fix: address review feedback for marketing overhaul

- Extract download page metadata into layout.tsx (SEO regression fix)
- Move react-scan to devDependencies, dynamic import to avoid prod bundle
- Soften unverified '10,000+ developers' claim in CTA
- Restore StructuredData for FAQ rich snippets
- Restore close-on-scroll for mobile menu in header
- Remove `as any` spreads from motion.div — use className directly
- Gate Pokemon buddy behind NEXT_PUBLIC_ENABLE_POKEMON_BUDDY flag
- Fix mood interval priority inversion (excited was unreachable)

* chore: add lock file

* feat: add framer-motion animations to docs pages

---------

Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
2026-04-07 17:49:02 +05:30
Rohith Gilla
2ebd1c2835
Add v0.19.0 release video and fix Windows build
- Add Remotion release video for v0.19.0 with 5 feature scenes:
  Web SQL Client, Table Editor UX, Smart Filter Bar,
  Local-First Storage, and Shared UI Package
- Fix electron-builder Windows build by moving @data-peek/ui
  to devDependencies (it's renderer-only, bundled by Vite)
- Fix unused onCopy prop in smart-filter-bar causing TS error
2026-04-07 11:02:38 +05:30
tembo[bot]
db394e510f
Setup Sentry Next.js SDK (#145)
* chore(web): integrate Sentry SDK and initialize error tracking

Co-authored-by: Rohith <gillarohith1@gmail.com>

* Clean up Sentry wizard boilerplate and normalize formatting

- Strip wizard comments from all Sentry config files
- Replace tracesSampleRate: 1 with tracesSampler (100% in dev, 10% in prod)
- Normalize next.config.ts to single quotes and no semicolons

---------

Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
Co-authored-by: Rohith <gillarohith1@gmail.com>
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
2026-04-07 10:47:17 +05:30
vercel[bot]
164dc3fd9b
Install and Configure Vercel Speed Insights (#137)
# Vercel Speed Insights Installation

Successfully installed and configured Vercel Speed Insights for the data-peek webapp project.

## Changes Made

### 1. Package Installation
- Added `@vercel/speed-insights` version ^2.0.0 to dependencies in `apps/webapp/package.json`
- Updated `pnpm-lock.yaml` with the new dependency and its transitive dependencies

### 2. Component Integration
- Modified `apps/webapp/src/app/layout.tsx`:
  - Imported `SpeedInsights` component from `@vercel/speed-insights/next`
  - Added `<SpeedInsights />` component inside the `<body>` tag, alongside the existing `<Analytics />` component

## Implementation Details

The implementation follows the official Vercel Speed Insights quickstart documentation for Next.js App Router (v13.5+):
- Used the correct Next.js-specific import path: `@vercel/speed-insights/next`
- Placed the component in the root layout file at `app/layout.tsx`
- Added the component inside the `<body>` tag as recommended

## Framework
This project uses Next.js 16.0.7 with the App Router architecture, so the implementation uses the App Router-specific instructions from the official documentation.

## Next Steps
To enable Speed Insights:
1. Deploy the application to Vercel
2. Navigate to the Vercel dashboard
3. Select Speed Insights from the sidebar
4. Choose the project and click Enable
5. After deployment, the Speed Insights script will be automatically injected at `/_vercel/speed-insights/*`
6. Once users visit the site, performance metrics will appear in the Vercel dashboard

## Notes
- The existing `@vercel/analytics` package was already installed, so this addition complements the existing analytics setup
- The pre-existing build errors in the codebase are unrelated to this change - they stem from missing dependencies in the shared `packages/ui` package
- The SpeedInsights component is zero-bundle-size on the client and only loads the tracking script when needed

Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
2026-04-06 18:56:16 +05:30
Rohith Gilla
d722e8996c
feat(webapp): add Dexie database definition for local-first storage 2026-04-06 17:08:09 +05:30
Rohith Gilla
ed41c71f67
fix(webapp): add Clerk dark theme for visible auth UI
Clerk components were rendering dark text on dark background, making
sign-in, user button, and other auth UI invisible. Added @clerk/themes
dark base theme with matching color variables.
2026-04-06 10:45:10 +05:30
vercel[bot]
edc464c29e
Install and configure Vercel Web Analytics (#136)
# Vercel Web Analytics Installation Report

## Summary
Successfully installed and configured Vercel Web Analytics for the data-peek webapp project following the latest official Vercel documentation.

## Changes Made

### 1. Package Installation
- Installed `@vercel/analytics` version 2.0.1 using pnpm
- Updated `apps/webapp/package.json` to include the new dependency

### 2. Code Integration
Modified `apps/webapp/src/app/layout.tsx`:
- Added import: `import { Analytics } from '@vercel/analytics/next'`
- Added `<Analytics />` component inside the `<body>` tag, after the main content providers

### 3. Framework-Specific Implementation
- Used Next.js App Router approach as documented in Vercel's quickstart guide
- Placed Analytics component in the root layout file (`app/layout.tsx`)
- Component placed within `<body>` tag to ensure proper tracking across all pages

## Implementation Details

The Analytics component was added to the root layout following Next.js App Router best practices:
- Import from `@vercel/analytics/next` for Next.js-specific integration
- Placed after the main application content to avoid interfering with the existing ClerkProvider, Providers, and NuqsAdapter wrapper hierarchy
- This ensures analytics tracking is initialized for all pages in the application

## Files Modified
1. `apps/webapp/package.json` - Added @vercel/analytics dependency
2. `apps/webapp/src/app/layout.tsx` - Added Analytics import and component
3. `pnpm-lock.yaml` - Updated lockfile with new dependencies

## Next Steps for Deployment
To enable analytics on Vercel:
1. Enable Web Analytics in the Vercel dashboard (Analytics section)
2. Deploy the application using `vercel deploy`
3. Verify tracking via browser Network tab (look for analytics requests)

## Notes
- The project had pre-existing build issues unrelated to this change (missing @radix-ui dependencies in the UI package)
- The Analytics implementation itself is correct and follows official Vercel documentation
- Analytics will automatically start collecting data once deployed to Vercel with the feature enabled in the dashboard

Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
2026-04-06 09:57:30 +05:30
Rohith Gilla
00500d3e4e
fix: add @types/react to packages/ui devDependencies 2026-04-06 09:34:33 +05:30
tembo[bot]
05c222e90a
Add MSSQL & edit mode support (#134)
* feat(webapp): add MSSQL support, query editing, command palette, and SQL formatting

Co-authored-by: Rohith <gillarohith1@gmail.com>

* chore(webapp): remove MSSQL support and related code to drop database

Co-authored-by: Rohith <gillarohith1@gmail.com>

* fix(webapp): address review feedback for edit mode and query cancel

- Cache pg_backend_pid at connect time so cancelQuery works during in-flight queries
- Cache CONNECTION_ID at connect time for the same reason in MySQL adapter
- Use parameterized query for SET statement_timeout in Postgres adapter
- Parse SQL to extract table/schema context for edit mode instead of empty placeholders
- Add MSSQL bracket identifier quoting to escapeId in edit store
- Remove unused Trash2 and useQueryStore imports from edit-toolbar

---------

Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
Co-authored-by: Rohith <gillarohith1@gmail.com>
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
2026-04-06 08:38:10 +05:30
Rohith Gilla
ddb9d9633d
refactor: migrate desktop UI components to shared @data-peek/ui package
Copy 9 remaining components (alert-dialog, chart, checkbox, collapsible,
command, context-menu, progress, sidebar, switch) to packages/ui and
update all 92 desktop files to import from @data-peek/ui instead of
local @/components/ui/* paths.
2026-04-05 09:47:01 +05:30
Rohith Gilla
fb89beee0c
refactor(webapp): use @data-peek/ui shared components in data table and toolbar 2026-04-05 09:29:31 +05:30
Rohith Gilla
8d3642b1be
feat(webapp): add column stats adapter methods and nuqs dependency 2026-04-04 22:08:03 +05:30
Rohith Gilla
1ecd1b41e5
feat(webapp): add Monaco SQL editor with data-peek theme 2026-04-03 13:20:42 +05:30
Rohith Gilla
c4d9d60127
feat(webapp): add tRPC with Clerk auth and connections router 2026-04-03 11:01:32 +05:30
Rohith Gilla
69d7c3da91
feat(webapp): scaffold Next.js app with Tailwind and Clerk 2026-04-03 10:54:15 +05:30
vercel[bot]
cffce4beee
Install Vercel Web Analytics (#130)
## Vercel Web Analytics Installation

Successfully installed and configured Vercel Web Analytics for the data-peek documentation site.

### Implementation Details

**Framework Identified:** TanStack Start (React-based framework with Nitro)

**Changes Made:**

1. **Package Installation**
   - Added `@vercel/analytics` (v2.0.1) to `apps/docs/package.json`
   - Package installed using pnpm as per project's package manager
   - Updated `pnpm-lock.yaml` to reflect new dependency

2. **Analytics Configuration** 
   - Modified `apps/docs/src/routes/__root.tsx`:
     - Added import: `import { Analytics } from "@vercel/analytics/react"`
     - Added `<Analytics />` component to the RootDocument body, placed before the `<Scripts />` component
   
**Implementation Approach:**

Following the official Vercel Analytics documentation (fetched from https://vercel.com/docs/analytics/quickstart), I:
- Used the React-specific package `@vercel/analytics/react`
- Added the `<Analytics />` component to the root layout where it can track all page views
- Positioned it before the `<Scripts />` component in the body to ensure proper initialization
- The component automatically detects the environment (production/development) via NODE_ENV
- In production (when deployed to Vercel), the analytics will be active; in development, it will use debug mode

**Build Verification:**

 Build completed successfully (`pnpm run build`)
 No TypeScript errors related to the Analytics integration
 Package installed without conflicts
 Existing functionality preserved

**Next Steps for Deployment:**

To enable analytics data collection, the project owner needs to:
1. Visit the Vercel dashboard for this project
2. Navigate to the Analytics section
3. Click "Enable" to activate Web Analytics
4. Deploy the updated code to Vercel

Once deployed and enabled in the dashboard, analytics will automatically track page views and web vitals.

Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
2026-04-02 17:57:36 +05:30
Rohith Gilla
c93427a19d
chore:fix merge conflict 2026-04-02 15:20:50 +05:30
tembo[bot]
92b4c41cef
Add Tanstack Hotkeys (#129)
* chore: replace manual keyboard handlers with tanstack react-hotkeys integration

Co-authored-by: Rohith <gillarohith1@gmail.com>

* Address review: add conflictBehavior and simplify callback

* Add image sharing to dashboards (#128)

* feat(health-monitor): add ability to share health dashboard panels as images and share query results as images

Co-authored-by: Rohith <gillarohith1@gmail.com>

* Address review: extract share components, deduplicate ShareQueryDialog, fix capture transitions

- Extract renderShareContent into ShareActiveQueries, ShareTableSizes,
  ShareCacheStats, ShareLocks components in health-share-content.tsx
- Move shareDialogTitles/shareDialogPrefixes to module-level constants
- Use single TooltipProvider wrapping the card grid
- Remove transition-all duration-200 from ShareImageDialog capture target
  to prevent intermediate-state captures
- Refactor ShareQueryDialog to use ShareImageDialog as its base, eliminating
  ~250 lines of duplicated background/padding/branding/capture logic
- Add header and extraOptions props to ShareImageDialog for composition
- Add privacy notices about connection names and sensitive data in share
  dialog descriptions

---------

Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
Co-authored-by: Rohith <gillarohith1@gmail.com>
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>

* chore: replace manual keyboard handlers with tanstack react-hotkeys integration

Co-authored-by: Rohith <gillarohith1@gmail.com>

* Address review: add conflictBehavior and simplify callback

---------

Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
Co-authored-by: Rohith <gillarohith1@gmail.com>
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
Co-authored-by: tembo[bot] <208362400+tembo-io[bot]@users.noreply.github.com>
2026-04-02 15:11:11 +05:30
vercel[bot]
bf947c7f8f
Install Vercel Web Analytics (#127)
## Vercel Web Analytics Installation

Successfully installed and configured Vercel Web Analytics for the Next.js App Router project.

### Changes Made

**Modified Files:**
- `apps/web/package.json` - Added `@vercel/analytics` (v2.0.1) dependency
- `apps/web/src/app/layout.tsx` - Added Analytics component import and rendering
- `pnpm-lock.yaml` - Updated with new dependency

### Implementation Details

1. **Fetched Latest Documentation**: Retrieved the most up-to-date installation instructions from https://vercel.com/docs/analytics/quickstart

2. **Package Installation**: Added `@vercel/analytics@^2.0.1` to the project dependencies using pnpm

3. **Analytics Configuration**: Following the official Next.js App Router setup instructions:
   - Imported `Analytics` component from `@vercel/analytics/next`
   - Added `<Analytics />` component to the root layout at the end of the `<body>` tag
   - Preserved all existing code structure and styling

4. **Framework Identification**: Confirmed this is a Next.js 16.0.7 App Router project (layout.tsx in app directory)

### Verification

- TypeScript type checking passed successfully (no type errors)
- Changes follow the official Vercel documentation pattern exactly
- The Analytics component is placed correctly in the root layout for global tracking
- All imports are properly added
- Lock file (pnpm-lock.yaml) updated with the new dependency

### Notes

- The Analytics component will automatically track page views and web vitals when the app is deployed
- No additional configuration is required - the component works out of the box
- The existing analytics scripts (Clarity, SimpleAnalytics, etc.) remain unchanged
- Pre-existing build warnings/errors (DodoPayments API key, Clerk publishable key) are unrelated to this implementation and exist in the codebase

Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
2026-04-02 14:34:27 +05:30
Rohith Gilla
2fe4eceb47
feat: add v0.17.0 release video with background audio
Remotion composition for the v0.17.0 stability release covering
identifier quoting, enum array parsing, and stability fixes.
Includes royalty-free ambient background music from Mixkit.
2026-04-02 12:33:33 +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
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
7d89ca4fa2
feat: Add Query Sharing Feature (Ray.so style) (#107)
* feat: add query sharing feature

- Add ShareQueryDialog component for generating beautiful query images
- Implement SQL syntax highlighting with tokens (keywords, functions, strings, etc.)
- Support multiple background styles (gradients and solid colors)
- Support light/dark themes
- Add database type badge with connection icon
- Copy to clipboard or save as PNG
- Add Share button to query editor toolbar

* fix: address CodeRabbit review feedback

- Replace html2canvas with html-to-image (actively maintained, better CSS support)
- Import SQL_KEYWORDS from shared constants instead of duplicating
- Extract TokenType and BackgroundStyle to separate type aliases (line width)
- Fix handleDownload missing await and dependency in useCallback
- Remove backdrop-blur-sm from render target (unsupported by image export)

* fix: update next-mdx-remote to v6.0.0 (CVE-2026-0969)

* Fix type safety & cleanup (#112)

Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>

---------

Co-authored-by: Rohith Gilla <rohithgilla11@gmail.com>
Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
2026-03-07 11:14:09 +05:30
Rohith Gilla
4a544ec4da
Add Homebrew Cask support (#111)
* feat(homebrew): add Homebrew cask and update workflow for macOS install

Co-authored-by: Rohith <gillarohith1@gmail.com>

* fix(web): upgrade next-mdx-remote to 6.0.0 to fix vulnerability

Co-authored-by: Rohith <gillarohith1@gmail.com>

---------

Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
2026-03-07 10:56:01 +05:30
Rohith Gilla
8a4f5b0e9d chore: fixing builds 2025-12-24 19:51:10 +05:30
Rohith Gilla
50108c7807
fix: virtualize data tables to eliminate typing lag (#80)
* 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
2025-12-19 16:46:05 +05:30
Rohith Gilla
7458e6649a Merge branch 'main' into claude/setup-blog-posts-sitemap-GqlX8 2025-12-18 13:28:50 +05:30
Rohith Gilla
8a865b512a feat: add widgets!!!! 2025-12-17 08:34:49 +05:30
Rohith Gilla
3ed1de344f feat(scheduler): replace setTimeout with node-cron for reliable scheduling
- Replace setTimeout-based scheduling with node-cron for precise timing
- Add "New Schedule" button to empty state in sidebar
- Add cron expression validation before scheduling
- Remove comment dividers per style preference
2025-12-16 19:58:56 +05:30
Rohith Gilla
3b22a8a4c9 Merge branch 'main' into claude/query-scheduling-cron-Yxty6 2025-12-16 19:11:41 +05:30
Rohith Gilla
5b95ddb260
feat(web): add blog with MDX support and centralized notes (#70)
* feat(web): add blog with MDX support and sitemap integration

- 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

* chore: update a few design changes.

* feat: introduce terminal-style headers for blog post cards and update MDX code block circle colors

* feat: Remove two blog posts and an AI implementation note, update blog infrastructure, and add a reading progress component.

* fix: escape MDX-incompatible characters in blog post

Replace `<1000` and `>10000` with plain text to avoid MDX interpreting
them as JSX tags.
2025-12-16 18:10:34 +05:30
Claude
ac4557c301
feat: add query scheduling with cron-like support
- Add ScheduledQuery and ScheduledQueryRun types to shared package
- Create scheduler service in main process with cron-parser for scheduling
- Add IPC handlers for scheduled queries CRUD operations
- Update preload to expose scheduled queries API
- Create Zustand store for scheduled queries state management
- Add UI components:
  - ScheduledQueriesDialog for listing and managing schedules
  - ScheduledQueryFormDialog for creating/editing schedules
  - ScheduledQueryRunsDialog for viewing run history
  - ScheduledQueries sidebar component
- Support schedule presets (every minute, hourly, daily, etc.) and custom cron
- Include desktop notifications on completion/error
- Store run history with configurable retention
2025-12-16 10:09:32 +00:00
Rohith Gilla
5708e162f5 chore: update a few design changes. 2025-12-16 13:52:56 +05:30
Claude
d3efa5e0d1
feat(web): add blog with MDX support and sitemap integration
- 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
2025-12-16 07:48:53 +00:00
Rohith Gilla
a610709b80
feat: add query performance indicator (#69)
* feat: add query perf indication

* fix: address code review issues from PR #69

- Fix invalid PostgreSQL identifier truncation (use substring(0,63) instead of appending dots)
- Split long regex patterns to satisfy Prettier line length limits
- Add guard against empty/malformed EXPLAIN plan arrays
- Use @shared/index import for consistency with project conventions
- Add missing uuid dependency to package.json
2025-12-16 11:52:55 +05:30
Rohith Gilla
c09d243b58
chore: codebase cleanup and DRY refactoring (#63)
* chore: codebase cleanup and DRY refactoring

- Create useCopyToClipboard hook to eliminate duplicate clipboard pattern
- Create getTypeColor utility to consolidate type color logic
- Create usePanelCollapse hook for panel state management
- Create useExecutionPlanResize hook for resize logic with persistence
- Extract connection string parser to dedicated module (206 lines)
- Remove 5 unused AI response types from shared package
- Remove unused dependencies (@ai-sdk/openai-compatible, @ai-sdk/react)
- Remove machine-generated section comments from shared/index.ts

* chore: fix small issue
2025-12-12 15:04:01 +05:30
Rohith Gilla
5311e58c13 fix: add missing @radix-ui/react-visually-hidden dependency
The command.tsx component imports this package but it was not listed
in dependencies, causing production builds to fail.
2025-12-12 13:00:03 +05:30
Rohith Gilla
ca5d3e0e5c
feat: migrate command palette to cmdk library (#59)
* feat: migrate command palette to cmdk library

- Replace custom command palette with cmdk for better UX
- Add nested page navigation (connections, saved queries, appearance)
- Implement smart fuzzy search with acronym and character matching
- Add pin/unpin functionality for saved queries
- Auto-switch to newly added connections
- Cmd+P now opens directly to connection list with add/edit options

* chore: Apply consistent code formatting and quoting conventions across various files.

* chore: delete unwanted
2025-12-12 11:26:57 +05:30
Rohith Gilla
4509ddafc0
feat: simplify SQLite to local file-only support (#56)
* feat: add SQLite database support

Implement SQLite adapter using better-sqlite3 library:
- Create SQLiteAdapter class implementing DatabaseAdapter interface
- Support all database operations: query, queryMultiple, execute, executeTransaction
- Implement schema discovery using SQLite PRAGMAs (table_info, foreign_key_list, index_list)
- Add SQLite type normalization (INTEGER, TEXT, REAL, BLOB affinities)
- Support EXPLAIN QUERY PLAN for query analysis
- Add comprehensive unit tests for SQLite adapter
- Update query-tracker to handle SQLite (synchronous, non-cancellable)
- Enhance AI service with SQLite-specific SQL guidelines

Note: SQLite uses 'main' as the default schema and doesn't support
sequences or custom types - these methods return empty arrays.

* feat: add SQLite to connection dialog UI

- Add SQLiteIcon component to database-icons.tsx
- Add SQLite button to database type selector (now 4-column grid)
- Show SQLite-specific form with only database file path input
- Hide host, port, user, password fields for SQLite
- Disable SSH/SSL options when SQLite is selected
- Update validation to only require database path for SQLite

* feat: add libSQL/Turso adapter for remote SQLite connections

- Add LibSQLAdapter for connecting to Turso and libSQL databases
- Update db-adapter to route libsql mode connections to LibSQLAdapter
- Extend connection dialog UI with libsql mode selection
- Add libsql-client dependency

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

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

* feat: simplify SQLite to local file-only, remove libSQL/Turso temporarily

Remove @libsql/client dependency due to native module bundling issues
with electron-vite. SQLite now only supports local file-based databases.

Changes:
- Remove @libsql/client from package.json
- Delete libsql-adapter.ts
- Update db-adapter.ts to remove libSQL routing
- Simplify connection dialog to only show file path input for SQLite
- Add "coming soon" note for Turso/libSQL support
- Simplify SQLiteMode type to just "local"

Turso/libSQL support will be re-added once native module bundling
issues are resolved.

---------
2025-12-11 12:16:16 +05:30
Rohith Gilla
ec5de32862 fix: move shared package to devDependencies for electron-builder
Fixes Linux build by moving @data-peek/shared from dependencies to
devDependencies. The shared package is bundled by Vite via the @shared
alias, so it's not needed at runtime. Also excludes .turbo directories
from the build.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 09:27:34 +05:30
phantomreactor
70d5f6a270
feat: db connections via ssh (#51)
* feat: connect via ssh

* Update apps/desktop/src/main/ssh-tunnel-service.ts

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* refactor ssh changes

* fix: address review comments

---------

Co-authored-by: Rohith Gilla <gillarohith1@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-12-09 08:07:57 +05:30
Rohith Gilla
da8cc574d3 chore: fix build and clean things 2025-12-08 19:58:17 +05:30
Rohith Gilla
66df1f77a8 Merge branch 'main' into claude/add-test-coverage-01L5b9CcytSmm7k9rzFdLdiH 2025-12-06 15:54:05 +05:30
Rohith Gilla
f102f61a55 chore: refactor logging 2025-12-06 15:34:08 +05:30