🚧 Active Development
A portfolio website showcasing UX design work, with an experimental AI chatbot feature that runs entirely in the client's browser. The chatbot (Goma) uses WebLLM (Qwen3-1.7B) and WebGPU for 100% client-side processing - zero server communication, complete privacy.
- Primary: Professional portfolio showcasing UX design expertise and projects
- Experimental: Demonstrate viability of browser-based LLMs with local processing
- Innovation: Conversational interface as alternative way to explore portfolio content
- Website must run from Github Pages
- Mobile-first interface with desktop breakpoint support
- No external API calls
First load will download the model (~2.0GB). Subsequent loads are instant.
- LLM: Qwen3-1.7B via WebLLM (MLC AI)
- Acceleration: WebGPU
- Fonts: Young Serif, Work Sans
The AI assistant (named Goma) runs entirely in your browser using WebLLM and WebGPU:
- First Visit: Downloads the Qwen3-1.7B model (~2.0GB, one-time, cached locally)
- Chat: Your messages stay on your device - no server communication
- Context: The bot remembers the last 5 conversation turns and user details you share
- Responses: Generated locally, typically taking a few seconds
Semantic search will let you query portfolio content using natural language. Currently in development - data file needs updating before implementation.
- Zero Server Calls: All processing happens in your browser
- Local Storage: Model cached in IndexedDB for instant future loads
- Memory Management: Old messages automatically pruned to prevent slowdown
- Browser Support: Requires WebGPU (Chrome/Edge on desktop)
For technical details, see REQUIREMENTS.md.
- 100% local AI processing
- Performance monitoring
- Experimental feature on/off toggle
- Accessibility mode
- Cache management
- WebGPU support limited (Chrome/Edge only)
- Large initial download (~2.0GB)
- Two layout tiers (mobile baseline + desktop breakpoint)
- Single model
- Limited context window (256 tokens)
- No streaming display (accumulated then shown)
The project uses vector embeddings for semantic search (not yet implemented).
After updating data-002.json:
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install sentence-transformers
npm run generate:embeddingsTo keep embeddings.json synced automatically while you edit data-002.json locally:
npm run watch:embeddingsembeddings.json is not tracked in git. GitHub Pages deployment generates embeddings during the workflow run and publishes them as part of the deployed artifact.
The deploy workflow is in .github/workflows/update-embeddings.yml and does not create git commits.
See REQUIREMENTS.md for schema details.
npm install
npm run devThis starts both:
- a local static server at
http://localhost:8000 - the SCSS compiler in watch mode
- the embeddings watcher (regenerates
embeddings.jsonwhendata-002.jsonchanges)
Note: npm run dev requires Python plus sentence-transformers available in your environment.
If you only want frontend development (no embeddings watch), use:
npm run dev:webIf you only want the server:
npm run servenpm install
npm run build:cssFor continuous compilation while editing styles:
npm run watch:css- Built by: Vítor Gonçalves
- AI Assistant: Claude (Anthropic) - Architecture & implementation support
- WebLLM: MLC AI Project
- Model: Qwen3-1.7B (Alibaba)
- Fonts: Google Fonts