gabito1451/tip-tune

โ˜… 0Forks 0TypeScriptGitHub โ†—Compare

README

TipTune

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.

Color Palette

  • Navy (Background): #0B1C2D
  • Blue (Primary): #4DA3FF
  • Ice Blue (Secondary): #6EDCFF
  • Mint (Highlight): #9BF0E1
  • Gold (Tip Accent): #FFD166

Stellar License: MIT PRs Welcome


Features

  • 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

Why TipTune?

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

Tech Stack

  • 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_trgm full-text + fuzzy search)
  • Audio Streaming: Web Audio API / HowlerJS
  • Real-time: WebSockets for live notifications

๐Ÿ” Search Ranking Algorithm

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


Installation

Prerequisites

  • Node.js 18+ and npm/yarn
  • PostgreSQL database
  • Stellar wallet (Freighter recommended for development)

Setup

# 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 dev

Visit http://localhost:3000 to see TipTune in action!


Quick Start

For Listeners

  1. Connect Wallet - Click "Connect Wallet" and approve connection
  2. Browse Artists - Explore the artist directory
  3. Listen & Tip - Play a track and tap the tip button
  4. Select Amount - Choose or enter custom tip amount
  5. Send - Confirm transaction in your wallet

For Artists

  1. Sign Up - Create artist profile with Stellar wallet
  2. Upload Music - Add tracks with metadata and artwork
  3. Share Profile - Share your TipTune link with fans
  4. Receive Tips - Get notified instantly when fans tip
  5. Track Analytics - View earnings and engagement stats

Project Structure

# 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

Key Features of This Structure

Backend (NestJS + TypeORM + 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

Frontend (React + TypeScript + Vite)

โœ… Component-based - Organized by feature โœ… Contexts - Global state management โœ… Services - API calls separated from components โœ… Hooks - Reusable logic โœ… Types - TypeScript definitions


Contributing

We welcome contributions! TipTune is participating in the Stellar Drips Wave Program - check out our open issues to earn rewards while building something awesome.

Getting Started

  1. Check out our CONTRIBUTING.md guide
  2. Browse open issues tagged with good-first-issue
  3. Read the Code of Conduct
  4. Join our [Discord community] https://discord.gg/tkbwMmJE

Development Workflow

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes with clear commit messages
  4. Write/update tests
  5. Push to your fork
  6. Open a Pull Request

๐ŸŽต Roadmap

Phase 1: MVP (Current)

  • Basic music player
  • Wallet connection
  • Simple tipping functionality
  • Artist profiles
  • Real-time notifications

Phase 2: Enhanced Features

  • Playlist creation
  • Social features (comments, likes)
  • Artist analytics dashboard
  • Multiple currency support (USDC, custom tokens)
  • Mobile app (React Native)

Phase 3: Advanced

  • NFT integration (collectible releases)
  • Live streaming with tips
  • Subscription tiers
  • Artist collaboration tools
  • Governance token for platform decisions

Use Cases

  • 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

License

This project is licensed under the MIT License - see the LICENSE file for details.


Acknowledgments


Contact & Community


๐Ÿ’ก Support the Project.

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

Contributors

OlufunbiIK0xDeonGodsmiracle001soomtochukwuXaxxooGodwinEkohKaylahrayPetJsOthmanImamwalterthesmartlishmanTechBappa-KambasshdopeyCedarichCybermaxi7Uyoxyedehvictorohamamarachi474-delNanfe01MadakiElishaLaGodxyUchechukwu-EkeziekulayddonojaraapatrickNwafoMac-5Eniola3321shamoo53Gbangbolaoluwagbemigaod-hunter

Issues