{% extends "public_base.html" %} {% import "marketplace/_macros.html" as mk %} {% block title %}{{ _("Marketplace") }}{% endblock %} {# A search or a filter is a reader already at work: the hero shrinks to the search box, so the results start near the top of a phone. #} {% set filtering = query or archetype or category %} {% block hero %}

{{ _("The SPLENT feature marketplace") }}

{% if not filtering %}

{{ _("Reusable, contract-verified features you can install into any SPLENT product with one command.") }}

{% endif %} {% if not filtering %}

{{ total_features }} {{ ngettext("feature", "features", total_features) }} {{ total_spls }} {{ ngettext("product line", "product lines", total_spls) }}

{% endif %}
{% endblock %} {% block content %}
{{ _("Archetype") }} {{ _("All") }} {% for a in archetypes %} {{ a }} {% endfor %}
{% if categories %}
{{ _("Category") }} {{ _("All") }} {% for c in categories %} {{ c }} {% endfor %}
{% endif %}

{{ ngettext("%(num)d feature", "%(num)d features", features|length) }}{% if query %} · “{{ query }}”{% endif %} {% if query or archetype or category %} · {{ _("Clear filters") }}{% endif %}

{% if features %}
{% for f in features %}
{{ mk.monogram(f.short) }}
{{ f.short }} {{ mk.version_pill(f) }} {{ mk.archetype_badge(f.archetype) }}

{{ f.description or _("No description yet.") }}

{# Two independent axes. Every indexed feature has a git tag, which the version pill above already shows; PyPI is separate, and a "published": false dict is still truthy, which used to mark everything as on PyPI. #} {% if f.pypi and f.pypi.published %} {{ mk.icon("check-circle", 14) }}PyPI {% else %} {{ mk.icon("git-branch", 14) }}{{ _("source only") }} {% endif %} {% if f.used_by %} {{ mk.icon("users", 14) }}{{ _("used by %(count)d", count=f.used_by|length) }} {% endif %} {% if f.category %} {{ mk.icon("folder", 14) }}{{ f.category }} {% endif %}
{% endfor %}
{% else %}
{{ mk.icon("search", 34) }}

{{ _("No features match your search.") }}

{{ _("Clear filters") }}
{% endif %}
{% endblock %}