Skip to content

Commit

Permalink
Upgrade to v1.2.0 (#6)
Browse files Browse the repository at this point in the history
* fixed drawer bug

* add check for PRs

* add typescript
adapt needed changes

* add ColorModeContext
WIP

* add zsuatnd as store for refs
fix bugs

* fix type bug from styled-components
fix typo

* fix scroll

* add badge

* add animation
fix typo
modify README
modify footer

* update packages
update version number for coming release

* fix scroll down indicator border width

* Add translation and add missing projects (#4)

* update to react 18 (#5)

upgraded all packages
fix job description
  • Loading branch information
coolusaHD authored Jan 12, 2023
1 parent 6b4e477 commit 11ffdf2
Show file tree
Hide file tree
Showing 21 changed files with 12,711 additions and 32,635 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/checkCodeSytle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
uses: actions/checkout@v2

- name: Install dependencies frontend
run: npm i
run: npm ci

- name: run prettier
run: npm run prettier-check
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deployAtFTP.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
node-version: '16'

- name: 📦 Install dependencies
run: npm i
run: npm ci

- name: Check code style
run: |
Expand Down
29 changes: 0 additions & 29 deletions .github/workflows/node.js.yml

This file was deleted.

44,699 changes: 12,274 additions & 32,425 deletions package-lock.json

Large diffs are not rendered by default.

58 changes: 31 additions & 27 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,29 +1,32 @@
{
"name": "portfolio",
"version": "1.1.0",
"version": "1.2.0",
"description": "A personal portfolio website",
"author": "Philipp Alber",
"private": true,
"dependencies": {
"@emotion/react": "^11.7.1",
"@emotion/styled": "^11.6.0",
"@fontsource/roboto": "^4.5.1",
"@mui/icons-material": "^5.2.1",
"@mui/lab": "^5.0.0-alpha.62",
"@mui/material": "^5.2.3",
"@mui/styled-engine-sc": "^5.1.0",
"@mui/styles": "^5.2.3",
"@emotion/react": "^11.10.5",
"@emotion/styled": "^11.10.5",
"@fontsource/roboto": "^4.5.8",
"@mui/icons-material": "^5.11.0",
"@mui/material": "^5.11.4",
"@mui/styled-engine-sc": "^5.11.0",
"aos": "^3.0.0-beta.6",
"react": "^17.0.2",
"react-dark-mode-toggle-2": "^2.0.2",
"react-dom": "^17.0.2",
"i18next": "^22.4.9",
"i18next-browser-languagedetector": "^7.0.1",
"i18next-http-backend": "^2.1.1",
"react": "^18.2.0",
"react-dark-mode-toggle-2": "^2.0.8",
"react-dom": "^18.2.0",
"react-error-boundary": "^3.1.4",
"react-i18next": "^12.1.4",
"react-lazily": "^0.9.1",
"react-scripts": "4.0.3",
"react-scripts": "5.0.1",
"react-spinners-kit": "^1.9.1",
"styled-components": "^5.3.3",
"typescript": "^4.6.4",
"zustand": "^4.0.0-rc.1"
"react-world-flags": "^1.5.1",
"styled-components": "^5.3.6",
"typescript": "^4.9.4",
"zustand": "^4.3.1"
},
"scripts": {
"start": "react-scripts start",
Expand Down Expand Up @@ -54,17 +57,18 @@
},
"devDependencies": {
"@types/aos": "^3.0.4",
"@types/jest": "^27.5.1",
"@types/node": "^17.0.34",
"@types/react": "^17.0.40",
"@types/react-dom": "^17.0.12",
"@types/styled-components": "^5.1.25",
"@typescript-eslint/eslint-plugin": "^5.25.0",
"@typescript-eslint/parser": "^5.25.0",
"eslint": "^7.32.0",
"@types/jest": "^29.2.5",
"@types/node": "^18.11.18",
"@types/react": "^18.0.26",
"@types/react-dom": "^18.0.10",
"@types/react-world-flags": "^1.4.2",
"@types/styled-components": "^5.1.26",
"@typescript-eslint/eslint-plugin": "^5.48.1",
"@typescript-eslint/parser": "^5.48.1",
"eslint": "^8.31.0",
"eslint-config-google": "^0.14.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-react": "^7.29.4",
"prettier": "2.6.2"
"eslint-config-prettier": "^8.6.0",
"eslint-plugin-react": "^7.32.0",
"prettier": "2.8.2"
}
}
5 changes: 4 additions & 1 deletion src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import CssBaseline from '@mui/material/CssBaseline';
import * as React from 'react';
import './App.css';
import MainLayout from './components/layout';
import CssBaseline from '@mui/material/CssBaseline';

// init AOS for animations
import AOS from 'aos';
import 'aos/dist/aos.css';
AOS.init();

// import i18n language provider
import './assets/translations/i18n';

// import roboto font
import '@fontsource/roboto/300.css';
import '@fontsource/roboto/400.css';
Expand Down
4 changes: 2 additions & 2 deletions src/assets/styles/globalStyle.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import styled from 'styled-components';
import { keyframes } from 'styled-components';
import styled, { keyframes } from 'styled-components';

export const AboutMeContainer = styled.div`
display: flex;
Expand Down Expand Up @@ -74,6 +73,7 @@ export const ScrollIndicator = styled.div<ScrollIndicatorProps>`
margin-top: -0.7rem;
box-shadow: 0px 0px 1px ${(props) => props.color};
border-radius: 525px;
border: 1px solid ${(props) => props.color};
position: fixed;
left: 50%;
top: 90%;
Expand Down
35 changes: 35 additions & 0 deletions src/assets/translations/i18n.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import Backend from 'i18next-http-backend';

import translationDE from './translation_de.json';
import translationEN from './translation_en.json';

// translations
const resources = {
en: {
translation: translationEN,
},
de: {
translation: translationDE,
},
};

i18n
.use(Backend)
// detect user language
.use(LanguageDetector)
// pass the i18n instance to react-i18next.
.use(initReactI18next)
// init i18next
.init({
fallbackLng: 'de',
debug: true,
interpolation: {
escapeValue: false, // not needed for react as it escapes by default
},
resources,
});

export default i18n;
36 changes: 36 additions & 0 deletions src/assets/translations/translation_de.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"welcome.title": "Wilkommen",
"welcome.title2.1": "zu meinem",
"welcome.title2.2": "Portfolio",
"welcome.title.author": "von Philipp Alber",
"welcome.subtitle.job1": "Full-Stack Entwickler und UI/UX Designer",
"nav.about-me": "Über mich",
"nav.projects": "Projekte",
"nav.source": "Technologien",
"nav.contact": "Kontakt",
"about-me.title": "Über mich:",
"about-me.introduction": "Hallo 👋 Ich bin Philipp",
"about-me.age": "Ich bin {{age}} Jahre alt und studiere Informatik an der ",
"about-me.uni": "Eberhard Karls Universität",
"about-me.uni.location": " in Tübingen.",
"about-me.description1": "Seit ich 16 bin, programmiere ich leidenschaftlich Websites. Mit den Jahren habe ich durch verschiedenste Projekte immer mehr Erfahrungen in Programmiersprachen und der Entwicklung von Web-Applikationen gesammelt.",
"about-me.description2": "Außerhalb meiner IDE findet man mich auch gerne auf dem Fussballfeld oder der Skipiste mit meinen Freunden.",
"projects.title": "Meine Projekte",
"projects.description": "Übersicht über eine Auswahl von Projekten, an denen ich aktiv mitgewirkt habe.",
"projects.legends.private": "Privates Projekt",
"projects.legends.github": "Link zum GitHub Repository (Open-Source)",
"projects.legends.website": "Link zur Projekt-Website",
"projects.orderButler.title": "OrderButler",
"projects.orderButler.description": "Der Order-Butler ist eine Software, um interne Betriebabläufe beim Bewerten von Pokemon Karten zu unterstützten. Dabei arbeiten wir mit einem Digitalen Laufzettel, welcher durch einen QR-Code mit der Bestellung verknüpft wird.",
"projects.HLM.title": "Heuberger Live Ticker App & Manager (HLM)",
"projects.HLM.description": "Die Heuberger Live Ticker App ist, wie der Name schon sagt, eine Liver-Ticker App für das lokale Fussballtunier auf dem Heuberg. Der Manager agiert dabei als Tunierleitungssoftware und verwaltet alle Daten, welche von den Gästen mit Hilfe der App abgerufen werden können.",
"projects.portfolio.title": "Portfolio",
"projects.portfolio.description": "Ein interaktives Porftfolio, welches die Person und deren Projekte schlicht und stilvoll darstellt. Portfolio dient dabei als perfekte Ergänzung zum herkömmlichen Lebenslauf.",
"projects.pollenBot.title": "Pollen Bot für Discord",
"projects.pollenBot.description": "Pollen Bot ist ein Discord Bot, der Pollenfluginformationen per API des DWD einholt und verarbeitet. Die Informationen werden dann in einem Discord-Channel angezeigt.",
"source.title": "Technologien",
"source.description": "Diese Website wurde unter anderem mit folgenden Paketen 📂 enwickelt:",
"source.description2": "Alle Pakete und den kompletten Quellcode findet ihr auf ",
"error.title": "Etwas ist schiefgelaufen",
"error.description": "Bitte laden Sie die Seite erneut."
}
36 changes: 36 additions & 0 deletions src/assets/translations/translation_en.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"welcome.title": "Welcome",
"welcome.title2.1": "to my",
"welcome.title2.2": "portfolio",
"welcome.title.author": "by Philipp Alber",
"welcome.subtitle.job1": "Full-Stack Developer and UI/UX Designer",
"nav.about-me": "About me",
"nav.projects": "Projects",
"nav.source": "Technologies",
"nav.contact": "Contact",
"about-me.title": "About Me:",
"about-me.introduction": "Hello 👋 I'm Philipp",
"about-me.age": "I am {{age}} years old and I study computer science at ",
"about-me.uni": "Eberhard Karls University",
"about-me.uni.location": " at Tübingen.",
"about-me.description1": "Since I was 16, I have been passionate about programming websites. Over the years, I have gained more and more experience in programming languages and web application development through various projects.",
"about-me.description2": "Outside of my IDE, you can also find me enjoying the soccer field or on the ski slope with my friends.",
"projects.title": "My Projects",
"projects.description": "Overview of a selection of projects I have been actively involved in.",
"projects.legends.private": "Private project",
"projects.legends.github": "Link to GitHub repository (open source)",
"projects.legends.website": "Link to project website",
"projects.orderButler.title": "OrderButler",
"projects.orderButler.description": "The Order Butler is a software to support internal operations when evaluating Pokemon cards. In doing so, we work with a Digital Route Sheet, which is linked to the order by a QR code.",
"projects.HLM.title": "Heuberger Live Ticker App & Manager (HLM)",
"projects.HLM.description": "The Heuberger Live Ticker App is, as the name suggests, a liver ticker app for the local football tournament on the Heuberg. The manager acts as the tournament management software and manages all data, which can be accessed by guests using the app.",
"projects.portfolio.title": "Portfolio",
"projects.portfolio.description": "An interactive portfolio that presents the person and their projects in a simple and stylish way. Portfolio serves as a perfect complement to the traditional resume.",
"projects.pollenBot.title": "Pollen Bot for Discord",
"projects.pollenBot.description": "Pollen Bot is a Discord bot that retrieves and processes pollen information via API from the DWD. The information is then displayed in a Discord channel.",
"source.title": "Technologies",
"source.description": "This website was developed using the following packages 📂 among others:",
"source.description2": "All packages and the complete source code can be found on ",
"error.title": "Something went wrong",
"error.description": "Please reload the page"
}
61 changes: 61 additions & 0 deletions src/components/languages.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import TranslateIcon from '@mui/icons-material/Translate';
import { IconButton, ListItemIcon, ListItemText, Menu, MenuItem, MenuList } from '@mui/material';
import React from 'react';
import Flag from 'react-world-flags';
import i18n from '../assets/translations/i18n';

export type SupportedLanguages = 'en' | 'de';

interface Languages {
code: SupportedLanguages;
isoCountryCode: string;
name: string;
}

const languages: Languages[] = [
{
code: 'en',
name: 'English',
isoCountryCode: '826',
},
{
code: 'de',
name: 'Deutsch',
isoCountryCode: '276',
},
];

export const LanguagesSwitch = (): React.ReactElement => {
const changeLanguage = (lng: SupportedLanguages) => {
i18n.changeLanguage(lng);
handleClose();
};
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
const open = Boolean(anchorEl);
const openMenu = (event: React.MouseEvent<HTMLButtonElement>) => {
setAnchorEl(event.currentTarget);
};
const handleClose = () => {
setAnchorEl(null);
};

return (
<>
<IconButton onClick={openMenu}>
<TranslateIcon />
</IconButton>
<Menu anchorEl={anchorEl} open={open} onClose={handleClose}>
<MenuList>
{languages.map((language) => (
<MenuItem key={language.code} onClick={() => changeLanguage(language.code)}>
<ListItemIcon>
<Flag code={language.isoCountryCode} height="15" />
</ListItemIcon>
<ListItemText>{language.name}</ListItemText>
</MenuItem>
))}
</MenuList>
</Menu>
</>
);
};
4 changes: 2 additions & 2 deletions src/components/loading.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react';
import { PongSpinner } from 'react-spinners-kit';
import { CubeSpinner } from 'react-spinners-kit';
/**
* Render Laoding Component
*
Expand All @@ -8,7 +8,7 @@ import { PongSpinner } from 'react-spinners-kit';
export default function FallbackLoadingScreen(): React.ReactElement {
return (
<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100vh' }}>
<PongSpinner size={100} color="#319da0" loading={true} />
<CubeSpinner size={150} frontColor="#319da0" backColor="#000" loading={true} />
</div>
);
}
Loading

0 comments on commit 11ffdf2

Please sign in to comment.