A field guide to a steady mind

Stoic Philosophy

Twelve principles from Marcus Aurelius, Epictetus and Seneca — each one visualised, then grounded in everyday life. Pick a card to explore the idea.

0 / 12 PRINCIPLES EXPLORED

The idea, visualised

In the real world
Practise it

Your reflection

A record of your practice

My Stoic Practice Journal

Everything you've reflected on, gathered in one place. Reflections live only on this device — export a copy to keep.

`; const blob = new Blob([doc], { type: 'text/html' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); const fname = 'stoic-practice-journal-' + new Date().toISOString().slice(0, 10) + '.html'; a.href = url; a.download = fname; document.body.appendChild(a); a.click(); a.remove(); setTimeout(() => URL.revokeObjectURL(url), 2000); } document.getElementById('open-journal').addEventListener('click', showJournal); document.getElementById('journal-back-btn').addEventListener('click', showHome); document.getElementById('export-journal').addEventListener('click', exportJournal); document.getElementById('back-btn').addEventListener('click', showHome); document.getElementById('prev-btn').addEventListener('click', () => { openDetail(PRINCIPLES[(currentIndex - 1 + PRINCIPLES.length) % PRINCIPLES.length].id); }); document.getElementById('next-btn').addEventListener('click', () => { openDetail(PRINCIPLES[(currentIndex + 1) % PRINCIPLES.length].id); }); document.addEventListener('keydown', (e) => { if (document.body.classList.contains('viewing-journal')) { if (e.key === 'Escape') showHome(); return; } if (!document.body.classList.contains('viewing-detail')) return; if (e.key === 'Escape') showHome(); else if (e.target && e.target.tagName === 'TEXTAREA') return; else if (e.key === 'ArrowLeft') document.getElementById('prev-btn').click(); else if (e.key === 'ArrowRight') document.getElementById('next-btn').click(); }); renderProgress();