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 551–600 of 1,543

Page 12 of 31

13 commits
  1. Integrate Radashi utility library across codebase

    Cursor Agent 6807075a

    Commit notes

    Replaced custom utility patterns with Radashi functions: sleep(): - backend/src/queue/index.ts: 5 occurrences - frontend/src/routes/library/+page.svelte: 1 occurrence - frontend/src/lib/stores/audio.svelte.ts: 1 occurrence clamp(): - frontend/src/lib/components/BpmControl.svelte: 2 occurrences - frontend/src/lib/stores/sequencer.svelte.ts: 1 occurrence - backend/src/utils/sanitize.ts: 1 occurrence unique(): - backend/src/services/sample-cleanup.ts: 2 occurrences - backend/src/services/user-cleanup.ts: 2 occurrences - backend/src/services/orphan-cleanup.ts: 1 occurrence - backend/src/services/ai-tagging.ts: 2 occurrences - backend/src/worker.ts: 1 occurrence sum(): - frontend/src/lib/api/upload.ts: 1 occurrence - frontend/src/lib/stores/subscription.svelte.ts: 1 occurrence - frontend/src/lib/components/PackEditDrawer.svelte: 2 occurrences - frontend/src/routes/library/components/UploadDropzone.svelte: 2 occurrences capitalize(): - backend/src/services/ai-copywriting.ts: removed custom function, using radashi Total impact: ~50+ lines of cleaner, more maintainable code Co-authored-by: armin.naimi <[email redacted]>

    Files
    19
    Added
    +57
    Removed
    −42
  2. Add Radashi utility library analysis

    Cursor Agent c882c57b

    Commit notes

    Comprehensive analysis of whether adopting Radashi would benefit the codebase: - Analyzed ~200 utility patterns across frontend and backend - Identified high-value opportunities: sleep(), retry(), clamp(), unique() - Estimated 50-100 LOC reduction potential - Provided implementation recommendations and alternatives Key findings: - Retry logic would benefit most (~50 lines saved) - Sleep/clamp patterns would be cleaner - Most reduce/Object.* patterns already optimal - SQL GROUP BY not applicable to JS utilities Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +315
    Removed
    −0
  3. refactor: simplify Creator Dashboard to minimal Option B

    Cursor Agent 6c3ed315

    Commit notes

    Sales/earnings data is already in Mollie Dashboard - no need to duplicate. Simplified dashboard now focuses on: - Mollie Connect onboarding (main CTA) - Link to Mollie Dashboard once connected - Platform-specific metrics (published packs, Pro status, fee %) - Pro upgrade upsell Removed: - SalesChart component and Chart.js dependency - RecentSalesList, TopPacksList, StatCard components - MollieConnectCard (inlined into page) - All sales/earnings API calls and backend logic This reduces code complexity while directing users to Mollie for comprehensive transaction and payout analytics. Co-authored-by: armin.naimi <[email redacted]>

    Files
    10
    Added
    +247
    Removed
    −924
  4. refactor: reuse existing earnings/sales service functions in dashboard

    Cursor Agent 509f45e6

    Commit notes

    - Import and use getCreatorEarningsSummary instead of direct DB query - Import and use getCreatorRecentSales instead of duplicate getRecentSales - Keep dashboard-specific functions (getSalesChartData, getTopPacks) that don't exist elsewhere - Add helper functions for published pack count and Pro subscription check Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +43
    Removed
    −76
  5. feat: add mobile-first Creator Dashboard with charts

    Cursor Agent 2c0e46df

    Commit notes

    - Add dashboard API endpoint with stats, sales chart, top packs, and recent sales - Create Creator Dashboard page with Chart.js for sales visualization - Add Mollie Connect onboarding card for automatic seller payouts - Add StatCard, SalesChart, RecentSalesList, TopPacksList components - Add MollieConnectCard component for seller onboarding status - Add dashboard link to header navigation (desktop and mobile) - Mobile-first responsive design with dark theme - Show Pro upsell for free tier users to remove platform fee Co-authored-by: armin.naimi <[email redacted]>

    Files
    14
    Added
    +11650
    Removed
    −0
  6. feat: implement Mollie Connect for automated seller payouts

    Cursor Agent bc19ab8c

    Commit notes

    Sellers can now connect their own Mollie accounts to receive payments directly, eliminating manual payouts from the platform. Changes: - Add Mollie Connect OAuth flow (backend/src/routes/mollie-connect.ts) - Add Mollie Connect service for token management (backend/src/services/mollie-connect.ts) - Add user schema fields for Mollie credentials (mollieOrganizationId, mollieProfileId, etc.) - Update purchase flow to use connected accounts with application fees - Add PLATFORM_FEE_PERCENT config (15% for free tier, 0% for Pro) - Add database migration for new user fields (0015_mollie_connect.sql) - Update env.example with Mollie Connect configuration How it works: 1. Seller clicks "Connect Mollie Account" -> OAuth flow 2. Seller creates/logs into Mollie, completes KYC 3. Seller's mollieProfileId stored in database 4. When buyer purchases: payment routes to seller's Mollie account 5. Platform takes application fee (15% or 0% based on subscription) 6. Seller receives payment directly from Mollie (no manual payout) Fallback: If seller hasn't connected, payment goes to platform account and manual payout is required (existing behavior). Co-authored-by: armin.naimi <[email redacted]>

    Files
    9
    Added
    +951
    Removed
    −58
  7. fix: properly associate samples and packs with projects

    Cursor Agent 00629dc1

    Commit notes

    ## Issues Fixed: 1. **Legacy upload route now supports projectId** - The /uploads/chunked/initiate endpoint was missing projectId parameter - Now correctly passes projectId to createUploadSession and queue job - Also added folderPath support to legacy route for consistency 2. **Samples can now be moved between projects** - Added projectId to PATCH /:id endpoint - Added projectId to PATCH /:id/metadata endpoint - Added projectId to PATCH /batch endpoint for bulk moves - Added projectId to all sample response functions 3. **Sample packs can now be moved between projects** - Added projectId to PATCH /:id endpoint - Added projectId to pack response function 4. **API responses now include projectId** - Updated toSampleResponse() in samples.ts - Updated toFullSampleResponse() in samples.ts - Updated toSampleResponse() in library.ts - Updated toPackResponse() in sample-packs.ts This ensures that samples and sample packs are correctly associated with workspace projects throughout the entire upload and management lifecycle. Co-authored-by: armin.naimi <[email redacted]>

    Files
    4
    Added
    +36
    Removed
    −1
16 commits
  1. docs: add honest achievability analysis for 1% market capture

    Cursor Agent 0bb0893a

    Commit notes

    Reality check on hitting 5-10k users: - 5k users = 14 new users/day for a year - 10k users = 27 new users/day for a year Realistic timeline: 12-18 months with consistent effort - Month 1-3: 500 users (friends, social) - Month 4-6: 1,500 users (content, Discord) - Month 7-9: 3,500 users (word of mouth) - Month 10-12: 6,000 users (flywheel) Main challenge: Discovery, not product What accelerates: Viral content, influencer adoption, competitor drama Honest answer: Achievable, not guaranteed, requires 12-18mo commitment. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +93
    Removed
    −0
  2. docs: add market size analysis for sample pack creators

    Cursor Agent f9003a0b

    Commit notes

    Market estimates: - 5-10M beat producers globally - 500k-1M active sellers across platforms - 50k-100k sample pack creators specifically - 5k-15k small labels/collectives Platform benchmarks: - Splice: 4M+ users, ~30k creators - Beatstars: 500k+ producers - Loopmasters: ~5k creators Year 1 target: 1% of active sellers = 5-10k users At 10k users with new model = ~€12k MRR Added competitive positioning and acquisition channels. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +70
    Removed
    −0
  3. docs: all features free, pay only to remove marketplace fee

    Cursor Agent 252e5544

    Commit notes

    Final model - maximum generosity: FREE (everything included): - 100GB storage - All AI features (tagging, descriptions) - Full analytics - Unlimited workspaces/projects - Sell unlimited packs - 15% marketplace fee on sales only PRO (€9/mo): - Same features - 0% marketplace fee - Priority support LABEL (€29/mo): - 500GB storage - Team members - Multiple artist profiles Philosophy: No artificial scarcity. No feature gates. The fee is the monetization. Subscription removes it. User upgrades when their own math says it's worth it. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +76
    Removed
    −69
  4. docs: simplify to one free tier with 15% marketplace fee

    Cursor Agent 7c3c919a

    Commit notes

    Key changes: - Remove arbitrary limits (no pack limits, no "become a creator" gate) - Everyone can sell on free tier, pay 15% only when they earn - User decides when to upgrade based on their own math - Show savings calculation in dashboard, let them decide Model: - Free: €0, 15% marketplace fee, 10GB storage - Pro: €9/mo, 0% fee, 100GB storage - Label: €29/mo, 0% fee, 500GB, team features Breakeven: €60/month in sales makes Pro worth it Dashboard shows: "You sold €X, on Pro you'd keep €Y more" No manipulation, just transparency. User decides when the math works. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +231
    Removed
    −88
  5. docs: reframe model around seller jobs-to-be-done

    Cursor Agent 028fe3e9

    Commit notes

    Major pivot from storage-focused to seller-focused pricing: Jobs to be done for beat/sample pack sellers: - Create packs worth buying - List for sale easily - Get discovered (marketplace) - Keep 100% of revenue (0% fees) - Track performance - Get paid New tier structure: - Free: 2 packs, 15% platform fee, 5GB - Seller (€9/mo): Unlimited packs, 0% fees, 100GB - Label (€29/mo): Team features, 500GB, priority placement Revenue comparison: - Storage model: €6,805 MRR @ 10k users - Seller model: €26,250 MRR @ 10k users (3x higher!) Path to €15k MRR: - Storage model: 22,000 users needed - Seller model: 6,000 users needed (70% fewer!) Key insight: Breakeven for Seller tier is €60/mo in sales. Upgrade prompt: "If you sell €60/mo, it pays for itself." Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +423
    Removed
    −5
  6. docs: add path to €15k MRR analysis (freedom number)

    Cursor Agent 472e3fd0

    Commit notes

    Reverse-engineered what's needed to hit €15k MRR: - Model A: 22,038 users needed (at 8% conversion) - Model B: 17,238 users needed (44% fewer than current) - Model C: 31,050 users needed Three strategies analyzed: 1. Maximize ARPU: 400 studios at €38/mo = €15k (only 5k users) 2. Optimize conversion: 15% conversion = only 9k users needed 3. Hybrid: 10k users, 12% conversion, €12.50 ARPU Recommended fastest path: - Phase 1: Ship two-tier now (5GB free, €9 Pro) - Phase 2: Add Team tier + annual plans - Phase 3: Add storage/seat add-ons Key insight: Ship Model C fast, evolve to Model A in 60 days. Time saved shipping > users lost to suboptimal pricing. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +178
    Removed
    −0
  7. docs: add revenue potential calculations for each model

    Cursor Agent c0c73d46

    Commit notes

    Comprehensive financial analysis including: - User distribution assumptions (10k users, 5-8% conversion) - MRR/ARR calculations for all three models - Revenue per user (RPU) and ARPU metrics - Scaling projections to 50k and 100k users - Marketplace commission revenue modeling - Break-even analysis with cost assumptions - Lifetime value (LTV) comparison - Sensitivity analysis for conversion rates Key findings: - Model B (Add-ons): €8,700 MRR / €104k ARR (+80% vs current) - Model A (Four Tiers): €6,805 MRR / €82k ARR (+41% vs current) - Model C (Two Tiers): €4,831 MRR / €58k ARR (baseline) - At 100k users: Model B generates €1M+ ARR - 80% gross margins achievable Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +257
    Removed
    −0
  8. docs: add Buttondown-style add-on pricing model

    Cursor Agent 45139b8e

    Commit notes

    Added Model B: Base + Add-ons approach inspired by Buttondown: - €4/mo base plan with core features - Modular add-ons: AI Suite, Pro Analysis, Sharing+, Creator Tools, Team - Storage scales at €2/mo per 50GB - Team seats at €3/mo per seat - Bundle discounts for common combinations Also added: - Model comparison table (simplicity vs flexibility vs revenue) - Stage-based recommendations (early/growing/mature) - Database schema for add-on tracking - Service layer helpers for feature gating Pragmatic recommendation: Start with four tiers (Model A), evolve to add-ons (Model B) when usage data is available. Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +338
    Removed
    −3
  9. docs: add comprehensive subscription model analysis

    Cursor Agent 375b556c

    Commit notes

    Analysis includes: - Current state review identifying lack of value differentiation - Four user personas (Hobbyist, Producer, Creator, Team) - Proposed four-tier subscription model with clear feature gates - Alternative simpler two-tier approach - Messaging and positioning recommendations - Implementation roadmap with database schema changes - Metrics to track for success measurement Key recommendations: - Reduce free tier to 10GB (from 100GB) to create upgrade incentive - Add Producer tier (€5/mo) for serious library management - Keep Creator tier (€9/mo) for sellers with 0% fees - Add Team tier (€29/mo) for studios/production teams Co-authored-by: armin.naimi <[email redacted]>

    Files
    1
    Added
    +384
    Removed
    −0
  10. feat: Enhance project context handling across upload and workspace components

    Armin Naimi 7f4e533b

    Commit notes

    - Added projectId support in various upload-related routes and components to improve context during file uploads. - Updated workspace navigation methods to ensure consistent project context when switching between projects and workspaces. - Enhanced logging to capture project context during uploads and library interactions for better traceability. - Refactored components to utilize new navigation methods, streamlining user experience when managing projects and uploads.

    Files
    14
    Added
    +161
    Removed
    −39
  11. feat: Enhance MorphDeleteButton and PackEditDrawer components with compact mode and styling updates

    Armin Naimi da065fb9

    Commit notes

    - Added a `compact` prop to the MorphDeleteButton component for a more streamlined appearance. - Updated button styles in PackEditDrawer and SampleEditDrawer to use brand colors for better visibility. - Integrated compact mode in LibrarySampleGrid and PackOrganizer components to utilize the new MorphDeleteButton feature. - Improved loading spinner styles for consistency across components.

    Files
    6
    Added
    +103
    Removed
    −54
  12. feat: Enhance sample pack retrieval with project filtering and update AI service methods

    Armin Naimi 335e532b

    Commit notes

    - Updated the sample pack retrieval endpoint to support optional project filtering based on user input. - Refactored AI service methods to utilize the new `generateText` function, improving output handling for copy suggestions, tagging, and categorization. - Simplified the API calls in the frontend to accommodate the new project filtering logic, ensuring a more tailored user experience. - Added state management for project selection in the workspace store to enhance project visibility options.

    Files
    13
    Added
    +127
    Removed
    −64
10 commits
  1. feat: Add similarity button to LibrarySampleGrid for enhanced sample comparison

    Armin Naimi 8af12ddb

    Commit notes

    - Introduced a new button in the LibrarySampleGrid component to toggle the similarity view for samples. - Simplified the display logic for sample names, ensuring consistent styling based on similarity state. - Improved user experience by providing visual feedback when similar samples are shown or hidden.

    Files
    1
    Added
    +22
    Removed
    −32
  2. feat: Implement backend proxy for sample download URLs

    Armin Naimi b166ad70

    Commit notes

    - Updated the backend to return relative paths for download and preview URLs, enabling frontend proxying to avoid CORS issues. - Added a new server-side route to handle proxy requests for sample downloads, forwarding requests to the backend and managing authorization headers.

    Files
    2
    Added
    +54
    Removed
    −4
  3. feat: Implement frontend proxy for sample preview and sequencer URLs

    Armin Naimi 75cae3a9

    Commit notes

    - Updated PackOrganizer and SimilarSamplesRow components to use frontend proxy for constructing sample preview URLs. - Added server-side proxy handling for preview and sequencer requests to forward to the backend. - Simplified URL construction in various components to enhance maintainability and consistency.

    Files
    5
    Added
    +91
    Removed
    −8
  4. chore: Update health check port configuration for improved flexibility

    Armin Naimi e3d2dff6

    Commit notes

    - Removed the hardcoded WORKER_HEALTH_PORT environment variable from the Dockerfile. - Updated the worker.ts file to prioritize the PORT environment variable set by Railway, followed by WORKER_HEALTH_PORT, and defaulting to 3002 for health server configuration.

    Files
    2
    Added
    +7
    Removed
    −4
  5. refactor: Migrate Nixpacks configuration to railway.json

    Armin Naimi f12d181f

    Commit notes

    - Removed nixpacks.toml as the configuration is now integrated into railway.json. - Updated the builder to RAILPACK and added the setup phase for FFmpeg installation directly in railway.json.

    Files
    2
    Added
    +10
    Removed
    −9
9 commits
  1. Update Railway deployment configurations and add local Dockerfile

    Armin Naimi adb14c1e

    Commit notes

    - Increased healthcheck timeout to 60 seconds to accommodate database and Redis connection verification. - Added restart policy with maximum retries in railway.json and RAILWAY.md. - Introduced a new Dockerfile.local for local development with bun, including health checks and non-root user setup.

    Files
    4
    Added
    +50
    Removed
    −46
  2. feat: Add Railway deployment guide and configs

    Cursor Agent dba6a34c

    Commit notes

    Adds a comprehensive guide for deploying to Railway, including database, Redis, API, and worker services. Includes Railway-specific TOML configurations for both services. Co-authored-by: armin.naimi <[email redacted]>

    Files
    4
    Added
    +553
    Removed
    −4
2 commits
  1. feat: Enhance project management with edit functionality

    Armin Naimi 064568fe

    Commit notes

    - Implemented an edit project drawer allowing users to update project details including name, description, color, and visibility. - Added state management for editing projects and integrated update mutation for backend communication. - Improved project list context menu interactions and ensured proper closing behavior when clicking outside the menu.

    Files
    2
    Added
    +245
    Removed
    −41
  2. feat: Enhance audio loading and workspace management

    Armin Naimi adfed186

    Commit notes

    - Added loadError handling for audio samples, allowing UI feedback for failed loads (e.g., 404 errors). - Implemented array comparison methods in WorkspaceStore to prevent unnecessary updates and infinite loops when setting workspaces and projects. - Updated track sample handling in the main page to clear default samples if they no longer exist, ensuring a smoother user experience.

    Files
    4
    Added
    +87
    Removed
    −4