` + cards.map(c => {
const tags = parseTags(c);
const isTermin = tags.includes('termin') || tags.includes('geburtstag');
let calCfg = null;
@@ -532,10 +531,26 @@ export function renderBoard() {
const dotColor = calCfg?.color || c.color;
const icon = isTermin ? (calCfg?.icon || 'calendar-dots') : (isFavorite(c.id) ? 'star' : null);
const iconColor = isTermin ? dotColor : (isFavorite(c.id) ? '#fbbf24' : 'var(--t-dim)');
+ // Date column: due_date if set, else date prefix in title, else updated/created
+ const dateStr = c.due_date
+ || ((c.title || '').match(/^\d{4}-\d{2}-\d{2}/)?.[0])
+ || (c.updated_at || c.created_at || '').substring(0, 10);
+ // Tag chips (excluding termin/geburtstag — those are already
+ // represented by the icon + dot on the left)
+ const visibleTags = tags.filter(t => t !== 'termin' && t !== 'geburtstag');
+ const tagsHtml = visibleTags.length
+ ? `
${visibleTags.slice(0, 4).map(t => `#${esc(t)}`).join('')}${visibleTags.length > 4 ? `+${visibleTags.length - 4}` : ''}`
+ : '';
+ const bucketHtml = c.bucket_name
+ ? `
${esc(c.bucket_name)}`
+ : '';
return `
${icon ? `` : ''}
${esc(c.title)}
+ ${tagsHtml}
+ ${bucketHtml}
+ ${dateStr}
`;
}).join('') + '
';