Files
mobea/generator/templates/archiv.html.j2
T
Frank Schwenk f6e901bad8 feat: verwendete Prompts im Archiv ausklappbar anzeigen
Speichert OpenRouter- und SDXL-Prompts pro Archiv-Eintrag und zeigt sie auf der Übersichtsseite in aufklappbaren Details an.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 17:28:55 +02:00

383 lines
9.0 KiB
Django/Jinja
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>MOBEA Archiv Unsere bisherigen Pivots</title>
<meta name="description" content="Jeden Tag ein neues Startup. Hier ruhen die bisherigen.">
<meta name="theme-color" content="#111118">
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
background: #111118;
color: #e4e4ec;
line-height: 1.6;
min-height: 100vh;
}
a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }
.container {
width: 100%;
max-width: 1080px;
margin: 0 auto;
padding: 0 1.25rem;
}
/* Header */
.header {
border-bottom: 1px solid #2a2a38;
padding: 1.5rem 0;
}
.header-inner {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
}
.logo {
font-weight: 800;
font-size: 1.25rem;
letter-spacing: 0.12em;
color: #ffffff;
}
.header-nav {
display: flex;
gap: 1.5rem;
font-size: 0.85rem;
}
.header-nav a {
color: #8888a0;
transition: color 0.2s;
}
.header-nav a:hover { color: #c8c8d8; }
/* Main */
.main { padding: 3rem 0 4rem; }
.intro {
margin-bottom: 3rem;
}
.intro h1 {
font-size: clamp(1.5rem, 4vw, 2.25rem);
font-weight: 700;
color: #ffffff;
margin-bottom: 0.75rem;
}
.intro p {
font-size: 1.05rem;
color: #8888a0;
max-width: 36rem;
}
/* Empty state */
.empty {
text-align: center;
padding: 4rem 2rem;
border: 1px dashed #2a2a38;
border-radius: 12px;
color: #8888a0;
font-size: 1.1rem;
}
/* Grid */
.archive-grid {
display: grid;
gap: 1.5rem;
}
@media (min-width: 600px) {
.archive-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 900px) {
.archive-grid { grid-template-columns: repeat(3, 1fr); }
}
.entry-card {
display: flex;
flex-direction: column;
background: #1a1a24;
border: 1px solid #2a2a38;
border-radius: 12px;
overflow: hidden;
transition: border-color 0.2s, transform 0.2s, box-shadow 0.2s;
}
.entry-card:has(.entry-link:hover) {
border-color: #4a4a60;
transform: translateY(-3px);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.35);
}
.entry-link {
display: flex;
flex-direction: column;
flex: 1;
color: inherit;
}
.entry-thumb {
aspect-ratio: 16 / 9;
overflow: hidden;
background: linear-gradient(135deg, #2a2040 0%, #1a2838 50%, #283020 100%);
}
.entry-thumb img {
width: 100%;
height: 100%;
object-fit: cover;
}
.entry-body {
padding: 1.25rem;
flex: 1;
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.entry-date {
font-size: 0.75rem;
color: #686880;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.entry-backronym {
font-size: 0.95rem;
font-weight: 700;
color: #ffffff;
line-height: 1.35;
}
.entry-tagline {
font-size: 0.85rem;
color: #a0a0b8;
flex: 1;
}
.entry-topics {
display: flex;
flex-wrap: wrap;
gap: 0.4rem;
margin-top: 0.5rem;
}
.topic-badge {
font-size: 0.7rem;
font-weight: 600;
padding: 0.2rem 0.6rem;
border-radius: 999px;
background: #2a2a38;
color: #a0a0b8;
border: 1px solid #3a3a50;
}
.entry-prompts {
border-top: 1px solid #2a2a38;
font-size: 0.8rem;
}
.entry-prompts > summary {
padding: 0.75rem 1.25rem;
cursor: pointer;
color: #8888a0;
font-weight: 600;
list-style: none;
user-select: none;
transition: color 0.2s, background 0.2s;
}
.entry-prompts > summary::-webkit-details-marker { display: none; }
.entry-prompts > summary::before {
content: "▸ ";
display: inline-block;
transition: transform 0.2s;
}
.entry-prompts[open] > summary::before {
transform: rotate(90deg);
}
.entry-prompts > summary:hover {
color: #c8c8d8;
background: #222230;
}
.prompt-panel {
padding: 0 1.25rem 1.25rem;
display: flex;
flex-direction: column;
gap: 1rem;
}
.prompt-block h3 {
font-size: 0.7rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: #686880;
margin-bottom: 0.4rem;
}
.prompt-text {
font-family: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, monospace;
font-size: 0.72rem;
line-height: 1.5;
color: #b8b8cc;
background: #111118;
border: 1px solid #2a2a38;
border-radius: 8px;
padding: 0.75rem;
white-space: pre-wrap;
word-break: break-word;
max-height: 14rem;
overflow-y: auto;
}
.prompt-label {
font-size: 0.65rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: #585870;
margin: 0.6rem 0 0.25rem;
}
.prompt-label:first-child { margin-top: 0; }
/* Footer */
.footer {
border-top: 1px solid #2a2a38;
padding: 2rem 0;
margin-top: auto;
}
.footer-inner {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
gap: 1rem;
font-size: 0.8rem;
color: #686880;
}
.footer-links {
display: flex;
gap: 1.5rem;
}
.footer-links a {
color: #8888a0;
transition: color 0.2s;
}
.footer-links a:hover { color: #c8c8d8; }
</style>
</head>
<body>
<header class="header">
<div class="container header-inner">
<span class="logo">MOBEA</span>
<nav class="header-nav">
<a href="/">Heute</a>
<a href="/echt-jetzt/">Kontakt</a>
</nav>
</div>
</header>
<main class="main">
<div class="container">
<div class="intro">
<h1>Unsere bisherigen Pivots</h1>
<p>Jeden Tag ein neues Startup. Hier ruhen die bisherigen.</p>
</div>
{% if entries %}
<div class="archive-grid">
{% for entry in entries %}
<article class="entry-card">
<a href="{{ entry.url }}" class="entry-link">
<div class="entry-thumb">
{% if entry.image %}
<img src="{{ entry.image }}" alt="{{ entry.backronym }}" width="360" height="203" loading="lazy">
{% endif %}
</div>
<div class="entry-body">
<time class="entry-date" datetime="{{ entry.date }}">{{ entry.date_human }}</time>
<h2 class="entry-backronym">{{ entry.backronym }}</h2>
<p class="entry-tagline">{{ entry.tagline }}</p>
{% if entry.topics %}
<div class="entry-topics">
{% for topic in entry.topics %}
<span class="topic-badge">{{ topic }}</span>
{% endfor %}
</div>
{% endif %}
</div>
</a>
{% if entry.prompts %}
<details class="entry-prompts">
<summary>Prompts anzeigen</summary>
<div class="prompt-panel">
<div class="prompt-block">
<h3>Seiteninhalt (OpenRouter)</h3>
{% if entry.prompts.content_system %}
<p class="prompt-label">System</p>
<pre class="prompt-text">{{ entry.prompts.content_system }}</pre>
{% endif %}
{% if entry.prompts.content_user %}
<p class="prompt-label">User</p>
<pre class="prompt-text">{{ entry.prompts.content_user }}</pre>
{% endif %}
</div>
<div class="prompt-block">
<h3>Bildgenerierung (SDXL)</h3>
{% if entry.prompts.image_prompt %}
<p class="prompt-label">Prompt</p>
<pre class="prompt-text">{{ entry.prompts.image_prompt }}</pre>
{% endif %}
{% if entry.prompts.image_negative_prompt %}
<p class="prompt-label">Negative Prompt</p>
<pre class="prompt-text">{{ entry.prompts.image_negative_prompt }}</pre>
{% endif %}
</div>
</div>
</details>
{% endif %}
</article>
{% endfor %}
</div>
{% else %}
<p class="empty">Noch keine Pivots. Komm morgen wieder.</p>
{% endif %}
</div>
</main>
<footer class="footer">
<div class="container footer-inner">
<span>© MOBEA Archiv</span>
<nav class="footer-links">
<a href="/">Zurück zur Startseite</a>
<a href="/echt-jetzt/">Echt jetzt</a>
</nav>
</div>
</footer>
</body>
</html>