feat: auto-seed today's cards on page load (2026-05-20)

Seeder runs once per CARD_SEED_VERSION, adds tasks to Ready columns
across tiefgang, psk, k4, pleasance, privat, einzelunternehmer, musichub, doener.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Robin Choice
2026-05-20 16:28:42 +02:00
parent 2ef7e4d5e6
commit 4111020451

View File

@@ -2381,15 +2381,40 @@ if (window.location.protocol === 'file:') {
loadGroups(); loadGroups();
loadBoardOrder(); loadBoardOrder();
loadState(); loadState();
seedCards();
renderSidebar(); renderSidebar();
loadIdeas(); loadIdeas();
renderIdeas(); renderIdeas();
show('doener'); show('doener');
setView('overview'); setView('overview');
// ── CARD SEEDER ──────────────────────────────────────────────────────────────
const CARD_SEED_VERSION = '2026-05-20-a';
function seedCards() {
if (localStorage.getItem('kanban_cards_seeded') === CARD_SEED_VERSION) return;
const batch = {
tiefgang: ['4 Songs mit KI-Tools mastern','4 Songs in die Cloud hochladen'],
psk: ['Control Chart ↔ Agent Chart gegenüberstellen','Gyra aufhübschen — neues Beispiel (SLA + Definition of Workflow)','Stammbaum: Lean → Agil → Kanban → Scrum','Lead Time & Flow Efficiency — kurzer Abriss','Frage 185: 3 vs. 5 Feedback Loops in Scrum klären','SLE-Formel zugänglich erklären'],
k4: ['PSK-Karten aus Board entfernen','Kontext durchforsten + neue Karten anlegen'],
pleasance: ['DNS: api-Subdomain eintragen','Resend + Kontaktformular-E-Mail testen'],
privat: ['Roborock starten','Wäsche anschmeißen'],
einzelunternehmer: ['Lexoffice: Stand prüfen'],
musichub: ['Status quo klären','Neues Sprint Goal definieren'],
doener: ['App-Store-Launch als Sprint Goal definieren'],
};
Object.entries(batch).forEach(([id, tasks]) => {
if (!BOARDS[id]) return;
const ready = BOARDS[id].cols.find(c => c.id === 'ready');
if (!ready) return;
tasks.forEach(t => { if (!ready.tasks.find(c => c.t === t)) ready.tasks.push({t}); });
});
saveState();
localStorage.setItem('kanban_cards_seeded', CARD_SEED_VERSION);
}
// ── EXPORT / IMPORT ────────────────────────────────────────────────────────── // ── EXPORT / IMPORT ──────────────────────────────────────────────────────────
function exportState() { function exportState() {
const keys = ['kanban_v2','kanban_groups','kanban_board_order','kanban_ideas','kanban_ideas_seeded']; const keys = ['kanban_v2','kanban_groups','kanban_board_order','kanban_ideas','kanban_ideas_seeded','kanban_cards_seeded'];
const snap = {}; const snap = {};
keys.forEach(k => { const v = localStorage.getItem(k); if (v !== null) snap[k] = v; }); keys.forEach(k => { const v = localStorage.getItem(k); if (v !== null) snap[k] = v; });
const blob = new Blob([JSON.stringify(snap, null, 2)], {type:'application/json'}); const blob = new Blob([JSON.stringify(snap, null, 2)], {type:'application/json'});