Personal portfolio site built with Hugo and PaperMod theme.
Live at: https://shakuta.dev
- Framework: Hugo (v0.150.1+)
- Theme: PaperMod
- Deployment: GitHub Pages (via GitHub Actions)
- Analytics: GoatCounter (privacy-friendly, cookie-free)
ishakuta.github.io/
├── hugo.toml # Main Hugo configuration
├── .github/
│ └── workflows/
│ └── hugo.yml # GitHub Actions deployment
├── content/ # Markdown content
│ ├── about.md
│ └── search.md
├── layouts/ # Custom layouts
│ ├── 404.html
│ └── partials/
│ └── extend_head.html # Analytics integration
├── static/ # Static files (served as-is)
│ ├── img/ # Images
│ └── thoughts/ # Thought Capture PWA
├── themes/
│ └── PaperMod/ # Theme (git submodule)
├── public/ # Generated site (gitignored)
└── resources/ # Hugo cache (gitignored)
# Install Hugo (macOS)
brew install hugo
# Verify installation
hugo version # Should be v0.150.1+# Clone repository
git clone --recurse-submodules [email protected]:ishakuta/ishakuta.github.io.git
cd ishakuta.github.io
# Start development server
hugo server -D
# Access at: http://localhost:1313Development server features:
- Live reload on file changes
- Drafts visible with
-Dflag - Fast rebuilds (~20ms)
# Build static site
hugo --minify
# Output in ./public/
# Deployed automatically via GitHub ActionsKey settings:
- baseURL:
https://shakuta.dev/ - title: Ivan Shakuta
- theme: PaperMod
- Profile mode: Enabled with avatar
- Navigation: About, Thought Capture, Search
- Social: GitHub, LinkedIn, Telegram
Add new page:
hugo new content/page-name.mdAdd blog post:
hugo new content/posts/my-post.mdFront matter example:
---
title: "My Post"
date: 2025-12-28
draft: false
---Workflow: .github/workflows/hugo.yml
Triggers:
- Push to
masterbranch - Manual dispatch
Process:
- Install Hugo CLI (v0.150.1)
- Checkout with submodules
- Build with
--minify - Deploy to GitHub Pages
Check deployment:
git add .
git commit -m "Update content"
git push origin master
# GitHub Actions deploys automatically (~2-3 min)Create files in layouts/ matching theme structure:
layouts/
├── partials/
│ └── extend_head.html # Custom head content
└── 404.html # Custom 404 page
PaperMod supports extended CSS:
# Create custom CSS
mkdir -p assets/css/extended
touch assets/css/extended/custom.cssTheme is git submodule:
cd themes/PaperMod
git pull origin master
cd ../..
git add themes/PaperMod
git commit -m "Update PaperMod theme"GoatCounter (privacy-friendly)
- Dashboard: https://shakuta.goatcounter.com
- Integration:
layouts/partials/extend_head.html - Privacy: Cookie-free, GDPR compliant, no tracking
Only loads in production (not in hugo server).
# Update submodules
git submodule update --init --recursive# Clean Hugo cache
rm -rf public/ resources/
# Rebuild
hugo --minify# Kill existing Hugo server
lsof -ti:1313 | xargs kill -9
# Or use different port
hugo server -p 1314- Hugo Site - This documentation
- Thought Capture PWA - Separate app documentation
MIT - Personal portfolio site