Real-time music tips powered by Stellar
TipTune is a revolutionary platform that connects music lovers directly with artists through instant, frictionless micro-tipping. Stream your favorite tracks and show appreciation with lightning-fast Stellar payments.
- Navy (Background):
#0B1C2D - Blue (Primary):
#4DA3FF - Ice Blue (Secondary):
#6EDCFF - Mint (Highlight):
#9BF0E1 - Gold (Tip Accent):
#FFD166
- Stream Music - Listen to tracks from independent artists
- Instant Tips - Send XLM or USDC tips with one tap
- Live Notifications - Artists see tips in real-time during performances
- Micro-transactions - Tips as low as $0.10 thanks to Stellar's low fees
- Global Reach - Borderless payments to artists anywhere
- Artist Dashboard - Track earnings, top supporters, and engagement
- Artist Profiles - Showcase music, bio, and tip history
- Secure Wallet Integration - Connect with Freighter, Albedo, or other Stellar wallets
Traditional music streaming pays artists fractions of a cent per stream. TipTune flips the model:
- Direct support: 100% of tips go directly to artists (minus minimal network fees)
- Instant settlement: Artists receive funds in seconds, not months
- Fan connection: Build stronger relationships through direct appreciation
- Transparent: All transactions visible on the Stellar blockchain
- Frontend: React, TypeScript, TailwindCSS
- Blockchain: Stellar Network
- Smart Contracts: Soroban (Stellar's smart contract platform)
- Wallet Integration: Freighter, Albedo, xBull
- Backend: Node.js, NestJS
- Database: PostgreSQL (with
pg_trgmfull-text + fuzzy search) - Audio Streaming: Web Audio API / HowlerJS
- Real-time: WebSockets for live notifications
TipTune's autocomplete rankings are driven by a composite mathematical scoring function โ not alphabetical order or raw counts. The algorithm is inspired by industry-proven ranking systems:
Score(item) = PrefixBoost
+ log(1 + plays) ร 1.0 โ log-normalized, zero-safe
+ log(1 + tips) ร 3.0 โ tips weighted 3ร (financial intent)
+ e^(-0.02 ร days) ร 2.0 โ exponential recency decay (tยฝ โ 34.6 days)
| Signal | Technique | Industry Reference |
|---|---|---|
| Engagement | Math.log1p(n) โ log normalization |
Reddit "Hot" algorithm |
| Recency | e^(-ฮปt), ฮป=0.02, tยฝโ34.6 days |
Hacker News gravity model |
| Prefix match | +100 flat boost (categorical gate) | Standard autocomplete UX research |
| Tie-breaking | localeCompare โ stable, locale-aware |
Linux kernel style: pick a rule, enforce it |
Full documentation: docs/search-ranking-algorithm.md
Unit tests (15/15 passing): frontend/src/utils/searchRanking.test.ts
- Node.js 18+ and npm/yarn
- PostgreSQL database
- Stellar wallet (Freighter recommended for development)
# Clone the repository
git clone https://github.com/OlufunbiIK/tip-tune/
cd tiptune
# Install dependencies
npm install
# Copy environment variables
cp .env.example .env
# Configure your .env file with:
# - Stellar network settings (testnet/mainnet)
# - Database credentials
# - API keys
# Run database migrations
npm run migrate
# Start development server
npm run devVisit http://localhost:3000 to see TipTune in action!
- Connect Wallet - Click "Connect Wallet" and approve connection
- Browse Artists - Explore the artist directory
- Listen & Tip - Play a track and tap the tip button
- Select Amount - Choose or enter custom tip amount
- Send - Confirm transaction in your wallet
- Sign Up - Create artist profile with Stellar wallet
- Upload Music - Add tracks with metadata and artwork
- Share Profile - Share your TipTune link with fans
- Receive Tips - Get notified instantly when fans tip
- Track Analytics - View earnings and engagement stats
# TipTune Project Structure
tiptune/
โโโ frontend/ # React + TypeScript + Vite
โ โโโ public/
โ โ โโโ favicon.ico
โ โ โโโ logo.svg
โ โ โโโ assets/
โ โโโ src/
โ โ โโโ components/ # Reusable React components
โ โ โ โโโ common/
โ โ โ โ โโโ Button.tsx
โ โ โ โ โโโ Card.tsx
โ โ โ โ โโโ Modal.tsx
โ โ โ โ โโโ Toast.tsx
โ โ โ โ โโโ LoadingSkeleton.tsx
โ โ โ โโโ layout/
โ โ โ โ โโโ Header.tsx
โ โ โ โ โโโ Footer.tsx
โ โ โ โ โโโ Sidebar.tsx
โ โ โ โ โโโ Layout.tsx
โ โ โ โโโ player/
โ โ โ โ โโโ MusicPlayer.tsx
โ โ โ โ โโโ PlayButton.tsx
โ โ โ โ โโโ VolumeControl.tsx
โ โ โ โ โโโ ProgressBar.tsx
โ โ โ โ โโโ TrackInfo.tsx
โ โ โ โโโ artist/
โ โ โ โ โโโ ArtistCard.tsx
โ โ โ โ โโโ ArtistProfile.tsx
โ โ โ โ โโโ ArtistHeader.tsx
โ โ โ โ โโโ ArtistSearch.tsx
โ โ โ โโโ tip/
โ โ โ โ โโโ TipButton.tsx
โ โ โ โ โโโ TipModal.tsx
โ โ โ โ โโโ TipHistory.tsx
โ โ โ โ โโโ TipPresets.tsx
โ โ โ โโโ wallet/
โ โ โ โ โโโ WalletConnect.tsx
โ โ โ โ โโโ WalletInfo.tsx
โ โ โ โ โโโ WalletBalance.tsx
โ โ โ โโโ notifications/
โ โ โ โโโ NotificationCenter.tsx
โ โ โ โโโ NotificationItem.tsx
โ โ โ โโโ NotificationBell.tsx
โ โ โโโ pages/ # Page components (routes)
โ โ โ โโโ HomePage.tsx
โ โ โ โโโ ArtistPage.tsx
โ โ โ โโโ DashboardPage.tsx
โ โ โ โโโ TipHistoryPage.tsx
โ โ โ โโโ ExplorePage.tsx
โ โ โ โโโ NotFoundPage.tsx
โ โ โโโ hooks/ # Custom React hooks
โ โ โ โโโ useWallet.ts
โ โ โ โโโ useAudio.ts
โ โ โ โโโ useTip.ts
โ โ โ โโโ useNotifications.ts
โ โ โ โโโ useWebSocket.ts
โ โ โ โโโ useApi.ts
โ โ โโโ contexts/ # React Context providers
โ โ โ โโโ WalletContext.tsx
โ โ โ โโโ PlayerContext.tsx
โ โ โ โโโ AuthContext.tsx
โ โ โ โโโ NotificationContext.tsx
โ โ โโโ services/ # API service layer
โ โ โ โโโ api.ts
โ โ โ โโโ artistService.ts
โ โ โ โโโ trackService.ts
โ โ โ โโโ tipService.ts
โ โ โ โโโ userService.ts
โ โ โโโ utils/ # Utility functions
โ โ โ โโโ stellar/
โ โ โ โ โโโ wallet.ts
โ โ โ โ โโโ payments.ts
โ โ โ โ โโโ transactions.ts
โ โ โ โ โโโ addresses.ts
โ โ โ โโโ formatters.ts
โ โ โ โโโ validators.ts
โ โ โ โโโ constants.ts
โ โ โ โโโ helpers.ts
โ โ โโโ types/ # TypeScript type definitions
โ โ โ โโโ artist.types.ts
โ โ โ โโโ track.types.ts
โ โ โ โโโ tip.types.ts
โ โ โ โโโ user.types.ts
โ โ โ โโโ wallet.types.ts
โ โ โ โโโ api.types.ts
โ โ โโโ styles/ # Global styles
โ โ โ โโโ global.css
โ โ โโโ App.tsx
โ โ โโโ main.tsx
โ โ โโโ vite-env.d.ts
โ โโโ .env.example
โ โโโ .gitignore
โ โโโ index.html
โ โโโ package.json
โ โโโ tsconfig.json
โ โโโ vite.config.ts
โ โโโ tailwind.config.js
โ โโโ postcss.config.js
โ
โโโ backend/ # NestJS + TypeORM + PostgreSQL
โ โโโ src/
โ โ โโโ main.ts # Application entry point
โ โ โโโ app.module.ts # Root module
โ โ โโโ app.controller.ts
โ โ โโโ app.service.ts
โ โ โ
โ โ โโโ config/ # Configuration
โ โ โ โโโ database.config.ts
โ โ โ โโโ stellar.config.ts
โ โ โ โโโ app.config.ts
โ โ โ
โ โ โโโ common/ # Shared resources
โ โ โ โโโ decorators/
โ โ โ โ โโโ current-user.decorator.ts
โ โ โ โ โโโ public.decorator.ts
โ โ โ โโโ guards/
โ โ โ โ โโโ jwt-auth.guard.ts
โ โ โ โ โโโ roles.guard.ts
โ โ โ โโโ interceptors/
โ โ โ โ โโโ transform.interceptor.ts
โ โ โ โ โโโ logging.interceptor.ts
โ โ โ โโโ filters/
โ โ โ โ โโโ http-exception.filter.ts
โ โ โ โโโ pipes/
โ โ โ โ โโโ validation.pipe.ts
โ โ โ โโโ interfaces/
โ โ โ โโโ response.interface.ts
โ โ โ
โ โ โโโ database/ # Database module
โ โ โ โโโ database.module.ts
โ โ โ โโโ migrations/
โ โ โ โโโ 1234567890-CreateUsers.ts
โ โ โ โโโ 1234567891-CreateArtists.ts
โ โ โ โโโ 1234567892-CreateTracks.ts
โ โ โ โโโ 1234567893-CreateTips.ts
โ โ โ
โ โ โโโ auth/ # Authentication module
โ โ โ โโโ auth.module.ts
โ โ โ โโโ auth.controller.ts
โ โ โ โโโ auth.service.ts
โ โ โ โโโ strategies/
โ โ โ โ โโโ jwt.strategy.ts
โ โ โ โ โโโ wallet.strategy.ts
โ โ โ โโโ dto/
โ โ โ โโโ challenge.dto.ts
โ โ โ โโโ verify-signature.dto.ts
โ โ โ โโโ login.dto.ts
โ โ โ
โ โ โโโ users/ # Users module
โ โ โ โโโ users.module.ts
โ โ โ โโโ users.controller.ts
โ โ โ โโโ users.service.ts
โ โ โ โโโ entities/
โ โ โ โ โโโ user.entity.ts
โ โ โ โโโ dto/
โ โ โ โโโ create-user.dto.ts
โ โ โ โโโ update-user.dto.ts
โ โ โ
โ โ โโโ artists/ # Artists module
โ โ โ โโโ artists.module.ts
โ โ โ โโโ artists.controller.ts
โ โ โ โโโ artists.service.ts
โ โ โ โโโ entities/
โ โ โ โ โโโ artist.entity.ts
โ โ โ โโโ dto/
โ โ โ โโโ create-artist.dto.ts
โ โ โ โโโ update-artist.dto.ts
โ โ โ
โ โ โโโ tracks/ # Tracks module
โ โ โ โโโ tracks.module.ts
โ โ โ โโโ tracks.controller.ts
โ โ โ โโโ tracks.service.ts
โ โ โ โโโ entities/
โ โ โ โ โโโ track.entity.ts
โ โ โ โโโ dto/
โ โ โ โโโ create-track.dto.ts
โ โ โ โโโ update-track.dto.ts
โ โ โ
โ โ โโโ tips/ # Tips module
โ โ โ โโโ tips.module.ts
โ โ โ โโโ tips.controller.ts
โ โ โ โโโ tips.service.ts
โ โ โ โโโ entities/
โ โ โ โ โโโ tip.entity.ts
โ โ โ โโโ dto/
โ โ โ โโโ create-tip.dto.ts
โ โ โ โโโ query-tips.dto.ts
โ โ โ
โ โ โโโ stellar/ # Stellar blockchain module
โ โ โ โโโ stellar.module.ts
โ โ โ โโโ stellar.service.ts
โ โ โ โโโ transaction-verifier.service.ts
โ โ โ โโโ types/
โ โ โ โโโ stellar.types.ts
โ โ โ
โ โ โโโ storage/ # File storage module
โ โ โ โโโ storage.module.ts
โ โ โ โโโ storage.service.ts
โ โ โ โโโ types/
โ โ โ โโโ storage.types.ts
โ โ โ
โ โ โโโ notifications/ # Notifications module (WebSocket)
โ โ โ โโโ notifications.module.ts
โ โ โ โโโ notifications.gateway.ts
โ โ โ โโโ notifications.service.ts
โ โ โ โโโ dto/
โ โ โ โโโ notification.dto.ts
โ โ โ
โ โ โโโ email/ # Email module
โ โ โโโ email.module.ts
โ โ โโโ email.service.ts
โ โ โโโ templates/
โ โ โโโ tip-notification.html
โ โ
โ โโโ test/ # E2E tests
โ โ โโโ app.e2e-spec.ts
โ โ โโโ jest-e2e.json
โ โ
โ โโโ .env.example
โ โโโ .gitignore
โ โโโ nest-cli.json
โ โโโ package.json
โ โโโ tsconfig.json
โ โโโ tsconfig.build.json
โ โโโ ormconfig.ts # TypeORM configuration
โ
โโโ contracts/ # Soroban smart contracts (optional)
โ โโโ tip-escrow/
โ โ โโโ src/
โ โ โ โโโ lib.rs
โ โ โโโ Cargo.toml
โ โโโ README.md
โ
โโโ docs/ # Documentation
โ โโโ API.md
โ โโโ ARCHITECTURE.md
โ โโโ DEPLOYMENT.md
โ โโโ STELLAR_INTEGRATION.md
โ โโโ DATABASE_SCHEMA.md
โ
โโโ .github/ # GitHub configuration
โ โโโ workflows/
โ โ โโโ ci.yml
โ โ โโโ deploy.yml
โ โโโ ISSUE_TEMPLATE/
โ โ โโโ bug_report.md
โ โ โโโ feature_request.md
โ โ โโโ drips_wave_issue.md
โ โโโ PULL_REQUEST_TEMPLATE.md
โ
โโโ .gitignore
โโโ .env.example
โโโ package.json # Root package.json (monorepo scripts)
โโโ README.md
โโโ CONTRIBUTING.md
โโโ LICENSE
โโโ docker-compose.yml # Docker setup for PostgreSQL
โ Module-based architecture - Each feature is a separate module โ Entities folder - TypeORM entities for database models โ DTOs folder - Data Transfer Objects for validation โ Services - Business logic separated from controllers โ Guards & Interceptors - Authentication and request processing โ Migrations - Database version control with TypeORM
โ Component-based - Organized by feature โ Contexts - Global state management โ Services - API calls separated from components โ Hooks - Reusable logic โ Types - TypeScript definitions
We welcome contributions! TipTune is participating in the Stellar Drips Wave Program - check out our open issues to earn rewards while building something awesome.
- Check out our CONTRIBUTING.md guide
- Browse open issues tagged with
good-first-issue - Read the Code of Conduct
- Join our [Discord community] https://discord.gg/tkbwMmJE
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes with clear commit messages
- Write/update tests
- Push to your fork
- Open a Pull Request
- Basic music player
- Wallet connection
- Simple tipping functionality
- Artist profiles
- Real-time notifications
- Playlist creation
- Social features (comments, likes)
- Artist analytics dashboard
- Multiple currency support (USDC, custom tokens)
- Mobile app (React Native)
- NFT integration (collectible releases)
- Live streaming with tips
- Subscription tiers
- Artist collaboration tools
- Governance token for platform decisions
- Independent Artists: Earn directly from superfans
- Podcasters: Monetize episodes with listener tips
- Live Performers: Receive virtual tips during streams
- Music Educators: Get paid for lessons and tutorials
- Remix Artists: Share work and receive appreciation
This project is licensed under the MIT License - see the LICENSE file for details.
- Built on Stellar blockchain
- Supported by Stellar Development Foundation
- Part of the Drips Wave Program
- Icons by Lucide
- Discord: [[Join our community] https://discord.gg/tkbwMmJE
- Email: [email protected]
If you find TipTune valuable, consider:
- Starring this repository
- Reporting bugs and suggesting features
- Contributing code or documentation
- Using TipTune to support your favorite artists
Built with โค๏ธ by the TipTune community