LOADING…
0%
Build history

Every step,
from the first commit.

A complete build timeline of Grainstash taking shape—from early sequencer experiments to the product it is today.

Commits
1,543
Since
2024
Through
2026

Showing 401–450 of 1,543

Page 9 of 31

27 commits
  1. refactor(AnimatedDropdown): convert to native select element

    Cursor Agent dabdefb1

    Commit notes

    - Replace Melt UI Popover-based dropdown with native <select> - Simplify API to accept options array and value props - Update LibraryFilters.svelte to use new native select API - Update SharePopover.svelte to use new native select API - Style native select to match dark theme with custom caret icon Co-authored-by: armin.naimi <[email redacted]>

    Files
    3
    Added
    +159
    Removed
    −294
  2. fix(library): apply UI skills fixes to LibrarySearchFilter

    Cursor Agent 45d9d18c

    Commit notes

    - Replace h-* w-* with size-* for square elements (upload btn, search btn, filter btn, clear btn, badge) - Replace transition-all with transition-[width] for explicit property animation - Reduce animation duration from 200ms to 150ms for snappier interaction - Remove will-change: width (was applied statically, wasting GPU memory) - Add tabular-nums to filter count badge for proper number alignment Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +14
    Removed
    −15
  3. Merge origin/main into cursor/library-multiple-file-upload-6955

    Cursor Agent 65ed01f5

    Commit notes

    Resolved conflict in LibrarySearchFilter.svelte: - Kept upload button and hidden file input from feature branch - Applied viewport fix classes from main (min-w-0 flex-shrink) - Added flex-shrink-0 to upload button for consistent sizing Co-authored-by: armin.naimi <[email redacted]>

    Files
    0
    Added
    +0
    Removed
    −0
  4. Fix search expanded state pushing SSE badge out of viewport

    Cursor Agent 83e3bfab

    Commit notes

    - Add min-w-0 to header flex container to allow proper flex shrinking - Add flex-shrink-0 to sidebar toggle, h1, and SSE badge container - Update LibrarySearchFilter to use flex-1 with min/max constraints instead of fixed width when expanded, allowing it to shrink - Search now has min-w-[120px] to stay usable, max-w-48/64 to limit growth Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +7
    Removed
    −7
  5. feat(library): add upload button next to search/filter

    Cursor Agent 30ef6278

    Commit notes

    - Add upload icon button (Plus) to LibrarySearchFilter component - Hidden file input accepts multiple audio files (wav, mp3, flac, m4a, aac, aiff, ogg) - Upload button triggers file picker on click - Handle file selection in library page using existing upload mutation - Upload progress displayed via existing UploadProgressPanel - Works on all devices with accessible button styling and touch targets Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +172
    Removed
    −5
  6. fix(library): fix Popover initialization in LibrarySearchFilter causing page load failure

    Cursor Agent 2de0f9d3

    Commit notes

    The LibrarySearchFilter component was using an incorrect Popover initialization pattern that caused the library page not to load: 1. Variable declaration order issue: filterOpen variable was declared AFTER being referenced in the Popover constructor (temporal dead zone issue) 2. Wrong Popover pattern: The component used custom open/onOpenChange callbacks and getter functions for floatingConfig, which differs from the simple pattern used in all other working components Fixed by: - Removing the custom open/onOpenChange callbacks from Popover constructor - Using floatingConfig as a plain object instead of a getter function - Using filterPopover.open directly instead of separate filterOpen state - Matching the pattern used in WorkspaceSwitcher, Header, and other components Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +5
    Removed
    −10
  7. feat(library): simplify search/filter UX with expandable search and filter popover

    Cursor Agent f27958fe

    Commit notes

    - Replace LibraryFilters component with LibrarySearchFilter in header - Add button group with search icon that expands to input field on click - Add filter button that opens popover with all filter options - Implement micro animation for search expansion (200ms ease-out) - Move search/filter controls inline with Library title and SSE badge - Group all filters (Tags, Mood, BPM, Key, Sort) in collapsible sections - Add filter count badge when filters are active - Preserve selection indicator functionality Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +469
    Removed
    −16
  8. fix(drawer): Fix content layout height following vaul's recommended pattern

    Cursor Agent 3a23ba99

    Commit notes

    - Change height from h-fit to h-full mt-24 max-h-[96%] for proper constrained height that allows flex layout to work - Add flex-shrink-0 to drag handle and header to prevent compression - Add min-h-0 to content area for proper flex shrinking with overflow - Add mt-auto to footer for proper bottom positioning - Add aria-hidden to decorative drag handle The issue was that h-fit made the drawer only as tall as its content, which broke the flex-1 on the scrollable content area. With a constrained height, the flex layout now properly distributes space and the footer stays visible while content scrolls. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +18
    Removed
    −13
  9. simplify: remove direct R2 upload, keep server-based approach

    Cursor Agent 72b0fffa

    Commit notes

    Removed direct upload complexity. The speed gains come from: - Rate limit: 100 → 1000 chunks/min (10x) - Chunk concurrency: 4 → 8 (2x) - File concurrency: 6 → 8 (1.3x) - Adaptive chunk sizing (backend) Expected improvement: 25 min → ~8-10 min for 650 files / 1.52GB Backend presigned URL endpoints kept for future use if needed. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +38
    Removed
    −144
  10. feat: implement direct R2 uploads via presigned URLs

    Cursor Agent 32130383

    Commit notes

    New upload flow: 1. Browser requests presigned URLs from server for all chunks 2. Browser uploads directly to R2 using presigned URLs 3. Browser confirms each chunk with server 4. Falls back to server upload if CORS blocks direct access Benefits: - Server only handles metadata, not file data - Reduces server CPU/memory/bandwidth - Faster uploads (direct to storage) - Automatic fallback ensures reliability Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +144
    Removed
    −38
  11. chore: remove unused TUS and V2 upload components

    Cursor Agent b25ced6d

    Commit notes

    Removed experimental files that aren't being used: - backend/src/routes/tus.ts - frontend/src/lib/upload/ (entire directory) - frontend/src/routes/library/components/*V2.svelte - frontend/src/routes/library/components/UploadResumePrompt.svelte The performance improvements are now purely in: - backend: rate limits, adaptive chunk sizing - frontend/src/lib/api/upload.ts: increased parallelism Co-authored-by: armin.naimi <[email redacted]>

    Files
    10
    Added
    +0
    Removed
    −3141
  12. perf: true drop-in replacement - increase upload parallelism

    Cursor Agent 83df9a5b

    Commit notes

    Backend (already committed): - Rate limit: 100 → 1000 chunks/min (10x) - Concurrent uploads: 10 → 50 (5x) - Adaptive chunk sizing: 512KB-5MB based on file size - Batch initiate: 50 → 100 files per request Frontend (this commit): - Chunk upload concurrency: 4 → 8 (2x) - File upload concurrency: 6 → 8 (1.3x) - Reverted to original components (no UI changes needed) Total estimated improvement: 3-5x faster uploads No frontend component changes required - true drop-in replacement Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +7
    Removed
    −10
10 commits
  1. feat: add experimental TUS protocol files (not active)

    Cursor Agent 22d88342

    Commit notes

    Added TUS protocol implementation files for future reference: - backend/src/routes/tus.ts - TUS server route (needs tusd or manual impl) - frontend/src/lib/upload/tus-client.ts - TUS client using tus-js-client These are NOT active - the custom upload system is used instead. TUS vs Custom comparison documented in the files. The custom system provides: - Direct S3 presigned URL uploads (faster, no server bottleneck) - IndexedDB persistence (cross-session resume on same device) - Native Bun/Elysia compatibility - 8+ concurrent chunk uploads TUS would provide: - Cross-device resume (server-side state) - Protocol standardization - Battle-tested implementation For TUS, the recommended approach is running tusd as a microservice. Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +705
    Removed
    −0
  2. fix: improve upload engine with graceful fallback

    Cursor Agent 97a3affe

    Commit notes

    - Add CORS/network error handling with fallback to server upload - Remove unused imports from UploadDropzoneV2 - Better error messages when direct S3 upload fails Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +25
    Removed
    −16
  3. feat: integrate new upload system into library page

    Cursor Agent 5387f294

    Commit notes

    - Switch to V2 upload components (UploadDropzoneV2, UploadProgressPanelV2) - Add UploadResumePrompt for pending upload detection on page load - Keep backward-compatible old components as fallback Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +7
    Removed
    −2
  4. feat: implement high-performance resumable upload system

    Cursor Agent c69d5ade

    Commit notes

    Major overhaul of the upload system with: Backend: - Added presigned URL endpoints for direct S3 uploads - Added chunk confirmation endpoint for presigned uploads - Increased rate limits (100 -> 1000 chunks/min) - Increased concurrent upload limit (10 -> 50) - Increased batch initiate limit (50 -> 100 files) - Added adaptive chunk sizing based on file size - Support for custom chunk sizes from client Frontend: - New upload engine with 8+ concurrent chunk uploads - IndexedDB persistence for cross-session resumability - Direct S3 uploads via presigned URLs (bypasses server) - Adaptive chunk sizing (512KB-5MB based on file size) - Real-time speed metrics (current, peak, average) - Pause/resume/cancel controls - Resume prompt for pending uploads on page load - Improved progress panel with speed display Co-authored-by: armin.naimi <[email redacted]>

    Files
    12
    Added
    +2609
    Removed
    −10
  5. refactor(Library): adjust layout and styling for improved responsiveness

    Armin Naimi 052e637b

    Commit notes

    - Updated the gap in the library layout to dynamically adjust based on sidebar visibility, enhancing the user interface. - Modified padding in the UploadDropzone component for better visual consistency across different screen sizes. These changes improve the overall user experience and responsiveness of the library interface.

    Files
    2
    Added
    +2
    Removed
    −2
  6. refactor(Header, WorkspaceContextIndicator): update component styles for improved UI consistency

    Armin Naimi 50eb0f17

    Commit notes

    - Adjusted border radius from 'rounded-xl' to 'rounded-lg' in Header component for a more uniform appearance. - Updated button styles in WorkspaceContextIndicator to use 'rounded-md' instead of 'rounded-lg' for consistency across components. - Modified padding and size of avatar images for better alignment and visual balance. - Refined loading skeleton styles to enhance user experience during loading states. These changes enhance the overall aesthetic and usability of the header and workspace context components.

    Files
    3
    Added
    +9
    Removed
    −9
  7. feat(mobile): Hide navigation on scroll for better mobile UX

    Cursor Agent ab475a39

    Commit notes

    - Add useScrollVisibility hook to track scroll direction on mobile - Hide mobile bottom navigation when scrolling down - Show navigation when scrolling up or at top of page - Respects prefers-reduced-motion for accessibility - Uses performant transform animation with proper easing - Auto-shows navigation when user menu is open Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +137
    Removed
    −6
  8. perf: optimize multi-file uploads with batch initiate

    Cursor Agent 5ad34aa2

    Commit notes

    - Add batch initiate endpoint (/uploads/batch/initiate) that creates multiple upload sessions in a single API call - Update frontend uploadFiles() to use batch initiate for multi-file uploads, reducing N API calls to 1 - Add batch storage check before upload batch (saves 1 round-trip per file) - Increase file upload concurrency from 4 to 6 - Add preInitiatedSession option to uploadFile() to skip individual initiation For a 9-file upload, this reduces: - Storage checks: 9 calls → 1 call - Initiate calls: 9 calls → 1 call - Total saved: ~16 API round-trips This should noticeably improve upload latency for small file packs. Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +399
    Removed
    −22
13 commits
  1. Remove CI configuration and VSCode extensions; refactor CommandPalette and Header components

    Armin Naimi 6bcaac80

    Commit notes

    - Deleted the CI workflow configuration file to streamline the project setup. - Removed the VSCode extensions recommendations file to reduce clutter. - Refactored the CommandPalette component by removing the 'Go to Home' navigation command. - Updated the Header component to simplify the navigation links and improve accessibility with aria-labels for buttons. These changes enhance the project's maintainability and user interface consistency.

    Files
    4
    Added
    +22
    Removed
    −179
  2. Implement Pro Upgrade Notification for Share Analytics

    Armin Naimi 150ab2a8

    Commit notes

    - Added a conditional display for users without a Pro subscription, informing them that detailed share analytics requires a Pro upgrade. - Introduced new UI elements including a notification section with upgrade benefits and a call-to-action button linking to the subscription settings. - Integrated derived state management to handle subscription status and error messages related to Pro requirements. This enhances user experience by clearly communicating the benefits of upgrading to Pro for accessing advanced analytics features.

    Files
    1
    Added
    +49
    Removed
    −4
  3. Refactor SSE handling in share-events and update API for direct connections

    Armin Naimi 29e600cf

    Commit notes

    - Modified the `subscribeToShareEvents` function to improve event yielding and added cleanup logic for subscriber disconnection. - Introduced `getSSEBaseUrl` function to provide a dedicated backend URL for Server-Sent Events (SSE), ensuring reliable connections by bypassing frontend proxies. - Updated hooks `useLibrarySSE` and `useShareSSE` to utilize the new SSE URL for improved performance and stability in event streaming. These changes enhance the robustness of SSE connections and streamline event handling in the application.

    Files
    4
    Added
    +42
    Removed
    −16
  4. Enhance vector search migration to conditionally handle pgvector extension

    Armin Naimi 51cd88cc

    Commit notes

    - Added checks to ensure the pgvector extension is available before creating the embedding_vector column and associated indexes. - Wrapped operations in DO blocks to gracefully skip setup if pgvector is not installed, allowing the application to fall back on JavaScript for similarity search. - Included notices for successful operations and backfilling of existing embeddings. - Updated comments for clarity on the migration's behavior with and without pgvector. This improves the robustness of the migration process and ensures compatibility with environments lacking the pgvector extension.

    Files
    1
    Added
    +111
    Removed
    −56
  5. Add HNSW vector index for scalable similarity search

    Cursor Agent 9a2c50c9

    Commit notes

    - Add migration 0018_vector_search_index.sql with HNSW index - Ensures pgvector extension is enabled - Creates embedding_vector column with sync trigger from embedding array - Adds HNSW index with cosine distance for O(log n) search complexity - Adds partial indexes for project-scoped and user-scoped searches - Includes detailed performance documentation This makes similarity search scale to thousands/millions of samples without performance degradation. Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +127
    Removed
    −0
  6. feat: implement SSE proxy for event streaming

    Armin Naimi ba6071ad

    Commit notes

    Added a new server-side handler for Server-Sent Events (SSE) in the events route. This proxy forwards SSE from the backend to the frontend, ensuring proper streaming and handling of connection issues. The implementation includes error handling and logging for better debugging and reliability.

    Files
    1
    Added
    +68
    Removed
    −0
  7. fix: adjust database connection settings for Railway compatibility

    Armin Naimi 134fe81d

    Commit notes

    Updated the database connection configuration to disable SSL for Railway's internal network and modified the query settings to disable prepared statements for better compatibility with Railway's connection pooling. This change enhances the application's performance and reliability when deployed on Railway.

    Files
    1
    Added
    +9
    Removed
    −2
  8. fix: use explicit column selection in auth queries to prevent schema mismatch errors

    Cursor Agent 0064f1fc

    Commit notes

    The production database query was failing because Drizzle ORM's findFirst() and returning() methods were trying to select all columns defined in the schema, including Mollie Connect columns (mollie_onboarding_status, etc.) that may not exist in all database environments. This fix: - Adds authUserColumns constant for SELECT queries with explicit column selection - Adds authUserReturning constant for INSERT/UPDATE RETURNING clauses - Updates all user queries in auth routes to use explicit column selection - Creates AuthUser interface to type the partial user data properly This makes the auth code resilient to schema mismatches between the ORM schema and the actual database state, which can occur when migrations haven't been applied to production yet. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +81
    Removed
    −10
  9. chore: remove startCommand from railway.json

    Armin Naimi 8f14d688

    Commit notes

    The startCommand has been removed from the railway.json configuration, streamlining the deployment settings. This change is part of ongoing efforts to improve the deployment process.

    Files
    1
    Added
    +0
    Removed
    −1
  10. fix: update health check to prioritize PORT environment variable

    Armin Naimi 81807e1a

    Commit notes

    Modified the health check in Dockerfile.worker to use the PORT variable set by Railway, falling back to WORKER_HEALTH_PORT or defaulting to 3002. Updated the worker.ts file to reflect the same logic for determining the health server port, ensuring consistent behavior across the application.

    Files
    2
    Added
    +8
    Removed
    −5