Run prettier

This commit is contained in:
Kevin Kandlbinder 2021-10-18 16:57:20 +02:00
parent b50b7d83c3
commit 0b5a905ae6
20 changed files with 452 additions and 352 deletions

View file

@ -23,5 +23,11 @@ module.exports = {
height: "168 cm",
nationality: "Germany",
personImage: "./content/images/kevin-kandlbinder-04.jpg",
sameAs: ["https://mastodon.1in1.net/@kevin", "https://github.com/Unkn0wnCat", "https://unkn0wncat.net/", "https://twitter.com/@Unkn0wnKevin", "https://unsplash.com/@unkn0wncat"]
sameAs: [
"https://mastodon.1in1.net/@kevin",
"https://github.com/Unkn0wnCat",
"https://unkn0wncat.net/",
"https://twitter.com/@Unkn0wnKevin",
"https://unsplash.com/@unkn0wncat",
],
};

View file

@ -23,7 +23,7 @@ module.exports = {
height: extConfig.height,
nationality: extConfig.nationality,
personImage: extConfig.personImage,
sameAs: extConfig.sameAs
sameAs: extConfig.sameAs,
},
plugins: [
`gatsby-plugin-eslint`,
@ -34,15 +34,15 @@ module.exports = {
{
resolve: `gatsby-plugin-remote-images`,
options: {
nodeType: 'SocialsJson',
imagePath: 'image',
nodeType: "SocialsJson",
imagePath: "image",
},
},
{
resolve: `gatsby-plugin-remote-images`,
options: {
nodeType: 'FriendsJson',
imagePath: 'imageURL',
nodeType: "FriendsJson",
imagePath: "imageURL",
},
},
{

View file

@ -1,45 +1,45 @@
{
"siteDescription": "Hallo, ich bin Kevin Kandlbinder, ein Entwickler und Hobby-Fotograf aus Norddeutschland.",
"imprint": "Impressum",
"datasec": "Datenschutz",
"disclaimer": "Disclaimer",
"projects": "Projekte",
"project": "Projekt",
"social": "Soziales",
"homeHello": "Hallo, ich bin",
"homeMe": "Ich bin",
"homeWebDeveloper": "Web Developer",
"homeMyLocation": "Quickborn, Schleswig-Holstein, Deutschland",
"donationCatchphrase": "Gefällt dir was du siehst? Spende doch etwas.",
"homeImageCredit": "Portrait aufgenommen von Jannik Kiel",
"de": "Deutsch",
"en": "Englisch",
"projectAboutHeader": "Über {{projectName}}",
"projectViewGitHub": "Auf GitHub anschauen",
"projectViewWebsite": "Projekt-Website anschauen",
"projectsDescription": "Das ist woran ich grade arbeite oder woran ich gearbeitet habe.",
"projectView": "Anschauen",
"socialDescriptionWithLink": "Finde mich auf anderen Plattformen oder <1>besuche meine Freunde</1>!",
"socialDescription": "Finde mich auf anderen Plattformen!",
"friends": "Freunde",
"friendsDescription": "In dieser Liste stehen Freunde von mir und meiner Seite. Schau doch bei ihnen mal rein, wenn du mehr interessante Projekte sehen willst.",
"donateThanksText": "Ich finde es schön, dass du meine Arbeit schön findest und das zeigst! Sende mir gerne eine E-Mail an <1>{{contactEmail}}</1> wenn du mit mir über irgendwas reden möchtest!",
"donateThanks": "Danke für die Spende!",
"donateDescription": "Hey! Es sieht so aus als würdest du über eine Spende nachdenken. Das ist nett! Wenn du ein bestimmtes Projekt unterstützen willst, schreibe deine Wünsche gerne in den Spendenkommentar.",
"donate": "Spenden",
"featuredProjects": "Vorgestellte Projekte",
"seeMore": "Mehr Projekte erkunden",
"donateGitHub": "Du kannst mich mit dem folgenden Button ganz einfach über GitHub Sponsors unterstützen!",
"donatePayPal": "Wenn du mich lieber über PayPal unterstützen willst ist hier der Button für dich:",
"sponsorGitHub": "Über GitHub unterstützen",
"mySkills": "Meine Fähigkeiten",
"about": "Über",
"explore": "Erkunde",
"myProjects": "meine Projekte",
"discover": "Entdecke",
"mySocials": "meine Accounts",
"learn": "Erfahre",
"moreAboutMe": "mehr über mich",
"home": "Home",
"menu": "Menü"
"siteDescription": "Hallo, ich bin Kevin Kandlbinder, ein Entwickler und Hobby-Fotograf aus Norddeutschland.",
"imprint": "Impressum",
"datasec": "Datenschutz",
"disclaimer": "Disclaimer",
"projects": "Projekte",
"project": "Projekt",
"social": "Soziales",
"homeHello": "Hallo, ich bin",
"homeMe": "Ich bin",
"homeWebDeveloper": "Web Developer",
"homeMyLocation": "Quickborn, Schleswig-Holstein, Deutschland",
"donationCatchphrase": "Gefällt dir was du siehst? Spende doch etwas.",
"homeImageCredit": "Portrait aufgenommen von Jannik Kiel",
"de": "Deutsch",
"en": "Englisch",
"projectAboutHeader": "Über {{projectName}}",
"projectViewGitHub": "Auf GitHub anschauen",
"projectViewWebsite": "Projekt-Website anschauen",
"projectsDescription": "Das ist woran ich grade arbeite oder woran ich gearbeitet habe.",
"projectView": "Anschauen",
"socialDescriptionWithLink": "Finde mich auf anderen Plattformen oder <1>besuche meine Freunde</1>!",
"socialDescription": "Finde mich auf anderen Plattformen!",
"friends": "Freunde",
"friendsDescription": "In dieser Liste stehen Freunde von mir und meiner Seite. Schau doch bei ihnen mal rein, wenn du mehr interessante Projekte sehen willst.",
"donateThanksText": "Ich finde es schön, dass du meine Arbeit schön findest und das zeigst! Sende mir gerne eine E-Mail an <1>{{contactEmail}}</1> wenn du mit mir über irgendwas reden möchtest!",
"donateThanks": "Danke für die Spende!",
"donateDescription": "Hey! Es sieht so aus als würdest du über eine Spende nachdenken. Das ist nett! Wenn du ein bestimmtes Projekt unterstützen willst, schreibe deine Wünsche gerne in den Spendenkommentar.",
"donate": "Spenden",
"featuredProjects": "Vorgestellte Projekte",
"seeMore": "Mehr Projekte erkunden",
"donateGitHub": "Du kannst mich mit dem folgenden Button ganz einfach über GitHub Sponsors unterstützen!",
"donatePayPal": "Wenn du mich lieber über PayPal unterstützen willst ist hier der Button für dich:",
"sponsorGitHub": "Über GitHub unterstützen",
"mySkills": "Meine Fähigkeiten",
"about": "Über",
"explore": "Erkunde",
"myProjects": "meine Projekte",
"discover": "Entdecke",
"mySocials": "meine Accounts",
"learn": "Erfahre",
"moreAboutMe": "mehr über mich",
"home": "Home",
"menu": "Menü"
}

View file

@ -1,45 +1,45 @@
{
"siteDescription": "Hello, I am Kevin Kandlbinder, a developer and hobby photographer from northern Germany.",
"imprint": "Imprint",
"datasec": "Data Protection",
"disclaimer": "Disclaimer",
"projects": "Projects",
"project": "Project",
"social": "Social",
"homeHello": "Hello, I am",
"homeMe": "I am",
"homeWebDeveloper": "a web developer",
"homeMyLocation": "Quickborn, Schleswig-Holstein, Germany",
"donationCatchphrase": "Like what you're seeing? Consider donating.",
"homeImageCredit": "Portrait taken by Jannik Kiel",
"de": "German",
"en": "English",
"projectAboutHeader": "About {{projectName}}",
"projectViewGitHub": "View on GitHub",
"projectViewWebsite": "View Project-Website",
"projectsDescription": "This is what I am working on or have worked on.",
"projectView": "View",
"socialDescriptionWithLink": "Find me on other platforms or <1>visit my friends</1>!",
"socialDescription": "Find me on other platforms!",
"friends": "Friends",
"friendsDescription": "In this list you can find friends of mine and this site. Feel free to check them out for more interesting projects.",
"donate": "Donate",
"donateDescription": "Hey! It looks like you're thinking about donating to me. That's nice of you! If you want your donation to go towards a specific project, feel free to write your wishes into the donation comment.",
"donateThanks": "Thanks for donating!",
"donateThanksText": "I really appreciate you appreciating my work and showing it! Feel free to mail me at <1>{{contactEmail}}</1> if you have anything you want to talk about!",
"featuredProjects": "Featured Projects",
"seeMore": "Explore more Projects",
"donateGitHub": "You can very easily support me via GitHub Sponsors using the following button!",
"donatePayPal": "If you'd rather support me via PayPal the following button is for you:",
"sponsorGitHub": "Sponsor using GitHub",
"mySkills": "My Skills",
"about": "About",
"explore": "Explore",
"myProjects": "my projects",
"discover": "Discover",
"mySocials": "my socials",
"learn": "Learn",
"moreAboutMe": "more about me",
"home": "Home",
"menu": "Menu"
"siteDescription": "Hello, I am Kevin Kandlbinder, a developer and hobby photographer from northern Germany.",
"imprint": "Imprint",
"datasec": "Data Protection",
"disclaimer": "Disclaimer",
"projects": "Projects",
"project": "Project",
"social": "Social",
"homeHello": "Hello, I am",
"homeMe": "I am",
"homeWebDeveloper": "a web developer",
"homeMyLocation": "Quickborn, Schleswig-Holstein, Germany",
"donationCatchphrase": "Like what you're seeing? Consider donating.",
"homeImageCredit": "Portrait taken by Jannik Kiel",
"de": "German",
"en": "English",
"projectAboutHeader": "About {{projectName}}",
"projectViewGitHub": "View on GitHub",
"projectViewWebsite": "View Project-Website",
"projectsDescription": "This is what I am working on or have worked on.",
"projectView": "View",
"socialDescriptionWithLink": "Find me on other platforms or <1>visit my friends</1>!",
"socialDescription": "Find me on other platforms!",
"friends": "Friends",
"friendsDescription": "In this list you can find friends of mine and this site. Feel free to check them out for more interesting projects.",
"donate": "Donate",
"donateDescription": "Hey! It looks like you're thinking about donating to me. That's nice of you! If you want your donation to go towards a specific project, feel free to write your wishes into the donation comment.",
"donateThanks": "Thanks for donating!",
"donateThanksText": "I really appreciate you appreciating my work and showing it! Feel free to mail me at <1>{{contactEmail}}</1> if you have anything you want to talk about!",
"featuredProjects": "Featured Projects",
"seeMore": "Explore more Projects",
"donateGitHub": "You can very easily support me via GitHub Sponsors using the following button!",
"donatePayPal": "If you'd rather support me via PayPal the following button is for you:",
"sponsorGitHub": "Sponsor using GitHub",
"mySkills": "My Skills",
"about": "About",
"explore": "Explore",
"myProjects": "my projects",
"discover": "Discover",
"mySocials": "my socials",
"learn": "Learn",
"moreAboutMe": "more about me",
"home": "Home",
"menu": "Menu"
}

View file

@ -54,10 +54,10 @@
justify-content: center;
text-shadow: 0 0 10px black;
@media(prefers-color-scheme: light) {
@media (prefers-color-scheme: light) {
background-color: $accentColor;
}
svg {
margin-left: 10px;
}

View file

@ -7,7 +7,11 @@ export default function LanguageSwitcher() {
const { languages, originalPath } = useI18next();
return (
<div className={styles.languageModal} id="languageChooser" role="dialog">
<div
className={styles.languageModal}
id="languageChooser"
role="dialog"
>
<div className={styles.languageModalInner}>
<h2>
Languages (

View file

@ -7,44 +7,55 @@ import { createPortal } from "react-dom";
import * as styles from "./navigation.module.scss";
import { X } from "lucide-react";
import { Fade as Hamburger } from 'hamburger-react';
import { Fade as Hamburger } from "hamburger-react";
const OffScreenNav = ({active, close}) => {
if(typeof window === "undefined") {
const OffScreenNav = ({ active, close }) => {
if (typeof window === "undefined") {
return null;
}
return createPortal(<div className={styles.offscreenNav + " " + (active ? styles.active : "")}>
<div className={styles.inner}>
<button className={styles.close} onClick={close}><X/></button>
<span><Trans>menu</Trans></span>
<Link to="/" activeClassName={styles.active}>
<Trans>home</Trans>
</Link>
<Link
id="navBtnProjects"
to="/about"
activeClassName={styles.active}
>
<Trans>about</Trans>
</Link>
<Link
id="navBtnProjects"
to="/projects"
activeClassName={styles.active}
>
<Trans>projects</Trans>
</Link>
<Link
id="navBtnSocial"
to="/social"
activeClassName={styles.active}
>
<Trans>social</Trans>
</Link>
</div>
</div>, window.document.body)
}
return createPortal(
<div
className={
styles.offscreenNav + " " + (active ? styles.active : "")
}
>
<div className={styles.inner}>
<button className={styles.close} onClick={close}>
<X />
</button>
<span>
<Trans>menu</Trans>
</span>
<Link to="/" activeClassName={styles.active}>
<Trans>home</Trans>
</Link>
<Link
id="navBtnProjects"
to="/about"
activeClassName={styles.active}
>
<Trans>about</Trans>
</Link>
<Link
id="navBtnProjects"
to="/projects"
activeClassName={styles.active}
>
<Trans>projects</Trans>
</Link>
<Link
id="navBtnSocial"
to="/social"
activeClassName={styles.active}
>
<Trans>social</Trans>
</Link>
</div>
</div>,
window.document.body
);
};
const Navigation = ({ isHome }) => {
let [atTop, setAtTop] = useState(false);
@ -96,7 +107,10 @@ const Navigation = ({ isHome }) => {
}
>
<nav className={styles.topBarInner}>
<OffScreenNav active={offscreenNavActive} close={closeOffscreenNav} />
<OffScreenNav
active={offscreenNavActive}
close={closeOffscreenNav}
/>
<StaticQuery
query={graphql`
query {
@ -108,7 +122,11 @@ const Navigation = ({ isHome }) => {
}
`}
render={(data) => (
<Link to="/" activeClassName={styles.active} className={styles.logo}>
<Link
to="/"
activeClassName={styles.active}
className={styles.logo}
>
{data.site.siteMetadata.title}
</Link>
)}
@ -135,7 +153,14 @@ const Navigation = ({ isHome }) => {
>
<Trans>social</Trans>
</Link>
<div className={styles.hamburger}><Hamburger toggle={setOffscreenNavActive} toggled={offscreenNavActive} rounded size={30} /></div>
<div className={styles.hamburger}>
<Hamburger
toggle={setOffscreenNavActive}
toggled={offscreenNavActive}
rounded
size={30}
/>
</div>
</nav>
</div>
);

View file

@ -13,7 +13,7 @@
color: white;
overflow: auto;
opacity: 0;
transition: opacity .25s, left .25s;
transition: opacity 0.25s, left 0.25s;
pointer-events: none;
overscroll-behavior: contain;
@ -23,7 +23,7 @@
pointer-events: auto;
}
@media(prefers-color-scheme: light) {
@media (prefers-color-scheme: light) {
background-color: rgba($lightBackground, 0.9);
color: black;
}
@ -61,7 +61,7 @@
border-left: 3px solid white;
border-right: 3px solid white;
@media(prefers-color-scheme: light) {
@media (prefers-color-scheme: light) {
border-left: 3px solid black;
border-right: 3px solid black;
}
@ -113,7 +113,7 @@
display: none;
height: 43px;
@media(max-width: 500px) {
@media (max-width: 500px) {
display: block;
}
}
@ -139,7 +139,7 @@
}
}
@media(max-width: 500px) {
@media (max-width: 500px) {
&:not(.logo) {
display: none;
}

View file

@ -2,7 +2,7 @@ import React from "react";
import PropTypes from "prop-types";
import { Helmet } from "gatsby-plugin-react-i18next";
import { useStaticQuery, graphql } from "gatsby";
import { useLocation } from "@reach/router"
import { useLocation } from "@reach/router";
import { useTranslation } from "gatsby-plugin-react-i18next";
import useSiteMetadata from "../helpers/useSiteMetadata";
@ -27,58 +27,60 @@ function SEO({ description, meta, title, speakable, image, children }) {
const siteMeta = useSiteMetadata();
const location = useLocation();
return (
<Helmet
title={title}
titleTemplate={`%s | ${site.siteMetadata.title}`}
>
<Helmet title={title} titleTemplate={`%s | ${site.siteMetadata.title}`}>
<meta
name="battery-savings"
content="allow-reduced-framerate"
></meta>
{
[
{
name: `description`,
content: metaDescription,
},
{
property: `og:title`,
content: title,
},
{
property: `og:description`,
content: metaDescription,
},
{
property: `og:type`,
content: `website`,
},
{
name: `twitter:card`,
content: `summary`,
},
{
name: `twitter:creator`,
content: site.siteMetadata.author,
},
{
name: `twitter:title`,
content: title,
},
{
name: `twitter:description`,
content: metaDescription,
},
{
name: "keywords",
content: site.siteMetadata.keywords,
},
].concat(meta).map((m) => {
return <meta key={m.name} name={m.name} content={m.content}></meta>;
})
}
{[
{
name: `description`,
content: metaDescription,
},
{
property: `og:title`,
content: title,
},
{
property: `og:description`,
content: metaDescription,
},
{
property: `og:type`,
content: `website`,
},
{
name: `twitter:card`,
content: `summary`,
},
{
name: `twitter:creator`,
content: site.siteMetadata.author,
},
{
name: `twitter:title`,
content: title,
},
{
name: `twitter:description`,
content: metaDescription,
},
{
name: "keywords",
content: site.siteMetadata.keywords,
},
]
.concat(meta)
.map((m) => {
return (
<meta
key={m.name}
name={m.name}
content={m.content}
></meta>
);
})}
<script
async
defer
@ -86,40 +88,45 @@ function SEO({ description, meta, title, speakable, image, children }) {
src="https://analytics.kevink.dev/js/plausible.js"
></script>
{
image && [
<meta name="twitter:image" content={siteMeta.siteUrl + image} key="twimg"/>,
<meta name="og:image" content={siteMeta.siteUrl + image} key="ogimg"/>,
]
}
{image && [
<meta
name="twitter:image"
content={siteMeta.siteUrl + image}
key="twimg"
/>,
<meta
name="og:image"
content={siteMeta.siteUrl + image}
key="ogimg"
/>,
]}
<script type="application/ld+json">
{JSON.stringify({
"@context": "https://schema.org/",
"@type": "WebPage",
"name": title,
"url": siteMeta.siteUrl+location.pathname,
"speakable": speakable,
"image": siteMeta.siteUrl + image,
"about": {
name: title,
url: siteMeta.siteUrl + location.pathname,
speakable: speakable,
image: siteMeta.siteUrl + image,
about: {
"@type": "Person",
"name": siteMeta.givenName + " " + siteMeta.familyName,
"givenName": siteMeta.givenName,
"familyName": siteMeta.familyName,
"birthDate": siteMeta.birthDate,
"address": siteMeta.address,
"email": siteMeta.contactEmail,
"telephone": siteMeta.contactPhone,
"gender": siteMeta.gender,
"height": siteMeta.height,
"nationality": {
name: siteMeta.givenName + " " + siteMeta.familyName,
givenName: siteMeta.givenName,
familyName: siteMeta.familyName,
birthDate: siteMeta.birthDate,
address: siteMeta.address,
email: siteMeta.contactEmail,
telephone: siteMeta.contactPhone,
gender: siteMeta.gender,
height: siteMeta.height,
nationality: {
"@type": "Country",
"name": siteMeta.nationality
name: siteMeta.nationality,
},
"image": siteMeta.siteUrl + "/owner.jpg",
"sameAs": siteMeta.sameAs
}
image: siteMeta.siteUrl + "/owner.jpg",
sameAs: siteMeta.sameAs,
},
})}
</script>
@ -139,7 +146,7 @@ SEO.propTypes = {
title: PropTypes.string.isRequired,
speakable: PropTypes.any,
image: PropTypes.string,
children: PropTypes.any
children: PropTypes.any,
};
export default SEO;

View file

@ -1,37 +1,37 @@
import { useStaticQuery, graphql } from 'gatsby';
import { useStaticQuery, graphql } from "gatsby";
const useSiteMetadata = () => {
const { site } = useStaticQuery(
graphql`
query {
site {
siteMetadata {
title
keywords
author
siteUrl
payPalMail
contactEmail
contactPhone
mapsLink
contactTwitter
contactGitHub
contactMastodon
contactMastodonHref
givenName
familyName
birthDate
address
gender
height
nationality
sameAs
}
}
}
`,
);
return site.siteMetadata;
const { site } = useStaticQuery(
graphql`
query {
site {
siteMetadata {
title
keywords
author
siteUrl
payPalMail
contactEmail
contactPhone
mapsLink
contactTwitter
contactGitHub
contactMastodon
contactMastodonHref
givenName
familyName
birthDate
address
gender
height
nationality
sameAs
}
}
}
`
);
return site.siteMetadata;
};
export default useSiteMetadata;
export default useSiteMetadata;

View file

@ -18,7 +18,9 @@ class Layout extends React.Component {
title={this.props.title}
image={this.props.image}
speakable={this.props.speakable}
>{this.props.seoAdditional ?? null}</SEO>
>
{this.props.seoAdditional ?? null}
</SEO>
<Navigation isHome={this.props.transparentTopbar} />
<div id="content" role="main">
{this.props.children}
@ -61,7 +63,7 @@ Layout.propTypes = {
children: PropTypes.any.isRequired,
seoAdditional: PropTypes.any,
image: PropTypes.string,
speakable: PropTypes.any
speakable: PropTypes.any,
};
export default Layout;

View file

@ -2,8 +2,6 @@
@import "~@fontsource/fira-code/700.css";
@import "../variables";
* {
box-sizing: border-box;
}
@ -69,7 +67,6 @@ section > article,
}
article {
a {
color: $accentColor;
text-decoration: underline dotted currentColor;

View file

@ -34,7 +34,10 @@ export const query = graphql`
name
image {
childImageSharp {
gatsbyImageData(placeholder: BLURRED, layout: FULL_WIDTH)
gatsbyImageData(
placeholder: BLURRED
layout: FULL_WIDTH
)
}
}
shortDescription
@ -65,7 +68,7 @@ export const query = graphql`
`;
const AboutPage = (props) => {
const {t} = useTranslation();
const { t } = useTranslation();
React.useEffect(() => {
if (typeof window === "undefined") return;
@ -99,15 +102,15 @@ const AboutPage = (props) => {
let file = props.data.file;
return (
<Layout title={t("about")} description={t("siteDescription")}
image={"/owner.jpg"}
speakable={{
"@type": "SpeakableSpecification",
"xPath": [
"article"
]
}}>
<Layout
title={t("about")}
description={t("siteDescription")}
image={"/owner.jpg"}
speakable={{
"@type": "SpeakableSpecification",
xPath: ["article"],
}}
>
<section className={styles.aboutSection} id="about">
<article>
<div className={styles.aboutText}>
@ -166,10 +169,20 @@ const AboutPage = (props) => {
projectStyles.projectCardImage
}
>
<div className={
projectStyles.projectCardBg
}>
<GatsbyImage image={project.image.childImageSharp.gatsbyImageData} objectFit="cover" style={{height: "100%"}}></GatsbyImage>
<div
className={
projectStyles.projectCardBg
}
>
<GatsbyImage
image={
project.image
.childImageSharp
.gatsbyImageData
}
objectFit="cover"
style={{ height: "100%" }}
></GatsbyImage>
</div>
<div
className={
@ -193,8 +206,7 @@ const AboutPage = (props) => {
})}
</div>
<Link to="/projects" className={styles.seeMoreButton}>
<Trans>seeMore</Trans>{" "}
<ArrowRight/>
<Trans>seeMore</Trans> <ArrowRight />
</Link>
</article>
</section>
@ -203,7 +215,7 @@ const AboutPage = (props) => {
<span>
<Trans>donationCatchphrase</Trans>
</span>
<ArrowRight/>
<ArrowRight />
</div>
</Link>
</Layout>

View file

@ -128,7 +128,7 @@ const DonatePage = (props) => {
}
>
<span>Donate using PayPal</span>
<ArrowRight/>
<ArrowRight />
</a>
</article>
</section>

View file

@ -17,7 +17,11 @@ export const query = graphql`
url
localImage {
childImageSharp {
gatsbyImageData(height: 300, width: 300, placeholder: BLURRED)
gatsbyImageData(
height: 300
width: 300
placeholder: BLURRED
)
}
}
}
@ -75,8 +79,14 @@ const FriendsPage = ({ data }) => {
"#image"
}
>
<div className={styles.friendBg}>
<GatsbyImage image={getImage(friend.localImage)}></GatsbyImage>
<div
className={styles.friendBg}
>
<GatsbyImage
image={getImage(
friend.localImage
)}
></GatsbyImage>
</div>
<span
className={
@ -88,7 +98,7 @@ const FriendsPage = ({ data }) => {
friend.name +
"#name"
}
>
>
{friend.name}
</span>
<span
@ -123,7 +133,7 @@ const FriendsPage = ({ data }) => {
target="_blank"
rel="noreferrer"
>
<Globe2 height={20}/>{" "}
<Globe2 height={20} />{" "}
{friend.url}
</a>
</div>

View file

@ -10,7 +10,15 @@ import { StaticImage } from "gatsby-plugin-image";
import anime from "animejs";
import { ArrowRight, AtSign, Camera, Github, Mail, MapPin, Phone } from "lucide-react";
import {
ArrowRight,
AtSign,
Camera,
Github,
Mail,
MapPin,
Phone,
} from "lucide-react";
import { useTranslation } from "react-i18next";
export const query = graphql`
@ -39,7 +47,7 @@ export const query = graphql`
`;
const IndexPage = (props) => {
const {t} = useTranslation();
const { t } = useTranslation();
React.useEffect(() => {
if (typeof window === "undefined") return;
@ -74,14 +82,16 @@ const IndexPage = (props) => {
let meta = props.data.site.siteMetadata;
return (
<Layout title="Kevin Kandlbinder" transparentTopbar={true} description={t("siteDescription")}
image={"/owner.jpg"}
speakable={{
"@type": "SpeakableSpecification",
"xPath": [
"article"
]
}}>
<Layout
title="Kevin Kandlbinder"
transparentTopbar={true}
description={t("siteDescription")}
image={"/owner.jpg"}
speakable={{
"@type": "SpeakableSpecification",
xPath: ["article"],
}}
>
<section className={styles.heroSection}>
<div
className={styles.heroSectionBg}
@ -89,10 +99,15 @@ const IndexPage = (props) => {
></div>
<div className={styles.heroSectionBgOver}></div>
<div className={styles.profile + " profile"}>
<div
className={styles.profileImage}
>
<StaticImage src={"../../content/images/kevin-kandlbinder-04.jpg"} width={250} height={350} placeholder="blurred"></StaticImage>
<div className={styles.profileImage}>
<StaticImage
src={
"../../content/images/kevin-kandlbinder-04.jpg"
}
width={250}
height={350}
placeholder="blurred"
></StaticImage>
</div>
<div className={styles.profileImageDummy}></div>
<div className={styles.profileCard}>
@ -122,7 +137,7 @@ const IndexPage = (props) => {
href={"mailto:" + meta.contactEmail}
rel="me"
>
<Mail width={20}/>
<Mail width={20} />
{meta.contactEmail}
</a>
<a
@ -140,7 +155,7 @@ const IndexPage = (props) => {
rel="noreferrer me"
target="_blank"
>
<AtSign width={20}/>
<AtSign width={20} />
{meta.contactMastodon}
</a>
<a
@ -151,7 +166,7 @@ const IndexPage = (props) => {
rel="noreferrer me"
target="_blank"
>
<Github width={20}/>
<Github width={20} />
{meta.contactGitHub}
</a>
</div>
@ -161,24 +176,30 @@ const IndexPage = (props) => {
<div className={styles.landingCta}>
<Link to={"/projects"}>
<div>
<span className={styles.ctaAccent}>{t("explore")}</span>{" "}
<span className={styles.ctaAccent}>
{t("explore")}
</span>{" "}
<span>{t("myProjects")}</span>
</div>
<ArrowRight/>
<ArrowRight />
</Link>
<Link to={"/social"}>
<div>
<span className={styles.ctaAccent}>{t("discover")}</span>{" "}
<span className={styles.ctaAccent}>
{t("discover")}
</span>{" "}
<span>{t("mySocials")}</span>
</div>
<ArrowRight/>
<ArrowRight />
</Link>
<Link to={"/about"}>
<div>
<span className={styles.ctaAccent}>{t("learn")}</span>{" "}
<span className={styles.ctaAccent}>
{t("learn")}
</span>{" "}
<span>{t("moreAboutMe")}</span>
</div>
<ArrowRight/>
<ArrowRight />
</Link>
</div>
</section>
@ -190,10 +211,9 @@ const IndexPage = (props) => {
>
<div>
<span>
<Camera/>{" "}
<Trans>homeImageCredit</Trans>
<Camera /> <Trans>homeImageCredit</Trans>
</span>
<ArrowRight/>
<ArrowRight />
</div>
</a>
</Layout>

View file

@ -51,7 +51,6 @@
#0f0a3c 100%
);
background-blend-mode: screen, overlay, hard-light, normal;
}
.heroSectionBgOver {
@ -60,10 +59,9 @@
/*background-color: $background;
transition: background-color 0.25s, box-shadow 0.25s;*/
@media(max-width: 950px) {
@media (max-width: 950px) {
display: none;
}
@media (prefers-color-scheme: light) {
background-color: $lightBackground;
@ -74,8 +72,8 @@
position: relative;
display: flex;
justify-content: space-around;
@media(max-width: 1000px) {
@media (max-width: 1000px) {
flex-direction: column;
bottom: 0;
}
@ -92,7 +90,7 @@
border-radius: 10px;
align-items: center;
@media(max-width: 1000px) {
@media (max-width: 1000px) {
margin: 10px;
font-size: 1.2em;
}
@ -315,9 +313,7 @@
color: #886af5;
}
@media(prefers-color-scheme: light) {
@media (prefers-color-scheme: light) {
&.skill_os {
color: #2b66e5;
}
@ -329,15 +325,14 @@
&.skill_framework {
color: #db1e31;
}
&.skill_platform {
color: #aa4f12;
}
&.skill_program {
color: #17681b;
}
}
}
}

View file

@ -20,7 +20,10 @@ export const query = graphql`
name
image {
childImageSharp {
gatsbyImageData(placeholder: BLURRED, layout: FULL_WIDTH)
gatsbyImageData(
placeholder: BLURRED
layout: FULL_WIDTH
)
}
publicURL
}
@ -43,27 +46,33 @@ const ProjectsPage = ({ data }) => {
const { t } = useI18next();
const meta = useSiteMetadata();
return (
<Layout title={t("projects")} description={t("projectsDescription")} seoAdditional={
<script type="application/ld+json">
{JSON.stringify(
{
"@context":"https://schema.org",
"@type":"ItemList",
"itemListElement":data.allProjectsJson.nodes.map((project, i) => {
return {
"@type":"ListItem",
"position":i,
"url": meta.siteUrl+"/projects/"+project.urlname,
"image": project.image.publicURL,
"name": project.name,
"description": project.shortDescription
<Layout
title={t("projects")}
description={t("projectsDescription")}
seoAdditional={
<script type="application/ld+json">
{JSON.stringify({
"@context": "https://schema.org",
"@type": "ItemList",
itemListElement: data.allProjectsJson.nodes.map(
(project, i) => {
return {
"@type": "ListItem",
position: i,
url:
meta.siteUrl +
"/projects/" +
project.urlname,
image: project.image.publicURL,
name: project.name,
description: project.shortDescription,
};
}
})
}
)}
</script>
}>
),
})}
</script>
}
>
<section>
<article>
<h1>
@ -82,13 +91,17 @@ const ProjectsPage = ({ data }) => {
key={project.lang + project.urlname}
to={"/projects/" + project.urlname}
>
<div
className={styles.projectCardImage}
>
<div className={
styles.projectCardBg
}>
<GatsbyImage image={project.image.childImageSharp.gatsbyImageData} objectFit="cover" style={{height: "100%"}}></GatsbyImage>
<div className={styles.projectCardImage}>
<div className={styles.projectCardBg}>
<GatsbyImage
image={
project.image
.childImageSharp
.gatsbyImageData
}
objectFit="cover"
style={{ height: "100%" }}
></GatsbyImage>
</div>
<div className={styles.projectCardMeta}>
<span

View file

@ -16,7 +16,7 @@ export const query = graphql`
url
localImage {
childImageSharp {
gatsbyImageData(height: 300, width: 300)
gatsbyImageData(height: 300, width: 300)
}
}
}
@ -59,11 +59,13 @@ const SocialPage = ({ data }) => {
rel="noreferrer me"
key={social.url}
>
<div
className={styles.socialImage}
>
<div className={styles.socialImage}>
<div className={styles.socialBg}>
<GatsbyImage image={getImage(social.localImage)}></GatsbyImage>
<GatsbyImage
image={getImage(
social.localImage
)}
></GatsbyImage>
</div>
<span className={styles.socialName}>
{social.platformName}

View file

@ -24,7 +24,10 @@ export const query = graphql`
}
image {
childImageSharp {
gatsbyImageData(placeholder: BLURRED, layout: FULL_WIDTH)
gatsbyImageData(
placeholder: BLURRED
layout: FULL_WIDTH
)
}
publicURL
}
@ -69,10 +72,14 @@ const ProjectTemplate = ({ data }) => {
>
<section className={styles.projectHeader}>
<div style={{ paddingTop: 0 }}>
<div
className={styles.headerBackground}
>
<GatsbyImage image={project.image.childImageSharp.gatsbyImageData} style={{width: "100%", height: "100%"}} objectFit="cover"></GatsbyImage>
<div className={styles.headerBackground}>
<GatsbyImage
image={
project.image.childImageSharp.gatsbyImageData
}
style={{ width: "100%", height: "100%" }}
objectFit="cover"
></GatsbyImage>
</div>
<header>
<div className={styles.headerInner}>
@ -103,7 +110,7 @@ const ProjectTemplate = ({ data }) => {
target="_blank"
rel="noreferrer"
>
<Github height={15}/>{" "}
<Github height={15} />{" "}
<Trans>projectViewGitHub</Trans>
</a>
) : null}
@ -113,7 +120,7 @@ const ProjectTemplate = ({ data }) => {
target="_blank"
rel="noreferrer"
>
<ExternalLink height={15}/>{" "}
<ExternalLink height={15} />{" "}
<Trans>projectViewWebsite</Trans>
</a>
) : null}