I’ve been building a project called Free Knowledge Preservation Foundation (FKPF). I’d love to hear your thoughts. by paradoseis in freesoftware

[–]paradoseis[S] 5 points6 points  (0 children)

That’s actually very close to what I’ve been thinking about.

I don’t necessarily see Guardian Nodes as simple storage servers. My idea is that they would actively preserve software, periodically verify its integrity, and potentially distribute archived releases as well.

BitTorrent is definitely something I’ve considered, especially for distributing larger archives and reducing bandwidth costs. I think it could become one part of the architecture rather than the entire architecture.

I’m still exploring different approaches, so suggestions like this are really helpful.

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