Social: Trainingstipp-Generator, Übungen in DB, 3 Stil-Varianten
- training_exercises Tabelle mit 13 Übungen aus App-Bibliothek - POST /social/training-tip: Stil-Varianten tutorial/community/aspirational - exercise_id in social_content für Wiederholungs-Tracking - Admin-Stats: Social-Media-Sektion mit Status-Übersicht + letzte 10 Posts - SW by-v349, APP_VER 336
This commit is contained in:
parent
ca0ce79815
commit
1cb0c2df77
8 changed files with 1497 additions and 337 deletions
|
|
@ -3,7 +3,7 @@
|
|||
Router, State-Management, Navigation, Initialisierung.
|
||||
============================================================ */
|
||||
|
||||
const APP_VER = '325'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||
const APP_VER = '336'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||
|
||||
const App = (() => {
|
||||
|
||||
|
|
|
|||
|
|
@ -234,6 +234,59 @@ window.Page_admin = (() => {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Social Media Tracking -->
|
||||
<div class="card" style="padding:var(--space-4)">
|
||||
<p style="font-size:var(--text-sm);font-weight:600;margin:0 0 var(--space-3)">
|
||||
📱 Social Media Tracking</p>
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2);
|
||||
margin-bottom:var(--space-3)">
|
||||
${[
|
||||
['Gesamt generiert', s.social_total, 'var(--c-text-secondary)'],
|
||||
['Veröffentlicht', s.social_published, 'var(--c-success)'],
|
||||
['Geplant', s.social_scheduled, 'var(--c-primary)'],
|
||||
['Ideen offen', s.social_ideas, 'var(--c-warning)'],
|
||||
['Diese Woche live', s.social_this_week, 'var(--c-success)'],
|
||||
].map(([label, val, color]) => `
|
||||
<div style="background:var(--c-surface-2);border-radius:8px;padding:10px">
|
||||
<div style="font-size:10px;color:var(--c-text-muted);margin-bottom:2px">${label}</div>
|
||||
<div style="font-size:1.4em;font-weight:700;color:${color}">${val ?? 0}</div>
|
||||
</div>`).join('')}
|
||||
</div>
|
||||
${Object.keys(s.social_by_cat||{}).length ? `
|
||||
<div style="margin-bottom:var(--space-3)">
|
||||
<div style="font-size:11px;color:var(--c-text-muted);margin-bottom:6px;
|
||||
font-weight:600;text-transform:uppercase">Kategorien</div>
|
||||
<div style="display:flex;gap:6px;flex-wrap:wrap">
|
||||
${Object.entries(s.social_by_cat).map(([cat, n]) => `
|
||||
<span style="background:var(--c-surface-2);border-radius:20px;
|
||||
padding:2px 10px;font-size:11px">
|
||||
${cat} <strong>${n}</strong></span>`).join('')}
|
||||
</div>
|
||||
</div>` : ''}
|
||||
${s.social_recent?.length ? `
|
||||
<div>
|
||||
<div style="font-size:11px;color:var(--c-text-muted);margin-bottom:6px;
|
||||
font-weight:600;text-transform:uppercase">Letzte 10 Posts</div>
|
||||
<div style="display:flex;flex-direction:column;gap:6px">
|
||||
${s.social_recent.map(p => `
|
||||
<div style="display:flex;align-items:center;gap:8px;
|
||||
font-size:var(--text-xs);padding:6px 0;
|
||||
border-bottom:1px solid var(--c-border)">
|
||||
<span style="padding:2px 7px;border-radius:4px;font-size:10px;
|
||||
background:var(--c-surface-2);flex-shrink:0;
|
||||
color:${{idea:'var(--c-text-muted)',draft:'var(--c-warning)',
|
||||
scheduled:'var(--c-primary)',published:'var(--c-success)',
|
||||
archived:'var(--c-text-muted)'}[p.status]||'inherit'}">
|
||||
${p.status}</span>
|
||||
<span style="flex:1;overflow:hidden;text-overflow:ellipsis;
|
||||
white-space:nowrap">${p.topic}</span>
|
||||
<span style="color:var(--c-text-muted);flex-shrink:0">
|
||||
${(p.published_at||p.created_at||'').slice(0,10)}</span>
|
||||
</div>`).join('')}
|
||||
</div>
|
||||
</div>` : ''}
|
||||
</div>
|
||||
|
||||
<div class="card" style="padding:var(--space-4)">
|
||||
<p style="font-size:var(--text-sm);color:var(--c-text-secondary);margin:0;line-height:1.6">
|
||||
<svg class="ph-icon" aria-hidden="true" style="color:var(--c-primary)">
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue