Flagship Project
PeerFit v2
Find people. Play sports. Stay active.
Post activities, join local sessions, build a sports profile, and connect with people who play the same games as you.
PeerFit is a social sports platform built around one problem: finding other people to play with. Not a booking system, not a team-management tool. A place to discover nearby sessions and players for the sports you actually play, without the friction of group chats and manual scheduling.
The product covers the full activity journey. A scrollable feed of local sessions can be filtered by sport, skill level, and date. Each listing supports likes, saves, comments, and join requests, with organisers able to approve or decline members for private sessions. An activities calendar built with react-day-picker gives users a persistent view of upcoming events across the platform.
Auth is handled end to end by Supabase: email and SMS verification, forgot-password and reset-password flows, and persistent sessions through the SSR client. All forms use React Hook Form with Zod validation. Profile pages support avatar uploads, a badge achievement system, player stats, and reviews from other users. Light and dark themes are managed by next-themes and persist across sessions.
Built with Next.js 15 and TypeScript, deployed to peerfit.co.uk via Vercel with automatic production deployments on every push.
What it does
Key features
Activity Feed
Scrollable sessions filtered by sport, skill, and date. Like, save, comment, and request to join. Organisers approve or decline members.
Full Auth Stack
Email and SMS verification, forgot and reset password, OAuth callbacks, and SSR session persistence through Supabase.
Player Profiles
Stats, badge achievements, peer reviews, avatar uploads, and a full friend request system with request management.
Calendar and Themes
Persistent activities calendar via react-day-picker. Light and dark mode with next-themes, preserved across sessions.
Product Walk-through
Product Screens
Browse every part of the platform: homepage, feed, auth flows, profiles, and settings.

Landing Page
Why it was rebuilt
From PHP prototype to production product
PeerFit v2 started where v1 ran out of road. The original was a PHP prototype with a MySQL backend and no deployment infrastructure, useful for proving the concept but not for shipping it to real users. The rewrite was not incremental; it was a full rebuild around a different set of assumptions.
The first call was choosing Supabase over a custom backend. Auth, file storage, row-level security, and real-time subscriptions in one hosted service removed a category of infrastructure work that would have delayed everything else. The trade-off was worth it: more time on product, less time managing a server.
Using Radix UI primitives alongside Tailwind gave a consistent, accessible component base across dialogs, dropdowns, tabs, toasts, and overlays without hand-rolling keyboard behaviour or ARIA attributes for each one. That mattered across a product with 15 distinct routes. Toast notifications are handled by Sonner, charts by Recharts, and the calendar by react-day-picker, each chosen to stay out of the way of the product itself.
Before / After
From static listings to a live feed
v1 showed a static grid of activities with no interaction. v2 replaced it with a social feed: filters, likes, saves, comments, night mode, and live activity states.
v1
v2Before / After
From a basic form to a complete auth flow
v1 had a single signup page with no verification. v2 ships with email confirmation, SMS verification, forgot-password, reset-password, and OAuth callback handling through Supabase SSR.
v1
v2New in v2
Profiles, achievements, and settings
v1 had no profile system. v2 adds player stats, badge achievements, reviews, friend requests, avatar uploads, and a settings page with theme switching and notification controls.
Profile
SettingsSee it in action
The full app is live, deployed on Vercel, and available to use right now.