kaush4l/kaush4l.github.io

0

stars

67

commits

TypeScript

primary language

Aug 22, 2026

updated

README

kaush4l.github.io

A configuration-driven personal site (Next.js App Router, static export) with an on-device, multimodal AI assistant that runs entirely in the browser via WebGPU — no server, no API keys.

Principles

  • Content is data, not markup. No section is hardcoded to HTML. Every entry is a markdown file, and a section's identity/ordering/layout is encoded in the folder structure and a per-folder _section.md. Adding, reordering, or restyling a section is a content change — see content/README.md.
  • AI on-device. The chat assistant loads a quantized Gemma-4 E2B (q4 / q4f16) ONNX model with transformers.js and runs it in a Web Worker on WebGPU (wasm fallback). It is multimodal: type a question or speak one — audio is transcribed and answered by the same model in a single pass.

Develop (uses Bun)

bun install        # installs deps + copies onnxruntime-web assets to public/
bun run dev        # http://localhost:3000  (next dev --webpack)
bun run lint       # eslint
bun run build      # static export to out/

This project uses Bun, not npm. CI installs/builds with Bun too.

On-device model

At runtime the worker prefers model files served from /models and falls back to the Hugging Face Hub, caching into the browser (IndexedDB). To bundle the model for fully-offline serving:

bun run models:download

This downloads the Gemma-4 E2B q4 ONNX files (processor + decoder + audio/vision encoders) into public/models/. Note these are large (multi-GB) and are git-ignored — for GitHub Pages we rely on the Hub fallback + browser cache by default rather than committing the weights.

Deploy

Pushing to main triggers .github/workflows/deploy.yml, which builds with Bun and publishes the static out/ to the master branch (GitHub Pages).

Architecture

AreaWhere
Content + section metadatacontent/** (_section.md per folder)
Content loader / section + nav resolutionsrc/lib/content.ts
Dynamic page (maps over sections)src/app/page.tsx, src/components/Resume/SectionRenderer.tsx
On-device model worker (text + audio)src/workers/llm.worker.js
WebGPU/runtime configsrc/workers/transformersEnv.ts, src/lib/capability.ts
Chat UI + voice capturesrc/components/Chat/ChatWidget.tsx, src/hooks/useChatAI.ts, src/hooks/useAudioRecorder.ts
Theme + header-anchored theme switchersrc/theme/ThemeProvider.tsx, src/components/Layout/Header.tsx

Contributors

kaush4l

67 commits

kaush4l/kaush4l.github.io

0

stars

67

commits

TypeScript

primary language

Aug 22, 2026

updated

README

kaush4l.github.io

A configuration-driven personal site (Next.js App Router, static export) with an on-device, multimodal AI assistant that runs entirely in the browser via WebGPU — no server, no API keys.

Principles

  • Content is data, not markup. No section is hardcoded to HTML. Every entry is a markdown file, and a section's identity/ordering/layout is encoded in the folder structure and a per-folder _section.md. Adding, reordering, or restyling a section is a content change — see content/README.md.
  • AI on-device. The chat assistant loads a quantized Gemma-4 E2B (q4 / q4f16) ONNX model with transformers.js and runs it in a Web Worker on WebGPU (wasm fallback). It is multimodal: type a question or speak one — audio is transcribed and answered by the same model in a single pass.

Develop (uses Bun)

bun install        # installs deps + copies onnxruntime-web assets to public/
bun run dev        # http://localhost:3000  (next dev --webpack)
bun run lint       # eslint
bun run build      # static export to out/

This project uses Bun, not npm. CI installs/builds with Bun too.

On-device model

At runtime the worker prefers model files served from /models and falls back to the Hugging Face Hub, caching into the browser (IndexedDB). To bundle the model for fully-offline serving:

bun run models:download

This downloads the Gemma-4 E2B q4 ONNX files (processor + decoder + audio/vision encoders) into public/models/. Note these are large (multi-GB) and are git-ignored — for GitHub Pages we rely on the Hub fallback + browser cache by default rather than committing the weights.

Deploy

Pushing to main triggers .github/workflows/deploy.yml, which builds with Bun and publishes the static out/ to the master branch (GitHub Pages).

Architecture

AreaWhere
Content + section metadatacontent/** (_section.md per folder)
Content loader / section + nav resolutionsrc/lib/content.ts
Dynamic page (maps over sections)src/app/page.tsx, src/components/Resume/SectionRenderer.tsx
On-device model worker (text + audio)src/workers/llm.worker.js
WebGPU/runtime configsrc/workers/transformersEnv.ts, src/lib/capability.ts
Chat UI + voice capturesrc/components/Chat/ChatWidget.tsx, src/hooks/useChatAI.ts, src/hooks/useAudioRecorder.ts
Theme + header-anchored theme switchersrc/theme/ThemeProvider.tsx, src/components/Layout/Header.tsx

Contributors

kaush4l

67 commits

Languages

TypeScript

72.7%

CSS

23.0%

Shell

2.6%

JavaScript

1.7%