TourTap
Go out, meet, live the moment.
Overview
TourTap is an event-driven social network. Instead of doom-scrolling profiles, you join an event near you and the conversations follow. Built from scratch as three native clients sharing a single Laravel backend — web, iOS, and Android — with real-time messaging, push notifications, and a defensive multi-platform subscription system.
The product hinges on a freemium loop: free users join events, Premium users create more, get boosts that elevate their event on the map for 24h, and unlock filtering on the explore map. Apple, Google, and Stripe billing are reconciled server-side to prevent double-subscribes or refund abuse.
Features
Discovery
Event discovery
A map-based explore page with geospatial clustering, distance filters, and category browse — built on MySQL ST_Distance_Sphere queries.
Premium
Event boosts
24-hour elevation that pushes a Premium user's event to the top of the map. Monthly quota auto-refills with the subscription and is clawed back on refund.
Cross-platform billing
Stripe (web), Apple StoreKit (iOS), Google Play Billing (Android) reconciled server-side. Prevents double-subscribes; webhooks revoke premium on refunds.
Three user tiers
Standard (1 active event), Premium (5 events, 5 boosts/month, filters), and Partner. Visual ring & badges across web/iOS/Android.
Social
Real-time messaging
Private DMs and per-event group chats over Laravel Reverb. Mobile uses Starscream (iOS) and OkHttp WebSocket (Android) on top of a shared protocol.
Push notifications
Firebase Cloud Messaging integrated on both mobile platforms for new messages, event reminders, and boost expirations.
Trust
Safety & moderation
Block/report flows with bidirectional invisibility, soft-deletes on events and users so chats stay intact post-deletion.
Operations
Admin panel
Filament-powered backoffice for moderating users, events, categories, and Premium tiers.
Engineering
Feature parity
A hard rule: every user-facing feature ships on web + iOS + Android together. Server is strictly backwards-compatible across app versions.
Computed lifecycle
Events auto-freeze when end_date < now() — no archive table, no client-side recomputation. The API exposes a single `passed` flag.
The stack
backend
17PHP web framework powering the API, admin, and websites.
Modern PHP with strict types, readonly props, and JIT.
Admin panel framework built on Livewire & Tailwind.
Full-stack reactive components without leaving PHP.
Token authentication for mobile API clients.
Headless authentication backend.
First-party WebSocket server for real-time messaging.
WebSocket client for broadcasting events.
Primary relational database, including spatial queries.
Cache and session driver.
Web subscription billing and webhooks.
Cross-platform push notifications.
Error tracking & performance monitoring.
Utility-first CSS framework for fast UI iteration.
Lightning-fast asset bundler with HMR.
Image processing, resizing, and optimization.
Local & production containerization.
ios
7Modern, type-safe language for Apple platforms.
Declarative iOS UI framework.
Native Apple maps & geocoding.
GPS-driven location services on iOS.
Modern in-app purchase APIs on iOS.
Production-grade WebSocket client for Swift.
Native iOS in-app purchases & subscriptions.
android
8Statically-typed JVM language for Android.
Classic Android UI with Material 3.
Google’s design system for Android.
Maps, clustering, and Places autocomplete.
HTTP & WebSocket client for Android.
Image loading & caching on Android.
Native Android subscriptions and verification.
Cross-platform push notifications.
Other projects
View all →
The website for Game'n Chill, a Lyon-based association running casual video-game tournaments. Players sign up online, track their scores, climb the leaderboards — while the team orchestrates in-house and partner events from a dense back-office.
Read case study
A French-language media decoding the broader economy: financial markets, crypto, commodities, ETFs, savings strategies. Articles, videos, polls, weekly rankings and live market data — available across four access tiers, from free to premium subscriptions.
Read case study