// Thinking — a "library" of evergreen pieces, not a chronological blog. // Filtered by kind: Essay / Tool / Case. function Thinking() { const { lang } = React.useContext(window.LangContext); const { isMobile, isTablet } = window.useBreakpoint(); const [refH2, visH2] = window.useReveal(); const [refCards, visCards] = window.useReveal({ threshold: 0.06 }); const pieces = [ { kind: "Thinking", title: { en: "5 Mistakes SMEs make when introducing AI", de: "5 Fehler, die KMU bei der Einführung von KI machen" }, hook: { en: "50 tools. No plan. No start.", de: "50 Tools. Kein Plan. Kein Anfang." }, lede: { en: "The patterns that stall AI adoption before the first workflow is ever built — and what to do instead.", de: "Die Muster, die KI-Einführungen in KMU bremsen — noch bevor der erste Workflow steht." }, length: "Quick read", href: { en: "assets/notes/01_5_mistakes/5_AI_Adoption_Mistakes·Ondion.pdf", de: "assets/notes/01_5_mistakes/5_Fehler_bei_der_KI-Einführung·Ondion.pdf", }, }, { kind: "Tool", title: { en: "A First Look: Claude for Small Business", de: "Ein erster Einblick: Claude for Small Business" }, hook: { en: "Monthly close. Lead triage. Weekly brief.", de: "Monatsabschluss. Lead-Triage. Wochenbriefing." }, lede: { en: "What Anthropic's new SME offering actually does, where the connector gap is, and why data minimisation matters before you connect anything.", de: "Was Anthropics neues KMU-Angebot tatsächlich kann, wo die Connector-Lücke liegt — und warum Datenminimierung wichtig ist, bevor man alles anbindet." }, length: "PDF Guide", href: { en: "assets/notes/02_claude_business/Claude_for_Small_Business·Ondion.pdf", de: "assets/notes/02_claude_business/Claude_für_KMU·Ondion.pdf", }, }, { kind: "Architecture", title: "Excel ▸ Supabase", hook: { en: "One question. 37 Excel files.", de: "Eine Frage. 37 Excel-Dateien." }, lede: { en: "Why modern companies no longer build processes on spreadsheets.", de: "Warum moderne Unternehmen ihre Prozesse nicht mehr auf Excel-Dateien aufbauen." }, length: "PDF Guide", href: { en: "assets/notes/03_excel-supabase/Excel to Supabase · Ondion.pdf", de: "assets/notes/03_excel-supabase/Excel zu Supabase · Ondion.pdf", }, }, ]; const en = { eyebrow: "08 · Notes", h2line1: "Notes.", h2line2: "A growing collection.", filters: ["All", "Thinking", "Tools", "Cases", "Systems", "Governance", "Architecture"], footer: "Systems thinking, operational observations, governance frameworks, workflow concepts, tools, and implementation notes.", readLabel: "Read", }; const de = { eyebrow: "08 · Notizen", h2line1: "Notizen.", h2line2: "Einblicke aus der Praxis.", filters: ["Alle", "Thinking", "Tools", "Cases", "Systems", "Governance", "Architecture"], footer: "Systemdenken, operative Beobachtungen, Governance-Frameworks, Workflow-Konzepte, Tools und Umsetzungsnotizen.", readLabel: "Lesen", }; const t = lang === 'de' ? de : en; const [filter, setFilter] = React.useState(t.filters[0]); const [mobilePage, setMobilePage] = React.useState(0); // Reset filter and page on language change React.useEffect(() => { setFilter(t.filters[0]); setMobilePage(0); }, [lang]); React.useEffect(() => { setMobilePage(0); }, [filter]); return (
08
{t.eyebrow}

{t.h2line1}

{t.h2line2}

{t.filters.map(f => ( ))}
{/* Cards */} {(() => { const kindMap = { "Thinking": ["Thinking", "Essay"], "Tools": ["Tool"], "Cases": ["Case"] }; // Newest first: pieces[] is authored oldest→newest (matches 01_/02_/03_ folders), // but we display the most recently added note at the top. const ordered = pieces.slice().reverse(); const isAll = filter === "All" || filter === "Alle"; const allPieces = isAll ? ordered : ordered.filter(p => (kindMap[filter] || [filter]).includes(p.kind)); const PAGE = 2; const totalPages = Math.ceil(allPieces.length / PAGE); const visible = isMobile ? allPieces.slice(mobilePage * PAGE, (mobilePage + 1) * PAGE) : allPieces; return ( <>
{visible.map((p, i) => { const title = typeof p.title === 'object' ? p.title[lang] || p.title.en : p.title; const hook = p.hook && (typeof p.hook === 'object' ? p.hook[lang] || p.hook.en : p.hook); const lede = typeof p.lede === 'object' ? p.lede[lang] || p.lede.en : p.lede; const length = typeof p.length === 'object' ? p.length[lang] || p.length.en : p.length; const url = p.href && typeof p.href === 'object' ? p.href[lang] || null : p.href; const Tag = url ? 'a' : 'article'; const linkProps = url ? { href: url, target: '_blank', rel: 'noopener noreferrer' } : {}; return (
{p.kind} {length}

{title}

{hook &&

{hook}

}

{lede}

{t.readLabel}
); })}
{isMobile && totalPages > 1 && (
{mobilePage + 1} / {totalPages}
)} ); })()}

{t.footer}

); } window.Thinking = Thinking;