goon/app/templates/seo/performer.html
jtrzupek 9c49a69a66 feat(seo): public HTML SEO router + templates; add CLAUDE.md; ignore .nimbalyst
- app/api/seo.py (+ app/templates/seo/*): publiczny HTML SEO router (programmatic
  entity long-tail: performer/studio/scene/landing/2257), bez api-key. Importowany
  przez main.py — wymagany do uruchomienia, dotąd untracked. Opsec-clean (brak
  VPS IP/sekretów).
- CLAUDE.md: instrukcje projektu (dotąd untracked).
- .gitignore: .nimbalyst/ (lokalne tracker-tooling, nie dla OSS repo).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 16:29:59 +02:00

29 lines
1.2 KiB
HTML

{% extends "seo/base.html" %}
{% block title %}{{ performer.canonical_name }} — scenes & videos | Goon{% endblock %}
{% block description %}Browse {{ scenes|length }} {{ performer.canonical_name }} scenes aggregated across multiple sources. Find where to watch — free metadata index by Goon.{% endblock %}
{% block og_type %}profile{% endblock %}
{% block jsonld %}
<script type="application/ld+json">
{
"@context":"https://schema.org",
"@type":"Person",
"name": {{ performer.canonical_name|tojson }},
{% if aliases %}"alternateName": {{ aliases|tojson }},{% endif %}
{% if performer.gender %}"gender": {{ performer.gender.value|tojson }},{% endif %}
{% if performer.country %}"nationality": {{ performer.country|tojson }},{% endif %}
"url": {{ canonical|tojson }}
}
</script>
{% endblock %}
{% block content %}
<h1>{{ performer.canonical_name }}</h1>
<p class="meta">
{% if aliases %}aka {{ aliases|join(", ") }}<br>{% endif %}
{% if performer.gender %}{{ performer.gender.value|replace("_"," ") }}{% endif %}
{% if performer.country %} · {{ performer.country }}{% endif %}
· {{ scenes|length }} scenes indexed
</p>
{% include "seo/_cards.html" %}
{% endblock %}