A modern, terminal-style portfolio website built with Astro that's fully configurable through a single configuration file. Perfect for developers who want to showcase their skills and projects in a unique way with blazing-fast performance.
- π₯οΈ Interactive Terminal Interface - Navigate through your portfolio using terminal commands
- π± Fully Responsive - Works perfectly on desktop, tablet, and mobile
- βοΈ Easy Configuration - Everything configurable through
profile.config.ts
- π GitHub Integration - Displays your GitHub stats and projects from static data
- π¨ Customizable Themes - Dark, light, matrix, and cyberpunk themes
- π Blog Support - Built-in blog functionality with MDX support
- π SEO Optimized - Perfect for social media sharing with automatic sitemap generation
- π Lightning Fast - Built with Astro for optimal performance and SEO
- πΎ Smart Caching - GitHub data served from static files for optimal performance
- ποΈ Component-Based - Modular Astro components for easy customization
Note: This Astro version is currently under active development. The terminal command interface and blog features are still being migrated from React to Astro.
For full functionality, please use the React branch which has complete implementations of:
- Interactive terminal commands
- Full blog system with markdown processing
- All interactive features
Contributions Welcome! π Pull requests are highly encouraged to help complete the Astro migration. Check out our issues or submit PRs to help bring these features to the Astro version.
- Node.js 18+
- npm, yarn, pnpm, or bun
-
Clone the repository
git clone https://github.com/iamdhakrey/terminal-portfolio.git cd terminal-portfolio
-
Install dependencies
npm install # or yarn install # or pnpm install # or bun install
-
Configure your profile
Edit
profile.config.ts
with your information:export const profileConfig: ProfileConfig = { profile: { name: "Your Name", username: "yourusername", title: "Full Stack Developer", description: "Passionate developer creating awesome solutions", bio: "Your bio here...", image: "/your-profile-image.jpg", website: "https://yourwebsite.dev", location: "Your Location", email: "your.email@example.com", currentFocus: [ "Building scalable web applications", "Contributing to open source", // ... your current focus areas ], funFact: "Your fun fact here! π" }, // ... more configuration };
-
Update GitHub data
First, install and authenticate with GitHub CLI:
# Install GitHub CLI (if not already installed) # Visit https://cli.github.com/ for installation instructions # Authenticate with GitHub gh auth login # Fetch your GitHub data npm run update-github
This will automatically populate
/public/github-projects.json
with your repositories and stats. -
Start development server
npm run dev
Your site will be available at
http://localhost:4321
-
Build for production
npm run build
The built site will be in the
dist/
directory.
All configuration is done through the profile.config.ts
file. Here's a complete overview:
profile: {
name: "Your Name", // Your full name
username: "yourusername", // GitHub username
title: "Full Stack Developer", // Your professional title
description: "Short description", // Meta description for SEO
bio: "Longer bio text...", // Displayed in about section
image: "/profile.jpg", // Path to your profile image
website: "https://yourwebsite.dev", // Your website URL
location: "Your Location", // Your location
email: "email@example.com", // Your email
currentFocus: ["Item 1", "Item 2"], // What you're currently working on
funFact: "Your fun fact! π" // A fun fact about you
}
socialLinks: {
github: "https://github.com/username",
linkedin: "https://linkedin.com/in/username",
twitter: "https://twitter.com/username",
telegram: "https://t.me/username",
website: "https://yourwebsite.dev",
// Add any social platform
}
skills: [
"JavaScript", "TypeScript", "React", "Node.js",
"Python", "Docker", "AWS", "Linux"
]
terminal: {
hostname: "localhost",
username: "user",
theme: "dark",
welcomeMessage: [
"Welcome to my interactive terminal!",
"Type 'help' to see available commands."
],
customCommands: {
"custom-cmd": {
description: "Custom command description",
output: ["Command output line 1", "Line 2"]
}
}
}
navigation: {
brandName: "yoursite.dev",
brandUrl: "/",
links: [
{ name: "projects", path: "/projects", color: "text-orange-400" },
// ... more navigation links
]
},
footer: {
statusMessage: "Connected",
madeWithLove: {
enabled: true,
text: "Made with β€οΈ and β‘",
location: "Your Location"
}
}
Choose from built-in themes or create your own:
terminal: {
theme: "dark" | "light" | "matrix" | "cyberpunk"
}
theme: {
primaryColor: "#22c55e",
secondaryColor: "#3b82f6",
accentColor: "#eab308",
backgroundColor: "#000000",
// ... more color options
}
This portfolio displays GitHub data from a static JSON file for optimal performance. To update your GitHub data:
-
Install GitHub CLI: https://cli.github.com/
-
Authenticate with GitHub CLI:
gh auth login
npm run update-github
bash scripts/fetch-github-data.sh
Manually update /public/github-projects.json
with your latest repositories.
The script generates a comprehensive JSON structure:
{
"lastUpdated": "2025-07-10T00:00:00Z",
"user": {
"login": "username",
"name": "Your Name",
"bio": "Your bio",
"public_repos": 25,
"followers": 100,
"following": 50
},
"repositories": [...],
"stats": {
"totalRepos": 25,
"totalStars": 150,
"totalForks": 30,
"languages": ["JavaScript", "TypeScript", "Python"]
},
"featured": [...],
"byLanguage": {...}
}
For automatic updates, you can set up a GitHub Action to run the update script and commit the changes periodically.
Astro uses content collections for managing blog posts. Add markdown or MDX files to /src/content/blog/
and configure them in profile.config.ts
.
blogs: {
enabled: true, // Enable/disable blog functionality
featuredPosts: [ // Featured blog posts (shown prominently)
"react-typescript-guide",
"linux_commands",
"sudoko"
],
categories: [ // Available blog categories
"React", "TypeScript", "Linux", "DevOps", "Tutorial"
],
availableBlogs: [ // List of available blog files
"linux_commands.md",
"react-typescript-guide.md",
"sudoko.md"
]
}
The blog system includes powerful linking capabilities to connect related posts:
Reference other blogs in your markdown content using these methods:
{{blog:react-typescript-guide}}
This creates a link with the blog's title as the link text.
{{blog:linux_commands|Check out my Linux guide}}
This creates a link with custom text.
[Custom Link Text](/blogs/react-typescript-guide)
Standard markdown links to blog posts.
- Related Posts: Automatically suggests related content based on title/description similarities
- Navigation: Previous/next post navigation at the bottom of each blog
- Featured Posts: Highlight important posts in the blog list
- Smart Processing: Blog references are automatically converted to proper links
The system provides several utility functions for advanced blog management:
// Get related posts
const related = await getRelatedBlogs('current-blog', 3);
// Generate blog links
const link = createBlogLink('react-guide', 'Custom Text');
// Get navigation
const nav = await getBlogNavigation('current-blog');
// Get all available blog links
const allLinks = await getAllBlogLinks();
-
Create a
.md
or.mdx
file in/src/content/blog/
-
Add frontmatter to your markdown file:
--- title: "Your Blog Post Title" pubDate: "2025-07-10" description: "Brief description of your post" author: "Your Name" tags: ["astro", "tutorial", "web-dev"] --- # Your Content Here You can use MDX components and regular markdown syntax.
-
The blog will be automatically discovered by Astro's content collections
-
Update
featuredPosts
inprofile.config.ts
for prominence
- Content Collections: Astro's type-safe content management
- MDX Support: Full MDX with component support and syntax highlighting
- Featured Posts: Highlight important posts
- Automatic Discovery: Blogs are automatically loaded from content collections
- Responsive Design: Mobile-friendly blog layout
- RSS Feed: Automatically generated RSS feed for your blog
- Table of Contents: Auto-generated for longer posts
- Push to GitHub
- Connect to Vercel
- Deploy automatically with Astro preset
- Build the project:
npm run build
- Deploy the
dist
folder to Netlify - Or use Netlify's Git integration with automatic builds
- Add the GitHub Pages adapter to
astro.config.mjs
:import { defineConfig } from 'astro/config'; export default defineConfig({ output: 'static', base: '/your-repo-name', });
- Build:
npm run build
- Deploy the
dist
folder to GitHub Pages
FROM node:18-alpine as builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
src/
βββ components/ # Astro components
βββ content/ # Content collections (blogs)
βββ layouts/ # Astro layouts
βββ pages/ # Astro pages (file-based routing)
βββ utils/ # Utility functions
βββ assets/ # Static assets
βββ styles/ # CSS styles
βββ data/ # Static data files
public/
βββ github-projects.json # GitHub data
βββ fonts/ # Custom fonts
npm run dev
- Start Astro development server (localhost:4321)npm run build
- Build for productionnpm run preview
- Preview production build locallynpm run astro
- Run Astro CLI commandsnpm run update-github
- Fetch latest GitHub data
- Astro 5 with TypeScript for static site generation
- MDX for enhanced markdown with components
- Tailwind CSS for utility-first styling
- Sharp for optimized image processing
- Highlight.js for syntax highlighting in blogs
- β‘ Lightning-fast builds and rendering with Astro
- π± Mobile-optimized responsive design
- π― Zero JavaScript by default, enhanced progressively
- πΎ Static GitHub data for instant loading
- π SEO optimized with automatic sitemap generation
- πΌοΈ Optimized images with Sharp integration
- Meta tags for social media sharing
- Structured data for search engines
- Optimized images and assets
- Fast loading times
- Mobile-friendly design
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Commit changes:
git commit -m 'Add amazing feature'
- Push to branch:
git push origin feature/amazing-feature
- Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
If you have any questions or need help:
- Check the documentation above
- Search existing Issues
- Create a new issue if needed
- Built with modern web technologies
- Inspired by terminal interfaces
- Thanks to the open source community
β Star this repository if you found it helpful!
π Found a bug? Open an issue
π‘ Have a feature request? Start a discussion