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 351–400 of 1,543

Page 8 of 31

27 commits
  1. feat(frontend): apply UI skills best practices

    Cursor Agent 9bf59f12

    Commit notes

    - Replace confirm() with AlertDialog in dashboard for Mollie disconnect - Fix transition-all with specific properties across 23 occurrences - Replace z-60 with z-modal-backdrop semantic utility in FullscreenLoader - Fix duration-300+ to duration-200 for interaction feedback - Add text-balance to headings for better typography - Add text-pretty to body paragraphs - Replace h-* w-* with size-* for square elements - Add aria-labels to icon-only buttons for accessibility Files modified: - 29 frontend components and pages Follows UI Skills guidelines from .cursor/skills/ui-skills/SKILL.md Co-authored-by: armin.naimi <[email redacted]>

    Files
    29
    Added
    +147
    Removed
    −113
  2. feat(library): replace sidebar with compact workspace/project nav

    Cursor Agent 9c47000d

    Commit notes

    - Remove collapsible sidebar from library page - Create CompactWorkspaceNav component with horizontal dropdowns - Integrate compact navigation above the packs section - Maintain all workspace/project switching functionality - Keep storage usage display in the packs panel - Better information architecture with context at top of left column Co-authored-by: armin.naimi <[email redacted]>

    Files
    3
    Added
    +998
    Removed
    −128
  3. Make similar icon always visible in library sample grid

    Cursor Agent bde17ac3

    Commit notes

    Remove the md:opacity-0 md:group-hover:opacity-100 classes that were hiding the similarity button on desktop until row hover. The icon is now always visible with a neutral color, changing to white on hover. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +2
    Removed
    −2
  4. Fix name column fading issue in LibrarySampleGrid

    Cursor Agent d08226d3

    Commit notes

    Replace custom mask-based fade effect (.sample-name-fade) with Tailwind's truncate utility. The mask was applying a gradient fade unconditionally, even on short names that don't overflow. The truncate class only shows ellipsis when text actually overflows, which is the expected behavior. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +1
    Removed
    −8
  5. Fix LibrarySampleGrid display issues

    Cursor Agent 053c63d4

    Commit notes

    - Reduce name fade distance from 24px to 10px to prevent early truncation - Add missing Duration column between Name and BPM columns - Remove inconsistent px-2 padding from header cells to fix column alignment Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +17
    Removed
    −4
  6. fix: make all icon buttons fully round (rounded-full)

    Cursor Agent e5f7e539

    Commit notes

    Updated icon buttons across the app for consistent styling: - TransportControls: play/stop and reset buttons - SequencerTrack: delay, reverb, bitcrusher FX buttons - Header: library, sequencer, and notifications buttons - GainMeter: volume cycle button - GrooveControls: groove cycle button - KeyboardShortcuts: keyboard shortcuts trigger button - PackOrganizer: select all and clear selection buttons - LibrarySearchFilter: sort order toggle button - LibrarySampleGrid: edit sample button - SharePopover: share and copy link buttons - share/[token]/+page: download button - Toaster: close notification button Co-authored-by: armin.naimi <[email redacted]>

    Files
    12
    Added
    +19
    Removed
    −19
  7. Remove redundant duration column from library sample grid

    Cursor Agent 46219c75

    Commit notes

    The duration is already displayed in the play button, so the separate duration column was redundant. This change: - Removes the duration column from the columns definition - Removes the duration cell from data rows - Removes duration from the sortable columns map Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +0
    Removed
    −14
  8. feat(library): improve sample grid layout with fading name, tag badges, and play button duration

    Cursor Agent d8446292

    Commit notes

    - Replace truncation with fade-out mask effect for sample names that overflow - Display sample tags as badges below the name (shows up to 4 tags with overflow indicator) - Remove duration from mobile view badges entirely - Combine duration with play button - now shows duration next to play icon as a clickable button - Increased play button column width to accommodate duration text Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +41
    Removed
    −25
  9. feat(library): improve mobile layout for sample grid

    Cursor Agent 3bcbc198

    Commit notes

    - Move similarity icon to second-to-last column (before share) - Make similarity icon always visible on mobile (not hidden until hover) - Reduce play column width from 40px to 32px for more name space - Reduce drag column width from 32px to 28px - Hide duplicate indicator on mobile to save space - Replace flex-wrap with overflow-hidden on mobile badges to prevent line breaks - Remove 'BPM' suffix from mobile bpm badge for compactness - Remove date badge from mobile view for cleaner layout - Add truncation to category badge on mobile - Reduce play button size from 28px (h-7 w-7) to 24px (size-6) Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +33
    Removed
    −36
  10. fix: center align items within data rows

    Cursor Agent 89537fb8

    Commit notes

    Changed data rows from items-start to items-center so content is vertically centered within each row, matching the header row. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +1
    Removed
    −1
  11. fix: revert model name to gpt-5-nano

    Cursor Agent 93f13384

    Commit notes

    Keep the gpt-5-nano model name as requested - it's a valid model. The core fix remains: interpretEmbedding now uses proper nullish checks and direct audio features instead of L2-normalized embedding values. Co-authored-by: armin.naimi <[email redacted]>

    Files
    3
    Added
    +3
    Removed
    −3
  12. fix: sample tagging returns same tags for all samples

    Cursor Agent 1dfd8d47

    Commit notes

    Root causes fixed: 1. Invalid OpenAI model name 'gpt-5-nano' changed to 'gpt-4o-mini' - The invalid model caused API calls to fail, falling back to rule-based tagging 2. Fixed interpretEmbedding function in ai-tagging.ts: - Changed truthiness check for spectralCentroid to nullish check (0 is valid) - Fixed attack sharpness calculation to use features.attackTime directly instead of L2-normalized embedding values - Fixed harmonic content to derive from spectral bandwidth/centroid ratio 3. Added attackTime and decayTime fields to AudioFeatures interface - These temporal envelope values are now stored as direct features - Previously only available in L2-normalized embedding vector The rule-based tagging now correctly uses the actual audio features instead of falling back to default values, producing varied tags based on each sample's unique characteristics. Co-authored-by: armin.naimi <[email redacted]>

    Files
    3
    Added
    +56
    Removed
    −44
23 commits
  1. feat: improve LibrarySampleGrid mobile display

    Cursor Agent 0e07ed38

    Commit notes

    - Hide waveform column on mobile for cleaner layout - Show sample metadata as badges underneath the name on mobile (duration, BPM, key, category, date) - Keep share and similarity columns visible on mobile - Keep edit column hidden on mobile - Adjust row alignment to items-start on mobile for badge layout Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +45
    Removed
    −17
  2. fix: file upload inputs only show Files picker, not camera/photo library

    Cursor Agent 9807af21

    Commit notes

    On mobile (especially iOS), using audio/* in the accept attribute causes the browser to show Photo Library and Camera options. By using only specific file extensions (.wav, .mp3, .flac, etc.), the file input will only show the Files/Browse option. - Updated LibrarySearchFilter.svelte accept attribute - Updated upload page file inputs Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +5
    Removed
    −3
  3. fix: keep mobile nav always visible on scroll

    Cursor Agent 5a554cb1

    Commit notes

    - Removed scroll-based hide/show behavior from mobile navigation - Removed useScrollVisibility hook usage from Header component - Mobile nav now stays fixed at bottom regardless of scroll direction Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +1
    Removed
    −15
  4. Remove text labels from mobile nav, use icons/avatars only

    Cursor Agent 360fd4fb

    Commit notes

    - Remove text labels ('Library', 'Sequencer', 'Account', 'Sign in') from mobile bottom nav - Update buttons to be consistent 44px circular touch targets (size-11) - Add proper aria-labels for accessibility - Simplify button styling with centered icons Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +12
    Removed
    −12
  5. Fix drawer opening animation by adding complete vaul-svelte CSS

    Cursor Agent 43162ee2

    Commit notes

    The Drawer component wasn't animating up on open because the critical CSS styles from vaul-svelte's :global() declarations weren't being properly applied with Svelte 5 and Tailwind CSS v4. Added the complete set of drawer animation styles to app.css: - Initial off-screen transform positions for all drawer directions - Visible state transforms that animate the drawer into view - Overlay fade-in animation from opacity 0 to 1 - Pseudo-element background extensions for seamless visuals - Drag state handling to disable transitions during interaction - Snap points overlay handling - User selection prevention on hover devices - Reduced motion support for accessibility Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +125
    Removed
    −3
  6. fix: search expand animation by using max-width transition

    Cursor Agent 42aa4c0c

    Commit notes

    The search expand animation was not working because the CSS transition was set on 'width' property, but the actual sizing used flex-based layout (flex-1 with min/max constraints). CSS cannot interpolate between a fixed width value and a flex-based layout. Fixed by: - Changed transition-search utility to transition 'max-width' instead of 'width' - Updated LibrarySearchFilter to use explicit max-width values in both states: - Collapsed: max-w-9 (36px) - Expanded: max-w-48 (192px) / max-w-64 (256px) on larger screens This allows CSS to smoothly animate the max-width property between the collapsed and expanded states. Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +4
    Removed
    −4
  7. fix: add smooth CSS transitions for vaul drawer animations

    Cursor Agent 36a64f4f

    Commit notes

    - Add CSS transitions for [data-vaul-drawer] elements with 0.5s duration using vaul's cubic-bezier easing curve (0.32, 0.72, 0, 1) - Add CSS transitions for [data-vaul-overlay] elements for smooth fade - Add will-change: transform hint for GPU-accelerated animations - Disable transitions during dragging with .vaul-dragging class - Honor prefers-reduced-motion for accessibility by disabling drawer animations when reduced motion is preferred Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +27
    Removed
    −0
  8. Refactor search animation to use Tailwind utilities

    Cursor Agent 7d3e4e7f

    Commit notes

    - Move keyframes and animation utilities to app.css - Add @utility directives: animate-search-expand, animate-search-content, transition-search - Replace component <style> block with Tailwind utility classes - Add search animation classes to reduced motion media query - Follows project's Tailwind v4 patterns with @utility directive Co-authored-by: armin.naimi <[email redacted]>

    Files
    2
    Added
    +59
    Removed
    −69
  9. Add micro animation to search expansion

    Cursor Agent d44228d0

    Commit notes

    - Add smooth width transition with ease-out-cubic easing (220ms) - Add subtle scale animation when expanding (0.98 to 1) - Add content fade-in with slight translateX motion for polish - Use will-change for GPU acceleration on width and transform - Add proper prefers-reduced-motion support for accessibility - Follow animation guidelines with fast, purposeful motion Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +66
    Removed
    −10
  10. refactor(library): use native select elements in filter popover

    Cursor Agent 0be3bdb3

    Commit notes

    - Replace accordion-style filter sections with native <select> elements - Add custom .filter-select styling for dark theme consistency - Include proper labels for accessibility - Simplify handlers to work with native select change events - Maintain all existing filter functionality (tags, mood, BPM, key, sort) - Keep sort direction toggle button alongside sort select Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +174
    Removed
    −208