What counts as upcoming

An event that started an hour ago and runs for three is still happening. Dropping it from the list at its start time is wrong — somebody looking at your site at 9pm wants to know the thing that started at 8 is still on.

Use the end of the event, not its start. A festival running all weekend should be in the list all weekend. This is a one-line difference and it is a real source of confusion on venue sites, particularly late in the evening when it matters most.

Writing the dates

Write dates the way people say them. “Fri 12 Sep, 8pm” beats “12/09/2026 20:00”, and numeric dates are ambiguous across countries anyway. Say “Tonight” and “Tomorrow” where they apply — it is the single most effective thing you can do to a listing, because it turns reading into recognition.

Drop the year unless the event is more than a few months away. Group by month when the list is long, so a scanner can find “October” without reading every line.

Repeating events in a list

A weekly quiz shown as eight identical rows crowds out everything else. Two reasonable approaches: show only the next occurrence of each repeating event, or collapse the series into one entry reading “Every Tuesday, 8pm”.

The second is usually better on a What's On page, because it tells a first-time visitor something true about the venue rather than about the next fortnight. Keep the individual dates on the event's own page for anyone who needs them.

The empty state

Every venue has a quiet period, and “No upcoming events” is a bad thing for a website to say. It reads as closed.

Make the message editable and write something true: “Autumn programme announced in September — join the mailing list.” Or hide the list and show something else. Whichever you choose, decide it deliberately rather than inheriting a default written by a developer who was thinking about a full calendar.

The performance detail

If this list is in a sidebar or a footer, it renders on every page. A plugin that materialises occurrences has to search across thousands of rows to find the next six; one that expands rules does a small query and a fast calculation. On a site with traffic, that difference is the plugin's entire performance profile.