Full deployment history for this project.
wire shared database env aliases
🔒 fix: prevent XSS via unescaped sourceUrl in sheet-storage This commit addresses a Cross-Site Scripting (XSS) vulnerability where malicious URLs (e.g., `javascript:`) could be saved to the `sourceUrl` field in `sheet-storage`. Changes: - Implemented `sanitizeSourceUrl` helper using `validateIngestUrl` to ensure only `http` and `https` URLs are stored. - Applied sanitization in `saveSheet`, `saveSheetAsync`, `updateSheet`, `updateSheetAsync`, and `normalizeStoredSheet`. - Added a regression test in `lib/sheet-storage.test.ts`. Risk: Low. Malicious URLs are now blocked (converted to null), preventing potential execution of unauthorized scripts when the URL is rendered. Solution: Centralized validation for all entry points to sheet storage.
🧪 Add unit tests for lib/sheets/trace.ts - Added comprehensive tests for `sanitizeVercelMetadata`, including truncation of allowed headers and redaction of IP-related headers. - Added tests for `createTraceLink`, `buildTraceHeaders`, and `getBaseUrl`. - Improved environment variable mocking in tests using `vi.stubEnv`.
perf: optimize summarizeRows by reducing array iterations Refactored the `summarizeRows` function to process rows in a single pass and accumulate statistics for all columns simultaneously. This significantly reduces array allocations and redundant iterations, resulting in a ~85% performance improvement for large datasets. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #21 from mbarbine/bolt-search-performance-6436601329608069908
🎨 Palette: Add ARIA labels and titles to API key icon buttons in Settings
🎨 Palette: Add keyboard shortcut for global search Adds a global `/` keyboard shortcut to open and focus the search modal. The visual hint was already present in the UI but lacked functionality. Includes robust checks to avoid interfering with normal input typing.
Merge pull request #21 from mbarbine/bolt-search-performance-6436601329608069908 ⚡ Bolt: Search Filtering String Allocation Optimization
Merge pull request #22 from mbarbine/bolt-optimize-data-grid-filter-13872432440837384008 ⚡ Bolt: [performance improvement] Optimize string conversions in DataGrid filtering
Merge pull request #23 from mbarbine/palette/ux-fix-duplicate-aria-labels-12384030704400437213 🎨 Palette: Remove duplicate aria-labels from DataGrid components
Remove duplicate aria-labels from DataGrid components
⚡ Bolt: [performance improvement] Optimize string conversions in DataGrid filtering
⚡ Bolt: Search Performance Optimization - Extracted search query mapping into `useMemo` in search/page - Switched to using pre-compiled case-insensitive regex tests instead of doing multiple `toLowerCase()` conversions - Added `useDeferredValue` for the query to ensure input typing feels fast. - Implemented similar regex match on API routes for full parity.
Merge pull request #10 from mbarbine/palette-a11y-pagination-aria-labels-14971132900953967526 🎨 Palette: Add ARIA labels to pagination buttons
Merge branch 'main' into palette-a11y-pagination-aria-labels-14971132900953967526
Merge pull request #20 from mbarbine/bolt-optimize-sheets-search-13204673194113120587 ⚡ Bolt: Optimize search query and filtering in sheets list
⚡ Bolt: Optimize search query and filtering in sheets list - Added `useDeferredValue` for `searchQuery` to prevent filtering from blocking main thread during user input. - Pre-compiled case-insensitive RegExp to replace `.toLowerCase().includes()` inside hot loops, reducing string allocations and GC pressure. - Replaced `.some()` array iteration with standard `for` loop to avoid closure allocation. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #19 from mbarbine/bolt/optimize-data-grid-search-11910848326420264143 ⚡ Bolt: Optimize data grid search and filter performance
⚡ Bolt: Optimize data grid search and filter performance Pre-compiled regular expressions significantly reduce string allocation overhead compared to `.toLowerCase().includes(...)` calls during the grid filtering operation. Extracted `columns.map(c => c.key)` mapping into a pre-computed array to avoid object property lookup costs for every cell in a row. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #14 from mbarbine/palette/a11y-pagination-labels-17978743502151269104 🎨 Palette: Add ARIA labels to data grid pagination
Merge branch 'main' into palette/a11y-pagination-labels-17978743502151269104
Merge pull request #17 from mbarbine/bolt-datagrid-filter-perf-17215435236670553582 ⚡ Bolt: Optimize DataGrid filtering performance
Merge branch 'main' into bolt-datagrid-filter-perf-17215435236670553582
Merge pull request #18 from mbarbine/bolt-optimize-excel-parsing-10113753238593355397 ⚡ Bolt: Optimize Excel file parsing by removing O(N²) column key generation
⚡ Bolt: Optimize Excel file parsing by removing O(N²) column key generation * Replaced `Object.keys(normalized).length` inside loop with an O(1) `colIndex` counter * Drastically reduces array allocations per row in wide spreadsheets with missing headers * Recorded learning to .jules/bolt.md Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
perf(datagrid): optimize global search filtering over large datasets Replaced array prototype methods (`.some()`) and `for...of` loops inside the per-row `.filter()` block with standard `for` loops to avoid allocating short-lived closures and iterator objects on every row evaluation. This measurably reduces main-thread blocking when searching large spreadsheets. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #15 from mbarbine/jules-palette-a11y-data-grid-36353686446422510 🎨 Palette: Add accessibility attributes to Data Grid components
Merge pull request #13 from mbarbine/bolt-usedeferredvalue-datagrid-7337564117849726214 ⚡ Bolt: Add useDeferredValue to prevent main-thread blocking during DataGrid filtering
Merge branch 'main' into bolt-usedeferredvalue-datagrid-7337564117849726214
Merge pull request #16 from mbarbine/bolt-datagrid-react-memo-3877257508751611251 ⚡ Bolt: Add React.memo() to DataGrid rows
⚡ Bolt: Add React.memo() to DataGrid rows Extracted row rendering into a memoized `DataGridRow` component and moved `formatValue` and `getCellStyle` functions outside `DataGrid` to prevent complete re-rendering of all rows on unrelated state updates. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add accessibility attributes to Data Grid components Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add ARIA labels to pagination buttons Added descriptive ARIA labels ("Previous page", "Next page") to the icon-only pagination buttons in the DataGrid component to improve accessibility for screen readers. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
perf(datagrid): defer search and filter states to prevent main thread blocking Added React.useDeferredValue for the search and columnFilters states in DataGrid. This ensures that typing in the search and filter inputs remains highly responsive even when computing the filtered dataset is expensive due to a large number of rows. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Use React.useDeferredValue for search optimization in data-grid Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add ARIA labels to DataGrid controls Added appropriate aria-labels to the main search input, column filter inputs, and icon-only pagination/clear controls in components/data-grid.tsx. Created .Jules/palette.md log with an insight about complex data display components. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add ARIA labels to pagination buttons Add aria-labels to the icon-only pagination buttons in the DataGrid component to improve screen reader accessibility. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #5 from mbarbine/feat/health-mcp-docs-upgrade-17940845906317918871 feat: Implement health check, network graph, FAQ, breadcrumbs, and comprehensive testing suite
Merge pull request #4 from mbarbine/jules-11642321224001829782-e52a4002 Introduce PlatPhorm Universal Schema Pack separated files
⚡ Bolt: Cache Intl formatters in DataGrid Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Rename project to OpenSheets and simplify README Updated project name and removed v0 specific details.