Skip to content

joshuawiebe/portfolio

Repository files navigation

Modern Developer Portfolio

A sleek, modern portfolio template built with Astro and Tailwind CSS.

Features

  • Automatic dark/light mode with system preference detection
  • Multi-language support (EN/DE) with browser language detection
  • Responsive design with modern UI components
  • Smooth section animations and transitions
  • SEO optimized structure
  • Type-safe development with TypeScript
  • Easy configuration through a single file
  • Fast performance with static site generation

Tech Stack

Project Structure

devportfolio/
β”œβ”€β”€ public/
β”‚   └── favicon.svg           # Site favicon
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/           # Astro components
β”‚   β”‚   β”œβ”€β”€ About.astro      # About section
β”‚   β”‚   β”œβ”€β”€ Education.astro  # Education section
β”‚   β”‚   β”œβ”€β”€ Experience.astro # Work experience section
β”‚   β”‚   β”œβ”€β”€ Footer.astro     # Site footer
β”‚   β”‚   β”œβ”€β”€ Header.astro     # Navigation header
β”‚   β”‚   β”œβ”€β”€ Hero.astro       # Hero/intro section
β”‚   β”‚   β”œβ”€β”€ Projects.astro   # Projects showcase
β”‚   β”‚   └── Settings.astro   # Settings modal
β”‚   β”œβ”€β”€ i18n/
β”‚   β”‚   └── translations.ts  # Language translations
β”‚   β”œβ”€β”€ pages/
β”‚   β”‚   └── index.astro     # Main page layout
β”‚   β”œβ”€β”€ store/
β”‚   β”‚   └── theme.ts        # Theme/language state
β”‚   β”œβ”€β”€ styles/
β”‚   β”‚   β”œβ”€β”€ base.css       # Tailwind imports
β”‚   β”‚   └── global.css     # Global styles
β”‚   β”œβ”€β”€ utils/
β”‚   β”‚   β”œβ”€β”€ types.ts       # TypeScript types
β”‚   β”‚   └── constants.ts   # Shared constants
β”‚   └── config.ts          # Site configuration
β”œβ”€β”€ astro.config.mjs       # Astro configuration
β”œβ”€β”€ tailwind.config.mjs    # Tailwind configuration
β”œβ”€β”€ tsconfig.json         # TypeScript configuration
β”œβ”€β”€ postcss.config.cjs    # PostCSS configuration
└── package.json         # Project dependencies

Quick Start

  1. Clone the repository
git clone https://github.com/yourusername/portfolio.git
cd portfolio
  1. Install dependencies
npm install
  1. Start the development server
npm run dev
  1. Build for production
npm run build

Configuration

The site is configured through src/config.ts:

Theme Configuration

theme: {
  accentColor: "#1d4ed8",
  fontFamily: "Inter"
}

### Personal Information
```typescript
name: "Your Name",
title: "Your Job Title",
description: "Brief site description",
social: {
  github: "https://github.com/yourusername",
  linkedin: "https://linkedin.com/in/yourprofile",
  email: "your.email@example.com"
}

Content Sections

{
  about: "Your professional summary",
  skills: ["JavaScript", "React", "Node.js"],
  projects: [{
    name: "Project Name",
    description: "Project description",
    link: "https://github.com/...",
    skills: ["React", "Node.js"]
  }],
  experience: [{
    company: "Company Name",
    title: "Job Title",
    dateRange: "2023 - Present",
    bullets: ["Achievement 1", "Achievement 2"]
  }],
  education: [{
    school: "University Name",
    degree: "Degree Name",
    dateRange: "2018 - 2022",
    achievements: ["Achievement 1", "Achievement 2"]
  }]
}

Internationalization

The site detects the user's preferred language and theme. Available options:

  • Languages: English (EN) and German (DE)
  • Themes: Light and Dark mode

Adding Translations

Add translations in src/i18n/translations.ts:

export const translations = {
  en: {
    nav: {
      about: 'About',
      projects: 'Projects',
      // ...
    },
    // ...
  },
  de: {
    nav: {
      about: 'Über mich',
      projects: 'Projekte',
      // ...
    },
    // ...
  }
};

🎨 Customizing the Theme

Colors

Update the color scheme in src/styles/global.css:

:root {
  --background: 0 0% 100%;
  --foreground: 0 0% 3.9%;
  --primary: 221.2 83.2% 53.3%;
  --secondary: 210 40% 96.1%;
  /* ... */
}

[data-theme="dark"] {
  --background: 0 0% 3.9%;
  --foreground: 0 0% 98%;
  --primary: 217.2 91.2% 59.8%;
  --secondary: 217.2 32.6% 17.5%;
  /* ... */
}

Animations

Customize animations in tailwind.config.mjs:

theme: {
  extend: {
    keyframes: {
      'fade-in': {
        from: { opacity: '0', transform: 'translateY(10px)' },
        to: { opacity: '1', transform: 'translateY(0)' },
      },
      // ...
    },
    animation: {
      'fade-in': 'fade-in 0.5s ease-out forwards',
      // ...
    },
  },
}

πŸš€ Deployment

  1. Update astro.config.mjs with your site URL:
export default defineConfig({
  site: "https://yourusername.github.io/portfolio/",
  base: "/portfolio/",
  // ...
});
  1. Build the site:
npm run build
  1. Deploy the dist folder to your hosting provider

πŸ“ License

This project is licensed under the MIT License - see the LICENSE.md file for details.


#### Education
```typescript
education: [
  {
    school: "University Name",
    degree: "Bachelor of Science in Computer Science",
    dateRange: "2014 - 2018",
    achievements: [
      "Graduated Magna Cum Laude with 3.8 GPA",
      "Dean's List all semesters",
      "President of Computer Science Club"
    ]
  }
]

Icons

The template uses Tabler Icons for all icons. If you wish to add more icons and have it look consistent with what's already there, you can browse through their extensive icon library.

Project Structure

devportfolio/
β”œβ”€β”€ public/
β”‚   └── favicon.svg          # Site favicon
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/          # Astro components
β”‚   β”‚   β”œβ”€β”€ About.astro      # About section
β”‚   β”‚   β”œβ”€β”€ Education.astro  # Education section
β”‚   β”‚   β”œβ”€β”€ Experience.astro # Work experience section
β”‚   β”‚   β”œβ”€β”€ Footer.astro     # Site footer
β”‚   β”‚   β”œβ”€β”€ Header.astro     # Navigation header
β”‚   β”‚   β”œβ”€β”€ Hero.astro       # Hero/intro section
β”‚   β”‚   └── Projects.astro   # Projects showcase
β”‚   β”œβ”€β”€ pages/
β”‚   β”‚   └── index.astro      # Main page layout
β”‚   β”œβ”€β”€ styles/
β”‚   β”‚   └── global.css       # Global styles
β”‚   └── config.ts            # Site configuration
β”œβ”€β”€ astro.config.mjs         # Astro configuration
β”œβ”€β”€ package.json             # Project dependencies
β”œβ”€β”€ tailwind.config.js       # Tailwind configuration
└── tsconfig.json            # TypeScript configuration

Local Development

If you'd like to run it locally:

git clone https://github.com/RyanFitzgerald/devportfolio.git
cd devportfolio
npm install

After that, start up the Astro dev server with:

npm run dev

Deployment

The template can be deployed to any static hosting service easily (and in most cases, completely free). Here are some options:

Want to deploy somewhere else? Find more guides here.

Changelog

To view the changelog, see CHANGELOG.md.

License

This project is fully and completely MIT. See LICENSE.md.

Questions?

Feel free to reach out on X (Twitter) if you have any questions or need help.

About

Hi, I'm a passionate developer focused on full-stack development and Linux. This repository is where I showcase my projects, skills, and everything I learn along my journey.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors