Source for techsquidtv.com, Kyle Tryon's personal site for developer education, technical writing, and DevRel services.
The site is built with Astro, TypeScript, React, and Tailwind CSS. It deploys as a Cloudflare Worker and uses Resend for its contact and newsletter forms.
- Node.js 24 or later
- pnpm 11.9.0 (the version is pinned in
package.json)
pnpm install
pnpm devThe local site is available at http://localhost:4321.
| Command | Description |
|---|---|
pnpm dev |
Start the local development server. |
pnpm build |
Type-check and create a production build in dist/. |
pnpm preview |
Serve the production build locally. |
pnpm test |
Run unit tests. |
pnpm check |
Run formatting, lint, dead-code, spelling, and production-build checks. |
pnpm format |
Format the repository with Prettier. |
pnpm lint:fix |
Apply ESLint fixes where available. |
pnpm deploy |
Build and deploy the Worker with Wrangler. |
pnpm indexnow:submit |
Submit the site's URLs to IndexNow. |
pnpm newsletter:publish |
Publish the hosted Resend newsletter template. |
pnpm sentry:sync |
Synchronize the managed Sentry dashboard and alerts. |
src/
├── components/ Reusable Astro components
├── content/blog/ Markdown and MDX blog posts
├── emails/ Resend newsletter template source
├── layouts/ Shared page and post layouts
├── lib/ Form handling, analytics, Sentry, and site utilities
├── pages/ Site pages, API routes, RSS, and Open Graph endpoints
└── styles/ Global styles
public/ Static assets served as-is
scripts/ Operational and publishing scripts
docs/ Deployment and service runbooks
Blog posts live in src/content/blog/<year>/ as Markdown or MDX. The content
collection schema in src/content.config.ts validates frontmatter during the
build. Keep article images in src/images/blog/ and reference them from the
post.
wrangler.jsonc defines the production Worker, route, asset binding, and
rate-limit binding. Secrets and account-specific values are intentionally not
committed. Configure the following Worker bindings for production forms:
RESEND_API_KEYRESEND_NEWSLETTER_SEGMENT_IDCONTACT_RECIPIENTTURNSTILE_SECRET_KEYTURNSTILE_HOSTNAMESFORM_RATE_LIMITER
Set PUBLIC_TURNSTILE_SITE_KEY when a different Turnstile site key is needed
for a local or preview environment. Set SENTRY_AUTH_TOKEN during a
production build to upload source maps.
For the complete account-side setup and cutover checklist, see Cloudflare and Resend cutover. The Sentry observability runbook and newsletter template guide document their respective workflows.
Before opening a change, run:
pnpm checkDo not commit secrets, generated dist/ output, or account-specific
configuration.