GithubHelp home page GithubHelp logo

kielx / terminal-portfolio Goto Github PK

View Code? Open in Web Editor NEW
98.0 4.0 25.0 14.21 MB

Terminal-portfolio - ideal for showcasing software developer projects.

Home Page: https://pantak.net

License: MIT License

JavaScript 66.90% SCSS 32.35% CSS 0.75%
gatsby gatsbyjs react portfolio portfolio-site terminal-portfolio terminal-based-portfolio terminal-style hacker-portfolio portfolio-website

terminal-portfolio's Introduction

๐Ÿ’ป Terminal Portfolio

Terminal Portfolio is as the name suggests a terminal-themed portfolio showcasing a bit about myself and my projects. It's lightning-fast featuring nearly perfect Lighthouse Scores and clean UI and good UX.

On Desktop the portfolio items will be displayed with Winbox instances allowing users to resize, move and treat them as separate instances of 'terminal'. On Mobile, the portfolio items will be displayed as static sites generated by Gatsby for better User Experience and window controls of the device.

View Live ยท Found a Bug ยท Request Feature

App Screenshot

Table of Contents

  1. Built With
  2. Getting Started
  3. Usage
  4. License
  5. Contact

Built With

Getting Started

This repo was created and designed to serve as my personal portfolio. Hovewer you can clone and use it as you see fit. To get a local copy up and running follow these simple steps.

Prerequisites

  • npm

    npm install npm@latest -g
    npm install --global yarn

Installation

  1. Clone the terminal portfolio

    git clone https://github.com/Kielx/terminal-portfolio.git
  2. Install NPM packages

    yarn install

Usage

Now that the portfolio is installed you can run it locally and make it your own. Where do you start?

Projects

The list of projects and mini-projects are generated automatically by Gatsby from markdown files in this folder. Set up the list of your projects by opening /src/markdown-pages/ projects folder. Next, you should delete all of my projects while leaving one .md file as a template. Then update it accordingly:

/* src/markdown-pages/projects/your-project-name.md */
---
slug: "projects/country-quiz"
nameOfClass: "projects-items"
title: "Country Quiz"
listName: "๐ŸŒŽ /Country Quiz"
popupImageSrc: "country-quiz.webp"
popupImageAlt: "Country Quiz screenshot"
popupLiveLink: "https://country-quiz.pantak.net/"
popupGithubLink: "https://github.com/Kielx/country-quiz"
techIcons: [
        "react",
        "html5",
        "css3",
        "tailwindcss",
      ]
---

The project description goes here.

This is the frontmatter of the .md file. The rendered project will display information based on the contents of this part of .md file.

  • Slug is the link that Gatsby will generate for the page.
  • nameOfClass is the class name of the item in the project's lits. I've split projects into two lists - projects-items and mini-projects. If you would like to add a new project you can stick with projects-items if you want it to be a mini-project just add mini-project to the class name like this nameOfClass: "projects-items miniProjects".
  • title - The title of the project that will be displayed inside Window
  • List name - the name that will be displayed in the main terminal window
  • popupImageSrc - the image that will be displayed in the popup window. It should be an image that is inside the /static folder.
  • techIcons - an array of tech icons that will be displayed in popup window. Just add slugs of technologies that you want from Simple Icons Slugs

The second part of .md file contains a description that you can provide for your project as you see fit.

About

The same rules as for projects apply to the about page.

Colors and styling

Changing colors couldn't be easier. Just adjust colors in /src/styles/styles.scss file. The default theme is black so update the colors as you see fit.

/* src/styles/styles.scss */
:root {
  --primaryText: #ffc600;
  --secondaryText: #ccc;
  --linkText: #047be3;
  --bg: #1b2d3a;
  --windowBg: #193549;
  --focusBg: hsl(205, 51%, 16%);
  --borderColor: black;
}

All colors should be self-explanatory except for:

  • bg - this is the color of the outer background
  • windowBg - this is the color of displayed windows
  • focusBg - the color of focused window title bars

Gatsby config

You should update file /gatsby-config.js to match your project. You should change siteMetada and gatsby-plugin-manifest where you should provide an icon for PWA that should be included in src/images/your-image.jpg. Finally be sure to change your GTAG in gatsby config - if you plan to use google analytics. Otherwise you are free to remove the plugin entireley by removing entry for gatsby-plugin-google-gtag

Contact Form

There are many services that you can use to run your contact form. In my example, I used AWS API Gateway + AWS Lambda Function + AWS SES because it's the cheapest of all the options and scales well. It isn't the easiest option to set up however. For a detailed guide on how to set up and use the contact form you can use the following link

Alternatively, you can use Twilio Sendgrid or capture the form directly from Netlify forms if you host your version there.

ENV Variables

You can set environment variables in .env.development file for local development, and .env.production for production. Also you will need to set them up in netlify if you plan to deploy to their hosting.

GATSBY_AWS_CONTACT_FORM_API_URL = 'Your AWS API form url' - this is the url of the form that will be used to send emails from the contact form.
GATSBY_AWS_CONTACT_FORM_X_API_KEY = 'Your AWS API form key' - this is the key of the form that will be used to send emails from the contact form.
GATSBY_GOOGLE_GTAG = 'Your Google GTAG' - this is the GTAG that will be used to track your site if you decide to use google analytics.
NODE_VERSION = '14' - this is the node version that will be used to build your project. This variable is only needed when you are using netlify.

Additional changes

Next you should update following components: /src/components/layout - Insert your name.
/src/components/header - Change h1 with your own name.

Change typewriter typeString to your needs.

// src/components/header.js
 <Typewriter
              style={{ marginTop: 0, paddingTop: 0 }}
              options={{
                deleteSpeed: "natural",
              }}
              onInit={typewriter => {
                typewriter
                  .typeString("Software Developer")
                  .pauseFor(2500)
                  .deleteAll()
                  .typeString("Problem solver")
                  .pauseFor(2500)
                  .deleteAll()
                  .typeString("Krzysztof Pantak")
                  .callFunction(() => {
                    setIsLoaded(true)
                  })
                  .start()
              }}

License

Distributed under MIT License. See LICENSE for more information.

Acknowledgments

Contact

[email protected]

Star History

Star History Chart

terminal-portfolio's People

Contributors

kielx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

terminal-portfolio's Issues

Clickable external link in desktop view doesn't work

Adding an external site or subdomain in the slug will not open that link in the desktop view once clicked, and still open the terminal winbox window. However, in the mobile view, it does open and work as expected.
I believe because once it checks for mobile resolution, it does this

const infoMobile = data.info.edges.map(item => ( <li key={item.node.frontmatter.title} className="infoItem"> <Link className="popupWindowLinkButton" style={{ cursor: "pointer" }} to={item.node.frontmatter.slug} > {item.node.frontmatter.listName} </Link> </li> ))

Where the slug becoming the link.
How to have some of the pages clickable to external sites in the desktop view as if it's in the mobile one, while also the rest of the pages remain with the current setup (opening in the winbox window)?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.