Compare commits

..

41 Commits

Author SHA1 Message Date
3f958bade1 translation
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 22:27:14 +02:00
589a22e5fe asd
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 22:22:11 +02:00
8d0409a7ea url email
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 22:20:18 +02:00
81731c3a14 redo merge
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 22:13:14 +02:00
e3e5329937 Merge branch 'redo'
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 22:11:09 +02:00
742c37f8e1 dev env 2025-09-18 22:10:03 +02:00
b8b3384e67 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 21:50:16 +02:00
74aae300d8 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 21:46:33 +02:00
47e475e65b test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 21:45:22 +02:00
d72d5fb898 new docker
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 21:18:59 +02:00
2c3d5aeec9 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 21:17:54 +02:00
08ccd3b87e css
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 21:15:04 +02:00
6824989721 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 21:08:48 +02:00
ef22d345db test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 17:09:04 +02:00
4c8e48d6e3 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 17:08:12 +02:00
1fbac428a5 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 17:03:26 +02:00
66b3f14998 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 16:58:29 +02:00
1f26e1819e test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 16:49:35 +02:00
0a56d72b1b test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 16:41:27 +02:00
dae44c1392 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 16:33:59 +02:00
0376564792 fixes test
Some checks failed
CI / build (push) Has been cancelled
2025-09-18 16:16:30 +02:00
572413596f test
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 21:53:54 +02:00
5b40146592 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 21:46:54 +02:00
4ae1d9d987 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 21:42:18 +02:00
712f764e0f test
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 21:33:52 +02:00
b659ea9956 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 21:29:20 +02:00
4ec4a3ddd6 mail
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 21:21:41 +02:00
b301438c09 mail
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 21:19:02 +02:00
9ee5212534 test umbruch
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 20:12:39 +02:00
cb7a3a9fed year
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 20:09:50 +02:00
e95729daa5 ics fix
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 20:08:43 +02:00
1d92dbd91d calendar entry
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 20:06:08 +02:00
881b15c490 test11
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 20:03:34 +02:00
6bad0ff852 test8
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 20:00:25 +02:00
70c350eb64 test7
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 19:56:13 +02:00
1945c45a41 test6
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 19:55:15 +02:00
b2f2f032a4 test6
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 19:54:21 +02:00
e6378060e2 teste5
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 19:48:43 +02:00
56f2a090c6 test3
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 19:41:24 +02:00
a69ba25df7 test2
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 19:37:36 +02:00
a23f5d39e7 test
Some checks failed
CI / build (push) Has been cancelled
2025-09-16 19:35:09 +02:00
26 changed files with 247 additions and 102 deletions

View File

@ -38,6 +38,8 @@ h1 {
font-weight: 700; font-weight: 700;
letter-spacing: 0.0833333em; letter-spacing: 0.0833333em;
text-transform: uppercase; text-transform: uppercase;
white-space: normal; /* StandardUmbruch aktivieren */
overflow-wrap: break-word; /* Für lange Wörter (z.B. URLs) */
} }
h2 { h2 {

View File

@ -7,7 +7,7 @@ class GuestMailer < ApplicationMailer
@guest = guest @guest = guest
mail( mail(
to: guest.name_with_email, to: guest.name_with_email,
subject: "#{I18n.t(:wedding_name)}: RSVP Confirmation" subject: "#{I18n.t(:wedding_name)}: Zusage/Absage"
) )
end end
@ -15,7 +15,7 @@ class GuestMailer < ApplicationMailer
@guest = guest @guest = guest
mail( mail(
to: guest.name_with_email, to: guest.name_with_email,
subject: "#{I18n.t(:wedding_name)}: Your RSVP" subject: "#{I18n.t(:wedding_name)}: Deine Zusage/Absage"
) )
end end
end end

View File

@ -26,10 +26,10 @@ class Guest < ApplicationRecord
# Don't allow long or odd names in emails; may be spam. # Don't allow long or odd names in emails; may be spam.
def email_safe_salutation def email_safe_salutation
return 'Hello,' if return 'Hallo,' if
first_name.blank? || first_name !~ /\A[\p{Word}\s'-]{1,30}\z/i first_name.blank? || first_name !~ /\A[\p{Word}\s'-]{1,30}\z/i
"Dear #{first_name}," "Liebe/Lieber #{first_name},"
end end
validates :diet, length: { maximum: 8192 } validates :diet, length: { maximum: 8192 }

View File

@ -1,3 +1,3 @@
<strong>Alert</strong><br> <strong>Knusthöhe 65</strong><br>
Qikiqtaaluk Region, Nunavut<br> 42897 Remscheid<br>
Canada<br> Deutschland<br>

View File

@ -6,8 +6,8 @@
<p>Die Adresse lautet:</p> <p>Die Adresse lautet:</p>
<address><%= render partial: 'application/wedding_address' %></address> <address><%= render partial: 'application/wedding_address' %></address>
<h3>Deine Teilnahmebestätigung (RSVP)</h3> <h3>Deine Zusage/Absage</h3>
<p>Wenn du deine RSVP einsehen oder ändern möchtest, kannst du über den folgenden Link zurückkehren:</p> <p>Wenn du deine Zusage/Absage einsehen oder ändern möchtest, kannst du über den folgenden Link zurückkehren:</p>
<p><%= link_to guest_url(@guest), guest_url(@guest) %></p> <p><%= link_to guest_url(@guest), guest_url(@guest) %></p>
<h3>Karte senden?</h3> <h3>Karte senden?</h3>
@ -18,7 +18,7 @@
<p>Weitere Informationen findest du auf <%= link_to 'unserer Hochzeits-Website', root_url %>, oder du antwortest einfach auf diese EMail.</p> <p>Weitere Informationen findest du auf <%= link_to 'unserer Hochzeits-Website', root_url %>, oder du antwortest einfach auf diese EMail.</p>
<% else %> <% else %>
<p>Es tut uns leid zu hören, dass du nicht teilnehmen kannst. Falls du deine Meinung änderst, kannst du deine RSVP mit dem folgenden Link aktualisieren:</p> <p>Es tut uns leid zu hören, dass du nicht teilnehmen kannst. Falls du deine Meinung änderst, kannst du deine Zusage/Absage mit dem folgenden Link aktualisieren:</p>
<p><%= link_to guest_url(@guest), guest_url(@guest) %></p> <p><%= link_to guest_url(@guest), guest_url(@guest) %></p>
<p>Wir hoffen, dich bei einem anderen Anlass wiederzusehen!</p> <p>Wir hoffen, dich bei einem anderen Anlass wiederzusehen!</p>
<% end %> <% end %>

View File

@ -1,7 +1,7 @@
<p><%= @guest.email_safe_salutation %></p> <p><%= @guest.email_safe_salutation %></p>
<p>Du hast vor Kurzem deine EMail-Adresse bei <%= ENV['CANONICAL_HOST'] %> zur Teilnahmebestätigung eingegeben.</p> <p>Du hast vor Kurzem deine EMail-Adresse bei <%= ENV['CANONICAL_HOST'] %> zur Zusage/Absage eingegeben.</p>
<p>Wenn du deine RSVP einsehen oder ändern möchtest, kannst du über den folgenden Link zurückkehren:</p> <p>Wenn du deine Zusage/Absage einsehen oder ändern möchtest, kannst du über den folgenden Link zurückkehren:</p>
<p><%= link_to guest_url(@guest), guest_url(@guest) %></p> <p><%= link_to guest_url(@guest), guest_url(@guest) %></p>
<p>Falls du Fragen hast, antworte einfach auf diese EMail.</p> <p>Falls du Fragen hast, antworte einfach auf diese EMail.</p>

View File

@ -1,5 +1,5 @@
<div id="guests-leader" class="jumbotron text-center"> <div id="guests-leader" class="jumbotron text-center">
<div class="container"> <div class="container">
<h1>Teilnahmebestätigung (RSVP)</h1> <h1>Zusage/Absage</h1>
</div> </div>
</div> </div>

View File

@ -5,14 +5,14 @@
</li> </li>
<li class="nav-item"> <li class="nav-item">
<% if active >= 2 %> <% if active >= 2 %>
<%= link_to '2. Plus Ones', guest_plus_ones_path(@guest), class: ['nav-link', active == 2 ? 'active' : ''] %> <%= link_to '2. Begleitung', guest_plus_ones_path(@guest), class: ['nav-link', active == 2 ? 'active' : ''] %>
<% else %> <% else %>
<a class="nav-link <%= active == 2 ? 'active' : '' %>">2. Begleitung</a> <a class="nav-link <%= active == 2 ? 'active' : '' %>">2. Begleitung</a>
<% end %> <% end %>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<% if active >= 3 %> <% if active >= 3 %>
<%= link_to '3. Confirm', confirm_guest_path(@guest), class: ['nav-link', active == 3 ? 'active' : ''] %> <%= link_to '3. Bestätigung', confirm_guest_path(@guest), class: ['nav-link', active == 3 ? 'active' : ''] %>
<% else %> <% else %>
<a class="nav-link <%= active == 3 ? 'active' : '' %>">3. Bestätigung</a> <a class="nav-link <%= active == 3 ? 'active' : '' %>">3. Bestätigung</a>
<% end %> <% end %>

View File

@ -4,7 +4,7 @@
<%= render partial: 'leader' %> <%= render partial: 'leader' %>
<%= render partial: 'rsvp_nav', locals: { active: 3 } %> <%= render partial: 'rsvp_nav', locals: { active: 3 } %>
<h2>Confirm</h2> <h2>Bestätigung</h2>
<%= form_with(model: @guest, url: complete_guest_path(@guest), local: true) do |form| %> <%= form_with(model: @guest, url: complete_guest_path(@guest), local: true) do |form| %>
<div class="row"> <div class="row">
@ -14,13 +14,13 @@
</div> </div>
<% if @guest.attending? %> <% if @guest.attending? %>
<h3>Your Details</h3> <h3>Deine Angaben</h3>
<div class="card mb-3"> <div class="card mb-3">
<h5 class="card-header"><%= @guest.name %></h5> <h5 class="card-header"><%= @guest.name %></h5>
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4">
Email E-Mail
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
<p><tt><%= @guest.email %></tt></p> <p><tt><%= @guest.email %></tt></p>
@ -28,51 +28,51 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4">
Dietary Preferences Ernährungspräferenzen
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
<% if @guest.diet.present? %> <% if @guest.diet.present? %>
<pre><%= @guest.diet %></pre> <pre><%= @guest.diet %></pre>
<% else %> <% else %>
<p>(None)</p> <p>(Keine)</p>
<% end %> <% end %>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4">
Song Suggestions SongVorschläge
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
<% if @guest.songs.present? %> <% if @guest.songs.present? %>
<pre><%= @guest.songs %></pre> <pre><%= @guest.songs %></pre>
<% else %> <% else %>
<p>(None)</p> <p>(Keine)</p>
<% end %> <% end %>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-12 text-right"> <div class="col-md-12 text-right">
<%= link_to 'Edit', guest_path(@guest), class: 'card-link', data: { disable_with: 'Loading...' } %> <%= link_to 'Bearbeiten', guest_path(@guest), class: 'card-link', data: { disable_with: 'Loading...' } %>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<h3>Plus Ones</h3> <h3>Begleitung</h3>
<% if @guest.plus_ones.any? %> <% if @guest.plus_ones.any? %>
<%= render @guest.plus_ones %> <%= render @guest.plus_ones %>
<% else %> <% else %>
<p>(None &mdash; just you.)</p> <p>(Keiner &mdash; nur du.)</p>
<% end %> <% end %>
<% else %> <% else %>
<p>Schade, dass du nicht teilnehmen kannst.</p> <p>Schade, dass du nicht teilnehmen kannst.</p>
<h3>Your Details</h3> <h3>Deine Angaben</h3>
<div class="card mb-3"> <div class="card mb-3">
<h5 class="card-header"><%= @guest.name %></h5> <h5 class="card-header"><%= @guest.name %></h5>
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4">
Email E-Mail
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
<p><tt><%= @guest.email %></tt></p> <p><tt><%= @guest.email %></tt></p>
@ -82,14 +82,14 @@
</div> </div>
<% end %> <% end %>
<h3>Other Comments?</h3> <h3>Sonstige Kommentare?</h3>
<%= form.text_area :notes, class: 'form-control' %> <%= form.text_area :notes, class: 'form-control' %>
<small class="form-text text-muted">Hast du noch etwas, das wir wissen sollten?</small> <small class="form-text text-muted">Hast du noch etwas, das wir wissen sollten?</small>
<div class="row guests-buttons"> <div class="row guests-buttons">
<div class="offset-md-3 col-md-6 text-center"> <div class="offset-md-3 col-md-6 text-center">
<%= form.submit 'Complete RSVP', class: 'btn btn-primary', data: { disable_with: 'Sending...' } %> <%= form.submit 'Final bestätigen', class: 'btn btn-primary', data: { disable_with: 'Sending...' } %>
</div> </div>
</div> </div>
<% end %> <% end %>

View File

@ -3,7 +3,7 @@
<div class="offset-lg-2 col-lg-8"> <div class="offset-lg-2 col-lg-8">
<%= render partial: 'leader' %> <%= render partial: 'leader' %>
<h2>Willkommen Zurück</h2> <h2>Willkommen Zurück</h2>
<p>Es sieht so aus, als hättest du bereits deine Teilnahmebestätigung registriert; deshalb haben wir dir eine EMail mit einem Link geschickt, über den du sie aktualisieren kannst.</p> <p>Es sieht so aus, als hättest du bereits deine Zusage/Absage registriert; deshalb haben wir dir eine EMail mit einem Link geschickt, über den du sie aktualisieren kannst.</p>
<p>Bitte prüfe dein EMail-Konto unter <tt><%= @guest.email %></tt>, inklusive SpamOrdner!</p> <p>Bitte prüfe dein EMail-Konto unter <tt><%= @guest.email %></tt>, inklusive SpamOrdner!</p>
<p>Wenn du die EMail nicht erhältst, kontaktiere uns bitte über <%= mail_to ENV['CONTACT_EMAIL'], 'uns' %>.</p> <p>Wenn du die EMail nicht erhältst, kontaktiere uns bitte über <%= mail_to ENV['CONTACT_EMAIL'], 'uns' %>.</p>
</div> </div>

View File

@ -44,7 +44,7 @@
<div class="form-group row"> <div class="form-group row">
<div class="col-md-3"> <div class="col-md-3">
<%= form.label :songs, 'Song Suggestions', class: 'col-form-label' %> <%= form.label :songs, 'Song-Vorschläge', class: 'col-form-label' %>
</div> </div>
<div class="col-md-9"> <div class="col-md-9">
<%= form.text_area :songs, id: 'guest_songs', class: 'form-control' %> <%= form.text_area :songs, id: 'guest_songs', class: 'form-control' %>

View File

@ -20,13 +20,13 @@
<div class="row guests-buttons"> <div class="row guests-buttons">
<div class="col-md-3"> <div class="col-md-3">
<span class="wedding-required">* Required</span> <span class="wedding-required">* Erforderlich</span>
</div> </div>
<div class="col-md-6 text-center"> <div class="col-md-6 text-center">
<%= form.submit submit_action, class: 'btn btn-primary', data: { disable_with: 'Sending...' } %> <%= form.submit submit_action, class: 'btn btn-primary', data: { disable_with: 'Sending...' } %>
</div> </div>
<div class="col-md-3 text-right"> <div class="col-md-3 text-right">
<%= link_to 'Cancel', guest_plus_ones_path(@guest), class: 'btn btn-secondary' %> <%= link_to 'Abbrechen', guest_plus_ones_path(@guest), class: 'btn btn-secondary' %>
</div> </div>
</div> </div>
<% end %> <% end %>

View File

@ -9,7 +9,7 @@
<% if plus_one.diet.present? %> <% if plus_one.diet.present? %>
<pre><%= plus_one.diet %></pre> <pre><%= plus_one.diet %></pre>
<% else %> <% else %>
<p>(None)</p> <p>(Keine)</p>
<% end %> <% end %>
</div> </div>
</div> </div>
@ -18,7 +18,7 @@
Kind Kind
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
<p><%= plus_one.child ? 'Yes' : 'No' %></p> <p><%= plus_one.child ? 'Ja' : 'Nein' %></p>
</div> </div>
</div> </div>
<div class="row"> <div class="row">

View File

@ -4,17 +4,17 @@
<%= render partial: 'guests/leader' %> <%= render partial: 'guests/leader' %>
<%= render partial: 'guests/rsvp_nav', locals: { active: 2 } %> <%= render partial: 'guests/rsvp_nav', locals: { active: 2 } %>
<h2>PlusOneGäste</h2> <h2>Deine Begleitung</h2>
<p>Bitte gib unten an, ob du jemanden zu deiner Begleitung mitbringst. Kinder sind ebenfalls herzlich willkommen.</p> <p>Bitte gib unten an, ob du jemanden zu deiner Begleitung mitbringst. Kinder sind ebenfalls herzlich willkommen.</p>
<p>&nbsp;</p> <p>&nbsp;</p>
<% if @plus_ones.any? %> <% if @plus_ones.any? %>
<%= render @plus_ones %> <%= render @plus_ones %>
<% else %> <% else %>
<p>No plus ones added yet. Flying solo.</p> <p>Keine Begleitung hinzugefügt. Du reist allein an.</p>
<% end %> <% end %>
<p> <p>
<%= link_to 'PlusOne hinzufügen', new_guest_plus_one_path(@guest), class: 'btn btn-primary', data: { disable_with: 'Lädt...' } %> <%= link_to 'Begleitung hinzufügen', new_guest_plus_one_path(@guest), class: 'btn btn-primary', data: { disable_with: 'Lädt...' } %>
</p> </p>
<p>&nbsp;</p> <p>&nbsp;</p>

View File

@ -4,8 +4,8 @@
<%= render partial: 'guests/leader' %> <%= render partial: 'guests/leader' %>
<%= render partial: 'guests/rsvp_nav', locals: { active: 2 } %> <%= render partial: 'guests/rsvp_nav', locals: { active: 2 } %>
<h2>Plus-One hinzufügen</h2> <h2>Begleitung hinzufügen</h2>
<%= render partial: 'form', locals: { submit_action: 'Add Plus One' } %> <%= render partial: 'form', locals: { submit_action: 'Begleitung hinzufügen' } %>
</div> </div>
</div> </div>
</div> </div>

View File

@ -2,7 +2,7 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div id="welcome-index-footer-cta" class="col-md-12 text-center"> <div id="welcome-index-footer-cta" class="col-md-12 text-center">
<%= link_to 'JETZT ANMELDEN!', new_guest_path, class: 'btn btn-primary wedding-cta-btn' %> <%= link_to 'JETZT ANTWORTEN!', new_guest_path, class: 'btn btn-primary wedding-cta-btn' %>
</div> </div>
</div> </div>
<div class="row"> <div class="row">

View File

@ -5,7 +5,7 @@
<%= t :wedding_date %>, <%= t :wedding_location %> <%= t :wedding_date %>, <%= t :wedding_location %>
</p> </p>
<p> <p>
<%= link_to 'JETZT ANMELDEN!', new_guest_path, class: 'btn btn-primary wedding-cta-btn' %> <%= link_to 'JETZT ANTWORTEN!', new_guest_path, class: 'btn btn-primary wedding-cta-btn' %>
</p> </p>
</div> </div>
</section> </section>

View File

@ -1,6 +1,6 @@
<section id="welcome-index-wedding-plan-leader" class="jumbotron text-center"> <section id="welcome-index-wedding-plan-leader" class="jumbotron text-center">
<div class="container"> <div class="container">
<h1>The Plan</h1> <h1>Der Plan</h1>
</div> </div>
</section> </section>
<section id="welcome-index-wedding-plan"> <section id="welcome-index-wedding-plan">
@ -31,8 +31,8 @@
<li><small><sup>&sect;</sup> Vegan, gluten free &amp; dairy free dessert: Fruit platter</small></li> <li><small><sup>&sect;</sup> Vegan, gluten free &amp; dairy free dessert: Fruit platter</small></li>
</ul> </ul>
<p>The venue is making every effort to cater for vegan, vegetarian, gluten free, allergies and other dietary preferences, as indicated in your RSVPs.</p> <p>The venue is making every effort to cater for vegan, vegetarian, gluten free, allergies and other dietary preferences, as indicated in your RSVPs.</p>
<h2>Teilnahmebestätigung (RSVP)</h2> <h2>Zusage/Absage</h2>
<p>Bitte gib deine Teilnahmebestätigung so bald wie möglich ab, damit wir wissen, wer kommt und einen Platz sowie ein Stück Kuchen für dich reservieren können falls du kommen kannst! Falls sich herausstellt, dass du nicht teilnehmen kannst, informiere uns bitte ebenfalls so früh wie möglich.</p> <p>Bitte gib deine Zusage/Absage so bald wie möglich ab, damit wir wissen, wer kommt und einen Platz sowie ein Stück Kuchen für dich reservieren können falls du kommen kannst! Falls sich herausstellt, dass du nicht teilnehmen kannst, informiere uns bitte ebenfalls so früh wie möglich.</p>
</div> </div>
</div> </div>
</div> </div>

View File

@ -8,11 +8,11 @@
<div class="row"> <div class="row">
<div class="offset-md-3 col-md-6"> <div class="offset-md-3 col-md-6">
<h2>Wie komme ich dort hin?</h2> <h2>Wie komme ich dort hin?</h2>
<p>Ships sail regularly from Ushuaia, Argentina. Allow two days.</p> <p>Im Herzen der Lenneper Altstadt findest du die Klösterkirche.</p>
<p>There is ample snow mobile parking. Watch out for penguins.</p> <p>Vom Röntgenmuseum folge der linken Straße nach unten und gehe einfach die Klostergasse gegenüber der Röntgen Apotheke entlang.</p>
<h2>Coming from out of town?</h2> <h2>Kommst du von außerhalb?</h2>
<p>The station has a number of rooms that you can get at the <strong>discounted wedding rate</strong>.</p> <p>Das Parkhaus Altstadt Lennep kann über die Addresse Hardtstraße 17, 42897 Remscheid angefahren werden.</strong></p>
<p>Check in is from 3pm, so you may not be able to get ready in your room if you book it just for the night of the wedding.</p> <p>Wir raten dazu einfach in der Hardstraße, Mühlenstraße, Albret-Thaer-Straße oder am Thüringsberg einen Parkplatz außerhalb der Altstadt zu suchen.</p>
</div> </div>
</div> </div>
</div> </div>

View File

@ -11,11 +11,11 @@
<%= render partial: 'calendar_svg' %> <%= render partial: 'calendar_svg' %>
<%- end %></h2> <%- end %></h2>
<p> <p>
<strong>16:00 &ndash; offen</strong><br> <strong>16:00 &ndash; 23:30</strong><br>
<%= t :wedding_date %><br> <%= t :wedding_date %><br>
&nbsp;<br> &nbsp;<br>
</p> </p>
<p><%= link_to 'Zum Kalender hinzuf&uuml;gen', 'wedding.ics' %></p> <p><%= link_to 'Zum Kalender hinzufügen', 'wedding.ics' %></p>
</div> </div>
<div class="col-md-6 text-center"> <div class="col-md-6 text-center">
<h2><%= link_to @google_maps_url do -%> <h2><%= link_to @google_maps_url do -%>

View File

@ -9,18 +9,18 @@ Rails.application.configure do
config.cache_classes = false config.cache_classes = false
Rails.application.routes.default_url_options[:host] = ENV.fetch("APP_HOST", "0.0.0.0") Rails.application.routes.default_url_options[:host] = ENV.fetch("APP_HOST", "0.0.0.0")
Rails.application.routes.default_url_options[:port] = ENV.fetch("APP_PORT", 3000) #Rails.application.routes.default_url_options[:port] = ENV.fetch("APP_PORT", 3000)
# Force Rails to generate URLs with your hostname instead of localhost # Force Rails to generate URLs with your hostname instead of localhost
Rails.application.routes.default_url_options = { #Rails.application.routes.default_url_options = {
host: ENV.fetch("APP_HOST", "beere5"), # host: ENV.fetch("APP_HOST", "beere5"),
port: ENV.fetch("APP_PORT", 3000) # port: ENV.fetch("APP_PORT", 3000)
} #}
# Force Rails to generate URLs with your hostname instead of localhost # Force Rails to generate URLs with your hostname instead of localhost
Rails.application.routes.default_url_options = { Rails.application.routes.default_url_options = {
host: ENV.fetch("APP_HOST", "wedding.linepe.de"), host: ENV.fetch("APP_HOST", "wedding.linepe.de"),
port: ENV.fetch("APP_PORT", 3000) #port: ENV.fetch("APP_PORT", 3000)
} }
# Do not eager load code on boot. # Do not eager load code on boot.
@ -44,6 +44,33 @@ Rails.application.configure do
config.cache_store = :null_store config.cache_store = :null_store
end end
# Use a real queuing backend for Active Job (and separate queues per environment)
# config.active_job.queue_adapter = :resque
# config.active_job.queue_name_prefix = "wedding_#{Rails.env}"
config.read_encrypted_secrets = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_caching = false
# Ignore bad email addresses and do not raise email delivery errors.
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = {
host: ENV['CANONICAL_HOST'],
protocol: ENV['CANONICAL_HOST_PROTOCOL'] || 'https'
}
config.action_mailer.smtp_settings = {
address: ENV['SMTP_ADDRESS'],
port: (ENV['SMTP_PORT'] || 587).to_i,
domain: ENV['SMTP_DOMAIN'],
user_name: ENV['SMTP_USER_NAME'],
password: ENV['SMTP_PASSWORD'],
authentication: 'plain',
enable_starttls_auto: true
}
# Store uploaded files on the local file system (see config/storage.yml for options) # Store uploaded files on the local file system (see config/storage.yml for options)
config.active_storage.service = :local config.active_storage.service = :local
@ -77,6 +104,7 @@ Rails.application.configure do
config.file_watcher = ActiveSupport::EventedFileUpdateChecker config.file_watcher = ActiveSupport::EventedFileUpdateChecker
config.action_mailer.default_url_options = { config.action_mailer.default_url_options = {
host: ENV['CANONICAL_HOST'], port: 3000 # host: ENV['CANONICAL_HOST'], port: 3000
host: ENV['CANONICAL_HOST']
} }
end end

View File

@ -0,0 +1,82 @@
# frozen_string_literal: true
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since you don't have to restart the web server when you make code changes.
config.cache_classes = false
Rails.application.routes.default_url_options[:host] = ENV.fetch("APP_HOST", "0.0.0.0")
Rails.application.routes.default_url_options[:port] = ENV.fetch("APP_PORT", 3000)
# Force Rails to generate URLs with your hostname instead of localhost
Rails.application.routes.default_url_options = {
host: ENV.fetch("APP_HOST", "beere5"),
port: ENV.fetch("APP_PORT", 3000)
}
# Force Rails to generate URLs with your hostname instead of localhost
Rails.application.routes.default_url_options = {
host: ENV.fetch("APP_HOST", "wedding.linepe.de"),
port: ENV.fetch("APP_PORT", 3000)
}
# Do not eager load code on boot.
config.eager_load = false
# Show full error reports.
config.consider_all_requests_local = true
# Enable/disable caching. By default caching is disabled.
# Run rails dev:cache to toggle caching.
if Rails.root.join('tmp', 'caching-dev.txt').exist?
config.action_controller.perform_caching = true
config.cache_store = :memory_store
config.public_file_server.headers = {
'Cache-Control' => "public, max-age=#{2.days.to_i}"
}
else
config.action_controller.perform_caching = false
config.cache_store = :null_store
end
# Store uploaded files on the local file system (see config/storage.yml for options)
config.active_storage.service = :local
# Don't care if the mailer can't send.
config.action_mailer.raise_delivery_errors = false
config.action_mailer.perform_caching = false
# Print deprecation notices to the Rails logger.
config.active_support.deprecation = :log
# Raise an error on page load if there are pending migrations.
config.active_record.migration_error = :page_load
# Highlight code that triggered database queries in logs.
config.active_record.verbose_query_logs = true
# Debug mode disables concatenation and preprocessing of assets.
# This option may cause significant delays in view rendering with a large
# number of complex assets.
config.assets.debug = true
# Suppress logger output for asset requests.
config.assets.quiet = true
# Raises error for missing translations
# config.action_view.raise_on_missing_translations = true
# Use an evented file watcher to asynchronously detect changes in source code,
# routes, locales, etc. This feature depends on the listen gem.
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
config.action_mailer.default_url_options = {
host: ENV['CANONICAL_HOST'], port: 3000
}
end

View File

@ -6,20 +6,15 @@ Rails.application.configure do
# Code is not reloaded between requests. # Code is not reloaded between requests.
config.cache_classes = true config.cache_classes = true
Rails.application.routes.default_url_options[:host] = ENV.fetch("APP_HOST", "0.0.0.0") #Rails.application.routes.default_url_options[:host] = ENV.fetch("APP_HOST", "0.0.0.0")
Rails.application.routes.default_url_options[:port] = ENV.fetch("APP_PORT", 3000) #Rails.application.routes.default_url_options[:port] = ENV.fetch("APP_PORT", 3000)
# Force Rails to generate URLs with your hostname instead of localhost # Force Rails to generate URLs with your hostname instead of localhost
Rails.application.routes.default_url_options = { #Rails.application.routes.default_url_options = {
host: ENV.fetch("APP_HOST", "beere5"), # host: ENV.fetch("APP_HOST", ENV['CANONICAL_HOST'],
port: ENV.fetch("APP_PORT", 3000) # port: ENV.fetch("APP_PORT", 3000)
} #}
# Force Rails to generate URLs with your hostname instead of localhost
Rails.application.routes.default_url_options = {
host: ENV.fetch("APP_HOST", "wedding.linepe.de"),
port: ENV.fetch("APP_PORT", 3000)
}
# Eager load code on boot. This eager loads most of Rails and # Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both threaded web servers # your application in memory, allowing both threaded web servers
@ -74,12 +69,14 @@ Rails.application.configure do
# Use a real queuing backend for Active Job (and separate queues per environment) # Use a real queuing backend for Active Job (and separate queues per environment)
# config.active_job.queue_adapter = :resque # config.active_job.queue_adapter = :resque
# config.active_job.queue_name_prefix = "wedding_#{Rails.env}" # config.active_job.queue_name_prefix = "wedding_#{Rails.env}"
config.read_encrypted_secrets = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_caching = false config.action_mailer.perform_caching = false
# Ignore bad email addresses and do not raise email delivery errors. # Ignore bad email addresses and do not raise email delivery errors.
# Set this to true and configure the email server for immediate delivery to raise delivery errors. # Set this to true and configure the email server for immediate delivery to raise delivery errors.
# config.action_mailer.raise_delivery_errors = false config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { config.action_mailer.default_url_options = {
host: ENV['CANONICAL_HOST'], host: ENV['CANONICAL_HOST'],
@ -92,8 +89,8 @@ Rails.application.configure do
domain: ENV['SMTP_DOMAIN'], domain: ENV['SMTP_DOMAIN'],
user_name: ENV['SMTP_USER_NAME'], user_name: ENV['SMTP_USER_NAME'],
password: ENV['SMTP_PASSWORD'], password: ENV['SMTP_PASSWORD'],
authentication: ENV['SMTP_AUTHENTICATION'] || 'plain', authentication: 'plain',
enable_starttls_auto: ENV['SMTP_ENABLE_STARTTLS_AUTO'] || 'true' enable_starttls_auto: true
} }
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to # Enable locale fallbacks for I18n (makes lookups for any locale fall back to

View File

@ -32,6 +32,6 @@
en: en:
wedding_name: "Caro & Rene's freie Trauung" wedding_name: "Caro & Rene's freie Trauung"
wedding_couple_names: 'Caro & Rene' wedding_couple_names: 'Caro & Rene'
wedding_date: 'Samstag, 25 April 2025' wedding_date: 'Samstag, 25 April 2026'
wedding_location: 'Klosterkirche, Remscheid' wedding_location: 'Klosterkirche, Remscheid'
photo_credits: 'Photo Credits: Rene' photo_credits: 'Photo Credits: Rene'

View File

@ -1,32 +1,36 @@
BEGIN:VCALENDAR BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:Microsoft Exchange Server 2010
VERSION:2.0 VERSION:2.0
CALSCALE:GREGORIAN BEGIN:VTIMEZONE
TZID:W. Europe Standard Time
BEGIN:STANDARD
DTSTART:16010101T030000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Access-A-Ride Pickup ORGANIZER;CN="Kasseboehmer, Rene":mailto:renek@gmail.com
DTSTART;TZID=America/New_York:20130802T103400 DESCRIPTION;LANGUAGE=de-DE:
DTEND;TZID=America/New_York:20130802T110400 UID:040000008200E00074C5B7101A82E00800000000C763A9231826DC01000000000000000
LOCATION:1000 Broadway Ave.\, Brooklyn 010000000324119CE5EEF5A44B6AB75CC06641357
DESCRIPTION: Access-A-Ride trip to 900 Jay St.\, Brooklyn SUMMARY;LANGUAGE=de-DE:Freie Trauung von Caro & Rene
DTSTART;TZID=W. Europe Standard Time:20260425T160000
DTEND;TZID=W. Europe Standard Time:20260425T235000
CLASS:PUBLIC
PRIORITY:5
DTSTAMP:20250915T081214Z
TRANSP:OPAQUE
STATUS:CONFIRMED STATUS:CONFIRMED
SEQUENCE:3 SEQUENCE:0
BEGIN:VALARM LOCATION;LANGUAGE=de-DE:Klostergasse 8, 42897 Remscheid, Deutschland
TRIGGER:-PT10M
DESCRIPTION:Pickup Reminder
ACTION:DISPLAY
END:VALARM
END:VEVENT
BEGIN:VEVENT
SUMMARY:Access-A-Ride Pickup
DTSTART;TZID=America/New_York:20130802T200000
DTEND;TZID=America/New_York:20130802T203000
LOCATION:900 Jay St.\, Brooklyn
DESCRIPTION: Access-A-Ride trip to 1000 Broadway Ave.\, Brooklyn
STATUS:CONFIRMED
SEQUENCE:3
BEGIN:VALARM
TRIGGER:-PT10M
DESCRIPTION:Pickup Reminder
ACTION:DISPLAY
END:VALARM
END:VEVENT END:VEVENT
END:VCALENDAR END:VCALENDAR

32
public/wedding.ics_old Normal file
View File

@ -0,0 +1,32 @@
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
SUMMARY:Access-A-Ride Pickup
DTSTART;TZID=America/New_York:20130802T103400
DTEND;TZID=America/New_York:20130802T110400
LOCATION:1000 Broadway Ave.\, Brooklyn
DESCRIPTION: Access-A-Ride trip to 900 Jay St.\, Brooklyn
STATUS:CONFIRMED
SEQUENCE:3
BEGIN:VALARM
TRIGGER:-PT10M
DESCRIPTION:Pickup Reminder
ACTION:DISPLAY
END:VALARM
END:VEVENT
BEGIN:VEVENT
SUMMARY:Access-A-Ride Pickup
DTSTART;TZID=America/New_York:20130802T200000
DTEND;TZID=America/New_York:20130802T203000
LOCATION:900 Jay St.\, Brooklyn
DESCRIPTION: Access-A-Ride trip to 1000 Broadway Ave.\, Brooklyn
STATUS:CONFIRMED
SEQUENCE:3
BEGIN:VALARM
TRIGGER:-PT10M
DESCRIPTION:Pickup Reminder
ACTION:DISPLAY
END:VALARM
END:VEVENT
END:VCALENDAR