From bd18fd85882124dfd6b96ddc4fe9a1e2e80f70a6 Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Sat, 21 Feb 2026 16:29:24 +0100 Subject: [PATCH 1/2] feat(homepage): limit upcoming events to 5, preserve 3 dates --- app/controllers/dashboard_controller.rb | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 43833093e..6e29ac597 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -3,6 +3,7 @@ class DashboardController < ApplicationController skip_before_action :accept_terms, except: %i[dashboard show] DEFAULT_UPCOMING_EVENTS = 5 + MAX_WORKSHOP_QUERY = 10 helper_method :year_param @@ -12,6 +13,7 @@ def show @upcoming_workshops = upcoming_events.map.each_with_object({}) do |(key, value), hash| hash[key] = EventPresenter.decorate_collection(value) end + @has_more_events = total_upcoming_events_count > DEFAULT_UPCOMING_EVENTS @testimonials = Testimonial.order(Arel.sql('RANDOM()')).limit(5).includes(:member) end @@ -56,7 +58,27 @@ def top_coach_query def upcoming_events workshops = Workshop.upcoming.includes(:chapter, :sponsors, :organisers) - all_events(workshops).sort_by(&:date_and_time).group_by(&:date) + .limit(MAX_WORKSHOP_QUERY) + sorted_events = all_events(workshops).sort_by(&:date_and_time) + + limited_events = [] + dates_shown = 0 + prev_date = nil + + sorted_events.each do |event| + dates_shown += 1 if event.date != prev_date + prev_date = event.date + break if dates_shown > 3 || limited_events.size >= DEFAULT_UPCOMING_EVENTS + + limited_events << event + end + + limited_events.group_by(&:date) + end + + def total_upcoming_events_count + workshops = Workshop.upcoming.includes(:chapter, :sponsors, :organisers) + all_events(workshops).count end def upcoming_events_for_user From 941775f4759ddd793000f87a1bed82f1076f5c76 Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Sat, 21 Feb 2026 16:34:34 +0100 Subject: [PATCH 2/2] feat(homepage): add conditional link to all events --- app/views/dashboard/show.html.haml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/views/dashboard/show.html.haml b/app/views/dashboard/show.html.haml index ff2a3fdbf..f4f95060b 100644 --- a/app/views/dashboard/show.html.haml +++ b/app/views/dashboard/show.html.haml @@ -73,6 +73,9 @@ %h3.h5= date = render workshops + - if @has_more_events + = link_to 'Explore all events →', events_path, class: 'btn btn-outline-primary mt-3' + .col-lg-4.pl-lg-5 %h3 = t('homepage.chapters.title')