From b526aa867e6f0f91efcd0d4d897d419173802670 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Sede=C3=B1o?= Date: Fri, 6 Feb 2026 20:28:18 +0100 Subject: [PATCH 1/4] Create tmp subdirectories in Dockerfile Create tmp/pids, tmp/cache, and tmp/sockets during Docker build to fix Puma error: "No such file or directory - tmp/pids/server.pid" This is cleaner than tracking empty tmp directories in git. Co-Authored-By: Claude Sonnet 4.5 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f2a0cf5e..e623135b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -59,7 +59,7 @@ COPY --from=build /rails /rails # Run and own only the runtime files as a non-root user for security RUN groupadd --system --gid 1000 rails && \ useradd rails --uid 1000 --gid 1000 --create-home --shell /bin/bash && \ - mkdir -p storage tmp && \ + mkdir -p storage tmp/pids tmp/cache tmp/sockets && \ chown -R rails:rails db log storage tmp USER 1000:1000 From 11a22f679dd9482144c78b7f4996cfbbadfedff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Sede=C3=B1o?= Date: Fri, 6 Feb 2026 23:48:55 +0100 Subject: [PATCH 2/4] Add /up health check endpoint for Kamal deployments Co-Authored-By: Claude Sonnet 4.5 --- config/routes.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/routes.rb b/config/routes.rb index d754f21f..243f4242 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,7 @@ Moraga::Application.routes.draw do + # Health check endpoint for Kamal proxy + get '/up', to: proc { [200, {}, ['OK']] } + mount LetterOpenerWeb::Engine, at: '/letter_opener' if Rails.env.development? constraints DomainConstraint do From 196e343288425f15223d5f76c0a4514400b541c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Sede=C3=B1o?= Date: Sat, 7 Feb 2026 21:07:06 +0100 Subject: [PATCH 3/4] New feature: Show past editions of the conferences of the organization. Can be set in the admin panel, default false. --- app/controllers/admin/splashpages_controller.rb | 2 +- app/helpers/application_helper.rb | 12 ++++++++++++ app/views/admin/splashpages/_form.html.haml | 4 ++++ app/views/conferences/_past_editions_nav.haml | 14 ++++++++++++++ app/views/conferences/show.html.haml | 4 ++++ config/locales/views/layouts/en.yml | 1 + config/locales/views/layouts/es.yml | 3 ++- ...056_add_include_past_editions_to_splashpages.rb | 7 +++++++ 8 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 app/views/conferences/_past_editions_nav.haml create mode 100644 db/migrate/20260207202056_add_include_past_editions_to_splashpages.rb diff --git a/app/controllers/admin/splashpages_controller.rb b/app/controllers/admin/splashpages_controller.rb index 6b40d0d1..ad4f5e9b 100644 --- a/app/controllers/admin/splashpages_controller.rb +++ b/app/controllers/admin/splashpages_controller.rb @@ -50,7 +50,7 @@ def splashpage_params :include_venue, :include_registrations, :include_tickets, :include_lodgings, :include_sponsors, :include_social_media, - :include_booths) + :include_booths, :include_past_editions) end end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 157c6b12..2a236ed9 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -40,6 +40,18 @@ def time_with_timezone(time) time.strftime('%F %R') + ' ' + @conference.timezone.to_s end + # Returns past editions (conferences) from the same organization + def past_editions_for(conference) + return [] unless conference.present? + + Conference.past + .where(organization_id: conference.organization_id) + .where.not(id: conference.id) + .order(start_date: :desc) + .limit(10) + .select(:id, :short_title, :title, :start_date, :end_date) + end + # Set resource_name for devise so that we can call the devise help links (views/devise/shared/_links) from anywhere (eg sign_up form in proposals#new) def resource_name :user diff --git a/app/views/admin/splashpages/_form.html.haml b/app/views/admin/splashpages/_form.html.haml index 64456158..80e12847 100644 --- a/app/views/admin/splashpages/_form.html.haml +++ b/app/views/admin/splashpages/_form.html.haml @@ -17,6 +17,10 @@ Include confirmed = (t'booth').pluralize in the program? + .checkbox + %label + = f.check_box :include_past_editions + Display past editions in navigation? .checkbox %label = f.check_box :include_registrations diff --git a/app/views/conferences/_past_editions_nav.haml b/app/views/conferences/_past_editions_nav.haml new file mode 100644 index 00000000..b4e85cce --- /dev/null +++ b/app/views/conferences/_past_editions_nav.haml @@ -0,0 +1,14 @@ += content_for :splash_nav do + - past_editions = past_editions_for(conference) + - if past_editions.any? + %li.dropdown + %a.dropdown-toggle{"data-toggle" => "dropdown", href: '#', id: "past-editions-dropdown"} + = t('Past Editions') + %b.caret + %ul.dropdown-menu + - past_editions.each do |edition| + %li + = link_to conference_path(edition.short_title) do + = edition.title + %br + %small.text-muted= date_string(edition.start_date, edition.end_date) diff --git a/app/views/conferences/show.html.haml b/app/views/conferences/show.html.haml index 7a72be58..3c327875 100644 --- a/app/views/conferences/show.html.haml +++ b/app/views/conferences/show.html.haml @@ -58,6 +58,10 @@ sponsors: @sponsors + -# past editions navigation + - if @conference.splashpage.include_past_editions + = render 'past_editions_nav', conference: @conference + -# footer - if @conference.splashpage.include_social_media - if @conference.contact.has_social_media? diff --git a/config/locales/views/layouts/en.yml b/config/locales/views/layouts/en.yml index da4f2198..c98f3105 100644 --- a/config/locales/views/layouts/en.yml +++ b/config/locales/views/layouts/en.yml @@ -35,6 +35,7 @@ en: Resources: Resources Revision History: Revision History Toggle navigation: Toggle navigation + Past Editions: Past Editions Notifications: Notifications See all unread Comments: See all unread Comments See all Comments: See all Comments diff --git a/config/locales/views/layouts/es.yml b/config/locales/views/layouts/es.yml index 3aba1c49..99702c41 100644 --- a/config/locales/views/layouts/es.yml +++ b/config/locales/views/layouts/es.yml @@ -34,7 +34,8 @@ es: Roles: Roles Resources: Recursos Revision History: Histórico de cambios - Toggle navigation: + Toggle navigation: + Past Editions: Ediciones anteriores Notifications: Notificaciones See all unread Comments: Ver comentarios no leidos See all Comments: Ver todos los comentarios diff --git a/db/migrate/20260207202056_add_include_past_editions_to_splashpages.rb b/db/migrate/20260207202056_add_include_past_editions_to_splashpages.rb new file mode 100644 index 00000000..48b752d6 --- /dev/null +++ b/db/migrate/20260207202056_add_include_past_editions_to_splashpages.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddIncludePastEditionsToSplashpages < ActiveRecord::Migration[7.0] + def change + add_column :splashpages, :include_past_editions, :boolean, default: false + end +end From e10560888d92ddbad50cba9ce04d69a67193d116 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Sede=C3=B1o?= Date: Sun, 8 Feb 2026 16:14:20 +0100 Subject: [PATCH 4/4] Moraga info in error pages --- public/403.html | 12 ++---------- public/404.html | 11 ++--------- public/500.html | 12 +++--------- 3 files changed, 7 insertions(+), 28 deletions(-) diff --git a/public/403.html b/public/403.html index 41bc4325..63a31be6 100644 --- a/public/403.html +++ b/public/403.html @@ -20,25 +20,17 @@
- osem logo

Error 403: Forbidden

You don't have permission to access this resource.
If you'd like, you can start again from the homepage.


-

OSEM is a +

Moraga is a free software project built through collaboration.

If you believe you have encountered a bug...

-

Please submit an issue +

Please submit an issue on Github.

- -

If you have other questions regarding OSEM...

- -

Feel free to contact contributors by subscribing to our mailing list.

- -

You can also reach out in the #OSEM channel on IRC.

-
diff --git a/public/404.html b/public/404.html index 2aabe933..a37876ff 100644 --- a/public/404.html +++ b/public/404.html @@ -20,27 +20,20 @@
- osem logo

Error 404: Page not found

The page you are looking for does not exist, it's possible that it may have moved.
If you'd like, you can start again from the homepage.


-

OSEM is a +

Moarga is a free software project built through collaboration.

If you believe you have encountered a bug...

-

Please submit an issue +

Please submit an issue on Github.

-

If you have other questions regarding OSEM...

- -

Feel free to contact contributors by subscribing to our mailing list.

- -

You can also reach out in the #OSEM channel on IRC.

-
diff --git a/public/500.html b/public/500.html index 1a615aef..b73aa358 100644 --- a/public/500.html +++ b/public/500.html @@ -20,26 +20,20 @@
- osem logo

Error 500: Internal Server Error

It looks like something has gone wrong on our side.
We - recommend you submit an issue + recommend you submit an issue on Github, if one does not already exist regarding this.
If you'd like, you can start again from the homepage.


-

OSEM is a +

Moraga is a free software project built through collaboration.

If you believe you have encountered a bug...

-

Please submit an issue +

Please submit an issue on Github.

-

If you have other questions regarding OSEM...

- -

Feel free to contact contributors by subscribing to our mailing list.

- -

You can also reach out in the #OSEM channel on IRC.