feat: add subtitle and change photo alignment

This commit is contained in:
Stefan Imhoff
2026-01-29 16:45:07 +01:00
committed by Stefan Imhoff
parent eaa55ad8e1
commit d0460fe6f9
101 changed files with 198 additions and 74 deletions

View File

@@ -9,7 +9,6 @@ interface Props {
import { pickTwoRandomColors } from '../utils'; import { pickTwoRandomColors } from '../utils';
import Link from '../components/Link.astro'; import Link from '../components/Link.astro';
import Subsubheadline from './Subsubheadline.astro'; import Subsubheadline from './Subsubheadline.astro';
import ThemeBox from './ThemeBox.astro';
const { entries } = Astro.props; const { entries } = Astro.props;
--- ---
@@ -55,7 +54,7 @@ const { entries } = Astro.props;
</div> </div>
<div class="absolute z-20 flex h-full w-full flex-col items-center justify-center p-10 text-center leading-tight text-white"> <div class="absolute z-20 flex h-full w-full flex-col items-center justify-center p-10 text-center leading-tight text-white">
<Subsubheadline as="h2" class="!m-0 leading-tight"> <Subsubheadline as="h2" class="!m-0 leading-tight">
{data.title} {data.subtitle ? `${data.title}: ${data.subtitle}` : data.title}
</Subsubheadline> </Subsubheadline>
</div> </div>
</Link> </Link>

View File

@@ -0,0 +1,28 @@
---
import Title from './Title.astro';
import Headline from './Headline.astro';
export interface Props {
class?: string;
grid?: 'narrow' | 'wide' | 'fullsize';
innerGrid?: boolean;
subtitle?: string;
}
const { class: className, grid = 'narrow', innerGrid, subtitle } = Astro.props;
---
<div
class:list={[
'col-start-1 col-end-19 !mbe-0',
{
'col-start-2 col-end-3 md:col-start-3 md:col-end-17': grid === 'narrow',
'row-start-1': innerGrid,
'!col-start-2 !col-end-18 md:!col-start-3 md:!col-end-17': !innerGrid,
},
className,
]}
>
<Title class="!m-0 text-[clamp(2.25rem,_4.125vw,_4.125rem)]"><slot /></Title>
{subtitle && <Headline class="!m-0 text-shibui-400 dark:text-shibui-600">{subtitle}</Headline>}
</div>

View File

@@ -1,5 +1,6 @@
--- ---
title: "GTD: Getting Things Done" title: GTD
subtitle: Getting Things Done
slug: gtd slug: gtd
author: Stefan Imhoff author: Stefan Imhoff
date: 2007-11-24 date: 2007-11-24

View File

@@ -1,5 +1,6 @@
--- ---
title: Colors of Japan title: Colors of Japan
subtitle: Historic hues from kimono to samurai armor, packaged for modern design
slug: japanese-colors slug: japanese-colors
author: Stefan Imhoff author: Stefan Imhoff
date: 2007-12-08 date: 2007-12-08

View File

@@ -1,5 +1,6 @@
--- ---
title: Koi Design title: Koi Design
subtitle: Translating traditional tattoo art into UI
slug: koi-design slug: koi-design
author: Stefan Imhoff author: Stefan Imhoff
date: 2007-06-02 date: 2007-06-02
@@ -21,7 +22,10 @@ These works of art are painful (dozens of bamboo needles are [stung several time
One of the best living artists of the Irezumi is Horiyoshi III, whose works can be seen in many illustrated books: <ProductLink asin="9074822452" text="Tattoos from the Floating World: Ukiyo-e Motifs in Japanese Tattoo" /> and <ProductLink asin="0764312014" text="Bushido: Legacies of the Japanese Tattoo" />. One of the best living artists of the Irezumi is Horiyoshi III, whose works can be seen in many illustrated books: <ProductLink asin="9074822452" text="Tattoos from the Floating World: Ukiyo-e Motifs in Japanese Tattoo" /> and <ProductLink asin="0764312014" text="Bushido: Legacies of the Japanese Tattoo" />.
<Bookshelf> <Bookshelf>
<AmazonBook asin="9074822452" alt="Tattoos from the Floating World: Ukiyo-e Motifs in the Japanese Tattoo" /> <AmazonBook
asin="9074822452"
alt="Tattoos from the Floating World: Ukiyo-e Motifs in the Japanese Tattoo"
/>
<AmazonBook asin="0764312014" alt="Bushido" /> <AmazonBook asin="0764312014" alt="Bushido" />
</Bookshelf> </Bookshelf>

View File

@@ -1,5 +1,6 @@
--- ---
title: Git title: Git
subtitle: Your Git learning playlist
slug: git slug: git
author: Stefan Imhoff author: Stefan Imhoff
date: 2009-02-10 date: 2009-02-10

View File

@@ -1,5 +1,6 @@
--- ---
title: GitWeb Theme title: GitWeb Theme
subtitle: Because the default GitWeb theme hurt my eyes
slug: gitweb-theme slug: gitweb-theme
author: Stefan Imhoff author: Stefan Imhoff
date: 2009-02-19 date: 2009-02-19

View File

@@ -1,5 +1,6 @@
--- ---
title: HOME title: HOME
subtitle: A love letter to the planet
slug: home-documentary slug: home-documentary
author: Stefan Imhoff author: Stefan Imhoff
date: 2009-06-15 date: 2009-06-15

View File

@@ -1,5 +1,6 @@
--- ---
title: Rework title: Rework
subtitle: A sharp, illustrated manifesto for working smarter, not bigger
slug: rework slug: rework
author: Stefan Imhoff author: Stefan Imhoff
date: 2010-04-27 date: 2010-04-27

View File

@@ -1,5 +1,6 @@
--- ---
title: Vim title: Vim
subtitle: Make text bend to your will
slug: vim slug: vim
author: Stefan Imhoff author: Stefan Imhoff
date: 2010-10-29 date: 2010-10-29

View File

@@ -1,5 +1,6 @@
--- ---
title: Django Article title: Django Article
subtitle: Apparently they still print things and Im in one of them
slug: webstandards-magazine-django slug: webstandards-magazine-django
author: Stefan Imhoff author: Stefan Imhoff
date: 2010-09-21 date: 2010-09-21

View File

@@ -1,5 +1,6 @@
--- ---
title: Decodeunicode title: Decodeunicode
subtitle: All the worlds characters, one remarkable book
slug: decodeunicode slug: decodeunicode
author: Stefan Imhoff author: Stefan Imhoff
date: 2011-06-02 date: 2011-06-02

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 1: Intro and Setup" title: Introduction to Gulp.js 1
subtitle: Setting up Gulp.js and Jekyll
slug: gulp-tutorial-1-intro-setup slug: gulp-tutorial-1-intro-setup
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-18 date: 2014-10-18

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 10: Generating CSS Image Sprites" title: Introduction to Gulp.js 10
subtitle: Generating CSS Image Sprites
slug: gulp-tutorial-10-generating-sprites slug: gulp-tutorial-10-generating-sprites
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-27 date: 2014-10-27

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 11: Production Build, Server and Jekyll" title: Introduction to Gulp.js 11
subtitle: Production Build, Server, and Jekyll
slug: gulp-tutorial-11-production-build-server-and-jekyll slug: gulp-tutorial-11-production-build-server-and-jekyll
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-28 date: 2014-10-28

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 12: Optimize CSS, JavaScript, Images and HTML" title: Introduction to Gulp.js 12
subtitle: Optimize CSS, JavaScript, Images, and HTML
slug: gulp-tutorial-12-optimize-css-javascript-images-and-html slug: gulp-tutorial-12-optimize-css-javascript-images-and-html
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-29 date: 2014-10-29

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 13: Revisioning" title: Introduction to Gulp.js 13
subtitle: Revisioning
slug: gulp-tutorial-13-revisioning slug: gulp-tutorial-13-revisioning
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-30 date: 2014-10-30

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 14: Deploying the Website with Rsync" title: Introduction to Gulp.js 14
subtitle: Deploying the Website with Rsync
slug: gulp-tutorial-14-deploying-the-website slug: gulp-tutorial-14-deploying-the-website
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-31 date: 2014-10-31

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 15: Performance Improvements with WebP and Gzip" title: Introduction to Gulp.js 15
subtitle: Performance Improvements with WebP and Gzip
slug: gulp-tutorial-15-performance-improvements-webp-gzip slug: gulp-tutorial-15-performance-improvements-webp-gzip
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-12-21 date: 2014-12-21

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 16: PostCSS" title: Introduction to Gulp.js 16
subtitle: PostCSS
slug: gulp-tutorial-16-postcss slug: gulp-tutorial-16-postcss
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-12-30 date: 2014-12-30

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 2: Server with BrowserSync" title: Introduction to Gulp.js 2
subtitle: Setting up a Development Server with BrowserSync
slug: gulp-tutorial-2-development-server-browsersync-configuration slug: gulp-tutorial-2-development-server-browsersync-configuration
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-19 date: 2014-10-19

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 3: Build, Clean and Jekyll" title: Introduction to Gulp.js 3
subtitle: Build, Clean and Jekyll
slug: gulp-tutorial-3-build-clean-jekyll slug: gulp-tutorial-3-build-clean-jekyll
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-20 date: 2014-10-20

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 4: Creating CSS with Sass and Compass" title: Introduction to Gulp.js 4
subtitle: Creating CSS and Source Maps with Sass and Compass
slug: gulp-tutorial-4-css-generation-sass slug: gulp-tutorial-4-css-generation-sass
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-21 date: 2014-10-21

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 5: Bundling JavaScript with Browserify" title: Introduction to Gulp.js 5
subtitle: Bundling JavaScript with Browserify
slug: gulp-tutorial-5-javascripts-browserify slug: gulp-tutorial-5-javascripts-browserify
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-22 date: 2014-10-22

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 6: Images and Vector Fonts" title: Introduction to Gulp.js 6
subtitle: Images and Vector Fonts
slug: gulp-tutorial-6-images-vector-fonts slug: gulp-tutorial-6-images-vector-fonts
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-23 date: 2014-10-23

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 7: Base64 Encoded Images" title: Introduction to Gulp.js 7
subtitle: Base64 Encoded Images
slug: gulp-tutorial-7-base64 slug: gulp-tutorial-7-base64
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-24 date: 2014-10-24

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 8: Watch for Changes" title: Introduction to Gulp.js 8
subtitle: Watch for Changes
slug: gulp-tutorial-8-watch slug: gulp-tutorial-8-watch
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-25 date: 2014-10-25

View File

@@ -1,5 +1,6 @@
--- ---
title: "Introduction to Gulp.js 9: Syntax-Check of SCSS and JavaScript" title: Introduction to Gulp.js 9
subtitle: Syntax-Check of SCSS and JavaScript
slug: gulp-tutorial-9-linting-scss-and-javascript slug: gulp-tutorial-9-linting-scss-and-javascript
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-10-26 date: 2014-10-26

View File

@@ -1,5 +1,6 @@
--- ---
title: John Seymours Books on Self-Sufficiency title: John Seymours Books on Self-Sufficiency
subtitle: Self-sufficiency, beautifully explained
slug: john-seymour-books slug: john-seymour-books
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-08-03 date: 2014-08-03

View File

@@ -1,5 +1,6 @@
--- ---
title: Design of My New Logo title: Design of My New Logo
subtitle: From sketches to seal
slug: logo-design slug: logo-design
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-04-18 date: 2014-04-18

View File

@@ -1,5 +1,6 @@
--- ---
title: Typography of My Website title: Typography of My Website
subtitle: Type first, everything else follows
slug: website-typography slug: website-typography
author: Stefan Imhoff author: Stefan Imhoff
date: 2014-06-19 date: 2014-06-19

View File

@@ -1,5 +1,6 @@
--- ---
title: Calisthenics title: Calisthenics
subtitle: Strong with nothing but gravity
slug: calisthenics slug: calisthenics
author: Stefan Imhoff author: Stefan Imhoff
date: 2015-05-19 date: 2015-05-19

View File

@@ -1,5 +1,6 @@
--- ---
title: Human title: Human
subtitle: The world, looking back at itself
slug: human-documentary slug: human-documentary
author: Stefan Imhoff author: Stefan Imhoff
date: 2015-09-29 date: 2015-09-29

View File

@@ -1,5 +1,6 @@
--- ---
title: Motivational Video title: Motivational Video
subtitle: Every quote, finally sourced
slug: motivational-video slug: motivational-video
author: Stefan Imhoff author: Stefan Imhoff
date: 2015-08-14 date: 2015-08-14

View File

@@ -1,5 +1,6 @@
--- ---
title: Underwear title: Underwear
subtitle: A warm, beautifully crafted series about craft, character, and quiet excellence
slug: japanese-netflix-tv-show-underwear slug: japanese-netflix-tv-show-underwear
author: Stefan Imhoff author: Stefan Imhoff
date: 2016-02-12 date: 2016-02-12

View File

@@ -1,5 +1,6 @@
--- ---
title: Self-Defense in the Age of Attention title: Self-Defense in the Age of Attention
subtitle: A simple playbook to protect your time, attention, and mental bandwidth
slug: attention slug: attention
author: Stefan Imhoff author: Stefan Imhoff
date: 2017-11-03T08:00:00+01:00 date: 2017-11-03T08:00:00+01:00

View File

@@ -1,5 +1,6 @@
--- ---
title: I Wrote a Book in GitBook title: I Wrote a Book in GitBook
subtitle: 18 years of notes, now a book
slug: gitbook slug: gitbook
author: Stefan Imhoff author: Stefan Imhoff
date: 2017-06-27 date: 2017-06-27

View File

@@ -1,5 +1,6 @@
--- ---
title: Minimalism title: Minimalism
subtitle: Less, but better—and on purpose
slug: minimalism slug: minimalism
author: Stefan Imhoff author: Stefan Imhoff
date: 2017-06-07 date: 2017-06-07

View File

@@ -1,5 +1,6 @@
--- ---
title: Morning Routine title: Morning Routine
subtitle: Win the morning, win the day
slug: morning-routine slug: morning-routine
date: 2018-09-08 date: 2018-09-08
updated: 2025-02-10 updated: 2025-02-10

View File

@@ -1,5 +1,6 @@
--- ---
title: How to Store Information title: How to Store Information
subtitle: Keep what counts, where youll find it
slug: storing-information slug: storing-information
date: 2018-10-03 date: 2018-10-03
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: 101 Things You Can Do While Being on Lockdown title: 101 Things You Can Do While Being on Lockdown
subtitle: Learn, create, move, and explore—without leaving your living room
slug: 101-things-you-can-do slug: 101-things-you-can-do
date: 2020-03-28 date: 2020-03-28
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: Apps, Tools & Services title: Apps, Tools & Services
subtitle: My everyday apps, all in one place
slug: apps-tools-services slug: apps-tools-services
date: 2020-04-18T10:00:00+02:00 date: 2020-04-18T10:00:00+02:00
updated: 2025-01-06 updated: 2025-01-06

View File

@@ -1,5 +1,6 @@
--- ---
title: Best of 2020 title: Best of 2020
subtitle: The years most compelling rabbit holes
slug: best-of-2020 slug: best-of-2020
date: 2020-12-22 date: 2020-12-22
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: Everyday Carry title: Everyday Carry
subtitle: Whats in my pockets (and why)
slug: everyday-carry slug: everyday-carry
date: 2020-03-14 date: 2020-03-14
updated: 2023-06-09 updated: 2023-06-09

View File

@@ -1,5 +1,6 @@
--- ---
title: "New Website 2020: Design" title: New Website 2020
subtitle: Designing a personal site with constraints I actually wanted
date: 2020-07-21 date: 2020-07-21
slug: new-website-2020-design slug: new-website-2020-design
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "New Website 2020: Development" title: New Website 2020
subtitle: How I engineered the stack, testing, theming, MDX, and deployment
slug: new-website-2020-development slug: new-website-2020-development
date: 2020-07-28 date: 2020-07-28
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "New Website 2020: Inspiration" title: New Website 2020
subtitle: How Japanese aesthetics shaped my site
slug: new-website-2020-inspiration slug: new-website-2020-inspiration
date: 2020-07-14 date: 2020-07-14
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: New Website 2020 title: New Website 2020
subtitle: After 250 hours, a complete rebuild—design, code, and content
slug: new-website-2020 slug: new-website-2020
date: 2020-07-07 date: 2020-07-07
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: Tools I Use For Note-Taking title: Tools I Use For Note-Taking
subtitle: Notes built for connection, not clutter
slug: tools-i-use-for-note-taking slug: tools-i-use-for-note-taking
date: 2020-09-03 date: 2020-09-03
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: Zettelkasten Note-Taking Method With DEVONthink title: Zettelkasten Note-Taking Method With DEVONthink
subtitle: Build a Zettelkasten that lasts
slug: zettelkasten-note-taking-devonthink slug: zettelkasten-note-taking-devonthink
date: 2020-05-18 date: 2020-05-18
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "DEVONthink and Obsidian: The Perfect Pair of Tools for Note-Taking" title: DEVONthink and Obsidian
subtitle: The Perfect Pair of Tools for Note-Taking
slug: devonthink-obsidian-for-note-taking slug: devonthink-obsidian-for-note-taking
date: 2021-07-23 date: 2021-07-23
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: How to Prepare for the Worst Case title: How to Prepare for the Worst Case
subtitle: Plan now, panic less later
slug: how-to-prepare-for-the-worst-case slug: how-to-prepare-for-the-worst-case
date: 2021-11-19 date: 2021-11-19
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: If— Guidance for a Virtuous, Stoic Life title: If— Guidance for a Virtuous, Stoic Life
subtitle: A Modern Interpretation of Rudyard Kiplings Great Poem
slug: interpretation-if slug: interpretation-if
date: 2021-12-13 date: 2021-12-13
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "The Gods of the Copybook Headings: A Warning Against Loss of Virtue, Morality, and Reason" title: The Gods of the Copybook Headings
subtitle: A Warning Against Loss of Virtue, Morality, and Reason
slug: interpretation-the-gods-of-the-copybook-headings slug: interpretation-the-gods-of-the-copybook-headings
date: 2021-06-12 date: 2021-06-12
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: Learning Poems title: Learning Poems
subtitle: Verse you can carry anywhere
slug: learning-poems slug: learning-poems
date: 2021-08-23 date: 2021-08-23
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: New Website 2021 title: New Website 2021
subtitle: Faster site, simpler stack, happier writer
slug: new-website-2021 slug: new-website-2021
date: 2021-04-24 date: 2021-04-24
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: How I Process Information Into Notes title: How I Process Information Into Notes
subtitle: Turn what you read into what you remember
slug: processing-information-into-notes slug: processing-information-into-notes
date: 2021-05-13 date: 2021-05-13
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "The Decentralized Web: Why Do We Need It?" title: The Decentralized Web
subtitle: Why Do We Need It?
slug: the-decentralized-web-1-why-do-we-need-it slug: the-decentralized-web-1-why-do-we-need-it
date: 2021-10-25 date: 2021-10-25
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "The Decentralized Web: The Wild West Web" title: The Decentralized Web
subtitle: The Wild West Web
slug: the-decentralized-web-2-the-wild-west-web slug: the-decentralized-web-2-the-wild-west-web
date: 2021-11-01 date: 2021-11-01
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "The Decentralized Web: Develop and Publish a Website" title: The Decentralized Web
subtitle: Develop and Publish a Website
slug: the-decentralized-web-3-develop-and-publish-a-website slug: the-decentralized-web-3-develop-and-publish-a-website
date: 2021-11-08 date: 2021-11-08
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: The Old Man on the Bench title: The Old Man on the Bench
subtitle: A quiet friendship found on a forest path
slug: the-old-man-on-the-bench slug: the-old-man-on-the-bench
date: 2021-08-31 date: 2021-08-31
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: Using Readwise with Obsidian for Note-Talking title: Using Readwise with Obsidian for Note-Talking
subtitle: Make your highlights work for you
slug: using-readwise-with-obsidian-for-note-talking slug: using-readwise-with-obsidian-for-note-talking
date: 2021-09-14 date: 2021-09-14
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "Setting Up a Web Developer Work Environment: Terminal, Zsh, and TMUX" title: Setting Up a Web Developer Work Environment
subtitle: Terminal, Zsh, and TMUX
slug: web-developer-work-environment-1 slug: web-developer-work-environment-1
date: 2021-12-20 date: 2021-12-20
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "Setting Up a Web Developer Work Environment: Neovim" title: Setting Up a Web Developer Work Environment
subtitle: Neovim
slug: web-developer-work-environment-2 slug: web-developer-work-environment-2
date: 2021-12-23 date: 2021-12-23
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "The Advent of AI: Introduction" title: The Advent of AI
subtitle: Introduction
slug: artificial-intelligence-1-introduction slug: artificial-intelligence-1-introduction
date: 2022-12-14 date: 2022-12-14
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "The Advent of AI: Text Generation" title: The Advent of AI
subtitle: Text Generation
slug: artificial-intelligence-2-text-generation slug: artificial-intelligence-2-text-generation
date: 2022-12-17 date: 2022-12-17
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "The Advent of AI: Text-to-Image Generation" title: The Advent of AI
subtitle: Text-to-Image Generation
slug: artificial-intelligence-3-text-to-image-generation slug: artificial-intelligence-3-text-to-image-generation
date: 2022-12-21 date: 2022-12-21
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "The Advent of AI: Getting Started with Text-to-Image Generation" title: The Advent of AI
subtitle: Getting Started with Text-to-Image Generation
slug: artificial-intelligence-4-getting-started slug: artificial-intelligence-4-getting-started
date: 2022-12-24 date: 2022-12-24
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "Civil War for Truth: Introduction" title: Civil War for Truth
subtitle: Introduction
slug: civil-war-truth-1-introduction slug: civil-war-truth-1-introduction
author: Stefan Imhoff author: Stefan Imhoff
date: 2022-06-06 date: 2022-06-06

View File

@@ -1,5 +1,6 @@
--- ---
title: "Civil War for Truth: Corporatism and Technocracy" title: Civil War for Truth
subtitle: Corporatism and Technocracy
slug: civil-war-truth-2-corporatism-technocracy slug: civil-war-truth-2-corporatism-technocracy
date: 2022-06-13 date: 2022-06-13
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "Civil War for Truth: Political Division" title: Civil War for Truth
subtitle: Political Division
slug: civil-war-truth-3-political-division slug: civil-war-truth-3-political-division
date: 2022-06-20 date: 2022-06-20
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "Civil War for Truth: Media and Journalism" title: Civil War for Truth
subtitle: Media and Journalism
slug: civil-war-truth-4-media-journalism slug: civil-war-truth-4-media-journalism
date: 2022-06-27 date: 2022-06-27
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "Civil War for Truth: Academia" title: Civil War for Truth
subtitle: Academia
slug: civil-war-truth-5-academia slug: civil-war-truth-5-academia
date: 2022-07-04 date: 2022-07-04
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "Civil War for Truth: Science" title: Civil War for Truth
subtitle: Science
slug: civil-war-truth-6-science slug: civil-war-truth-6-science
date: 2022-07-11 date: 2022-07-11
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "Civil War for Truth: Conclusion" title: Civil War for Truth
subtitle: Conclusion
slug: civil-war-truth-7-conclusion slug: civil-war-truth-7-conclusion
date: 2022-07-18 date: 2022-07-18
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: Dreaming of the Old Normal title: Dreaming of the Old Normal
subtitle: A portrait of normalcy, drawn from memory
slug: dreaming-of-the-old-normal slug: dreaming-of-the-old-normal
date: 2022-01-06 date: 2022-01-06
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: I Counted Everything I Own title: I Counted Everything I Own
subtitle: Minimalism, measured
slug: i-counted-everything-i-own slug: i-counted-everything-i-own
date: 2022-01-25 date: 2022-01-25
updated: 2023-06-07 updated: 2023-06-07

View File

@@ -1,6 +1,6 @@
--- ---
title: Manage References for Note-Taking title: Manage References for Note-Taking
slug: manage-references-for-note-taking subtitle: A sane system for finding and citing what you read
date: 2022-04-22 date: 2022-04-22
updated: 2022-04-30 updated: 2022-04-30
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: The Return of the News Feed title: The Return of the News Feed
subtitle: The case for RSS in the age of algorithmic feeds
slug: rss-news-feed slug: rss-news-feed
date: 2022-11-05 date: 2022-11-05
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: iA Writer Template Nanzan title: iA Writer Template
subtitle: Nanzan
slug: template-ia-writer-nanzan slug: template-ia-writer-nanzan
author: Stefan Imhoff author: Stefan Imhoff
date: 2022-03-17 date: 2022-03-17

View File

@@ -1,5 +1,6 @@
--- ---
title: iA Writer Template Shibui title: iA Writer Template
subtitle: Shibui
slug: template-ia-writer-shibui slug: template-ia-writer-shibui
author: Stefan Imhoff author: Stefan Imhoff
date: 2022-03-18 date: 2022-03-18

View File

@@ -1,5 +1,6 @@
--- ---
title: Tools for Better Writing title: Tools for Better Writing
subtitle: The essential toolkit I rely on for clearer, cleaner, more effective writing
slug: tools-for-better-writing slug: tools-for-better-writing
date: 2022-09-09 date: 2022-09-09
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "Shokunin: The Spirit of an Artisan" title: Shokunin
subtitle: The Spirit of an Artisan
slug: shokunin slug: shokunin
date: 2023-03-08 date: 2023-03-08
updated: 2024-02-10 updated: 2024-02-10

View File

@@ -1,5 +1,6 @@
--- ---
title: "Discovering Thomas Sowell: The Voice That Challenges Conventional Thinking" title: Discovering Thomas Sowell
subtitle: The Voice That Challenges Conventional Thinking
slug: thomas-sowell slug: thomas-sowell
date: 2023-10-29 date: 2023-10-29
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,6 +1,7 @@
--- ---
title: Website Relaunch With Astro, Tailwind CSS, and Preact title: Website Relaunch 2023
slug: website-relaunch-astro-preact-tailwind subtitle: How I built my personal website using Astro, Tailwind CSS, and Preact
slug: website-relaunch-2023
date: 2023-06-16 date: 2023-06-16
author: Stefan Imhoff author: Stefan Imhoff
description: How I built my personal website using Astro, Tailwind CSS, and AI improving the information architecture, content, and design. description: How I built my personal website using Astro, Tailwind CSS, and AI improving the information architecture, content, and design.

View File

@@ -1,5 +1,6 @@
--- ---
title: "Beyond the Bookshelf: Rediscovering the Magic of Reading in a Digital Age" title: Beyond the Bookshelf
subtitle: Rediscovering the Magic of Reading in a Digital Age
slug: beyond-the-bookshelf-1 slug: beyond-the-bookshelf-1
date: 2024-12-20 date: 2024-12-20
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "Beyond the Bookshelf: My Reading Journey of 2024" title: Beyond the Bookshelf
subtitle: My Reading Journey of 2024
slug: beyond-the-bookshelf-2-books-2024 slug: beyond-the-bookshelf-2-books-2024
date: 2024-12-27 date: 2024-12-27
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "Raycast: The Must-Have Productivity App for macOS" title: Raycast
subtitle: The Must-Have Productivity App for macOS
slug: raycast slug: raycast
date: 2024-01-19 date: 2024-01-19
updated: 2025-07-08 updated: 2025-07-08

View File

@@ -1,5 +1,6 @@
--- ---
title: "15 Years at XING: Reflections and a Farewell" title: 15 Years at XING
subtitle: Reflections and a Farewell
slug: 15-years-xing slug: 15-years-xing
date: 2025-12-15 date: 2025-12-15
updated: 2025-12-16 updated: 2025-12-16

View File

@@ -1,5 +1,6 @@
--- ---
title: "From Typewriter to Split Keyboard: How I Fell in Love with Typing" title: From Typewriter to Split Keyboard
subtitle: How I Fell in Love with Typing
slug: from-typewriter-to-split-keyboard slug: from-typewriter-to-split-keyboard
date: 2025-08-04 date: 2025-08-04
updated: 2025-12-19 updated: 2025-12-19

View File

@@ -1,5 +1,6 @@
--- ---
title: Fuck you, Sonos title: Fuck you, Sonos
subtitle: Journey of Disappointment and Search for New Audio Solutions
slug: fuck-you-sonos slug: fuck-you-sonos
date: 2025-04-30 date: 2025-04-30
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "The Modern Atlas Shrugged: The Signs of Decline" title: The Modern Atlas Shrugged
subtitle: The Signs of Decline
slug: modern-atlas-shrugged-1-signs-of-decline slug: modern-atlas-shrugged-1-signs-of-decline
date: 2025-05-19 date: 2025-05-19
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "The Modern Atlas Shrugged: The Looters in Action" title: The Modern Atlas Shrugged
subtitle: The Looters in Action
slug: modern-atlas-shrugged-2-looters-in-action slug: modern-atlas-shrugged-2-looters-in-action
date: 2025-05-26 date: 2025-05-26
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "The Modern Atlas Shrugged: The Strike" title: The Modern Atlas Shrugged
subtitle: The Strike
slug: modern-atlas-shrugged-3-strike slug: modern-atlas-shrugged-3-strike
date: 2025-06-02 date: 2025-06-02
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: Working with Obsidian, Readwise, and AI to Create Notes title: My 2025 Note-Taking System
subtitle: Obsidian, Readwise, and AI
slug: note-taking-obsidian-readwise-ai slug: note-taking-obsidian-readwise-ai
date: 2025-02-16 date: 2025-02-16
author: Stefan Imhoff author: Stefan Imhoff

View File

@@ -1,5 +1,6 @@
--- ---
title: "OK, Boomer: A Post-War Psychoanalysis" title: OK, Boomer
subtitle: A Post-War Psychoanalysis
slug: ok-boomer slug: ok-boomer
date: 2025-11-28 date: 2025-11-28
updated: 2025-12-19 updated: 2025-12-19

View File

@@ -13,7 +13,7 @@ import GridLayout from '../layouts/GridLayout.astro';
import Image from '../components/Image.astro'; import Image from '../components/Image.astro';
import ListItem from '../components/ListItem.astro'; import ListItem from '../components/ListItem.astro';
import OrderedList from '../components/OrderedList.astro'; import OrderedList from '../components/OrderedList.astro';
import PageTitle from '../components/PageTitle.astro'; import JournalTitle from '../components/JournalTitle.astro';
import Pagination from '../components/Pagination.astro'; import Pagination from '../components/Pagination.astro';
import Tag from '../components/Tag.astro'; import Tag from '../components/Tag.astro';
import TextLink from '../components/TextLink.astro'; import TextLink from '../components/TextLink.astro';
@@ -51,6 +51,7 @@ const seriesEntries: Journal[] = await getCollection('journal', ({ data }: Journ
seriesEntries.sort(sortByDate).reverse(); seriesEntries.sort(sortByDate).reverse();
const title = entry.data.title; const title = entry.data.title;
const subtitle = entry.data.subtitle;
const description = entry.data.description; const description = entry.data.description;
const schema = JSON.stringify({ const schema = JSON.stringify({
@@ -84,16 +85,16 @@ const schema = JSON.stringify({
innerGrid innerGrid
nofollow={entry.data.nofollow} nofollow={entry.data.nofollow}
noindex={entry.data.noindex} noindex={entry.data.noindex}
title={title} title={subtitle ? `${title}: ${subtitle}` : title}
> >
<PageTitle slot="title" class="!text-6"> <JournalTitle subtitle={entry.data.subtitle}>
{entry.data.title} {entry.data.title}
</PageTitle> </JournalTitle>
{ {
entry.data.cover && ( entry.data.cover && (
<Image <Image
alt={entry.data.title} alt={entry.data.title}
class="col-span-full aspect-video h-auto !mbe-0 xl:col-start-1 xl:col-end-14 3xl:col-end-13 print:hidden [&_img]:!w-full [&_img]:!max-w-none [&_img]:rounded-none xl:[&_img]:rounded-2 [&_picture]:!w-full [&_picture]:!max-w-none" class="col-span-full aspect-video h-auto !mbe-0 md:col-start-3 md:col-end-17 xl:col-end-14 3xl:col-end-13 print:hidden [&_img]:!w-full [&_img]:!max-w-none [&_img]:rounded-none md:[&_img]:rounded-2 [&_picture]:!w-full [&_picture]:!max-w-none"
loading="eager" loading="eager"
src={entry.data.cover} src={entry.data.cover}
fullHeight fullHeight

View File

@@ -37,7 +37,7 @@ rssPosts.sort(sortMarkdownByDate);
{site.title} {site.title}
</PageTitle> </PageTitle>
<div <div
class="col-start-1 col-end-19 md:col-start-1 md:col-end-11 xl:col-end-11 [&_div]:!border-x-0 [&_div]:!mbe-0 [&_div]:md:!border-s-0" class="col-start-1 col-end-19 md:col-start-3 md:col-end-10 xl:col-end-12 [&_div]:!border-x-0 [&_div]:!mbe-0 [&_div]:md:!border-s-0"
> >
<Image <Image
alt="Bonsai" alt="Bonsai"
@@ -50,7 +50,7 @@ rssPosts.sort(sortMarkdownByDate);
</div> </div>
<article <article
class="col-start-2 col-end-18 row-start-3 self-center md:col-start-12 md:row-start-2 xl:col-start-13 xl:col-end-17" class="col-start-2 col-end-18 row-start-3 self-center md:col-start-11 md:col-end-17 md:row-start-2 xl:col-start-13 xl:col-end-17"
> >
<Headline>About Me</Headline> <Headline>About Me</Headline>
<AboutMe components={mapping} /> <AboutMe components={mapping} />

View File

@@ -26,6 +26,7 @@ export async function GET(context) {
}, },
items: [ items: [
...journal.map((post) => { ...journal.map((post) => {
const { title, subtitle, date, description, cover } = post.data;
// Filter out import statements from content // Filter out import statements from content
const contentWithoutImports = post.body const contentWithoutImports = post.body
.split('\n') .split('\n')
@@ -52,26 +53,24 @@ export async function GET(context) {
}); });
// Logic to determine image URL // Logic to determine image URL
const isWebp = const isWebp = cover.startsWith('/assets/images/cover/') && cover.endsWith('.webp');
post.data.cover.startsWith('/assets/images/cover/') &&
post.data.cover.endsWith('.webp');
const imgUrl = isWebp const imgUrl = isWebp
? post.data.cover ? cover
.replace('/assets/images/cover/', '/assets/images/thumbnail/') .replace('/assets/images/cover/', '/assets/images/thumbnail/')
.replace(/\.webp$/, '.jpg') .replace(/\.webp$/, '.jpg')
: '/assets/images/thumbnail/bonsai.jpg'; : '/assets/images/thumbnail/bonsai.jpg';
return { return {
title: post.data.title, title: subtitle ? `${title}: ${subtitle}` : title,
pubDate: post.data.date, pubDate: date,
description: post.data.description, description: description,
link: `/${post.slug}/`, link: `/${post.slug}/`,
content: sanitizedContent, content: sanitizedContent,
enclosure: { enclosure: {
url: url:
site.url + site.url +
(isWebp (isWebp
? post.data.cover ? cover
.replace('/assets/images/cover/', '/assets/images/og/') .replace('/assets/images/cover/', '/assets/images/og/')
.replace(/\.webp$/, '.jpg') .replace(/\.webp$/, '.jpg')
: '/assets/images/og/bonsai.jpg'), : '/assets/images/og/bonsai.jpg'),

View File

@@ -3,6 +3,7 @@ import { defineCollection, z } from 'astro:content';
export const journal = defineCollection({ export const journal = defineCollection({
schema: z.object({ schema: z.object({
title: z.string(), title: z.string(),
subtitle: z.string().optional(),
draft: z.boolean().optional().default(false), draft: z.boolean().optional().default(false),
featured: z.boolean().optional(), featured: z.boolean().optional(),
author: z.string().default('Stefan Imhoff'), author: z.string().default('Stefan Imhoff'),

Some files were not shown because too many files have changed in this diff Show More