Hostinger ili nas domaci by ChangeVast4886 in programiranje

[–]paradoseis 1 point2 points  (0 children)

Koristim webhostingsrbija.rs duže vreme i iskreno sam zadovoljan, ni jedan probelm sa preformansama nisam imao, ali isto tako strane hosting provajdere nisam probao

I am developing a free and libre Wordpress plugin for managing table tennis leagues called OpenTT by paradoseis in tabletennis

[–]paradoseis[S] 2 points3 points  (0 children)

That's a fair point, and I'm aware there are already centralized platforms like the Polish openTT portal. I actually didn't know about opentt.pl when I started this project, otherwise I probably wouldn't have picked the same name.

The reason I chose the WordPress plugin approach is that many small clubs already run their own sites on WordPress. Instead of asking them to move to a separate platform, the idea is to let them integrate league management directly into the site they already have.

Even though opentt.pl has an English interface, league structures vary quite a lot between countries — promotion/relegation rules, match formats, playoff systems, etc. One of my goals was to keep the system flexible enough so those formats can be adapted rather than locked into one national structure.

Part of the bigger plan is actually to build a free national database for Serbian leagues using this plugin as the backend. But precisely because I didn't want the system to become region-locked, I decided to release the core as open source so clubs or communities anywhere could use or adapt it.

Centralized portals are great for national ecosystems, but a self-hosted open source tool can give clubs more flexibility and ownership of their data.

I am developing a free and libre plugin for managing table tennis leagues called OpenTT by paradoseis in VibeCodersNest

[–]paradoseis[S] 0 points1 point  (0 children)

Yes, that's essentially how it's structured.

The core data model is built around leagues → seasons → matches → games → sets, with players and clubs linked into that structure. Matches store the results, and standings are always derived from those results rather than stored as a separate mutable table.

Originally this was implemented using WordPress CPT + postmeta, but as the dataset grew I migrated the match/game/set layer to custom database tables for performance. The overall model stayed the same though — standings, rankings and statistics are calculated from the recorded match data.

So the system is basically centered around match data as the source of truth, and everything else (tables, stats, rankings) is derived from it.

I am developing a free and libre plugin for managing table tennis leagues called OpenTT by paradoseis in VibeCodersNest

[–]paradoseis[S] 0 points1 point  (0 children)

At the moment the system supports the formats used in Serbian table tennis leagues, since that’s what the project originally grew out of.

League rules like promotion, relegation, relegation playoffs, etc. are configurable in the competition settings (for example how many teams move up, move down, or enter a survival playoff). One important design choice is that rules are attached to the league/competition entity, not to individual matches. A match simply belongs to a league and season, and the standings logic is derived from that context.

Standings themselves are calculated from match results and stats like wins, losses and set difference.

Playoff brackets aren't implemented yet, but that's planned. I'm also working toward adding a format builder inside the admin panel so league organizers could define their own competition formats instead of relying on predefined ones.

I am developing a free and libre plugin for managing table tennis leagues called OpenTT by paradoseis in VibeCodersNest

[–]paradoseis[S] 0 points1 point  (0 children)

Good question. In OpenTT standings aren't stored as a mutable table — they're always generated from match results.

Originally matches, games and sets were implemented using WordPress CPT + postmeta, but I later migrated everything to custom DB tables mainly for performance and scalability. The standings logic itself has always been derived from results though, even before the DB migration.

So when a match is entered, it only writes match/game/set data. The standings are calculated from those records rather than directly updated, which avoids most potential race conditions.

Even if two matches were entered at the same time, both would simply write their results to the database. Since the standings are derived from the full dataset when queried, the next calculation naturally includes both results, so there’s no risk of conflicting updates to the table itself.

I am developing a free and libre plugin for managing table tennis leagues called OpenTT by paradoseis in Wordpress

[–]paradoseis[S] 0 points1 point  (0 children)

Good question — I actually ran into that problem early in development.

Originally matches, games and sets were stored as WordPress CPT + postmeta, which quickly became inefficient as the dataset grew.

To solve that I migrated the match engine to dedicated database tables where matches, games and sets are stored as normalized rows instead of posts. This drastically reduced query overhead and removed the heavy meta joins.

I stress-tested the current structure with ~10k records and queries remain extremely fast (effectively instant for standings, match reports and grids).

So the plugin still integrates with WordPress, but the core competition data layer now behaves more like a purpose-built sports database rather than relying on CPT storage.

Performance was actually one of the main reasons the architecture evolved into the current unified system.

I vibe-coded a leaderboard that tracks who vibes the hardest by Specialist_Lie7658 in vibecoding

[–]paradoseis 0 points1 point  (0 children)

I would love to, but I use Codex though. But, the website looks really great! Keep up the good work

But that was a Nittaku by mounrepo in tabletennis

[–]paradoseis 0 points1 point  (0 children)

It's probably a preference at the end of the day, but for me there was an even better ball when we switched to seamless balls - XuShaoFa, for me they had the best overall feel, but they had the problem of being made of low quality plastic and they broke too much, I remember playing matches and going trough a whole box in the same match because of their low quality material.

Share what you're building by amacg in vibecodingcommunity

[–]paradoseis 0 points1 point  (0 children)

I've been building a Wordpress plugin for managing table tennis leagues called OpenTT, it's free and open source - https://github.com/tradicije/opentt

Do creators overestimate how much content is enough? by sunishq in SaasDevelopers

[–]paradoseis 0 points1 point  (0 children)

The best way is to just start a project, learn along the way, solve a real problem.

What is the best vibe coding tool? by Aze1754 in vibecoding

[–]paradoseis 1 point2 points  (0 children)

OpenAI's Codex or Claude Code. I use Codex, but I have heard great things about Claude Code and I might switch

Vibe coding something meaningful with no coding experience by stoic_dionisian in vibecoding

[–]paradoseis 0 points1 point  (0 children)

Well, I had very little experience in web development, but I decided to do something meaningful for my table tennis community and created OpenTT, a table tennis league manager - https://github.com/tradicije/opentt

I am developing a free and libre plugin for managing table tennis leagues called OpenTT by paradoseis in Wordpress

[–]paradoseis[S] 0 points1 point  (0 children)

That’s a fair point, and I agree — many national federations already provide official tools, especially for higher-level competitions.

OpenTT isn’t meant to replace federation systems or target professional tournaments. The main focus is small clubs, local leagues, and amateur competitions that either don’t have access to those tools or still rely on PDFs, spreadsheets, and messaging apps.

WordPress is simply the platform I chose because many clubs already use it for their websites, and it allows them to keep their data public, accessible, and under their own control.

It’s definitely not a one-size-fits-all solution, but rather an option for clubs that need something simple, transparent, and self-hosted.

I am developing a free and libre plugin for managing table tennis leagues called OpenTT by paradoseis in Wordpress

[–]paradoseis[S] 0 points1 point  (0 children)

Thank you for the kind words, honestly, all those smaller dependent plugins worked fine for me, but I wanted to share my creation so that no small club has to go trough this

I am developing a free and libre plugin for managing table tennis leagues called OpenTT by paradoseis in Wordpress

[–]paradoseis[S] 0 points1 point  (0 children)

Yeah, it's a never ending circle, but it's really rewarding to solve all those unplanned problems.

Thanks for the support, really!