Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

godosh's avatar
Level 1

I built a SaaS with Multi-Tenancy (full presentation)

Hi all,

After about 6 months of work, I built a SaaS app and I'd like to present it to you. It's a Pickleball Club management platform. It's called PickleTime.

https://pickletime.app

For the multi-tenancy, I'm using TenancyForLaravel v3 (stancl/tenancy). It works great.

For the frontend I'm using:

  • Tailwind
  • Flowbite
  • FilamentPHP
  • Livewire
  • fullcalendar (for the Club events schedule)

For the runtime:

  • Octane (swoole) - insanely fast

The app is built into a docker image. I'm using "webdevops/php-nginx" as the docker base image, and I install Swoole on top of it.

Other packages used:

  • laravel/socialite (to allow sign in as Google)
  • laravel/pennant (to allow Club admins to enable or disable site features)
  • laravel-notification-channels/webpush (to send Push notifications to Club members)
  • laravel/cashier

For Cashier, I overridden some files to support "Stripe Connect", because each Club corresponds to a Connect account on Stripe.

A subdomain gets created for each Club. For example, if you create a Club called "foo", you'll get this subdomain: foo.pickletime.app.

I'm a fan of using FilamentPHP forms and tables as livewire components and blade components throughout the app, not just in the admin panel.

If you're in a pickleball club and you're looking for a platform, feel free to use it! It's free! I'll be more than happy to take feature requests too.

Try it out, and tell me what you think!

3 likes
17 replies
godosh's avatar
Level 1

@vincent15000 oh you're right! I checked on sentry and I saw the error you encountered. I've just fixed it and also added the missing unit test for the Rules page

1 like
godosh's avatar
Level 1

@vincent15000 I'm not using pusher or reverb yet, but I'd like to implement it soon. In a multi-tenant setup it might be a challenge because of the subdomains.

1 like
vincent15000's avatar

It seems to be a very nice idea, but I guess that there are several bugs.

For example, the club page doesn't load at all.

Why is a part of the application in English and another part in French ?

1 like
godosh's avatar
Level 1

@vincent15000 oh my gosh that's so weird, I don't see anything on sentry. Please tell me what you're getting, I can't reproduce it 😧

1 like
godosh's avatar
Level 1

@vincent15000 dang, is the page awaiting on a resource in particular? I'll be so grateful if you could help me sort this out! 🙏🏻

1 like
vincent15000's avatar

@godosh Now the page has loaded, but for each functionality, the page is very very very long () more than one minute and sometimes up to 2 or 3 minutrs) to load. You should check why.

godosh's avatar
Level 1

@vincent15000 might be because I self host the app in Canada, and you're in France. But still it shouldn't take that long, I'll check this out.

1 like
vincent15000's avatar

@godosh Check my app hosted in France (full Laravel / Livewire).

https://miam.prestidigitaweb.fr

No matter where the application is hosted, you can load all pages instantly.

But sure if you self host your application, perhaps you have not enought resources.

jlrdw's avatar

You might want to fix the pagination links, make current page a slightly different color perhaps. I was on demo page.

Also see if you have an n+1 problem, under members it's taking a little time to load another page when paginating.

App looks very good and professional.

2 likes

Please or to participate in this conversation.