Rate Me connects London clients who post a job request with tradespeople within their service radius. Tradespeople apply by spending credits (8 credits per offer, up to 3 offers per request). The client compares offers, chats with each candidate in a dedicated thread, picks a tradesperson and then leaves a review.
A single Laravel API, secured with Sanctum, powers both the Vue.js web app and the Flutter mobile app (iOS and Android). Credits are bought with Stripe on the web and through Apple / Google in-app purchases on mobile, each purchase verified server-side, with automatic refunds when a request expires. A Filament back office handles users, moderation, support and refunds. The whole system runs in English, French and Russian.
From challenge to results
1
Challenge
In London, finding a reliable tradesperson available nearby takes time, while tradespeople struggle to find serious jobs in their area. The client wanted a platform that connects both sides quickly, with comparable offers and verified reviews.
2
Solution
A single Laravel API serves both the Vue.js web app and the Flutter app. A credit system controls expert applications and accepts three payment channels (Stripe, Apple, Google). Scheduled tasks expire stale requests and refund applicants, purge expired data and anonymise deleted accounts.
3
Results
Over 480 automated Pest tests, 99 REST API routes, 18 Filament admin resources and 8 dashboard widgets, 3 languages (EN/FR/RU).
Features
01Job requests with photos, trade, city and geolocated address
02Experts only see requests within their service radius (haversine distance)
03Credit-based applications: 8 credits per offer, at most 3 offers per request
04Clients compare the offers they receive and choose their expert
05Credit purchases via Stripe Checkout (web) and Apple / Google in-app purchases (mobile)
06Handling of refunds, Stripe disputes and admin-approved refund requests
07Per-request client / expert chat with unread message counters
08Expert directory with search, detailed profile, photo portfolio and reviews
09FCM push notifications and in-app notifications translated into English, French and Russian
10Sign-in by email with verification code, Google and Apple
11Built-in support through chat sessions with the admin team
12Personal data export, account deletion and automatic anonymisation after 12 months
Stack by layer
Frontend
Vue.js 3
Tailwind CSS 4
Pinia
Vue Router
vue-i18n
Vite
Blade
Mobile
Flutter
Dart
Provider
Dio
Secure Storage
Deep links
ARB i18n
Back office
Filament 3
Backend
Laravel 12
PHP 8.2
Laravel Sanctum
Intervention Image
Pest
Database
MySQL
External services
Stripe
Apple In-App Purchase
Google Play Billing
Firebase Cloud Messaging
Firebase Crashlytics
Google Maps Places
Google Sign-In
Sign in with Apple
Cloudflare R2
Infrastructure
VPS
Queues
Scheduler
Laravel Reverb
Technical architecture
REST API secured with Sanctum tokens, with rate limiting (auth, OTP, reports, social login)
Business service layer (orders, credits, reviews, notifications, IAP)
Payments: Stripe Checkout + webhooks, Apple (x5c chain, ES256) and Google receipt verification, store webhooks
Queues (database driver) for push and admin notifications
Scheduled tasks: request expiry, data purge, account anonymisation
S3 / R2-compatible image storage with server-side resizing