Personal developer blog built with modern web technologies.
A modern, performant personal website featuring a blog. Built with Astro for optimal performance and SEO, styled with TailwindCSS for responsive design, and powered by Hashnode CMS for content management.
- ⚡ Fast & Optimized: Built with Astro for lightning-fast static generation
- 📱 Responsive Design: Mobile-first approach with TailwindCSS
- 📝 Dynamic Blog: Integrated with Hashnode CMS for easy content management
- 🎯 SEO Ready: Optimized meta tags, OpenGraph, and canonical URLs
- 🔄 Auto-Deploy: GitHub Actions workflow for seamless Vercel deployment
- 📊 Performance First: Optimized images, lazy loading, and minimal JavaScript
- Framework: Astro 5.12.8
- Frontend: React 19 + TypeScript
- Styling: TailwindCSS 4
- CMS: Hashnode GraphQL API
- Deployment: Vercel
- CI/CD: GitHub Actions
- Node.js 18+
- npm or yarn
-
Clone the repository
git clone https://github.com/davic64/davidvictoria.io cd davidvictoria.io
-
Install dependencies
npm install
-
Set up environment variables
# Create .env file echo "HASHNODE_PUBLICATION_HOST=your-blog.hashnode.dev" > .env
-
Start development server
npm run dev
-
Open your browser Navigate to
http://localhost:4321
src/
├── components/ # Reusable UI components
│ ├── Home.astro # Homepage component with blog grid
│ └── ui/ # UI components
│ ├── BlogCard.astro
│ └── Navbar.astro
├── config/ # Site configuration
│ └── siteConfig.ts # Navigation and site settings
├── layouts/ # Page layouts
│ └── Layout.astro # Base layout with SEO
├── lib/ # Utilities and integrations
│ └── hashnode.ts # Hashnode CMS integration
├── pages/ # File-based routing
│ ├── index.astro # Homepage
│ └── post/
│ └── [slug].astro # Dynamic blog post pages
├── styles/ # Global styles
│ └── global.css # Base styles and Tailwind imports
└── types/ # TypeScript definitions
└── hashnode.ts # Hashnode API types
Command | Description |
---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm run preview |
Preview production build locally |
npm run astro |
Run Astro CLI commands |
The project is configured for automatic deployment to Vercel:
- Push to main branch triggers the GitHub Action
- Vercel builds and deploys automatically
- Live site updates with your changes
# Build the project
npm run build
# Deploy to Vercel (requires Vercel CLI)
vercel --prod
- Create posts in your Hashnode publication
- Configure the
HASHNODE_PUBLICATION_HOST
environment variable - Posts appear automatically on your site
- Homepage content: Edit
src/components/Home.astro
- Navigation: Update
src/config/siteConfig.ts
- Site metadata: Modify
src/layouts/Layout.astro
Variable | Description | Required |
---|---|---|
HASHNODE_PUBLICATION_HOST |
Your Hashnode blog URL | Yes |
Edit src/config/siteConfig.ts
to customize:
export const siteConfig = {
itemsNav: [
{ label: "Inicio", href: "/" },
// Add more navigation items
],
};
The project uses TailwindCSS v4. Customize styles in:
src/styles/global.css
- Global styles- Component files - Component-specific styles
Modify the base layout in src/layouts/Layout.astro
for:
- Meta tags and SEO
- Global HTML structure
- Analytics integration
This project is open source and available under the MIT License.
David Victoria
- Website: davidvictoria.io
- GitHub: @davevictoria
Built with ❤️ using Astro and modern web technologies.