Skip to content

mekedron/platform.live.tips

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

live.tips

An open-source, self-hostable alternative to Buy Me a Coffee and Ko-fi, built for live performers — bands, street musicians, and service crews. Your audience scans a QR code, picks an amount, and the money lands directly in your Stripe account. No platform fee, no middleman.

🌐 Project page · 🐛 Report an issue · 📄 MIT License

What is live.tips?

live.tips lets teams create a public tip page where anyone can send them tips via mobile payment. Each team gets a unique handle-style URL like /@bandname that can be shared via QR codes — printed on a sign or projected on stage.

How it works

  1. Teams sign up, create their profile, and connect a Stripe account (or add a MobilePay/Revolut payment link)
  2. Tippers scan a QR code or visit the URL, select an amount, and pay
  3. Tips are recorded and visible in the team's dashboard — and on the live on-stage screen, in real time

Key Features

  • Public tip pages with @ style URLs and QR code generation
  • Live mode for on-stage performances — live sessions with a public real-time tip activity screen
  • Stripe Connect (Express) payments — card payments with SCA support, webhook-driven, straight into the team's own Stripe account
  • MobilePay / Revolut payment links as alternatives
  • Multi-tenant team system with roles (Owner, Admin, Member) and fine-grained access rights
  • Email-based invitation system and transactional emails
  • Full admin panel built with Filament
  • Multi-language: English, Finnish, Lithuanian
  • Mobile-first responsive design
  • Comprehensive test suite (unit, feature, and real-browser tests)

Project status & maintenance

The platform is feature-complete and working — everything above runs today. There is no hosted version yet: running a public service costs money, so for now live.tips is self-host only. A hosted version at live.tips is planned once there's enough interest.

The project is actively maintained:

  • 🐛 Found a bug? Open an issue — it will get fixed.
  • 🔀 Pull requests are welcome and get reviewed and merged.
  • 🆓 MIT-licensed — use it for your band, your venue, your fundraiser, or your own product.

Tech Stack

  • Backend: Laravel 12, PHP 8.4+
  • Admin Panel: Filament
  • Frontend: Livewire, Alpine.js, Tailwind CSS v4
  • Payments: Stripe Connect (Express)
  • Database: SQLite (development), PostgreSQL (production)
  • Testing: Pest v4 (incl. Playwright-driven browser tests)

Development

Setup

composer setup

This installs dependencies, prepares the database, builds assets, and enables the mandatory git hook described below.

Mandatory pre-push hook

Every contributor must enable the project git hook. A version-controlled pre-push hook (in .githooks/) runs the full quality gate and aborts the push if anything fails, so unformatted code or failing tests never reach the remote.

Enable it once per clone (this is required — composer setup does it for you):

git config core.hooksPath .githooks
# equivalently:
composer setup:hooks

On every git push the hook runs, in order, and blocks the push on the first failure:

  1. Code stylevendor/bin/pint --test
  2. Unit & feature testsphp artisan test
  3. Browser testsphp artisan test tests/Browser

Browser-test prerequisites

The browser tests drive a real Chromium through Playwright. One-time setup:

npx playwright install chromium

Requires Playwright ≥ 1.60 (already pinned in package.json). Earlier versions hang during the browser install on Node 24.16+/26.

They also need the front-end assets to be available — either keep the dev server running (composer run dev) or build once (npm run build).

The tests/Browser/Turnstile* tests are currently skipped: they were written against a removed pest-plugin-browser API and depend on a live Cloudflare sitekey. Re-enable them after a rewrite.

Running the checks manually

vendor/bin/pint                  # fix code style
php artisan test                 # unit + feature tests
php artisan test tests/Browser   # browser tests

Testing Stripe payments locally

Run the app with a queue worker (composer run dev includes one), then forward webhooks:

stripe listen --forward-to localhost:8000/stripe/webhooks --forward-connect-to localhost:8000/stripe/webhooks

Put the printed whsec_… into STRIPE_WEBHOOK_SECRET in .env and run php artisan config:clear. Then donate on a Stripe-connected team page and pay with a test card:

  • 4242 4242 4242 4242 — succeeds
  • 4000 0025 0000 3155 — triggers the 3D Secure (SCA) challenge

Any future expiry, any CVC. The tip flips to paid only once the payment_intent.succeeded webhook is processed.

Documentation

  • docs/ARCHITECTURE.md - System architecture and design decisions
  • docs/roadmap/ - Feature roadmap and task breakdown
  • docs/roadmap/history/STATE.md - Current implementation status
  • site/ - Static landing page deployed to GitHub Pages

License

Released under the MIT License.

About

Open-source, self-hostable Buy Me a Coffee / Ko-fi alternative for live performers. Public tip pages with QR codes, Stripe Connect payouts, live on-stage mode, admin panel, teams & roles. Laravel + Filament + Livewire. Actively maintained — issues fixed, PRs welcome.

Topics

Resources

License

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors