A modern, SEO-optimized, mobile-first Hugo theme designed for developers and designers to showcase their personal brand, skills, projects, and blog content.
Created by: MD ABDULLAH
Website: abdulah.com.bd
- Hero Section - Eye-catching introduction with avatar, tagline, and CTA buttons
- Skills Showcase - Display your expertise organized by categories
- Tech Stack - Visual representation of your technologies and tools
- Featured Projects - Highlight your best work with links and technologies
- Blog Integration - Share your thoughts and tutorials
- π Performance: Minimal CSS, optimized assets, fast loading
- π± Mobile-First: Fully responsive on all devices
- π¨ Modern Design: Clean, professional aesthetics with smooth animations
- βΏ Accessible: WCAG compliant, semantic HTML, keyboard navigation
- π SEO Optimized: Meta tags, Open Graph, Twitter Cards, JSON-LD
- π Dark Mode: Automatic dark mode support
- π Copy Code: One-click code copying in blog posts
- π Table of Contents: Sticky sidebar on desktop, collapsible on mobile
- π¬ Giscus Comments: GitHub Discussions-powered comments
- π Analytics Ready: Easy Google Analytics integration
- Hugo Extended v0.112.0 or higher
- Git (optional, for version control)
- Create a new Hugo site:
hugo new site my-portfolio cd my-portfolio- Add the theme:
# Option 1: Clone as git submodule (recommended) git init git submodule add https://github.com/abdullah-cse/blogfolio.git themes/blogfolio # Option 2: Clone directly git clone https://github.com/abdullah-cse/blogfolio.git themes/blogfolio # Option 3: Download and extract the theme manually- Copy example config:
cp themes/blogfolio/exampleSite/config.toml config.toml- Add your content:
# Create about page hugo new about.md # Create first blog post hugo new blog/hello-world.md # Create a project hugo new projects/my-project.md- Start the server:
hugo server -DVisit http://localhost:1313 to see your site!
Edit config.toml to customize your site:
baseURL = "https://yoursite.com" title = "Your Name - Developer & Designer" theme = "blogfolio" [params] author = "Your Name" description = "Your professional tagline" avatar = "/images/avatar.jpg" twitter = "@yourhandle" # Table of Contents showTOC = true # Set to false to disable TOC globally[params] hero_title = "Hi, I'm Your Name" hero_subtitle = "Full-Stack Developer crafting digital experiences" [params.hero_cta] primary_text = "View My Work" primary_url = "#projects" secondary_text = "Get In Touch" secondary_url = "/contact/"[[params.skills]] name = "Frontend Development" icon = "π»" description = "Building responsive and performant UIs" items = ["React", "Vue.js", "TypeScript", "Tailwind CSS"] [[params.skills]] name = "Backend Development" icon = "βοΈ" description = "Creating scalable server applications" items = ["Node.js", "Python", "PostgreSQL", "MongoDB"][[params.tech_stack]] category = "Languages" technologies = ["JavaScript", "TypeScript", "Python", "Go"] [[params.tech_stack]] category = "Frameworks" technologies = ["React", "Next.js", "Vue.js", "Node.js"][[params.featured_projects]] name = "E-Commerce Platform" description = "A full-stack e-commerce solution" image = "/images/projects/ecommerce.jpg" technologies = ["React", "Node.js", "PostgreSQL"] demo_url = "https://demo.yoursite.com" github_url = "https://github.com/yourusername/project"content/ βββ _index.md # Homepage content (optional) βββ about.md # About page βββ contact.md # Contact page βββ blog/ # Blog posts β βββ post-1.md β βββ post-2.md βββ projects/ # Projects βββ _index.md # Projects page βββ project-1.md βββ project-2.md Create a new post:
hugo new blog/my-post-title.mdFrontmatter example:
--- title: "My Blog Post" date: 2024-01-15 description: "SEO-friendly description" tags: ["javascript", "web-development"] image: "/images/posts/my-post.jpg" disable_toc: false # Show/hide TOC for this post disable_comments: false # Show/hide comments for this post ---Table of Contents:
The TOC is automatically generated from your headings (H2-H3). Features:
- Desktop: Sticky sidebar on the right with active section highlighting
- Mobile: Collapsible section at the top (hidden by default, tap to expand)
- Control globally: Set
showTOC = falsein config.toml - Control per-post: Add
disable_toc: truein frontmatter
Code Snippets:
The theme automatically adds a "Copy" button to all code blocks. Simply write your code in markdown:
function hello() { console.log("Hello, World!"); }Features:
- Button appears on hover (always visible on mobile)
- One-click copying to clipboard
- Visual feedback (checkmark on success)
- Works with all programming languages
Alert Boxes:
Use shortcodes to add styled alert boxes in your posts:
{{</* info */>}} **Tip:** This is an informational alert with a blue accent. {{</* /info */>}} {{</* warning */>}} **Caution:** This is a warning alert with a yellow accent. {{</* /warning */>}} {{</* success */>}} **Success:** This is a success alert with a green accent. {{</* /success */>}} {{</* error */>}} **Error:** This is an error alert with a red accent. {{</* /error */>}}Features:
- Four types: info (blue), warning (yellow), success (green), error (red)
- Deep colored left border (4px) with lighter background
- Icon support for visual distinction
- Supports full markdown inside alerts
- Dark mode compatible
- Responsive design
Create a new project:
hugo new projects/my-project.mdFrontmatter example:
--- title: "My Project" description: "Project description" technologies: ["React", "Node.js", "MongoDB"] demo_url: "https://demo.example.com" github_url: "https://github.com/user/repo" image: "/images/projects/my-project.jpg" ---Edit assets/css/main.css:
:root { --color-primary: #2563eb; /* Your brand color */ --color-text: #1f2937; /* Text color */ --color-bg: #ffffff; /* Background */ }Customize TOC appearance in assets/css/main.css:
.toc-wrapper { background: var(--color-bg-secondary); border: 1px solid var(--color-border); } .toc-content a.active { color: var(--color-primary); border-left: 3px solid var(--color-primary); }Modify templates in layouts/:
layouts/index.html- Homepagelayouts/_default/single.html- Blog post/project pagelayouts/_default/list.html- Archive pageslayouts/partials/- Reusable components
Add Google Fonts in layouts/partials/head.html:
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet">Update CSS:
:root { --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; }Add to config.toml:
googleAnalytics = "G-XXXXXXXXXX"Add to layouts/partials/head.html:
{{ template "_internal/google_analytics.html" . }}- Enable GitHub Discussions on your repository
- Install Giscus app: github.com/apps/giscus
- Configure: Visit giscus.app and get your settings
- Update config.toml:
[params.giscus] enabled = true repo = "yourusername/your-repo" repo_id = "R_xxxxxxxxxxxxx" category = "General" category_id = "DIC_xxxxxxxxxxxxx" mapping = "pathname" reactions_enabled = "1" theme = "preferred_color_scheme" lang = "en"- β Free and open-source
- β Privacy-friendly (no tracking)
- β Automatic dark/light theme
- β Markdown support in comments
- β Reactions and threading
- β Full moderation control via GitHub
Add to post frontmatter:
disable_comments: trueSee GISCUS_SETUP.md for detailed instructions.
hugo --minifyThis generates optimized files in public/.
Netlify:
- Push to GitHub
- Connect repository in Netlify
- Build command:
hugo --minify - Publish directory:
public
Vercel:
- Import Git repository
- Framework preset: Hugo
- Build command:
hugo --minify - Output directory:
public
GitHub Pages:
# .github/workflows/hugo.yml name: Deploy Hugo site to Pages on: push: branches: ["main"] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: 'latest' extended: true - name: Build run: hugo --minify - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./publicPlace images in static/images/:
static/images/ βββ avatar.jpg # Your profile photo (120x120px recommended) βββ og-image.jpg # Social media preview (1200x630px) βββ projects/ # Project screenshots β βββ project1.jpg β βββ project2.jpg βββ posts/ # Blog post images βββ post1.jpg βββ post2.jpg CSS not loading:
- Ensure Hugo Extended version is installed
- Clear browser cache
- Check
assets/css/main.cssexists
Images not displaying:
- Verify images are in
static/images/ - Check file paths in config.toml
- Use relative paths starting with
/
TOC not showing:
- Ensure
showTOC = truein config.toml - Check post has headings (H2, H3)
- Verify
disable_toc: falsein post frontmatter - TOC requires at least 100 characters of content
Build errors:
- Update Hugo:
hugo version(need 0.112.0+) - Check config.toml syntax
- Verify all frontmatter is valid YAML
Contributions are welcome! Please feel free to submit issues and pull requests.
MIT License - feel free to use this theme for your personal or commercial projects.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Website: abdullah.com.bd
Made with β€οΈ by MD ABDULLAH
