ikramdeveloper

Ikramdeveloper

All Projects

Next.js, NestJS, PostgreSQL, Stripe Connect, Paysera

LetsPadel — Court Booking & Venue Management

A SaaS marketplace for the padel tennis industry — players discover and book courts instantly, while venue operators get a complete back-office to manage pricing, payments, promotions, and customer relationships.

Lets Padel
The Problem

What needed to be solved

Players had no centralized way to find and book padel courts — availability was scattered across phone calls, WhatsApp, and individual venue websites. Venue owners relied on manual processes — spreadsheets, paper logs — to manage bookings, pricing, and payments, with no way to offer loyalty credits, promotional discounts, or corporate billing without custom software. There was no unified place to collect payments, view revenue trends, or manage customer relationships.

Engineering Thinking

Key Decisions & Challenges

1

Paysera alongside Stripe

Situation

The client's business is based in the Baltic region where Paysera is widely used. Stripe alone would have excluded a significant portion of the local customer base.

Options Considered

  • Stripe only — simpler integration, but misses the local market
  • Paysera only — covers the local market but limits international reach
  • Both — more integration work, but covers all customers

Decision

Integrated both — Stripe for international card payments, Paysera for the local Baltic market. Each venue can use the processor that works best for their region.

2

Stripe Connect for Marketplace Payouts

Situation

The platform collects payments from customers and needs to settle funds to individual venue owners. Building a custom payout system would have been complex and financially risky.

Options Considered

  • Manual payouts — error-prone and unscalable
  • Stripe Connect — marketplace payment architecture built for this exact model

Decision

Used Stripe Connect. It routes payments through the platform and automatically transfers each venue's share to their own bank account, enabling the platform to take a commission without building custom payout infrastructure.

3

PostgreSQL over MongoDB

Situation

The system has a large number of relational entities — venues, courts, bookings, users, roles, payments, credits, discounts, and invoices. Enforcing referential integrity across all of these in a document database would have been difficult.

Options Considered

  • MongoDB — flexible schema, but referential integrity across many entities is harder to enforce
  • PostgreSQL — relational model fits the data structure; joins and constraints work cleanly

Decision

PostgreSQL with Prisma as the ORM, hosted on Neon. The relational model matches the domain naturally and keeps data integrity enforced at the database level.

What Was Built

Features

Court Booking

Players browse real-time availability, book a slot instantly, and receive a unique QR code or barcode as their entry pass. Courts can be individually configured with type, surface, and features.

Dynamic Pricing

Venue owners define pricing rules by day of week and time window, so peak and off-peak rates update automatically without manual intervention.

Payment Processing

Players pay by card online or cash at the venue. Stripe and Paysera are both supported, with Stripe Connect handling automatic payouts to each venue's bank account.

Credits & Discounts

Venues load prepaid credit onto customer accounts, applied automatically at checkout. Promo codes support percentage or fixed discounts, usage caps, validity windows, and court-level restrictions.

Invoicing & Reporting

Every transaction generates a downloadable PDF invoice. Customers can choose personal or corporate invoicing. Venue admins get a full payment history dashboard with date filtering and export.

Venue Management Dashboard

Owners configure opening hours, court details, amenities, cancellation policies, cover images, and customer-facing instructions — all reflected live on the booking side.

Customer Relationship Tools

Admins search and browse their customer list, view booking and payment history, manage credit balances, leave internal notes, and invite team members with role-based permissions.

Recurring Bookings

Regular players set up daily or weekly recurring reservations, removing the need to rebook the same slot every week.

Email Notifications

Automated multi-language emails for account verification, booking confirmation, cancellation, and schedule reminders.

Screenshots

In Action

Arenas listing

Arenas listing

Venue settings dashboard

Venue settings dashboard

Responsibility

My Role

I led a team of three engineers — contributing to development directly, reviewing pull requests, and owning the technical decisions throughout the project.

Stack

Tech Stack

Next.js NestJS TypeScript PostgreSQL Neon Prisma Stripe Stripe Connect Paysera AWS S3 Resend
Result

Outcome

Live and in use by venues and players.

Demo

Live Project

lets-padel.com