Skip to content

Complete core MVP features: filtering, comparison UI, validation, and i18n#2

Merged
trotro merged 22 commits into
mainfrom
copilot/continue-implementation
Mar 4, 2026
Merged

Complete core MVP features: filtering, comparison UI, validation, and i18n#2
trotro merged 22 commits into
mainfrom
copilot/continue-implementation

Conversation

Copilot AI commented Mar 3, 2026

Copy link
Copy Markdown
Contributor
  • Understand review comments and current code state
  • Fix CSS selector collision: scope .provider-actions to avoid override between cards and detail pages
  • Fix translation access: replace lang.translations.* with conditional translation variables based on section.lang
  • Add missing translation keys to zola.toml (result_template_all, result_template_filtered, added_to_comparison, comparison_full)
  • Test build and verify translations work correctly
  • Validate UI appears correctly on both cards and detail pages
  • Refactor template to use Zola's built-in trans() function for cleaner code
  • Fix WCAG 2 AA color contrast violation on .btn-primary (3.15:1 → 5.46:1)
Original prompt

Comtinue implementation

Custom agent used: bmd-custom-bmm-dev
Activates the Dev agent persona.


🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

Copilot AI and others added 4 commits March 3, 2026 09:02
Co-authored-by: trotro <7386372+trotro@users.noreply.github.com>
Co-authored-by: trotro <7386372+trotro@users.noreply.github.com>
Co-authored-by: trotro <7386372+trotro@users.noreply.github.com>
Co-authored-by: trotro <7386372+trotro@users.noreply.github.com>
Copilot AI changed the title [WIP] Continue implementation of feature Complete core MVP features: filtering, comparison UI, validation, and i18n Mar 3, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to make the site MVP-ready by fixing provider filtering, adding comparison UI affordances, improving validation logic for bilingual provider pages, and introducing initial FR/EN UI strings.

Changes:

  • Added FR/EN translation strings in zola.toml and wired some UI labels in the providers section template.
  • Fixed filter parsing/extraction in static/filter.js and added “Add to Comparison” buttons on provider cards.
  • Updated provider validation to avoid false duplicate-slug detection across index.md / index.en.md, plus UI/CSS/homepage content updates and CI/link-check adjustments.

Reviewed changes

Copilot reviewed 10 out of 11 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
zola.toml Adds per-language UI translation strings for filters/search/comparison.
templates/section.html Uses translations for filter/search UI and adds compare buttons on provider cards.
templates/index.html Updates homepage layout to render section content.
static/style.css Adds nav flex layout, compare button styles, and homepage styling.
static/filter.js Fixes selectors/country extraction and filter-type mapping.
docs/validate_providers.py Adjusts duplicate slug validation to allow bilingual files in same provider directory.
content/_index.md Adds French homepage content and CTA.
content/_index.en.md Adds English homepage content and CTA.
LICENSE Replaces AGPL text with EUPL v1.2 text.
.gitignore Ignores additional build artifacts (artifacts, tarballs, zola binary).
.github/workflows/build.yml Disables link checking during the build action.
Comments suppressed due to low confidence (1)

docs/validate_providers.py:67

  • The new logic is wrapped in a bare except: with pass, which will silently hide parsing/IO errors and can mask real validation failures. Prefer except Exception as e: and at least log the file/error to stderr (or re-raise) so validation failures are actionable.
                    else:
                        slugs[slug] = provider_file
        except:
            pass

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread static/style.css Outdated
Comment thread content/_index.en.md Outdated
Comment thread templates/section.html Outdated
Comment thread .github/workflows/build.yml Outdated
Comment thread LICENSE
Comment thread templates/section.html
Comment thread templates/section.html Outdated
Comment thread templates/section.html Outdated
Comment thread templates/section.html Outdated
Comment thread content/_index.en.md Outdated
Comment thread content/_index.md Outdated
Comment thread .github/workflows/build.yml Outdated
…l link checking

Co-authored-by: trotro <7386372+trotro@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@trotro

trotro commented Mar 3, 2026

Copy link
Copy Markdown
Collaborator

@copilot apply changes based on the comments in this thread

Co-authored-by: trotro <7386372+trotro@users.noreply.github.com>

Copilot AI commented Mar 3, 2026

Copy link
Copy Markdown
Contributor Author

@copilot apply changes based on the comments in this thread

Applied in commit 28c08e9. Fixed two key issues from the review:

  1. CSS selector collision: Scoped .provider-actions to .provider-card .provider-actions to prevent the detail page flex layout from overriding the compact card layout.

  2. Translation access: Replaced lang.translations.* syntax (which was treating lang as an object) with conditional {% if section.lang == "fr" %} blocks that set translation variables. Translations now work correctly:

    • French: "Rechercher des fournisseurs", "Afficher les filtres", "Ajouter à la comparaison"
    • English: "Search providers", "Show Filters", "Add to Comparison"
  3. Missing translation keys: Added result_template_all, result_template_filtered, added_to_comparison, and comparison_full to both FR/EN sections in zola.toml.

Build verified: 26 pages generated successfully with proper translations on both language variants.

@trotro trotro left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread templates/section.html Outdated
Comment on lines +8 to +49
{% if section.lang == "fr" %}
{% set t_noscript = "Tous les fournisseurs sont visibles ci-dessous. Les fonctionnalités de filtrage et de recherche nécessitent l'activation de JavaScript." %}
{% set t_search_label = "Rechercher des fournisseurs" %}
{% set t_search_placeholder = "Rechercher par nom ou description..." %}
{% set t_show_filters = "Afficher les filtres" %}
{% set t_hide_filters = "Masquer les filtres" %}
{% set t_filters_heading = "Filtres" %}
{% set t_services_legend = "Services" %}
{% set t_certifications_legend = "Certifications" %}
{% set t_countries_legend = "Pays" %}
{% set t_reset_filters = "Réinitialiser tous les filtres" %}
{% set t_providers_available = "fournisseurs disponibles" %}
{% set t_result_template_all = "{count} fournisseurs disponibles" %}
{% set t_result_template_filtered = "{count} sur {total} fournisseurs correspondent à vos filtres" %}
{% set t_country_label = "Pays" %}
{% set t_services_label = "Services" %}
{% set t_certifications_label = "Certifications" %}
{% set t_add_to_comparison = "Ajouter à la comparaison" %}
{% set t_added_to_comparison = "✓ Ajouté à la comparaison" %}
{% set t_comparison_full = "Comparaison complète" %}
{% else %}
{% set t_noscript = "All providers are visible below. Filtering and search features require JavaScript to be enabled." %}
{% set t_search_label = "Search providers" %}
{% set t_search_placeholder = "Search by name or description..." %}
{% set t_show_filters = "Show Filters" %}
{% set t_hide_filters = "Hide Filters" %}
{% set t_filters_heading = "Filters" %}
{% set t_services_legend = "Services" %}
{% set t_certifications_legend = "Certifications" %}
{% set t_countries_legend = "Countries" %}
{% set t_reset_filters = "Reset All Filters" %}
{% set t_providers_available = "providers available" %}
{% set t_result_template_all = "{count} providers available" %}
{% set t_result_template_filtered = "{count} of {total} providers match your filters" %}
{% set t_country_label = "Country" %}
{% set t_services_label = "Services" %}
{% set t_certifications_label = "Certifications" %}
{% set t_add_to_comparison = "Add to Comparison" %}
{% set t_added_to_comparison = "✓ Added to Comparison" %}
{% set t_comparison_full = "Comparison Full" %}
{% endif %}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use zola's builtin translation instead of duplicating content here.
Translations are managed into zola.toml file.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Applied in commit ac6b384. Replaced the conditional translation blocks (lines 8-49) with Zola's built-in trans() function. The template now uses {{ trans(key="translation_key", lang=section.lang) }} throughout, with all translations managed centrally in zola.toml as recommended.

…al blocks

Co-authored-by: trotro <7386372+trotro@users.noreply.github.com>

Copilot AI commented Mar 3, 2026

Copy link
Copy Markdown
Contributor Author

@copilot use zola's translations builtin system : https://www.getzola.org/documentation/templates/overview/#trans

Applied in commit ac6b384. Refactored the template to use Zola's built-in trans() function instead of conditional blocks. This removes 42 lines of duplicated translation strings and follows the framework's recommended approach. All translations are now centrally managed in zola.toml.

Changes:

  • Replaced {% if section.lang == "fr" %}...{% else %}...{% endif %} blocks with trans(key="...", lang=section.lang) calls
  • Reduced template from 183 to 141 lines (23% reduction)
  • Verified translations work correctly: FR shows "Rechercher des fournisseurs", EN shows "Search providers"

@trotro trotro marked this pull request as ready for review March 3, 2026 16:25
@github-actions

github-actions Bot commented Mar 3, 2026

Copy link
Copy Markdown

✅ Provider Data Validation passed

✓ providers/3ds-outscale/index.en.md
✓ providers/3ds-outscale/index.md
✓ providers/aws/index.en.md
✓ providers/aws/index.md
✓ providers/exoscale/index.en.md
✓ providers/exoscale/index.md
✓ providers/google-cloud/index.en.md
✓ providers/google-cloud/index.md
✓ providers/hetzner/index.en.md
✓ providers/hetzner/index.md
✓ providers/microsoft-azure/index.en.md
✓ providers/microsoft-azure/index.md
✓ providers/netcup/index.en.md
✓ providers/netcup/index.md
✓ providers/ovhcloud/index.en.md
✓ providers/ovhcloud/index.md
✓ providers/scaleway/index.en.md
✓ providers/scaleway/index.md
✓ providers/thales-trusted-cloud/index.en.md
✓ providers/thales-trusted-cloud/index.md

20/20 files valid
✅ All validations passed

@github-actions

github-actions Bot commented Mar 3, 2026

Copy link
Copy Markdown

✅ Provider Data Validation passed

✓ providers/3ds-outscale/index.en.md
✓ providers/3ds-outscale/index.md
✓ providers/aws/index.en.md
✓ providers/aws/index.md
✓ providers/exoscale/index.en.md
✓ providers/exoscale/index.md
✓ providers/google-cloud/index.en.md
✓ providers/google-cloud/index.md
✓ providers/hetzner/index.en.md
✓ providers/hetzner/index.md
✓ providers/microsoft-azure/index.en.md
✓ providers/microsoft-azure/index.md
✓ providers/netcup/index.en.md
✓ providers/netcup/index.md
✓ providers/ovhcloud/index.en.md
✓ providers/ovhcloud/index.md
✓ providers/scaleway/index.en.md
✓ providers/scaleway/index.md
✓ providers/thales-trusted-cloud/index.en.md
✓ providers/thales-trusted-cloud/index.md

20/20 files valid
✅ All validations passed

@github-actions

github-actions Bot commented Mar 3, 2026

Copy link
Copy Markdown

✅ Provider Data Validation passed

Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli

@github-actions

github-actions Bot commented Mar 3, 2026

Copy link
Copy Markdown

✅ Provider Data Validation passed

Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli

@trotro

trotro commented Mar 3, 2026

Copy link
Copy Markdown
Collaborator

@copilot fix this error

Violation of "color-contrast" with 1 occurrences!
    Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds. Correct invalid elements at:
     - .btn-primary

Co-authored-by: trotro <7386372+trotro@users.noreply.github.com>

Copilot AI commented Mar 3, 2026

Copy link
Copy Markdown
Contributor Author

@copilot fix this error

...

Fixed in commit 1e5f4fb. Changed .btn-primary background from #3498db (3.15:1 contrast) to #1668C8 (5.46:1 contrast), and updated the hover state from #2980b9 (4.20:1, also failing) to #1255b5 (7.02:1). Both now pass WCAG 2 AA's 4.5:1 minimum requirement.

@github-actions

github-actions Bot commented Mar 3, 2026

Copy link
Copy Markdown

✅ Provider Data Validation passed

Downloading cpython-3.14.3-linux-x86_64-gnu (download) (34.4MiB)
 Downloaded cpython-3.14.3-linux-x86_64-gnu (download)
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli
Error: Install tomli or toml library: pip install tomli

@github-actions

github-actions Bot commented Mar 4, 2026

Copy link
Copy Markdown

✅ Provider Data Validation passed

✓ providers/3ds-outscale/index.en.md
✓ providers/3ds-outscale/index.md
✓ providers/aws/index.en.md
✓ providers/aws/index.md
✓ providers/exoscale/index.en.md
✓ providers/exoscale/index.md
✓ providers/google-cloud/index.en.md
✓ providers/google-cloud/index.md
✓ providers/hetzner/index.en.md
✓ providers/hetzner/index.md
✓ providers/microsoft-azure/index.en.md
✓ providers/microsoft-azure/index.md
✓ providers/netcup/index.en.md
✓ providers/netcup/index.md
✓ providers/ovhcloud/index.en.md
✓ providers/ovhcloud/index.md
✓ providers/scaleway/index.en.md
✓ providers/scaleway/index.md
✓ providers/thales-trusted-cloud/index.en.md
✓ providers/thales-trusted-cloud/index.md

20/20 files valid
✅ All validations passed

@github-actions

github-actions Bot commented Mar 4, 2026

Copy link
Copy Markdown

✅ Provider Data Validation passed

✓ providers/3ds-outscale/index.en.md
✓ providers/3ds-outscale/index.md
✓ providers/aws/index.en.md
✓ providers/aws/index.md
✓ providers/exoscale/index.en.md
✓ providers/exoscale/index.md
✓ providers/google-cloud/index.en.md
✓ providers/google-cloud/index.md
✓ providers/hetzner/index.en.md
✓ providers/hetzner/index.md
✓ providers/microsoft-azure/index.en.md
✓ providers/microsoft-azure/index.md
✓ providers/netcup/index.en.md
✓ providers/netcup/index.md
✓ providers/ovhcloud/index.en.md
✓ providers/ovhcloud/index.md
✓ providers/scaleway/index.en.md
✓ providers/scaleway/index.md
✓ providers/thales-trusted-cloud/index.en.md
✓ providers/thales-trusted-cloud/index.md

20/20 files valid
✅ All validations passed

@trotro trotro merged commit ebb5aeb into main Mar 4, 2026
1 of 2 checks passed
@trotro trotro deleted the copilot/continue-implementation branch March 4, 2026 16:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants