Indie Thinkers is a static Astro site for publishing essays as open source artifacts. The site has a minimal quote-led homepage, an essay archive, author profiles, RSS, sitemap generation, local fonts, and custom presentation details for media-rich essays.
The public writing routes live under /essays. The content collection is still named blog internally, but public URLs, navigation, and reader-facing copy use essays.
- Node.js
>=22.12.0 - Bun, matching the checked-in
bun.lock
Install dependencies.
bun installStart the local dev server.
bun run devBuild the production site.
bun run buildPreview the production build.
bun run preview/renders essay quotes with a typewriter effect. Quotes come from each essay'squotefrontmatter and link to the corresponding essay./essayslists essays newest first./essays/:slugrenders Markdown or MDX entries fromsrc/content/blog/throughsrc/layouts/EssayPost.astro./authors/:slugrenders author profiles and that author's essays./rss.xmlexposes the essay feed./sitemap-index.xmlis generated by the Astro sitemap integration./aboutstill exists as a starter-style placeholder page and is not part of the primary reading flow.
The homepage shows the oldest quote first and enables the spacebar or a double tap to cycle through additional essays when more than one essay exists.
Essays live in src/content/blog/ and are loaded by the collection defined in src/content.config.ts.
Required frontmatter:
title: 'The essay title'
description: 'Short metadata description'
quote: 'Homepage quote for this essay'
pubDate: 'June 1, 2026'Optional frontmatter:
deck: 'Short deck shown below the essay title'
author: 'Daniel Hunter'
authorSlug: 'daniel-hunter'
updatedDate: 'June 2, 2026'
heroImage: '../../assets/path/to/image.png'
socialImage: '/media/path/to/og-image.png'Notes:
- New author profiles are added in
src/data/authors.ts. - Source images imported by Astro should live under
src/assets/. - Static public media should live under
public/media/. - Essay detail pages automatically open external links in a new tab with
noopener noreferrer. - The current published essay is
src/content/blog/the-internet-in-multiplayer-mode.md.
src/pages/index.astro,src/pages/essays/index.astro, andsrc/pages/authors/[slug].astroshare the fixed-corner, Shiny Dimes-inspired visual shell.src/layouts/EssayPost.astroowns the essay reading layout and custom interaction scripts for rich essay sections.src/components/BaseHead.astroowns shared metadata, canonical URLs, favicon tags, RSS discovery, sitemap discovery, and font preloads.- Atkinson is configured through Astro's local font provider from
src/assets/fonts/. - Geist and Geist Mono are served from
public/fonts/. - Favicons and the web manifest live in
public/.
src/
assets/ Local images and fonts processed by Astro
components/ Shared Astro components
content/blog/ Essay Markdown and MDX entries
data/authors.ts Author metadata
layouts/ BlogPost and EssayPost layouts
pages/ Astro routes
styles/global.css Shared global styles
public/
fonts/ Public Geist font files
media/ Public essay media
The site is configured for https://indiethinkers.com in astro.config.mjs, uses file-format static builds, and is ready for Vercel. vercel.json enables clean URLs and disables trailing slashes.
- Production site:
https://indiethinkers.com - Essays:
/essays - RSS:
/rss.xml - Submit:
https://indiethinkers.dfos.com/ - Subscribe:
http://indiethinkers.substack.com/subscribe - Contribution guide:
CONTRIBUTING.md