Split subscription costs effortlessly with friends, family, and colleagues
A modern Rails 8 application with Svelte frontend for managing shared subscriptions
Features β’ Quick Start β’ Installation β’ Documentation
SplitMySub is a comprehensive subscription cost-sharing platform that eliminates the hassle of manually tracking and collecting payments for shared subscriptions. Whether you're sharing Netflix with roommates, Spotify with family, or any other subscription service, SplitMySub automates the entire process.
Built with modern technologies:
- Backend: Ruby on Rails 8.0 with SQLite database
- Frontend: Svelte 5 with Inertia.js for seamless SPA experience
- Styling: Tailwind CSS with shadcn/ui components
- Authentication: Passwordless magic link system
- Deployment: Kamal for containerized deployment
- Create and manage subscription projects (Netflix, Spotify, etc.)
- Set custom billing cycles and renewal dates
- Configure payment instructions and cost splitting
- Track project members and their payment status
- Magic Link Authentication - No passwords required
- Email-based user invitations with email verification
- Role-based access (Project Creator vs Member)
- Seamless onboarding for new users
- Secure invitation flow with audit logging
- Upload payment evidence (receipts, screenshots, transaction IDs)
- Project creators can approve/reject payments
- Complete payment history with downloadable evidence
- Status tracking for each billing cycle
- Automated email reminders before payment due dates
- Telegram notifications via webhook-based bot integration
- Configurable reminder timing (default: 7 days before)
- Escalating reminder sequence (gentle β follow-up β final notice)
- Customizable reminder templates
- Personal dashboard showing all subscriptions
- Payment obligations calendar view
- Overdue payment indicators
- Complete payment history tracking
- Secure file handling for payment evidence
- CSRF protection and security headers
- Rails 8 native rate limiting for sensitive endpoints
- Admin-only access controls
- Email verification for invitations
- Audit logging for security events
- Ruby 3.4.4
- Node.js 22.12
- Git
git clone https://github.com/ashwin47/splitmysub.git
cd splitmysub
bundle install
npm installrails db:setup
rails db:seed # Optional: creates sample databin/devVisit http://localhost:3100 to see the application running.
# 1. Clone repository
git clone https://github.com/ashwin47/splitmysub.git
cd splitmysub
# 2. Install dependencies
bundle install && npm install
# 3. Setup database
rails db:create db:migrate db:seed
# 4. Start development server
bin/dev# Start with live reloading
docker-compose -f docker-compose.dev.yml up --buildAccess at http://localhost:3000 (Docker) or http://localhost:3100 (traditional).
Create a .env file in the project root:
# Application
APP_HOST=localhost
APP_PROTOCOL=http
# Email (required for magic links)
RESEND_API_KEY=re_xxxxxxxxxxxxxxxxxxxxxxxxxx
# OR use SMTP
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
# Admin Access
ADMIN_PASSWORD=your-admin-passwordFor detailed configuration including production setup, email providers, and security options, see:
- Deployment Guide - Complete environment variables reference
- Self-Hosting Guide - Email configuration and security setup
- Sign Up/Login - Use magic link authentication
- Create Project - Set up your subscription (Netflix, Spotify, etc.)
- Configure Details - Set cost, billing cycle, payment instructions
- Invite Members - Send email invitations to friends/family
- Track Payments - Members upload payment evidence
- Manage Renewals - Automated reminders handle the rest
- Dashboard: View all your projects and their status
- Member Management: Invite/remove members, track payments
- Payment Approval: Review and approve payment evidence
- Payment Tracking: Upload receipts and track approval status
- Reminder System: Receive automated payment reminders via email and Telegram
- Multi-Project: Participate in multiple subscription projects
- Rails 8: Latest Rails with modern defaults and native rate limiting
- Svelte 5: Reactive frontend framework
- Inertia.js: SPA experience without API complexity
- SQLite: Embedded database (zero configuration required)
- SolidQueue: Background job processing
- Tailwind CSS: Utility-first CSS framework
- Kamal: Modern deployment tool
splitmysub/
βββ app/
β βββ controllers/ # Rails controllers
β βββ frontend/ # Svelte frontend
β β βββ components/ # Reusable components
β β βββ pages/ # Inertia.js pages
β β βββ lib/ # Frontend utilities
β βββ models/ # ActiveRecord models
β βββ services/ # Business logic
β βββ jobs/ # Background jobs
βββ config/
β βββ deploy.yml # Kamal deployment
β βββ routes.rb # Application routes
βββ docs/ # Documentation
βββ test/ # Test files
For detailed architecture information, see docs/SYSTEM_ARCHITECTURE.md.
# Run all tests
rails test
# Run specific test files
rails test test/models/user_test.rb
# Run system tests
rails test:systemFor comprehensive testing scenarios and manual testing procedures, see docs/TESTING_SCENARIOS.md.
Quick Deploy with Kamal:
# 1. Configure server in config/deploy.yml
# 2. Set up secrets in .kamal/secrets
bin/kamal setup
bin/kamal deployFor complete deployment instructions including:
- Environment variables setup
- Email configuration
- Security configuration
- Troubleshooting
For complete self-hosting instructions including Docker setup, manual installation, and maintenance procedures, see docs/SELF_HOSTING.md.
- Deployment Guide - Production deployment with Kamal
- Self-Hosting Guide - Complete self-hosting instructions
- System Architecture - Technical architecture overview
- Testing Scenarios - Manual testing procedures
- Authentication Flow - Magic link authentication system
- Invitation Flow - Secure invitation system
- Reminder System - Email and Telegram reminders
# Start development server with live reloading
bin/dev
# Access Rails console
rails console
# Run database migrations
rails db:migrate
# Code quality checks
rubocop # Linter
brakeman # Security auditWe welcome contributions!
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
git clone https://github.com/ashwin47/splitmysub.git
cd splitmysub
bundle install && npm install
rails db:setup
rails testThis project is licensed under the MIT License - see the LICENSE file for details.
- Built with Ruby on Rails
- Frontend powered by Svelte
- UI components from shadcn/ui
- Deployed with Kamal
Made with β€οΈ for the subscription-sharing community





