Skip to content

Commit c133d17

Browse files
Pin astro, update people and sponsors
1 parent dae96e9 commit c133d17

File tree

9 files changed

+108
-17
lines changed

9 files changed

+108
-17
lines changed

CLAUDE.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# CLAUDE.md
2+
3+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4+
5+
## What is Starpod?
6+
7+
Starpod is an open-source Astro-based podcast website generator. It creates a full podcast site from an RSS feed and a `starpod.config.ts` configuration file. The reference deployment is [whiskey.fm](https://whiskey.fm) (Whiskey Web and Whatnot podcast).
8+
9+
## Commands
10+
11+
- **Dev server:** `pnpm dev` (runs on localhost:4321)
12+
- **Build:** `pnpm build` (runs `astro check` then `astro build --remote`)
13+
- **Lint:** `pnpm lint` (ESLint with caching)
14+
- **Lint fix:** `pnpm lint:fix`
15+
- **All tests:** `pnpm test` (runs unit + e2e concurrently)
16+
- **Unit tests only:** `pnpm test:unit` (Vitest)
17+
- **Single unit test:** `pnpm exec vitest run tests/unit/Player.test.tsx`
18+
- **E2E tests only:** `pnpm test:e2e` (Playwright, auto-starts dev server)
19+
- **Seed remote DB:** `pnpm db:seed`
20+
21+
## Architecture
22+
23+
### Framework Stack
24+
25+
- **Astro 5** with static output, deployed to Vercel
26+
- **Preact** for interactive components (player, search, contact form)
27+
- **Tailwind CSS v4** via Vite plugin
28+
- **Astro DB** (Turso/libSQL) for episode guests and sponsors
29+
- **Valibot** for config validation
30+
31+
### Key Configuration
32+
33+
- `starpod.config.ts` — podcast metadata (hosts, platforms, RSS feed URL, description). Uses `defineStarpodConfig()` from `src/utils/config.ts` for type safety and validation.
34+
- `astro.config.mjs` — Astro config with Vercel adapter, Preact, sitemap, and DB integrations.
35+
36+
### Data Flow
37+
38+
Episodes are fetched from the RSS feed at build time via `src/lib/rss.ts`. Guest/sponsor data lives in `db/data/` as TypeScript files and is seeded to Turso via `db/seed.ts`. The DB schema is in `db/config.ts` with tables: Episode, Person, HostOrGuest, Sponsor, SponsorForEpisode.
39+
40+
### Source Structure
41+
42+
- `src/pages/` — Astro pages and API routes. Dynamic episode pages use `[episode].astro`. LLM-friendly `.html.md.ts` endpoints generate markdown versions.
43+
- `src/components/` — Mix of `.astro` (static) and `.tsx` (Preact interactive) components. The audio player (`src/components/player/`) and search dialog are Preact.
44+
- `src/components/state.ts` — Preact signals for shared player state.
45+
- `src/lib/` — Core utilities: RSS fetching, image optimization, LLM content generation.
46+
- `src/content/transcripts/` — Markdown transcript files named by episode number.
47+
- `src/layouts/Layout.astro` — Single shared layout.
48+
49+
### Testing
50+
51+
- **Unit tests** (`tests/unit/`): Vitest + jsdom + @testing-library/preact. Setup file at `tests/unit/test-setup.ts`.
52+
- **E2E tests** (`tests/e2e/`): Playwright testing against chromium, firefox, and webkit.
53+
54+
### TypeScript
55+
56+
Strict mode with `baseUrl: "."` allowing bare `src/...` imports. JSX is configured for Preact (`jsxImportSource: "preact"`).
57+
58+
## Environment Variables
59+
60+
- `DISCORD_WEBHOOK` — Used by the contact form API route (`src/pages/api/contact.ts`) to post to Discord.
61+
- Astro DB connection requires `ASTRO_STUDIO_APP_TOKEN` for remote operations (build, seed).

db/data/people-per-episode.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,17 @@ import people from './people';
33
type PersonId = (typeof people)[number]['id'];
44

55
export default {
6+
// 234
7+
'pay-no-attention-to-the-llm-behind-the-terminal-w-zach-lloyd': [
8+
{ id: 'robbiethewagner' },
9+
{ id: 'argyleink' },
10+
{ id: 'zachlloyd' }
11+
],
12+
// 233
13+
'humans-are-now-legacy-dependencies': [
14+
{ id: 'robbiethewagner' },
15+
{ id: 'argyleink' }
16+
],
617
// 232
718
'we-fired-the-tools-no-ralph-wiggum-no-training-wheels-just-agents': [
819
{ id: 'robbiethewagner' },

db/data/people.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,7 @@ export const people = [
298298
{ id: 'wagslane', name: 'Lane Wagner', img: 'wagslane.jpg' },
299299
{ id: 'wesbos', name: 'Wes Bos', img: 'wesbos.jpg' },
300300
{ id: 'willjohnsonio', name: 'Will Johnson', img: 'willjohnsonio.jpg' },
301+
{ id: 'zachlloyd', name: 'Zach Lloyd', img: 'zachlloyd.jpg' },
301302
{ id: 'zeeg', name: 'David Cramer', img: 'zeeg.jpg' }
302303
] as const;
303304

db/data/sponsors-per-episode.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
export default {
2+
// 235
3+
// '': [{ id: 'warp' }],
4+
// 234
5+
'pay-no-attention-to-the-llm-behind-the-terminal-w-zach-lloyd': [
6+
{ id: 'cascadiajs' }
7+
],
8+
// 233
9+
'humans-are-now-legacy-dependencies': [{ id: 'cascadiajs' }],
210
// 232
311
'we-fired-the-tools-no-ralph-wiggum-no-training-wheels-just-agents': [
412
{ id: 'cascadiajs' }

db/data/sponsors.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,11 @@ export default [
1616
name: 'Norlan',
1717
img: 'norlan.svg',
1818
url: 'https://norlanglass.com/'
19+
},
20+
{
21+
id: 'warp',
22+
name: 'Warp',
23+
img: 'warp.svg',
24+
url: 'https://warp.dev/'
1925
}
2026
];

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"@preact/signals": "^2.8.2",
2727
"@vercel/analytics": "^1.6.1",
2828
"@vercel/speed-insights": "^1.3.1",
29-
"astro": "^5.18.0",
29+
"astro": "5.16.8",
3030
"astro-seo-schema": "^5.2.0",
3131
"atropos": "^2.0.2",
3232
"preact": "^10.28.4",

pnpm-lock.yaml

Lines changed: 16 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/img/people/zachlloyd.jpg

13.1 KB
Loading

src/img/sponsors/warp.svg

Lines changed: 4 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)