A modern, customizable portfolio template built with Astro 5 and DaisyUI 5. A beautiful, fast, and highly customizable portfolio template for developers, designers, and creatives.
- π¨ 6 Built-in Themes - Light, Dark, Synthwave, Retro, Valentine, and Dim
- π 6 Content Collections - Blog, Projects, Work, Education, Hackathons, and About
- π Type-Safe Content - Full TypeScript support with validated schemas
- π± Fully Responsive - Mobile-first design with DaisyUI components
- β‘ Fast & Optimized - Static site generation with automatic image optimization
- π Smooth Transitions - Page transitions using Astro's View Transitions API
- π¦ MDX Support - Enhanced markdown with component imports (Spotify, YouTube, Twitter)
- π― Configuration-Driven - Customize everything through a central config file
- πΈ FAB Flower Menu - Expandable floating action button for extra links
- π¨ Modern Stack - Astro 5 + Tailwind CSS 4 + DaisyUI 5 + TypeScript
- π SEO Optimized - Meta tags, Open Graph, and semantic HTML
- βΏ Accessible - Built with accessibility in mind
- Node.js 18+ or 20+
- npm, pnpm, or yarn
# Clone the repository
git clone https://github.com/lauroguedes/bloomfolio.git
# Navigate to the project directory
cd bloomfolio
# Install dependencies
npm install
# Start the development server
npm run devVisit http://localhost:4321 to see your portfolio!
All commands are run from the root of the project:
| Command | Action |
|---|---|
npm install |
Install dependencies |
npm run dev |
Start dev server at localhost:4321 |
npm run build |
Build production site to ./dist/ |
npm run preview |
Preview production build locally |
npm run astro check |
Run TypeScript and Astro checks |
npm run astro ... |
Run Astro CLI commands |
All site configuration is centralized in src/config.ts. Edit this file to customize your portfolio.
export const siteConfig: SiteConfig = {
name: "Your Name",
title: "Your Professional Title",
description: "Brief description of your portfolio",
avatar: "../assets/your-avatar.png",
location: "Your City, Country",
email: "[email protected]",
// ...
};Add your social media profiles:
socialLinks: {
github: "https://github.com/username",
linkedin: "https://linkedin.com/in/username",
twitter: "https://twitter.com/username",
bluesky: "https://bsky.app/profile/username",
instagram: "https://instagram.com/username",
youTube: "https://youtube.com/@username",
codetips: "https://codetips.cloud/u/username",
}Control which sections appear on your homepage:
sections: {
about: true, // About section
projects: true, // Projects showcase
blog: true, // Latest blog posts (shows 3 most recent)
work: true, // Work experience timeline
education: true, // Education history
hackathons: true, // Hackathon participation
contact: true, // Contact section
}Set any section to false to hide it. The Hero section is always visible.
Choose between a theme selector dropdown or a simple light/dark toggle:
enableThemeSelector: true // true = dropdown with 6 themes, false = toggleAvailable Themes: light, dark, synthwave, retro, valentine, dim
Configure the floating action button menu:
extraLinks: {
enable: true,
links: [
{ link: "/blog/guide", icon: BookOpen, label: "Guide" },
{ link: "/resume.pdf", icon: FileUser, label: "Resume" },
// Add more links...
],
}bloomfolio/
βββ public/ # Static assets
β βββ favicon.svg
βββ src/
β βββ assets/ # Images and media
β β βββ bloomfolio.png
β βββ components/ # Reusable components
β β βββ About.astro
β β βββ Blog.astro
β β βββ BlogCard.astro
β β βββ Contact.astro
β β βββ FabFlower.astro
β β βββ Hackathons.astro
β β βββ Hero.astro
β β βββ ProjectCard.astro
β β βββ Projects.astro
β β βββ SkillBadge.astro
β β βββ Spotify.astro
β β βββ ThemeSelector.astro
β β βββ ThemeToggle.astro
β β βββ Timeline.astro
β β βββ Twitter.astro
β β βββ YouTube.astro
β βββ content/ # Content collections
β β βββ about/ # About section (1 file)
β β βββ blog/ # Blog posts (.md or .mdx)
β β βββ education/ # Education history
β β βββ hackathons/# Hackathon entries
β β βββ projects/ # Portfolio projects
β β βββ work/ # Work experience
β βββ layouts/ # Page layouts
β β βββ Layout.astro
β β βββ BlogLayout.astro
β β βββ ProjectLayout.astro
β βββ pages/ # File-based routing
β β βββ index.astro
β β βββ blog/
β β β βββ index.astro
β β β βββ [...slug].astro
β β βββ projects/
β β βββ index.astro
β β βββ [...slug].astro
β βββ styles/
β β βββ global.css # Tailwind + DaisyUI
β βββ config.ts # Site configuration
β βββ content.config.ts # Content schemas
βββ astro.config.mjs # Astro configuration
βββ package.json
βββ tsconfig.json
βββ README.md
All content is stored in src/content/ organized by type. Each content type has a specific schema.
Create a new file in src/content/blog/:
---
title: "Your Post Title"
description: "Brief description for SEO"
image: "./featured-image.png"
publishDate: "2024-01-25"
tags: ["Tag1", "Tag2"]
---
Your content here...Supports both .md and .mdx files. Use .mdx for rich media embeds (Spotify, YouTube, Twitter).
Create a new file in src/content/projects/:
---
title: "Project Name"
description: "Brief description"
image: "./screenshot.png"
startDate: "2023-01-15"
endDate: "2023-06-30" # Optional (omit for ongoing)
skills: ["React", "Node.js", "MongoDB"]
demoLink: "https://demo.example.com" # Optional
sourceLink: "https://github.com/..." # Optional
---
Detailed project description...Create a new file in src/content/work/:
---
title: "Company Name"
subtitle: "Job Title"
startDate: "2020-01-15"
endDate: "2023-06-30" # Optional (omit for current position)
logo: "https://company-logo-url.com" # Optional
link: "https://company-website.com" # Optional
---
Job description and achievements...For complete documentation on content creation, see the Content Collections Guide and Markdown Guide.
Edit src/config.ts:
enableThemeSelector: true // Dropdown with 6 themes
// OR
enableThemeSelector: false // Simple light/dark toggleAdd custom CSS in component <style> tags or extend src/styles/global.css:
@import "tailwindcss";
@plugin "daisyui";
/* Your custom styles here */- Create a new component in
src/components/ - Import and add to
src/pages/index.astro - Optionally add a toggle in
src/config.ts
npm run buildOutput is generated in dist/ directory.
- Connect your GitHub repository
- Vercel auto-detects Astro
- Deploy!
- Connect your repository
- Build command:
npm run build - Publish directory:
dist
- Connect your repository
- Build command:
npm run build - Build output directory:
dist
Bloomfolio works with any static hosting platform that supports Node.js builds:
- GitHub Pages
- AWS S3 + CloudFront
- Firebase Hosting
- Render
- Railway
- Astro 5 - Static site generator
- Tailwind CSS 4 - Utility-first CSS framework
- DaisyUI 5 - Component library for Tailwind
- TypeScript - Type safety
- MDX - Enhanced Markdown
- Lucide Icons - Icon library
- Complete Guide - Comprehensive setup and customization guide
- Content Collections Guide - Learn about Astro Content Collections
- Markdown Guide - Master Markdown and MDX syntax
- Astro Docs - Official Astro documentation
- Tailwind CSS Docs - Tailwind CSS documentation
- DaisyUI Docs - DaisyUI component documentation
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Astro
- Styled with Tailwind CSS and DaisyUI
- Icons from Lucide
- Inspired by modern portfolio designs and the developer community
- π Documentation
- π Report Issues
- π¬ Discussions
Please if you find this project helpful, consider giving it a β on GitHub!
Crafted by an Artisan βοΈ Lauro Guedes