Maintain the schedule once. The calendar takes care of itself.

A WordPress plugin for sports clubs. It handles training times, the people of the club, venues and events. Nobody types the individual dates; they come out of the schedule. School holidays take themselves off the calendar.

Plays in a league? See a football club with teams, squads and fixtures

The demo is also available in German

Free and GPL-licensed · WordPress 6.7+ · PHP 8.1+ · English and German included

The everyday problem

The schedule is right. The website is two seasons behind.

Training times live in a PDF someone exported last year. The summer break is still not on the calendar. A session is cancelled at short notice and the only place it appears is a WhatsApp group. The person who knows when the hall is free is away for three weeks.

None of that is a design problem. It is what happens when every date has to be typed by hand, in more than one place, by people who fit this around a job and a family.

How it works

Three things you enter. Everything else follows.

Squadeno keeps one source of truth per sport. Everything else follows from it: the public page, the club calendar, the upcoming-dates list, the structured data for search engines.

1

The training schedule

Tuesday, 6 pm, gym hall, September to June. You enter that once per group. Every individual date follows from it, for this season and the next. Not weekly? Every second week or the last Saturday of the month works the same way, and a course over ten sessions stops on its own.

2

Closures and holidays

Enter the school holidays and hall closures centrally. Affected sessions disappear from every calendar automatically. Holiday camps and events stay visible.

3

The exceptions

A session is cancelled, moved, or an extra one is added. You handle that on the date itself. The change then shows up everywhere that sport appears, and you never open a page to do it.

And if you compete: teams are subgroups of a sport — each with its own squad, its own league and fixtures on a date that reach the calendar subscription. Switch it on in the settings; without the switch you see none of it.

Getting started

A wizard sets up the first sports with you.

After installing, nobody is left in front of an empty admin area. The setup assistant asks, one step at a time, what your club has and creates it as you go: venues first, then the people, then the sports.

  • Every step hands the next one what it needs. By the time you name a sport, its venue and its trainer are there to pick from.
  • Nothing is kept in limbo. Stop halfway and everything created so far stays.
  • What is already in place is read from your data, so nothing is ticked off that nobody did.
  • Until the setup is complete, the dashboard and the plugin list carry the next step. After that the notice is gone.
The step where the sports come into being: the trainer and the training time are already there to pick from, and teams take them over.

What visitors and editors see

Every sport gets a page worth finding.

Clean URLs, internal linking between sport, person and venue, plus schema.org structured data. A search for “kids gymnastics” in your town then has somewhere to land. The people of the club live in one place too: trainers and board members are one record each, and the office says what someone does.

Click any screenshot to enlarge it.

On the website

All sports at a glance, filterable by age group and section.
One sport: training times, contacts and the generated upcoming dates.
The club calendar: trainings, events and closures in one place, as a month, a week or the weekly training plan. School holidays block the affected sessions, a cancelled one stays visible and struck through.
The trainers as their own page, filtered to the office "Trainer".
The board as its own page, filtered to the board offices and grouped by committee. These are the same records as the trainers, so nobody is kept twice.
The events on a page of their own, with the date above each one and filters for event type and age group.
A team with its squad: positions in the order you keep them, shirt numbers, the league with a link to the association’s table, and fixtures among the training dates. Only visible once competitive play is switched on.

In the admin area

The admin overview shows new editors where everything is maintained.
Maintaining a sport: the weekly training time, the dates computed from it with cancel and reschedule right there, fields for an extra or a moved session, and the trainers with their permission level.
All sports in the admin area, with their sub-groups, age groups and sections.
Permissions in two layers: six task packages ticked per person, and a permission level per sport for trainers.

Plugin and theme

There is a matching theme as well.

The plugin fits into any theme. If your club is starting from an empty site with no design of its own, there is a second piece: Squadeno, a WordPress theme built alongside the plugin. Sports, training times, coaches and venues appear in it without any setup.

  • A hero slider, section pages and cards, all filled from the Customizer.
  • No external fonts and no CDN. Nothing about your visitors leaves your server.
  • Free and GPL-licensed as well. It is approved for wordpress.org and can be downloaded from its own page until it appears in the directory.
Look at the theme
One sport in the Squadeno theme: header image, training times, contact person and upcoming dates.

Honest fit

When this fits. And when it does not.

A good fit if…

  • you run several sports or groups, each with its own schedule
  • trainers should keep their own dates current, without full editor access
  • the board belongs on the website, and the same person may coach and hold an office
  • your season repeats weekly and is interrupted by holidays
  • each offering should be findable on its own page
  • you want venues with address, map and an automatic “what happens here” list
  • sports, people, events and venues should each get their own page, built from a block and not from a plain list
  • your teams need a squad, a league and a fixture list — competitive play can be switched on and stays out of sight otherwise

Probably not if…

  • you need online booking and payment; Squadeno lists what you offer but does not sell it
  • you need membership administration, dues or attendance tracking
  • your club has one team and one fixed practice slot, in which case a page of text will do
  • you want a calculated table or match results kept in the site; teams, squads and fixtures are there, but the table stays with the association
Off by default

No data leaves your site unless you switch it on.

Maps are opt-in. While the map provider is set to “none”, which is the default, the plugin contacts no external server. That holds for the public site and for the admin area alike. The Leaflet map library is bundled and served from your own server, never from a CDN. Nothing is tracked and nothing is measured. Spam protection runs on a honeypot and a time trap and needs no outside service; Cloudflare Turnstile can be switched on, but nothing depends on it.

Questions

The ones that come up first.

Can trainers maintain their own content?

Yes, and at three levels of trust per assignment: full editing of their sport, read-only (they appear as a contact but have no admin access), or dates-only. For the last case there is a slim box that lets them call off, move or add a single session and nothing else. The default is the most restrictive one.

Does it cover the board as well, not just the trainers?

Yes. There is one record per person, whatever they do for the club, and an office says what that is: trainer, chair, treasurer, membership records. Offices can sit in committees, so an executive and an extended board come out in the right order, which alphabetical sorting would not manage. A board page is then an ordinary page with one block on it, filtered to the board offices. Anyone who coaches and sits on the board is entered once and appears in both places.

Not everything we do is weekly. Does that fit?

Yes. A training time repeats every week by default, but it can just as well run every two, three or four weeks, or fall on a set weekday of the month — the second Saturday, the last Friday. And it can end: on a date, or after a set number of sessions. A beginners’ course over ten sessions stops after the tenth and the calendar goes quiet. A closure does not use one of those ten up: if the hall is shut over the holidays, the course runs a week longer. Once the end has passed, the training time drops off the sport’s page — the entry stays, so you can run the course again next term.

Our club plays in a league. Does the plugin cover that?

Yes, once you switch competitive play on in the settings — before that you see none of it. A team is then a subgroup of its sport, with its own page, its own training times, its own squad and a league field linking to the association’s table. On a date you enter the opponent and home or away; both reach the calendar subscription. A club with a single sport creates its age groups as the sports — under-11s, women, men. What the plugin deliberately does not do: calculate a table of its own or keep results. The association’s table is the one that counts, and a match report is an ordinary post.

Who is allowed to maintain what?

Permissions come in two layers. Club-wide there are five task packages, ticked in the person record: own profile, trainer, club administration, dates, and public relations. On top of that a trainer is tied to the sports assigned to them, with a level per assignment. Only the club administration may delete content, and nobody can pass on a package they do not hold themselves. Everything else in WordPress stays untouched: no package opens plugins, themes, users or the settings.

How much work is the initial setup?

The setup assistant takes you through it: scope, the overview pages, venues, people, age groups, sports, and a closing step; if your club plays in a league, the positions come in as well. It creates what you type in, and each step offers up what the previous one produced. At the end you do not have an empty structure but a sport with a trainer, a venue and a training time, which the calendar already turns into dates. If you would rather start on your own, skip it: the checklist stays and shows what is still missing.

Can I try it before installing it?

Yes. The demo starts a complete WordPress in your browser, with the plugin, the matching theme and a demo club already set up. Nothing lands on your computer and nothing is kept; closing the tab ends it. Switch the calendar between month, week and the weekly training plan, open a sport, or change a training time in the admin area and watch every calendar follow. You are logged in as an administrator, so the Customizer is open to you as well.

Does it work with my theme?

Yes. Output goes through shortcodes and blocks, so it drops into any theme, block or classic. There is a block for every list: sports, calendar, upcoming dates, people, events and venues. The styling uses its own prefixed classes and a brand colour you can set. If you have no theme yet, the Squadeno theme was built for this plugin and needs no setup to show your sports.

Can the URLs be in my language?

Yes. The URL bases default to English (sports, people, …) and can be changed per site in the settings, to German for example. The interface itself ships in English with a complete German translation; other languages can be added via the bundled translation template.

What happens with caching plugins?

They work alongside it. Computed dates are cached internally and invalidated whenever something changes, so a page or object cache on top only makes it faster.

Can I ask for a feature?

Yes, and most improvements so far came out of everyday club use rather than a roadmap. The plugin keeps growing. If something is missing for your club, or would have to work differently, write to me. I will listen, and there is usually a way.

What does it cost?

Nothing. It is free software under the GPL, published in the WordPress plugin directory. There is no paid tier and no upsell built into the plugin. If you would rather not set the website up yourself, you can ask me about installation, design and upkeep as a service. The plugin itself stays free either way.