mirror of
https://github.com/kogakure/website-astro-stefanimhoff.de.git
synced 2026-02-03 20:15:27 +00:00
feat: add subtitle and change photo alignment
This commit is contained in:
committed by
Stefan Imhoff
parent
eaa55ad8e1
commit
d0460fe6f9
@@ -9,7 +9,6 @@ interface Props {
|
||||
import { pickTwoRandomColors } from '../utils';
|
||||
import Link from '../components/Link.astro';
|
||||
import Subsubheadline from './Subsubheadline.astro';
|
||||
import ThemeBox from './ThemeBox.astro';
|
||||
|
||||
const { entries } = Astro.props;
|
||||
---
|
||||
@@ -55,7 +54,7 @@ const { entries } = Astro.props;
|
||||
</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">
|
||||
<Subsubheadline as="h2" class="!m-0 leading-tight">
|
||||
{data.title}
|
||||
{data.subtitle ? `${data.title}: ${data.subtitle}` : data.title}
|
||||
</Subsubheadline>
|
||||
</div>
|
||||
</Link>
|
||||
|
||||
28
src/components/JournalTitle.astro
Normal file
28
src/components/JournalTitle.astro
Normal 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>
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "GTD: Getting Things Done"
|
||||
title: GTD
|
||||
subtitle: Getting Things Done
|
||||
slug: gtd
|
||||
author: Stefan Imhoff
|
||||
date: 2007-11-24
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Colors of Japan
|
||||
subtitle: Historic hues from kimono to samurai armor, packaged for modern design
|
||||
slug: japanese-colors
|
||||
author: Stefan Imhoff
|
||||
date: 2007-12-08
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Koi Design
|
||||
subtitle: Translating traditional tattoo art into UI
|
||||
slug: koi-design
|
||||
author: Stefan Imhoff
|
||||
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 Motif’s in Japanese Tattoo" /> and <ProductLink asin="0764312014" text="Bushido: Legacies of the Japanese Tattoo" />.
|
||||
|
||||
<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" />
|
||||
</Bookshelf>
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Git
|
||||
subtitle: Your Git learning playlist
|
||||
slug: git
|
||||
author: Stefan Imhoff
|
||||
date: 2009-02-10
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: GitWeb Theme
|
||||
subtitle: Because the default GitWeb theme hurt my eyes
|
||||
slug: gitweb-theme
|
||||
author: Stefan Imhoff
|
||||
date: 2009-02-19
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: HOME
|
||||
subtitle: A love letter to the planet
|
||||
slug: home-documentary
|
||||
author: Stefan Imhoff
|
||||
date: 2009-06-15
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Rework
|
||||
subtitle: A sharp, illustrated manifesto for working smarter, not bigger
|
||||
slug: rework
|
||||
author: Stefan Imhoff
|
||||
date: 2010-04-27
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Vim
|
||||
subtitle: Make text bend to your will
|
||||
slug: vim
|
||||
author: Stefan Imhoff
|
||||
date: 2010-10-29
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Django Article
|
||||
subtitle: Apparently they still print things and I’m in one of them
|
||||
slug: webstandards-magazine-django
|
||||
author: Stefan Imhoff
|
||||
date: 2010-09-21
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Decodeunicode
|
||||
subtitle: All the world’s characters, one remarkable book
|
||||
slug: decodeunicode
|
||||
author: Stefan Imhoff
|
||||
date: 2011-06-02
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-18
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-27
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-28
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-29
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "Introduction to Gulp.js 13: Revisioning"
|
||||
title: Introduction to Gulp.js 13
|
||||
subtitle: Revisioning
|
||||
slug: gulp-tutorial-13-revisioning
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-30
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-31
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-12-21
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "Introduction to Gulp.js 16: PostCSS"
|
||||
title: Introduction to Gulp.js 16
|
||||
subtitle: PostCSS
|
||||
slug: gulp-tutorial-16-postcss
|
||||
author: Stefan Imhoff
|
||||
date: 2014-12-30
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-19
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-20
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-21
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-22
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-23
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-24
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-25
|
||||
|
||||
@@ -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
|
||||
author: Stefan Imhoff
|
||||
date: 2014-10-26
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: John Seymour’s Books on Self-Sufficiency
|
||||
subtitle: Self-sufficiency, beautifully explained
|
||||
slug: john-seymour-books
|
||||
author: Stefan Imhoff
|
||||
date: 2014-08-03
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Design of My New Logo
|
||||
subtitle: From sketches to seal
|
||||
slug: logo-design
|
||||
author: Stefan Imhoff
|
||||
date: 2014-04-18
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Typography of My Website
|
||||
subtitle: Type first, everything else follows
|
||||
slug: website-typography
|
||||
author: Stefan Imhoff
|
||||
date: 2014-06-19
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Calisthenics
|
||||
subtitle: Strong with nothing but gravity
|
||||
slug: calisthenics
|
||||
author: Stefan Imhoff
|
||||
date: 2015-05-19
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Human
|
||||
subtitle: The world, looking back at itself
|
||||
slug: human-documentary
|
||||
author: Stefan Imhoff
|
||||
date: 2015-09-29
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Motivational Video
|
||||
subtitle: Every quote, finally sourced
|
||||
slug: motivational-video
|
||||
author: Stefan Imhoff
|
||||
date: 2015-08-14
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Underwear
|
||||
subtitle: A warm, beautifully crafted series about craft, character, and quiet excellence
|
||||
slug: japanese-netflix-tv-show-underwear
|
||||
author: Stefan Imhoff
|
||||
date: 2016-02-12
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Self-Defense in the Age of Attention
|
||||
subtitle: A simple playbook to protect your time, attention, and mental bandwidth
|
||||
slug: attention
|
||||
author: Stefan Imhoff
|
||||
date: 2017-11-03T08:00:00+01:00
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: I Wrote a Book in GitBook
|
||||
subtitle: 18 years of notes, now a book
|
||||
slug: gitbook
|
||||
author: Stefan Imhoff
|
||||
date: 2017-06-27
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Minimalism
|
||||
subtitle: Less, but better—and on purpose
|
||||
slug: minimalism
|
||||
author: Stefan Imhoff
|
||||
date: 2017-06-07
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Morning Routine
|
||||
subtitle: Win the morning, win the day
|
||||
slug: morning-routine
|
||||
date: 2018-09-08
|
||||
updated: 2025-02-10
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: How to Store Information
|
||||
subtitle: Keep what counts, where you’ll find it
|
||||
slug: storing-information
|
||||
date: 2018-10-03
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
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
|
||||
date: 2020-03-28
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Apps, Tools & Services
|
||||
subtitle: My everyday apps, all in one place
|
||||
slug: apps-tools-services
|
||||
date: 2020-04-18T10:00:00+02:00
|
||||
updated: 2025-01-06
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Best of 2020
|
||||
subtitle: The year’s most compelling rabbit holes
|
||||
slug: best-of-2020
|
||||
date: 2020-12-22
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Everyday Carry
|
||||
subtitle: What’s in my pockets (and why)
|
||||
slug: everyday-carry
|
||||
date: 2020-03-14
|
||||
updated: 2023-06-09
|
||||
|
||||
@@ -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
|
||||
slug: new-website-2020-design
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2020-07-28
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2020-07-14
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: New Website 2020
|
||||
subtitle: After 250 hours, a complete rebuild—design, code, and content
|
||||
slug: new-website-2020
|
||||
date: 2020-07-07
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Tools I Use For Note-Taking
|
||||
subtitle: Notes built for connection, not clutter
|
||||
slug: tools-i-use-for-note-taking
|
||||
date: 2020-09-03
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Zettelkasten Note-Taking Method With DEVONthink
|
||||
subtitle: Build a Zettelkasten that lasts
|
||||
slug: zettelkasten-note-taking-devonthink
|
||||
date: 2020-05-18
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2021-07-23
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: How to Prepare for the Worst Case
|
||||
subtitle: Plan now, panic less later
|
||||
slug: how-to-prepare-for-the-worst-case
|
||||
date: 2021-11-19
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: If— Guidance for a Virtuous, Stoic Life
|
||||
subtitle: A Modern Interpretation of Rudyard Kipling’s Great Poem
|
||||
slug: interpretation-if
|
||||
date: 2021-12-13
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2021-06-12
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Learning Poems
|
||||
subtitle: Verse you can carry anywhere
|
||||
slug: learning-poems
|
||||
date: 2021-08-23
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: New Website 2021
|
||||
subtitle: Faster site, simpler stack, happier writer
|
||||
slug: new-website-2021
|
||||
date: 2021-04-24
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: How I Process Information Into Notes
|
||||
subtitle: Turn what you read into what you remember
|
||||
slug: processing-information-into-notes
|
||||
date: 2021-05-13
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2021-10-25
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2021-11-01
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2021-11-08
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: The Old Man on the Bench
|
||||
subtitle: A quiet friendship found on a forest path
|
||||
slug: the-old-man-on-the-bench
|
||||
date: 2021-08-31
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Using Readwise with Obsidian for Note-Talking
|
||||
subtitle: Make your highlights work for you
|
||||
slug: using-readwise-with-obsidian-for-note-talking
|
||||
date: 2021-09-14
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2021-12-20
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2021-12-23
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "The Advent of AI: Introduction"
|
||||
title: The Advent of AI
|
||||
subtitle: Introduction
|
||||
slug: artificial-intelligence-1-introduction
|
||||
date: 2022-12-14
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2022-12-17
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2022-12-21
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2022-12-24
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "Civil War for Truth: Introduction"
|
||||
title: Civil War for Truth
|
||||
subtitle: Introduction
|
||||
slug: civil-war-truth-1-introduction
|
||||
author: Stefan Imhoff
|
||||
date: 2022-06-06
|
||||
|
||||
@@ -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
|
||||
date: 2022-06-13
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2022-06-20
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2022-06-27
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "Civil War for Truth: Academia"
|
||||
title: Civil War for Truth
|
||||
subtitle: Academia
|
||||
slug: civil-war-truth-5-academia
|
||||
date: 2022-07-04
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "Civil War for Truth: Science"
|
||||
title: Civil War for Truth
|
||||
subtitle: Science
|
||||
slug: civil-war-truth-6-science
|
||||
date: 2022-07-11
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "Civil War for Truth: Conclusion"
|
||||
title: Civil War for Truth
|
||||
subtitle: Conclusion
|
||||
slug: civil-war-truth-7-conclusion
|
||||
date: 2022-07-18
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Dreaming of the Old Normal
|
||||
subtitle: A portrait of normalcy, drawn from memory
|
||||
slug: dreaming-of-the-old-normal
|
||||
date: 2022-01-06
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: I Counted Everything I Own
|
||||
subtitle: Minimalism, measured
|
||||
slug: i-counted-everything-i-own
|
||||
date: 2022-01-25
|
||||
updated: 2023-06-07
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
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
|
||||
updated: 2022-04-30
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: The Return of the News Feed
|
||||
subtitle: The case for RSS in the age of algorithmic feeds
|
||||
slug: rss-news-feed
|
||||
date: 2022-11-05
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: iA Writer Template Nanzan
|
||||
title: iA Writer Template
|
||||
subtitle: Nanzan
|
||||
slug: template-ia-writer-nanzan
|
||||
author: Stefan Imhoff
|
||||
date: 2022-03-17
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: iA Writer Template Shibui
|
||||
title: iA Writer Template
|
||||
subtitle: Shibui
|
||||
slug: template-ia-writer-shibui
|
||||
author: Stefan Imhoff
|
||||
date: 2022-03-18
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Tools for Better Writing
|
||||
subtitle: The essential toolkit I rely on for clearer, cleaner, more effective writing
|
||||
slug: tools-for-better-writing
|
||||
date: 2022-09-09
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "Shokunin: The Spirit of an Artisan"
|
||||
title: Shokunin
|
||||
subtitle: The Spirit of an Artisan
|
||||
slug: shokunin
|
||||
date: 2023-03-08
|
||||
updated: 2024-02-10
|
||||
|
||||
@@ -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
|
||||
date: 2023-10-29
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
---
|
||||
title: Website Relaunch With Astro, Tailwind CSS, and Preact
|
||||
slug: website-relaunch-astro-preact-tailwind
|
||||
title: Website Relaunch 2023
|
||||
subtitle: How I built my personal website using Astro, Tailwind CSS, and Preact
|
||||
slug: website-relaunch-2023
|
||||
date: 2023-06-16
|
||||
author: Stefan Imhoff
|
||||
description: How I built my personal website using Astro, Tailwind CSS, and AI improving the information architecture, content, and design.
|
||||
@@ -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
|
||||
date: 2024-12-20
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2024-12-27
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2024-01-19
|
||||
updated: 2025-07-08
|
||||
|
||||
@@ -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
|
||||
date: 2025-12-15
|
||||
updated: 2025-12-16
|
||||
|
||||
@@ -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
|
||||
date: 2025-08-04
|
||||
updated: 2025-12-19
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Fuck you, Sonos
|
||||
subtitle: Journey of Disappointment and Search for New Audio Solutions
|
||||
slug: fuck-you-sonos
|
||||
date: 2025-04-30
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2025-05-19
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2025-05-26
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2025-06-02
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -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
|
||||
date: 2025-02-16
|
||||
author: Stefan Imhoff
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
title: "OK, Boomer: A Post-War Psychoanalysis"
|
||||
title: OK, Boomer
|
||||
subtitle: A Post-War Psychoanalysis
|
||||
slug: ok-boomer
|
||||
date: 2025-11-28
|
||||
updated: 2025-12-19
|
||||
|
||||
@@ -13,7 +13,7 @@ import GridLayout from '../layouts/GridLayout.astro';
|
||||
import Image from '../components/Image.astro';
|
||||
import ListItem from '../components/ListItem.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 Tag from '../components/Tag.astro';
|
||||
import TextLink from '../components/TextLink.astro';
|
||||
@@ -51,6 +51,7 @@ const seriesEntries: Journal[] = await getCollection('journal', ({ data }: Journ
|
||||
seriesEntries.sort(sortByDate).reverse();
|
||||
|
||||
const title = entry.data.title;
|
||||
const subtitle = entry.data.subtitle;
|
||||
const description = entry.data.description;
|
||||
|
||||
const schema = JSON.stringify({
|
||||
@@ -84,16 +85,16 @@ const schema = JSON.stringify({
|
||||
innerGrid
|
||||
nofollow={entry.data.nofollow}
|
||||
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}
|
||||
</PageTitle>
|
||||
</JournalTitle>
|
||||
{
|
||||
entry.data.cover && (
|
||||
<Image
|
||||
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"
|
||||
src={entry.data.cover}
|
||||
fullHeight
|
||||
|
||||
@@ -37,7 +37,7 @@ rssPosts.sort(sortMarkdownByDate);
|
||||
{site.title}
|
||||
</PageTitle>
|
||||
<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
|
||||
alt="Bonsai"
|
||||
@@ -50,7 +50,7 @@ rssPosts.sort(sortMarkdownByDate);
|
||||
</div>
|
||||
|
||||
<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>
|
||||
<AboutMe components={mapping} />
|
||||
|
||||
@@ -26,6 +26,7 @@ export async function GET(context) {
|
||||
},
|
||||
items: [
|
||||
...journal.map((post) => {
|
||||
const { title, subtitle, date, description, cover } = post.data;
|
||||
// Filter out import statements from content
|
||||
const contentWithoutImports = post.body
|
||||
.split('\n')
|
||||
@@ -52,26 +53,24 @@ export async function GET(context) {
|
||||
});
|
||||
|
||||
// Logic to determine image URL
|
||||
const isWebp =
|
||||
post.data.cover.startsWith('/assets/images/cover/') &&
|
||||
post.data.cover.endsWith('.webp');
|
||||
const isWebp = cover.startsWith('/assets/images/cover/') && cover.endsWith('.webp');
|
||||
const imgUrl = isWebp
|
||||
? post.data.cover
|
||||
? cover
|
||||
.replace('/assets/images/cover/', '/assets/images/thumbnail/')
|
||||
.replace(/\.webp$/, '.jpg')
|
||||
: '/assets/images/thumbnail/bonsai.jpg';
|
||||
|
||||
return {
|
||||
title: post.data.title,
|
||||
pubDate: post.data.date,
|
||||
description: post.data.description,
|
||||
title: subtitle ? `${title}: ${subtitle}` : title,
|
||||
pubDate: date,
|
||||
description: description,
|
||||
link: `/${post.slug}/`,
|
||||
content: sanitizedContent,
|
||||
enclosure: {
|
||||
url:
|
||||
site.url +
|
||||
(isWebp
|
||||
? post.data.cover
|
||||
? cover
|
||||
.replace('/assets/images/cover/', '/assets/images/og/')
|
||||
.replace(/\.webp$/, '.jpg')
|
||||
: '/assets/images/og/bonsai.jpg'),
|
||||
|
||||
@@ -3,6 +3,7 @@ import { defineCollection, z } from 'astro:content';
|
||||
export const journal = defineCollection({
|
||||
schema: z.object({
|
||||
title: z.string(),
|
||||
subtitle: z.string().optional(),
|
||||
draft: z.boolean().optional().default(false),
|
||||
featured: z.boolean().optional(),
|
||||
author: z.string().default('Stefan Imhoff'),
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user