personal website / landing page / all things public
  • Astro 47.1%
  • CSS 27.2%
  • JavaScript 18%
  • TypeScript 7.7%
Find a file
K Gopal Krishna 036508c740 fix(video): resolve decode errors on view-transition navigation
Merges fix/video-view-transitions which adds video.load() before
video.play() in initVideoAutoplay(). After Astro's ClientRouter
performs a view transition, video elements retain stale decode state
from the previous page, causing NS_ERROR_UNEXPECTED in Firefox.
Forcing a reload clears this state.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 06:31:26 +00:00
.obsidian chore(content): compress sync-panes.mp4 exceeding 25 MiB 2026-03-29 00:19:26 +05:30
.vscode Initial commit: Astro personal page with performance and accessibility improvements 2026-01-18 11:34:31 +05:30
public refactor(content): fold contact into about 2026-03-24 06:37:25 +00:00
scripts fix(build): ignore markdown code examples in asset discovery 2026-03-24 06:40:52 +00:00
src fix(video): reload video sources after view transition navigation 2026-04-10 06:31:05 +00:00
.gitignore fix(build): ignore markdown code examples in asset discovery 2026-03-24 06:40:52 +00:00
AGENTS.md chore(dev): enable dev-mode search and document unoptimized assets 2026-01-19 18:11:39 +05:30
astro.config.mjs feat(ui): add copy-to-clipboard, language labels, and Maple Mono to code blocks 2026-03-17 18:44:53 +01:00
LICENSE docs: add MIT license 2026-01-23 12:13:20 +05:30
package-lock.json chore(deps): update astro, pagefind, sitemap, dotenv, and turndown 2026-04-10 06:30:07 +00:00
package.json chore(deps): refresh astro and tailwind patch versions 2026-03-24 06:53:02 +00:00
README.md docs(readme): align project documentation with current architecture 2026-02-06 18:00:18 +01:00
ROADMAP.md docs(roadmap): capture dark mode contrast pass 2026-03-23 13:31:47 +00:00
tsconfig.json Initial commit: Astro personal page with performance and accessibility improvements 2026-01-18 11:34:31 +05:30

Personal Website

Personal site built with Astro 5, content collections, and a custom UI layer.

Tech Stack

Project Layout

src/
  content/                 # Collection content (markdown + local assets)
    blog/
    notes/
    talks/
    now/
    uses/
    photography/
    home/
    about/
    contact/
    homelab/
    changelog/
  content.config.ts        # Astro content collection schemas/loaders
  pages/
    index.astro
    blog.astro
    notes.astro
    talks.astro
    photography.astro
    changelog.astro
    now/index.astro
    uses/index.astro
    [page].astro
    [collection]/[slug].astro
  layouts/
    BaseLayout.astro
    MarkdownLayout.astro
    TimelineLayout.astro
  components/
  styles/global.css
scripts/
  sync-obsidian.mjs
public/
  favicon.svg
  robots.txt
  resume.pdf

Development

npm install
npm run dev

Build

npm run build
npm run preview

npm run build generates the Astro output and runs Pagefind against dist/.

Search in Dev Mode

Pagefind needs a built index. To test search while running dev server:

npm run build:search
npm run dev

This writes the index to public/pagefind/ (git-ignored).

Content Workflow

  • Markdown content lives under src/content/<collection>/.
  • Collection schemas and frontmatter validation live in src/content.config.ts.
  • Use scripts/sync-obsidian.mjs to sync from an Obsidian vault (requires OBSIDIAN_PATH in .env).

Assets

  • Put assets in src/content/... when you want Astro/Vite optimization.
  • Put assets in public/ when you need exact, unprocessed files (for example PDFs or files that should bypass optimization).

License

  • Code: MIT (LICENSE)
  • Content: CC BY-NC 4.0 (src/content/LICENSE)