Portfolio CMS: Flask-based Portfolio Management 🚀
This software allows individuals and institutions to set up an easy portfolio/landingpage/homepage to showcase their projects and online presence. It is highly customizable via a YAML configuration file.
Features ✨
- Dynamic Navigation: Easily create dropdown menus and nested links.
- Customizable Cards: Showcase your skills, projects, or services.
- Cache Management: Optimize your assets with automatic caching.
- Responsive Design: Beautiful on any device with Bootstrap.
- Easy Configuration: Update content using a YAML file.
- Command Line Interface: Manage Docker containers with the portfolioCLI.
Access 🌐
Local Access
Access the application locally at http://127.0.0.1:5000.
Getting Started 🏁
Prerequisites 📋
- Docker and Docker Compose installed on your system.
- Basic knowledge of Python and YAML for configuration.
Installation 🛠️
Installation via git clone
- 
Clone the repository: git clone <repository_url> cd <repository_directory>
- 
Update the configuration: Create a config.yamlfile. You can useconfig.sample.yamlas an example (see below for details on the configuration).
- 
Build and run the Docker container: docker-compose up --build
- 
Access your portfolio: 
 Open your browser and navigate to http://localhost:5000.
Installation via Kevin's Package Manager
You can install the portfolio CLI using Kevin's package manager. Simply run:
pkgmgr install portfolio
This will install the CLI tool, making it available system-wide.
Available Commands
After installation, you can access the help information for the CLI by running:
portfolio --help
This command displays detailed instructions on how to use the following commands:
- build: Build the Docker image for the portfolio application.
- up: Start the application using docker-compose (with build).
- down: Stop and remove the Docker container.
- run-dev: Run the container in development mode with hot-reloading.
- run-prod: Run the container in production mode.
- logs: Display the logs of the running container.
- dev: Start the application in development mode using docker-compose.
- prod: Start the application in production mode using docker-compose.
- cleanup: Remove all stopped Docker containers to clean up your Docker environment.
YAML Configuration Guide 🔧
The portfolio is powered by a YAML configuration file (config.yaml). This file allows you to define the structure and content of your site, including cards, navigation, and company details.
YAML Configuration Example 📄
accounts:
  name: Online Accounts
  description: Discover my online presence.
  icon:
    class: fa-solid fa-users
  children:
    - name: Channels
      description: Platforms where I share content.
      icon:
        class: fas fa-newspaper
      children:
        - name: Microblogs
          description: Stay updated with my microblog posts.
          icon:
            class: fa-solid fa-pen-nib
          children:
            - name: Mastodon
              description: Follow my updates on Mastodon.
              icon:
                class: fa-brands fa-mastodon
              url: https://microblog.veen.world/@kevinveenbirkenbach
              identifier: "@kevinveenbirkenbach@microblog.veen.world"
  cards:
    - icon:
        source: https://cloud.veen.world/s/logo_agile_coach_512x512/download
      title: Agile Coach
      text: I lead agile transformations and improve team dynamics through Scrum and Agile Coaching.
      url: https://www.agile-coach.world
      link_text: www.agile-coach.world
company:
  titel: Kevin Veen-Birkenbach
  subtitel: Consulting and Coaching Solutions
  logo:
    source: https://cloud.veen.world/s/logo_face_512x512/download
  favicon:
    source: https://cloud.veen.world/s/veen_world_favicon/download
  address:
    street: Afrikanische Straße 43
    postal_code: DE-13351
    city: Berlin
    country: Germany
  imprint_url: https://s.veen.world/imprint
Understanding the children Key 🔍
The children key allows hierarchical nesting of elements. Each child can itself have children, enabling the creation of multi-level navigation menus or grouped content.
Understanding the link Key 🔗
The link key allows you to reference another part of the YAML configuration by its path, which helps avoid duplication and maintain consistency.
Deployment 🚢
For production deployment, ensure to:
- Use a reverse proxy like NGINX or Apache.
- Secure your site with SSL/TLS.
- Use a production-ready database if required.
License 📜
This project is licensed under the GNU Affero General Public License Version 3. See the LICENSE file for details.
Author ✍️
This software was created by Kevin Veen-Birkenbach.