Personal portfolio website for Fredrick Amnehagen - advertising to potential employers
Find a file
2026-04-08 11:51:38 +02:00
public Clean up duplicate tagline functions 2026-04-08 11:51:38 +02:00
.gitignore Initial commit: Add GPL2 license and README 2026-04-06 00:04:25 +02:00
LICENSE Initial commit: Add GPL2 license and README 2026-04-06 00:04:25 +02:00
README.md Initial commit: Add GPL2 license and README 2026-04-06 00:04:25 +02:00

Fredrick Amnehagen Portfolio Website

A personal portfolio website designed to showcase professional experience, skills, and achievements to potential employers and other interested parties.

Tech Stack

  • Backend: Laravel 12.x with Inertia.js
  • Frontend: Vue 3 with Composition API
  • Styling: Tailwind CSS with Material Design and Gestalt design principles
  • Database: PostgreSQL
  • Cache: Valkey (Redis alternative)
  • Object Storage: Garage (S3-compatible)
  • Analytics: Umami
  • Email: Laravel Mail (SMTP)

Project Structure

├── app/                    # Laravel application
│   ├── Http/              # Controllers, Middleware
│   ├── Models/            # Eloquent models
│   └── ...
├── bootstrap/              # Laravel bootstrap files
├── config/                 # Configuration files
├── database/               # Migrations and seeders
├── public/                 # Public assets
├── resources/              # Views, JS, CSS
│   ├── js/                 # Vue components
│   └── css/                # Tailwind styles
├── routes/                  # Route definitions
├── storage/                # Logs, cache, etc.
└── vendor/                  # Composer dependencies

Getting Started

Prerequisites

  • PHP 8.4+
  • Composer
  • Node.js 20+
  • PostgreSQL 15+
  • Valkey
  • Garage (S3)

Installation

  1. Clone the repository:

    git clone ssh://git@forgejo.loopaware.com:2222/fredrick/fredrick-amnehagen-com-site.git
    cd fredrick-amnehagen-com-site
    
  2. Install PHP dependencies:

    composer install
    
  3. Install Node.js dependencies:

    npm install
    
  4. Copy environment file:

    cp .env.example .env
    
  5. Configure environment variables in .env:

    DB_CONNECTION=pgsql
    DB_HOST=127.0.0.1
    DB_PORT=5432
    DB_DATABASE=fredrick_portfolio
    DB_USERNAME=fredrick_user
    DB_PASSWORD=your_secure_password
    
    CACHE_DRIVER=valkey
    QUEUE_CONNECTION=valkey
    
    S3_KEY=your_garage_key
    S3_SECRET=your_garage_secret
    S3_ENDPOINT=http://garage:8000
    S3_REGION=local
    S3_BUCKET=portfolio
    
    MAIL_MAILER=smtp
    MAIL_HOST=smtp.mailtrap.io
    MAIL_PORT=2525
    MAIL_USERNAME=null
    MAIL_PASSWORD=null
    
  6. Generate application key:

    php artisan key:generate
    
  7. Run migrations:

    php artisan migrate
    
  8. Build frontend assets:

    npm run build
    
  9. Start the development server:

    php artisan serve
    

Design System

Color Palette

The site uses a Material Design and Gestalt-inspired palette with smooth animations:

  • Primary: Deep Blue (#1565C0)
  • Secondary: Teal (#00897B)
  • Accent: Amber (#FFB300)
  • Background: Light Gray (#FAFAFA) / Dark (#121212)
  • Surface: White (#FFFFFF) / Dark Gray (#1E1E1E)
  • Text: Dark (#212121) / Light (#FAFAFA)

Typography

  • Headings: Inter (sans-serif)
  • Body: Inter (sans-serif)
  • Code: JetBrains Mono

Animations

  • Smooth transitions (300ms ease-in-out)
  • Subtle hover effects
  • Page load animations
  • Scroll-triggered reveals

Features

  • Responsive design (mobile-first)
  • Dark/Light mode toggle
  • Skills and experience showcase
  • Project portfolio
  • Contact form
  • Analytics integration (Umami)
  • PDF resume download

License

This project is licensed under the GNU General Public License v2.0 only. See the LICENSE file for details.

Author

Fredrick Amnehagen

Acknowledgments

  • Design inspired by Material Design guidelines
  • Gestalt principles for visual organization
  • Laravel and Vue.js communities