Modern project showcase with glassmorphic design
Auto-fetches GitHub repos with smooth animations
π github.com/Daniel-wambua/havoclab
Why waste time building portfolio sites from scratch when you can have one that auto-syncs with your GitHub? HavocLab eliminates manual project updates. Just push to GitHub and your showcase updates automatically. Built with bleeding-edge tech so you don't need to f**k around with outdated frameworks and slow-loading sites.
About the Developer
Professional Background
I'm an experienced, Principal-level full stack engineer with a passion for quality, performance, mentoring, technology and open source. I believe the best judge of a developer is their code, and while I cannot share proprietary work, I have many open source projects on my GitHub and showcase my skills at lab.havocsec.me.
HavocLab is a SvelteKit-powered project showcase that automatically displays your GitHub repositories. No manual updates neededβjust a sleek, performant portfolio site.
Core Features:
- 𧬠Auto GitHub API integration
- οΏ½ Dark/Light mode toggle with persistent preferences
- π GitHub stats display (stars, forks, last updated)
- π Advanced search & filtering with real-time updates
- π Smart sorting (stars, forks, updated date, name)
- π·οΈ Project tags/categories with filter chips
- π± Grid/List view toggle with different layouts
- π Quick stats dashboard (total projects, stars, forks, languages)
- οΏ½π¨ Glassmorphic dark theme (#00AEEF accent)
- β‘ Motion One animations (3.8KB vs 90KB alternatives)
- β Featured projects support
- π± Fully responsive design
- π― Smart context-aware icons
- π Vercel Analytics & Speed Insights integration
Tech Stack:
- SvelteKit 2.0 + Svelte 5.0
- TailwindCSS 3.4 (custom dark theme)
- Motion One 10.16 (lightweight animations)
- TypeScript 5.0 (fully typed)
- GitHub REST API
# Clone the repo
git clone https://github.com/Daniel-wambua/havoclab.git
cd havoclab
# Install dependencies
npm install
# Configure GitHub username
# Edit src/lib/constants.ts β GITHUB_USERNAME
# Add GitHub token (REQUIRED for private repos, recommended for rate limits)
cp .env.example .env
# Edit .env and add your token
# To create a GitHub token:
# 1. Go to: https://github.com/settings/tokens/new
# 2. Name: "HavocLab Showcase"
# 3. Expiration: No expiration (or your preference)
# 4. Scopes:
# - Check "repo" (full access) for PRIVATE repos
# - OR just "public_repo" for PUBLIC repos only
# 5. Generate token and copy it to .env
# Run dev server
npm run devDeployment Options
Vercel (One-Click Deploy)
Manual Deployment:
- Vercel:
npm install -g vercel && vercel --prod - Cloudflare Pages:
npm i -D @sveltejs/adapter-cloudflare && npm run build && npx wrangler pages deploy .svelte-kit/cloudflare - Netlify:
npm i -D @sveltejs/adapter-netlify && npm run build && netlify deploy --prod - Docker:
docker build -t havoclab . && docker run -p 3000:3000 havoclab
HavocLab can display both public AND private repositories when properly configured.
Requirements:
- GitHub Personal Access Token with
reposcope - Token must be added to
.envfile or deployment environment variables
Setup Steps:
# 1. Create a GitHub token
# Visit: https://github.com/settings/tokens/new
# 2. Configure token settings:
# - Note: "HavocLab Showcase"
# - Expiration: No expiration (recommended for personal projects)
# - Scopes: β
repo (Full control of private repositories)
# 3. Generate token and copy it
# 4. Add to your .env file
echo "GITHUB_TOKEN=your_token_here" > .env
# 5. For Vercel deployment, add to environment variables:
# Dashboard β Settings β Environment Variables
# Name: GITHUB_TOKEN
# Value: your_token_here
# Environment: Production, Preview, DevelopmentHow it works:
- β
With token: Fetches from
/user/repos(includes private repos) β οΈ Without token: Fetches from/users/{username}/repos(public only)
Important Notes:
- Private repos will only be visible when the token is present
- The token must belong to the account that owns the private repositories
- Rate limits: 60 requests/hour (no token) β 5,000 requests/hour (with token)
- Never commit your
.envfile to version control (it's in.gitignore)
Customize Your Showcase:
| Task | Location | Example |
|---|---|---|
| Change GitHub user | src/lib/constants.ts |
GITHUB_USERNAME = 'your-username' |
| Add featured projects | src/lib/featured.json |
Add objects with name, description, icon |
| Add manual project images | src/lib/project-images.json |
{"RepoName": "image-url"} |
| Customize theme | tailwind.config.js |
Change accent color |
| Update branding | src/lib/components/Header.svelte |
Change icon/text |
| Default sort order | src/lib/stores/preferences.ts |
Change sortBy default |
| Default view mode | src/lib/stores/preferences.ts |
Change viewMode default |
Project Structure:
src/
βββ lib/
β βββ components/ # UI components
β β βββ Header.svelte # Header with search & theme toggle
β β βββ FilterBar.svelte # Sorting & filtering controls
β β βββ ProjectCard.svelte # Project display card
β β βββ SearchBar.svelte # Real-time search input
β β βββ StatsDisplay.svelte # Quick stats dashboard
β β βββ ThemeToggle.svelte # Dark/light mode button
β β βββ LoadingState.svelte # Loading spinner
β β βββ ErrorState.svelte # Error display with retry
β βββ stores/
β β βββ theme.ts # Theme state management
β β βββ preferences.ts # User preferences (sort, view, filters)
β βββ constants.ts # GitHub config
β βββ types.ts # TypeScript interfaces
β βββ featured.json # Featured projects
β βββ project-images.json # Manual image URLs
βββ routes/
β βββ +layout.svelte # Analytics integration
β βββ +page.svelte # Main showcase
β βββ api/ # GitHub/Featured endpoints
βββ app.css # Tailwind + glassmorphism
New Features Guide:
{
"YourRepoName": "https://your-image-url.com/screenshot.png"
}GitHub API β Fetch Repos β Combine with Featured β Filter/Search β Display
β
Motion One Animations
How It Works:
1. App loads β Fetch from /api/repos (GitHub) + /api/featured (local JSON)
2. Merge data β Featured projects appear first
3. User types β Filter by name/language in real-time
4. Cards animate β Fade-in with stagger, hover lift effects
Daniel-wambua/havoclab is licensed under MIT Β© Daniel Wambua 2025.
For information, see TLDR Legal > MIT
Expand License
The MIT License (MIT)
Copyright (c) Daniel Wambua <daniel@wambua.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sub-license, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Β© Daniel Wambua 2025
Licensed under MIT
Thanks for visiting :)