Skip to content

Commit 2595732

Browse files
committed
Improve SEO, accessibility, and i18n
SEO improvements: - Add Open Graph meta tags (og:title, og:description, og:image, og:url, etc.) - Add Twitter Card meta tags for social sharing - Add comprehensive Schema.org structured data (WebSite, Organization, SoftwareApplication, WebPage) - Fix heading hierarchy (h1 → h2 → h3) for proper document outline - Fix dynamic lang attribute (was hardcoded to 'fr') - Add scroll-mt-24 for better anchor navigation - Auto-generate og-image.png (1200x630) via favicon-maker Accessibility improvements: - Add skip navigation link (visually hidden, visible on focus) - Improve color contrast in footer (text-gray-500 → text-gray-600) - Add localized alt text for organization logos i18n improvements: - Fix incomplete German sentence in contact section (missing 'erreichen') - Replace &nbsp; HTML entities with CSS whitespace-nowrap - Use semantic <span class='font-semibold'> instead of <strong> for numbers - Add SEPA Direct Debit emphasis in German billing description Bug fixes: - Fix mg:gap-4 typo → md:gap-4 - Fix unclosed <header> tag Cleanup: - Remove unused jsonld from site.yml (now dynamic in layout.erb)
1 parent 92ee130 commit 2595732

11 files changed

Lines changed: 255 additions & 65 deletions

File tree

config.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@
5656
rel: 'shortcut icon',
5757
size: '64x64,32x32,24x24,16x16',
5858
icon: 'favicon.ico'
59+
},
60+
{
61+
rel: 'og-image',
62+
size: '1200x630',
63+
icon: 'og-image.png'
5964
}
6065
]
6166

data/site.yml

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,3 @@ author:
1212
name: "Thibaud Guillaume-Gentil"
1313
email: "thibaud@thibaud.gg"
1414
website: "https://thibaud.gg"
15-
16-
jsonld:
17-
"@context": "http://schema.org"
18-
"@type": "WebSite"
19-
"url": "https://csa-admin.org"
20-
"inLanguage": "en"
21-
"hasPart":
22-
- "@type": "WebPage"
23-
"url": "https://csa-admin.org"
24-
"inLanguage": "en"
25-
- "@type": "WebPage"
26-
"url": "https://csa-admin.org/acp"
27-
"inLanguage": "fr"
28-
- "@type": "WebPage"
29-
"url": "https://csa-admin.org/solawi"
30-
"inLanguage": "de"

locales/de.yml

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
de:
2+
skip_to_content: Zum Hauptinhalt springen
23
about:
34
application: Open-Source-Webanwendung
45
other_orgs: zahlreichen anderen Organisationen
56
text: Ursprünglich entwickelt, um die Verwaltung von %{ragedevert} in Neuchâtel (CH) zu vereinfachen, entwickelt sich CSA Admin stetig weiter, um den vielfältigen Anforderungen von %{other_orgs} in der Schweiz und Deutschland gerecht zu werden. CSA Admin ist eine %{application}. Es soll einfach, effizient und intuitiv sein. Mit Leidenschaft entwickelt %{author} CSA Admin seit über 10 Jahren, um den Alltag in CSAs zu erleichtern.
6-
title: Über CSA&nbsp;Admin
7+
title: Über CSA Admin
78
call_to_action: Demo anfordern
89
contact:
9-
text: Möchten Sie mehr über CSA Admin erfahren? Haben Sie Fragen? Zögern Sie nicht, mich für weitere Informationen und/oder zur Vereinbarung einer Demo zu kontaktieren. Sie können mich per E-Mail unter %{mail}. Ich beantworte gerne alle Ihre Fragen.
10-
title: Interessiert? Fordern&nbsp;Sie&nbsp;eine&nbsp;Demo&nbsp;an!
10+
text: Möchten Sie mehr über CSA Admin erfahren? Haben Sie Fragen? Zögern Sie nicht, mich für weitere Informationen und/oder zur Vereinbarung einer Demo zu kontaktieren. Sie können mich per E-Mail unter %{mail} erreichen. Ich beantworte gerne alle Ihre Fragen.
11+
title: Interessiert? Fordern Sie eine Demo an!
1112
email: E-Mail
1213
features:
1314
activity:
@@ -17,10 +18,10 @@ de:
1718
description: Verteilen Sie Ihre Ernten effizient, indem Sie die Größe oder den Preis der Anteile berücksichtigen – und behalten Sie dabei stets den Wert Ihrer Anteile sowie den Ernteverlauf im Blick.
1819
title: Anteilinhalt und -wert
1920
billing:
20-
description: Erstellt und versendet QR-Rechnungen, überwacht tägliche Zahlungseingänge (EBICS) und SEPA-Lastschriften und verschickt automatisch Mahnungen.
21+
description: Erstellt und versendet QR-Rechnungen, überwacht tägliche Zahlungseingänge (EBICS), unterstützt <strong>SEPA-Lastschriften</strong> und verschickt automatisch Mahnungen.
2122
title: Automatisierte Abrechnung
2223
communication:
23-
description: Passen Sie jede E-Mail individuell an – von Inhalt bis Stil. Unser integriertes Newsletter-System machts möglich.
24+
description: Passen Sie jede E-Mail individuell an – von Inhalt bis Stil. Unser integriertes Newsletter-System macht's möglich.
2425
title: Personalisierte Kommunikation
2526
deliveries:
2627
description: Planen Sie Ihre Lieferungen flexibel – egal, ob zwei Lieferungen pro Woche oder jede zweite Woche. Abwesenheiten werden automatisch berücksichtigt.
@@ -53,13 +54,14 @@ de:
5354
org_name: "Solawi"
5455
org_name_definition: "Solidarische Landwirtschaft"
5556
organizations:
56-
subtitle: Ob Sie ein Verein, eine Genossenschaft, ein Unternehmen oder eine Einzelperson sind, CSA&nbsp;Admin passt sich Ihren Bedürfnissen an.
57-
title: Sie nutzen CSA&nbsp;Admin
57+
logo_alt: "Logo von %{name}"
58+
subtitle: Ob Sie ein Verein, eine Genossenschaft, ein Unternehmen oder eine Einzelperson sind, CSA Admin passt sich Ihren Bedürfnissen an.
59+
title: Sie nutzen CSA Admin
5860
phone: Telefon
5961
site:
6062
description: Open-Source-Webanwendung für effiziente Solawi-Verwaltung (Solidarische Landwirtschaft). Vereinfachen Sie Ihre Abläufe – Demo jetzt anfordern!
6163
title: "CSA Admin - Effizientere Verwaltung Ihrer Solawi"
6264
path: /solawi
63-
subtitle: Seit 2014 nutzen %{orgs_link} CSA Admin, um ihre täglichen Aufgaben zu erleichtern und die jährliche Verteilung von über <strong>%{baskets_count} Anteilen</strong> zu verwalten. Schließen Sie sich ihnen an!
64-
subtitle_orgs_link: zahlreiche&nbsp;Organisationen
65-
title: Effizientere %{org_name}&#8209;Verwaltung.
65+
subtitle: Seit 2014 nutzen %{orgs_link} CSA Admin, um ihre täglichen Aufgaben zu erleichtern und die jährliche Verteilung von über <span class='font-semibold'>%{baskets_count} Anteilen</span> zu verwalten. Schließen Sie sich ihnen an!
66+
subtitle_orgs_link: <span class="whitespace-nowrap">zahlreiche Organisationen</span>
67+
title: Effizientere <span class="whitespace-nowrap">%{org_name}-Verwaltung.</span>

locales/en.yml

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
en:
2+
skip_to_content: Skip to main content
23
about:
34
application: open-source web application
45
other_orgs: many other organizations
56
text: Initially created to simplify the management of %{ragedevert} in Neuchâtel (CH), CSA Admin has continuously improved and expanded over the years to meet the diverse needs of %{other_orgs} in Switzerland and Germany. CSA Admin is an %{application}. It aims to be simple, efficient, and intuitive. It is developed with passion by %{author}, who has been committed for over 10 years to simplifying the lives of CSAs to help them thrive.
6-
title: About CSA&nbsp;Admin
7+
title: About CSA Admin
78
call_to_action: Request a demo
89
contact:
910
text: Would you like to know more about CSA Admin? Do you have any questions? Feel free to contact me for more information and/or to schedule a demo. You can reach me by email at %{mail}. I'll be happy to answer all your questions.
10-
title: Interested? Request&nbsp;a&nbsp;demo!
11+
title: Interested? Request a demo!
1112
email: Email
1213
features:
1314
activity:
@@ -40,7 +41,7 @@ en:
4041
description: Offer your subscribers <strong>additional products</strong> to enhance their basket with each delivery. An online shop is available on their member account. Stock management included!
4142
title: Online Shop
4243
subtitle: "CSA Admin offers you a wide range of features specifically developed for the needs of <span class='whitespace-nowrap'><strong class='text-logo-green'>C</strong>ommunity <strong class='text-logo-green'>S</strong>upported <strong class='text-logo-green'>A</strong>griculture</span>."
43-
subtitle2: "Each CSA is unique, so some modules are optional, at your convenience. Other&nbsp;needs? Just ask!"
44+
subtitle2: "Each CSA is unique, so some modules are optional, at your convenience. Other needs? Just ask!"
4445
title: "Everything you need …"
4546
title2: "… and much more!"
4647
footer:
@@ -53,13 +54,14 @@ en:
5354
org_name: "CSA"
5455
org_name_definition: "Community Supported Agriculture"
5556
organizations:
56-
subtitle: Whether you are an association, a cooperative, a business, or an individual, CSA&nbsp;Admin adapts to your needs.
57-
title: They use CSA&nbsp;Admin
57+
logo_alt: "Logo of %{name}"
58+
subtitle: Whether you are an association, a cooperative, a business, or an individual, CSA Admin adapts to your needs.
59+
title: They use CSA Admin
5860
phone: Phone
5961
site:
6062
description: Open-source web app to efficiently manage your CSA (Community Supported Agriculture). Simplify your operations and request a demo today!
6163
title: "CSA Admin - Streamline your CSA management"
6264
path: ""
63-
subtitle: "Since 2014, %{orgs_link} have been using CSA Admin to facilitate their daily tasks and manage the annual distribution of over <strong>%{baskets_count} baskets</strong>. Join them!"
64-
subtitle_orgs_link: many&nbsp;organizations
65-
title: Streamline your&nbsp;%{org_name} management.
65+
subtitle: "Since 2014, %{orgs_link} have been using CSA Admin to facilitate their daily tasks and manage the annual distribution of over <span class='font-semibold'>%{baskets_count} baskets</span>. Join them!"
66+
subtitle_orgs_link: <span class="whitespace-nowrap">many organizations</span>
67+
title: Streamline your <span class="whitespace-nowrap">%{org_name} management.</span>

locales/fr.yml

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
fr:
2+
skip_to_content: Aller au contenu principal
23
about:
34
application: application web open source
45
other_orgs: de nombreuses autres organisations
56
text: Initialement créée pour simplifier la gestion de %{ragedevert} à Neuchâtel (CH), CSA Admin n'a cessé de s'améliorer et de s'agrandir au fil des années pour répondre aux besoins divers et variés %{other_orgs} en Suisse et en Allemagne. CSA Admin est une %{application}. Elle se veut simple, efficace et intuitive. Elle est développée avec passion par %{author}, qui s'engage depuis plus de 10 ans à simplifier la vie des ACP pour les aider à prospérer.
6-
title: À propos de CSA&nbsp;Admin
7+
title: À propos de CSA Admin
78
call_to_action: Demander une démo
89
contact:
910
text: Vous souhaitez en savoir plus sur CSA Admin? Vous avez des questions? N'hésitez pas à me contacter pour plus d'informations et/ou pour planifier une démo. Vous pouvez me joindre par e-mail à l'adresse %{mail}. Je me ferai un plaisir de répondre à toutes vos questions.
10-
title: Intéressé·e? Demandez&nbsp;une&nbsp;démo!
11+
title: Intéressé·e? Demandez une démo!
1112
email: E-mail
1213
features:
1314
activity:
@@ -53,13 +54,14 @@ fr:
5354
org_name: ACP
5455
org_name_definition: Agriculture Contractuelle de Proximité
5556
organizations:
56-
subtitle: Que vous soyez une association, une coopérative, une entreprise ou un particulier, CSA&nbsp;Admin s'adapte à vos besoins.
57-
title: Ils·Elles utilisent CSA&nbsp;Admin
57+
logo_alt: "Logo de %{name}"
58+
subtitle: Que vous soyez une association, une coopérative, une entreprise ou un particulier, CSA Admin s'adapte à vos besoins.
59+
title: Ils·Elles utilisent CSA Admin
5860
phone: Téléphone
5961
site:
6062
description: Application web open source pour gérer efficacement votre ACP (Agriculture Contractuelle de Proximité). Simplifiez vos opérations, demandez une démo!
6163
title: CSA Admin - Simplifiez la gestion de votre ACP
6264
path: /acp
63-
subtitle: Depuis 2014, %{orgs_link} utilisent CSA Admin pour faciliter leurs tâches quotidiennes et gérer la distribution annuelle de plus de <strong>%{baskets_count} paniers</strong>. Rejoignez-les !
64-
subtitle_orgs_link: de&nbsp;nombreuses&nbsp;organisations
65-
title: Simplifiez la gestion de votre&nbsp;%{org_name}.
65+
subtitle: Depuis 2014, %{orgs_link} utilisent CSA Admin pour faciliter leurs tâches quotidiennes et gérer la distribution annuelle de plus de <span class='font-semibold'>%{baskets_count} paniers</span>. Rejoignez-les !
66+
subtitle_orgs_link: <span class="whitespace-nowrap">de nombreuses organisations</span>
67+
title: Simplifiez la gestion de <span class="whitespace-nowrap">votre %{org_name}.</span>

source/_footer.erb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
<li>
44
<%= link_to "EN", "/", class: "font-semibold p-1 #{"active" unless current_page?("/") }" %>
55
</li>
6-
<li class="text-gray-500 font-extralight text-xs">
6+
<li class="text-gray-400 font-extralight text-xs">
77
/
88
</li>
99
<li>
1010
<%= link_to "FR", '/acp', class: "font-semibold p-1 #{"active" unless current_page?('/acp') }" %>
1111
</li>
12-
<li class="text-gray-500 font-extralight text-xs">
12+
<li class="text-gray-400 font-extralight text-xs">
1313
/
1414
</li>
1515
<li>
@@ -28,7 +28,7 @@
2828
</strong>
2929
</div>
3030

31-
<p class="mt-4 md:mt-8 text-center text-sm text-gray-500">
32-
<%= I18n.t("footer.developed_by", author_link: link_to(data.site.author.name, data.site.author.website, class: 'whitespace-nowrap no-underline text-gray-500 font-normal', title: "thibaud.gg")) %>
31+
<p class="mt-4 md:mt-8 text-center text-sm text-gray-600">
32+
<%= I18n.t("footer.developed_by", author_link: link_to(data.site.author.name, data.site.author.website, class: 'whitespace-nowrap no-underline text-gray-600 font-normal', title: "thibaud.gg")) %>
3333
</p>
3434
</footer>

source/_header.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@
3232
<div class="flex items-center gap-4 w-full md:text-base md:w-fit mt-6 md:mt-0 md:ml-16 justify-center md:justify-end">
3333
<%= link_to (inline_svg('envelope.svg', class: 'w-6 h-6 md:order-2 mr-2 md:mr-0 md:ml-2 mt-0.5', alt: t('email')) + content_tag(:strong, data.site.contact.email, class: 'font-semibold md:order-1')).html_safe, data.site.contact.email_link, class: 'flex items-center no-underline text-gray-800', title: t('email') %>
3434
</div>
35-
</header
35+
</header>

source/_index.erb

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22
<%= I18n.t 'title', org_name: content_tag(:span, t("org_name"), class: "text-logo-green drop-shadow-sm", title: t("org_name_definition")) %>
33
</h1>
44

5-
<h2 class="mt-4 mx-auto md:w-4/6 text-center md:leading-normal text-xl font-light">
5+
<p class="mt-4 mx-auto md:w-4/6 text-center md:leading-normal text-xl font-light">
66
<%= I18n.t 'subtitle', orgs_link: link_to(t('subtitle_orgs_link'), '#organizations'), baskets_count: format_number(data.site.baskets_count) %>
7-
</h2>
7+
</p>
88

99
<div class="mt-12 md:mt-8 block text-center">
1010
<%= link_to t('call_to_action'), '#contact', class: 'mx-auto text-center px-6 py-3 bg-logo-green hover:bg-green-700 text-base md:text-lg text-white hover:text-white no-underline font-bold rounded-full' %>
1111
</div>
1212

13-
<h3 id="features" class="mt-16 pt-8 mx-auto md:w-5/6 text-center tracking-tight text-2xl md:text-4xl font-extrabold">
13+
<h2 id="features" class="mt-16 pt-8 mx-auto md:w-5/6 text-center tracking-tight text-2xl md:text-4xl font-extrabold scroll-mt-24">
1414
<%= t("features.title") %>
15-
</h3>
15+
</h2>
1616
<p class="mt-2 mx-auto md:w-4/6 text-center md:leading-normal text-xl font-normal">
1717
<%= t("features.subtitle") %>
1818
</p>
@@ -60,7 +60,7 @@
6060
<%= t("features.subtitle2") %>
6161
</p>
6262

63-
<div class="mt-10 md:grid md:grid-cols-3 mg:gap-4 lg:gap-6">
63+
<div class="mt-10 md:grid md:grid-cols-3 md:gap-4 lg:gap-6">
6464
<%= partial 'feature', locals: { \
6565
logo: 'building-storefront', \
6666
title: t('features.shop.title'), \
@@ -78,31 +78,31 @@
7878
} %>
7979
</div>
8080

81-
<h3 id="organizations" class="mt-16 pt-8 mx-auto md:w-5/6 text-center tracking-tight text-2xl md:text-4xl font-extrabold">
81+
<h2 id="organizations" class="mt-16 pt-8 mx-auto md:w-5/6 text-center tracking-tight text-2xl md:text-4xl font-extrabold scroll-mt-24">
8282
<%= t("organizations.title") %>
83-
</h3>
83+
</h2>
8484
<p class="mt-2 mx-auto md:w-7/12 text-center md:leading-normal text-xl font-normal">
8585
<%= t("organizations.subtitle") %>
8686
</p>
8787

8888
<div class="mt-10 mx-auto px-4 grid grid-cols-3 md:grid-cols-7 gap-6 lg:gap-8">
89-
<% data.organizations.each do |org, data| %>
90-
<%= link_to image_tag("https://cdn.csa-admin.org/logos/#{org}", alt: "#{data.name} (logo)", title: data.name), data.url, class: 'size-16 md:size-20 lg:size-24 mx-auto flex items-center no-underline', title: data.name %>
89+
<% data.organizations.each do |org, org_data| %>
90+
<%= link_to image_tag("https://cdn.csa-admin.org/logos/#{org}", alt: I18n.t('organizations.logo_alt', name: org_data.name), title: org_data.name), org_data.url, class: 'size-16 md:size-20 lg:size-24 mx-auto flex items-center no-underline', title: org_data.name %>
9191
<% end %>
9292
</div>
9393

94-
<h4 id="contact" class="mt-20 pt-8 mx-auto md:w-5/6 text-center text-xl md:text-3xl font-bold">
94+
<h2 id="contact" class="mt-20 pt-8 mx-auto md:w-5/6 text-center text-xl md:text-3xl font-bold scroll-mt-24">
9595
<%= t("contact.title") %>
96-
</h4>
96+
</h2>
9797
<p class="mt-4 mx-auto md:w-7/12 text-justify leading-normal text-lg">
9898
<%= I18n.t("contact.text", mail: link_to(data.site.contact.email, data.site.contact.email_link, class: 'whitespace-nowrap')) %>
9999
</p>
100100

101101
<span class="mt-16 mx-auto block w-52 h-1 rounded-full bg-gradient-to-r from-logo-green to-green-600"></span>
102102

103-
<h4 id="about" class="mt-8 pt-8 mx-auto md:w-5/6 text-center text-xl md:text-3xl font-bold">
103+
<h2 id="about" class="mt-8 pt-8 mx-auto md:w-5/6 text-center text-xl md:text-3xl font-bold scroll-mt-24">
104104
<%= t("about.title") %>
105-
</h4>
105+
</h2>
106106
<p class="mt-4 mx-auto md:w-7/12 text-justify leading-normal text-lg">
107107
<%= I18n.t("about.text", \
108108
ragedevert: link_to('Rage de Vert', 'https://www.ragedevert.ch', class: 'whitespace-nowrap'), \

0 commit comments

Comments
 (0)