feat: various improvements

- add Terms of Service
- add dark mode
- use cards for blog with excerpt
This commit is contained in:
Felix Schröter 2022-11-15 19:15:11 +01:00
parent 5df4d34780
commit df2fd8a520
Signed by: felschr
GPG key ID: 671E39E6744C807D
12 changed files with 1021 additions and 268 deletions

View file

@ -8,7 +8,7 @@ end_of_line = lf
insert_final_newline = true insert_final_newline = true
trim_trailing_whitespace = true trim_trailing_whitespace = true
[*.md] [*.md{,x}]
trim_trailing_whitespace = false trim_trailing_whitespace = false
[scripts/*] [scripts/*]

View file

@ -2,8 +2,10 @@ import type { GatsbyConfig } from "gatsby";
const config: GatsbyConfig = { const config: GatsbyConfig = {
siteMetadata: { siteMetadata: {
title: `felschr.com`, title: "felschr's dev blog",
siteUrl: `https://felschr.com` headline: "Engineering software with passion",
author: "Felix Schröter",
siteUrl: "https://felschr.com",
}, },
graphqlTypegen: true, graphqlTypegen: true,
plugins: [ plugins: [
@ -25,7 +27,9 @@ const config: GatsbyConfig = {
{ {
resolve: "gatsby-remark-highlight-code", resolve: "gatsby-remark-highlight-code",
options: { options: {
terminal: "none" terminal: "carbon",
theme: "one-dark",
lineNumbers: true,
} }
}, },
], ],
@ -34,6 +38,7 @@ const config: GatsbyConfig = {
"gatsby-plugin-mdx-frontmatter", "gatsby-plugin-mdx-frontmatter",
"gatsby-plugin-sharp", "gatsby-plugin-sharp",
"gatsby-transformer-sharp", "gatsby-transformer-sharp",
"gatsby-plugin-mdx-source-name",
{ {
resolve: "gatsby-source-filesystem", resolve: "gatsby-source-filesystem",
options: { options: {

706
package-lock.json generated
View file

@ -7,18 +7,22 @@
"": { "": {
"name": "felschr.com", "name": "felschr.com",
"version": "1.0.0", "version": "1.0.0",
"license": "MIT",
"dependencies": { "dependencies": {
"@deckdeckgo/highlight-code": "^3.6.0", "@deckdeckgo/highlight-code": "^3.6.0",
"@emotion/react": "^11.10.0", "@emotion/react": "^11.10.4",
"@emotion/styled": "^11.10.0", "@emotion/styled": "^11.10.4",
"@mdx-js/mdx": "^1.6.22", "@mdx-js/mdx": "^1.6.22",
"@mdx-js/react": "^1.6.22", "@mdx-js/react": "^1.6.22",
"@mui/icons-material": "^5.10.6",
"@mui/material": "^5.10.8",
"gatsby": "^4.19.2", "gatsby": "^4.19.2",
"gatsby-plugin-emotion": "^7.19.0", "gatsby-plugin-emotion": "^7.19.0",
"gatsby-plugin-image": "^2.19.0", "gatsby-plugin-image": "^2.19.0",
"gatsby-plugin-manifest": "^4.19.0", "gatsby-plugin-manifest": "^4.19.0",
"gatsby-plugin-mdx": "^3.19.0", "gatsby-plugin-mdx": "^3.19.0",
"gatsby-plugin-mdx-frontmatter": "^0.0.4", "gatsby-plugin-mdx-frontmatter": "^0.0.4",
"gatsby-plugin-mdx-source-name": "^1.0.1",
"gatsby-plugin-react-helmet": "^5.19.0", "gatsby-plugin-react-helmet": "^5.19.0",
"gatsby-plugin-sharp": "^4.19.0", "gatsby-plugin-sharp": "^4.19.0",
"gatsby-plugin-sitemap": "^5.19.0", "gatsby-plugin-sitemap": "^5.19.0",
@ -1790,9 +1794,9 @@
} }
}, },
"node_modules/@babel/runtime": { "node_modules/@babel/runtime": {
"version": "7.18.9", "version": "7.19.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
"integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
"dependencies": { "dependencies": {
"regenerator-runtime": "^0.13.4" "regenerator-runtime": "^0.13.4"
}, },
@ -1928,9 +1932,9 @@
} }
}, },
"node_modules/@emotion/cache": { "node_modules/@emotion/cache": {
"version": "11.10.0", "version": "11.10.3",
"resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz",
"integrity": "sha512-3FoUWnDbHWg/pXGCvL46jvpOSJP0xvRZLY8khUcUHGOBcp0S/MCIk+osp84/dby2Ctahw/Ev4KTHWkY3i0g39g==", "integrity": "sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==",
"dependencies": { "dependencies": {
"@emotion/memoize": "^0.8.0", "@emotion/memoize": "^0.8.0",
"@emotion/sheet": "^1.2.0", "@emotion/sheet": "^1.2.0",
@ -1958,14 +1962,15 @@
"integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA=="
}, },
"node_modules/@emotion/react": { "node_modules/@emotion/react": {
"version": "11.10.0", "version": "11.10.4",
"resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.4.tgz",
"integrity": "sha512-K6z9zlHxxBXwN8TcpwBKcEsBsOw4JWCCmR+BeeOWgqp8GIU1yA2Odd41bwdAAr0ssbQrbJbVnndvv7oiv1bZeQ==", "integrity": "sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.10.0", "@emotion/babel-plugin": "^11.10.0",
"@emotion/cache": "^11.10.0", "@emotion/cache": "^11.10.0",
"@emotion/serialize": "^1.1.0", "@emotion/serialize": "^1.1.0",
"@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
"@emotion/utils": "^1.2.0", "@emotion/utils": "^1.2.0",
"@emotion/weak-memoize": "^0.3.0", "@emotion/weak-memoize": "^0.3.0",
"hoist-non-react-statics": "^3.3.1" "hoist-non-react-statics": "^3.3.1"
@ -2001,14 +2006,15 @@
"integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==" "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w=="
}, },
"node_modules/@emotion/styled": { "node_modules/@emotion/styled": {
"version": "11.10.0", "version": "11.10.4",
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.4.tgz",
"integrity": "sha512-V9oaEH6V4KePeQpgUE83i8ht+4Ri3E8Djp/ZPJ4DQlqWhSKITvgzlR3/YQE2hdfP4Jw3qVRkANJz01LLqK9/TA==", "integrity": "sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.10.0", "@emotion/babel-plugin": "^11.10.0",
"@emotion/is-prop-valid": "^1.2.0", "@emotion/is-prop-valid": "^1.2.0",
"@emotion/serialize": "^1.1.0", "@emotion/serialize": "^1.1.0",
"@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
"@emotion/utils": "^1.2.0" "@emotion/utils": "^1.2.0"
}, },
"peerDependencies": { "peerDependencies": {
@ -2030,6 +2036,14 @@
"resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz",
"integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw=="
}, },
"node_modules/@emotion/use-insertion-effect-with-fallbacks": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz",
"integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==",
"peerDependencies": {
"react": ">=16.8.0"
}
},
"node_modules/@emotion/utils": { "node_modules/@emotion/utils": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz",
@ -2098,6 +2112,17 @@
"node": ">= 4" "node": ">= 4"
} }
}, },
"node_modules/@eslint/eslintrc/node_modules/type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@gatsbyjs/parcel-namer-relative-to-cwd": { "node_modules/@gatsbyjs/parcel-namer-relative-to-cwd": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/@gatsbyjs/parcel-namer-relative-to-cwd/-/parcel-namer-relative-to-cwd-1.4.0.tgz", "resolved": "https://registry.npmjs.org/@gatsbyjs/parcel-namer-relative-to-cwd/-/parcel-namer-relative-to-cwd-1.4.0.tgz",
@ -2423,11 +2448,11 @@
} }
}, },
"node_modules/@graphql-tools/import": { "node_modules/@graphql-tools/import": {
"version": "6.7.1", "version": "6.7.6",
"resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.1.tgz", "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.6.tgz",
"integrity": "sha512-StLosFVhdw+eZkL+v9dBabszxCAZtEYW4Oy1+750fDkH39GrmzOB8mWiYna7rm9+GMisC9atJtXuAfMF02Aoag==", "integrity": "sha512-WtUyiO2qCaK/H4u81zAw/NbBvCOzwKl4N+Vl+FqrFCzYobscwL6x6roePyoXM1O3+JJIIn3CETv4kg4kwxaBVw==",
"dependencies": { "dependencies": {
"@graphql-tools/utils": "8.9.0", "@graphql-tools/utils": "8.12.0",
"resolve-from": "5.0.0", "resolve-from": "5.0.0",
"tslib": "^2.4.0" "tslib": "^2.4.0"
}, },
@ -2435,6 +2460,17 @@
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
} }
}, },
"node_modules/@graphql-tools/import/node_modules/@graphql-tools/utils": {
"version": "8.12.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.12.0.tgz",
"integrity": "sha512-TeO+MJWGXjUTS52qfK4R8HiPoF/R7X+qmgtOYd8DTH0l6b+5Y/tlg5aGeUJefqImRq7nvi93Ms40k/Uz4D5CWw==",
"dependencies": {
"tslib": "^2.4.0"
},
"peerDependencies": {
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
}
},
"node_modules/@graphql-tools/json-file-loader": { "node_modules/@graphql-tools/json-file-loader": {
"version": "6.2.6", "version": "6.2.6",
"resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-6.2.6.tgz", "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-6.2.6.tgz",
@ -3479,6 +3515,262 @@
"win32" "win32"
] ]
}, },
"node_modules/@mui/base": {
"version": "5.0.0-alpha.100",
"resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.100.tgz",
"integrity": "sha512-bSoJEKCENtmJrJDECHUe9PiqztIUACuSskyqw9ypqE7Dz3WxL3e8puFsWBkUsz+WOCjXh4B4Xljn88Ucxxv5HA==",
"dependencies": {
"@babel/runtime": "^7.19.0",
"@emotion/is-prop-valid": "^1.2.0",
"@mui/types": "^7.2.0",
"@mui/utils": "^5.10.6",
"@popperjs/core": "^2.11.6",
"clsx": "^1.2.1",
"prop-types": "^15.8.1",
"react-is": "^18.2.0"
},
"engines": {
"node": ">=12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/base/node_modules/react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"node_modules/@mui/core-downloads-tracker": {
"version": "5.10.8",
"resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.8.tgz",
"integrity": "sha512-V5D7OInO4P9PdT/JACg7fwjbOORm3GklaMVgdGomjyxiyetgRND5CC9r35e1LK/DqHdoyDuhbFzdfrqWtpmEIw==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui"
}
},
"node_modules/@mui/icons-material": {
"version": "5.10.6",
"resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.10.6.tgz",
"integrity": "sha512-QwxdRmLA46S94B0hExPDx0td+A2unF+33bQ6Cs+lNpJKVsm1YeHwNdYXYcnpWeHeQQ07055OXl7IB2GKDd0MfA==",
"dependencies": {
"@babel/runtime": "^7.19.0"
},
"engines": {
"node": ">=12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui"
},
"peerDependencies": {
"@mui/material": "^5.0.0",
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/material": {
"version": "5.10.8",
"resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.8.tgz",
"integrity": "sha512-sF/Ka0IJjGXV52zoT4xAWEqXVRjNYbIjATo9L4Q5oQC5iJpGrKJFY16uNtWWB0+vp/nayAuPGZHrxtV+t3ecdQ==",
"dependencies": {
"@babel/runtime": "^7.19.0",
"@mui/base": "5.0.0-alpha.100",
"@mui/core-downloads-tracker": "^5.10.8",
"@mui/system": "^5.10.8",
"@mui/types": "^7.2.0",
"@mui/utils": "^5.10.6",
"@types/react-transition-group": "^4.4.5",
"clsx": "^1.2.1",
"csstype": "^3.1.1",
"prop-types": "^15.8.1",
"react-is": "^18.2.0",
"react-transition-group": "^4.4.5"
},
"engines": {
"node": ">=12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui"
},
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@emotion/react": {
"optional": true
},
"@emotion/styled": {
"optional": true
},
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/material/node_modules/react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"node_modules/@mui/private-theming": {
"version": "5.10.6",
"resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.6.tgz",
"integrity": "sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA==",
"dependencies": {
"@babel/runtime": "^7.19.0",
"@mui/utils": "^5.10.6",
"prop-types": "^15.8.1"
},
"engines": {
"node": ">=12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/styled-engine": {
"version": "5.10.8",
"resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.8.tgz",
"integrity": "sha512-w+y8WI18EJV6zM/q41ug19cE70JTeO6sWFsQ7tgePQFpy6ToCVPh0YLrtqxUZXSoMStW5FMw0t9fHTFAqPbngw==",
"dependencies": {
"@babel/runtime": "^7.19.0",
"@emotion/cache": "^11.10.3",
"csstype": "^3.1.1",
"prop-types": "^15.8.1"
},
"engines": {
"node": ">=12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui"
},
"peerDependencies": {
"@emotion/react": "^11.4.1",
"@emotion/styled": "^11.3.0",
"react": "^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@emotion/react": {
"optional": true
},
"@emotion/styled": {
"optional": true
}
}
},
"node_modules/@mui/system": {
"version": "5.10.8",
"resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.8.tgz",
"integrity": "sha512-hRQ354zcrYP/KHqK8FheICSvE9raQaUgQaV+A3oD4JETaFUCVI9Ytt+RcQYgTqx02xlCXIjl8LK1rPjTneySqw==",
"dependencies": {
"@babel/runtime": "^7.19.0",
"@mui/private-theming": "^5.10.6",
"@mui/styled-engine": "^5.10.8",
"@mui/types": "^7.2.0",
"@mui/utils": "^5.10.6",
"clsx": "^1.2.1",
"csstype": "^3.1.1",
"prop-types": "^15.8.1"
},
"engines": {
"node": ">=12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui"
},
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@emotion/react": {
"optional": true
},
"@emotion/styled": {
"optional": true
},
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/types": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz",
"integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==",
"peerDependencies": {
"@types/react": "*"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/utils": {
"version": "5.10.6",
"resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.6.tgz",
"integrity": "sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q==",
"dependencies": {
"@babel/runtime": "^7.19.0",
"@types/prop-types": "^15.7.5",
"@types/react-is": "^16.7.1 || ^17.0.0",
"prop-types": "^15.8.1",
"react-is": "^18.2.0"
},
"engines": {
"node": ">=12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui"
},
"peerDependencies": {
"react": "^17.0.0 || ^18.0.0"
}
},
"node_modules/@mui/utils/node_modules/react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"node_modules/@nodelib/fs.scandir": { "node_modules/@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -4124,6 +4416,17 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/@parcel/packager-js/node_modules/type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@parcel/packager-raw": { "node_modules/@parcel/packager-raw": {
"version": "2.6.2", "version": "2.6.2",
"resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.6.2.tgz", "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.6.2.tgz",
@ -4558,6 +4861,15 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/@popperjs/core": {
"version": "2.11.6",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
"integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
}
},
"node_modules/@sideway/address": { "node_modules/@sideway/address": {
"version": "4.1.4", "version": "4.1.4",
"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
@ -4882,6 +5194,22 @@
"@types/react": "*" "@types/react": "*"
} }
}, },
"node_modules/@types/react-is": {
"version": "17.0.3",
"resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz",
"integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==",
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/react-transition-group": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz",
"integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==",
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/responselike": { "node_modules/@types/responselike": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
@ -6295,6 +6623,17 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/boxen/node_modules/type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/brace-expansion": { "node_modules/brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -7068,6 +7407,14 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/clsx": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
"integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
"engines": {
"node": ">=6"
}
},
"node_modules/coa": { "node_modules/coa": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
@ -7850,9 +8197,9 @@
} }
}, },
"node_modules/csstype": { "node_modules/csstype": {
"version": "3.1.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
}, },
"node_modules/d": { "node_modules/d": {
"version": "1.0.1", "version": "1.0.1",
@ -8217,6 +8564,15 @@
"utila": "~0.4" "utila": "~0.4"
} }
}, },
"node_modules/dom-helpers": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
"integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
"dependencies": {
"@babel/runtime": "^7.8.7",
"csstype": "^3.0.2"
}
},
"node_modules/dom-serializer": { "node_modules/dom-serializer": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
@ -9174,6 +9530,17 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/eslint/node_modules/type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint/node_modules/yallist": { "node_modules/eslint/node_modules/yallist": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@ -10838,6 +11205,11 @@
"gatsby-plugin-mdx": ">=1.2.7" "gatsby-plugin-mdx": ">=1.2.7"
} }
}, },
"node_modules/gatsby-plugin-mdx-source-name": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gatsby-plugin-mdx-source-name/-/gatsby-plugin-mdx-source-name-1.0.1.tgz",
"integrity": "sha512-D8DAOI84ZoWmx3c6BFYuKEnQc+Y1IU+VMhTJZbIOcKbQaoROKx66TkvjLbdHSlrpQ6Skozmi+b6NNrwIyZunzw=="
},
"node_modules/gatsby-plugin-mdx/node_modules/camel-case": { "node_modules/gatsby-plugin-mdx/node_modules/camel-case": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
@ -11113,9 +11485,9 @@
} }
}, },
"node_modules/gatsby-plugin-react-helmet": { "node_modules/gatsby-plugin-react-helmet": {
"version": "5.19.0", "version": "5.24.0",
"resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-5.19.0.tgz", "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-5.24.0.tgz",
"integrity": "sha512-XXrJYfHqoaUe57oAF+/ljPHncrvYk0UonES3aUwynbWsR8UXhQpdbwqIOYZPGQgPsc1X55Kzdo+/3pU1gA9ajQ==", "integrity": "sha512-SU/SrWsbEFLQhuzDXucYlQ4O5pTdpOdxw07xIRwyFfxFzGml/9f62h2dTtUJOIXP1mYfl31bw7eCbGlc8QzF5w==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.15.4" "@babel/runtime": "^7.15.4"
}, },
@ -17647,6 +18019,21 @@
"react": "^16.3.0 || ^17.0.0 || ^18.0.0" "react": "^16.3.0 || ^17.0.0 || ^18.0.0"
} }
}, },
"node_modules/react-transition-group": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
"integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
"dependencies": {
"@babel/runtime": "^7.5.5",
"dom-helpers": "^5.0.1",
"loose-envify": "^1.4.0",
"prop-types": "^15.6.2"
},
"peerDependencies": {
"react": ">=16.6.0",
"react-dom": ">=16.6.0"
}
},
"node_modules/read": { "node_modules/read": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
@ -20165,9 +20552,11 @@
} }
}, },
"node_modules/type-fest": { "node_modules/type-fest": {
"version": "0.20.2", "version": "0.13.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
"optional": true,
"peer": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },
@ -22776,9 +23165,9 @@
} }
}, },
"@babel/runtime": { "@babel/runtime": {
"version": "7.18.9", "version": "7.19.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
"integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
"requires": { "requires": {
"regenerator-runtime": "^0.13.4" "regenerator-runtime": "^0.13.4"
} }
@ -22887,9 +23276,9 @@
} }
}, },
"@emotion/cache": { "@emotion/cache": {
"version": "11.10.0", "version": "11.10.3",
"resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz",
"integrity": "sha512-3FoUWnDbHWg/pXGCvL46jvpOSJP0xvRZLY8khUcUHGOBcp0S/MCIk+osp84/dby2Ctahw/Ev4KTHWkY3i0g39g==", "integrity": "sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==",
"requires": { "requires": {
"@emotion/memoize": "^0.8.0", "@emotion/memoize": "^0.8.0",
"@emotion/sheet": "^1.2.0", "@emotion/sheet": "^1.2.0",
@ -22917,14 +23306,15 @@
"integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA=="
}, },
"@emotion/react": { "@emotion/react": {
"version": "11.10.0", "version": "11.10.4",
"resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.4.tgz",
"integrity": "sha512-K6z9zlHxxBXwN8TcpwBKcEsBsOw4JWCCmR+BeeOWgqp8GIU1yA2Odd41bwdAAr0ssbQrbJbVnndvv7oiv1bZeQ==", "integrity": "sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA==",
"requires": { "requires": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.10.0", "@emotion/babel-plugin": "^11.10.0",
"@emotion/cache": "^11.10.0", "@emotion/cache": "^11.10.0",
"@emotion/serialize": "^1.1.0", "@emotion/serialize": "^1.1.0",
"@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
"@emotion/utils": "^1.2.0", "@emotion/utils": "^1.2.0",
"@emotion/weak-memoize": "^0.3.0", "@emotion/weak-memoize": "^0.3.0",
"hoist-non-react-statics": "^3.3.1" "hoist-non-react-statics": "^3.3.1"
@ -22948,14 +23338,15 @@
"integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==" "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w=="
}, },
"@emotion/styled": { "@emotion/styled": {
"version": "11.10.0", "version": "11.10.4",
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.4.tgz",
"integrity": "sha512-V9oaEH6V4KePeQpgUE83i8ht+4Ri3E8Djp/ZPJ4DQlqWhSKITvgzlR3/YQE2hdfP4Jw3qVRkANJz01LLqK9/TA==", "integrity": "sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ==",
"requires": { "requires": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.10.0", "@emotion/babel-plugin": "^11.10.0",
"@emotion/is-prop-valid": "^1.2.0", "@emotion/is-prop-valid": "^1.2.0",
"@emotion/serialize": "^1.1.0", "@emotion/serialize": "^1.1.0",
"@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
"@emotion/utils": "^1.2.0" "@emotion/utils": "^1.2.0"
} }
}, },
@ -22964,6 +23355,12 @@
"resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz",
"integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw=="
}, },
"@emotion/use-insertion-effect-with-fallbacks": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz",
"integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==",
"requires": {}
},
"@emotion/utils": { "@emotion/utils": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz",
@ -23013,6 +23410,11 @@
"version": "4.0.6", "version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
},
"type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
} }
} }
}, },
@ -23287,13 +23689,23 @@
} }
}, },
"@graphql-tools/import": { "@graphql-tools/import": {
"version": "6.7.1", "version": "6.7.6",
"resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.1.tgz", "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.6.tgz",
"integrity": "sha512-StLosFVhdw+eZkL+v9dBabszxCAZtEYW4Oy1+750fDkH39GrmzOB8mWiYna7rm9+GMisC9atJtXuAfMF02Aoag==", "integrity": "sha512-WtUyiO2qCaK/H4u81zAw/NbBvCOzwKl4N+Vl+FqrFCzYobscwL6x6roePyoXM1O3+JJIIn3CETv4kg4kwxaBVw==",
"requires": { "requires": {
"@graphql-tools/utils": "8.9.0", "@graphql-tools/utils": "8.12.0",
"resolve-from": "5.0.0", "resolve-from": "5.0.0",
"tslib": "^2.4.0" "tslib": "^2.4.0"
},
"dependencies": {
"@graphql-tools/utils": {
"version": "8.12.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.12.0.tgz",
"integrity": "sha512-TeO+MJWGXjUTS52qfK4R8HiPoF/R7X+qmgtOYd8DTH0l6b+5Y/tlg5aGeUJefqImRq7nvi93Ms40k/Uz4D5CWw==",
"requires": {
"tslib": "^2.4.0"
}
}
} }
}, },
"@graphql-tools/json-file-loader": { "@graphql-tools/json-file-loader": {
@ -24086,6 +24498,128 @@
"integrity": "sha512-XHEkAu9yUeB0ntz4mNb1QlsbyjVxT7YpKW9ImyfwDYRWfDbh1VMNmzBTeOlhxLw5btQFfXusBWCp6z8+yxtrEA==", "integrity": "sha512-XHEkAu9yUeB0ntz4mNb1QlsbyjVxT7YpKW9ImyfwDYRWfDbh1VMNmzBTeOlhxLw5btQFfXusBWCp6z8+yxtrEA==",
"optional": true "optional": true
}, },
"@mui/base": {
"version": "5.0.0-alpha.100",
"resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.100.tgz",
"integrity": "sha512-bSoJEKCENtmJrJDECHUe9PiqztIUACuSskyqw9ypqE7Dz3WxL3e8puFsWBkUsz+WOCjXh4B4Xljn88Ucxxv5HA==",
"requires": {
"@babel/runtime": "^7.19.0",
"@emotion/is-prop-valid": "^1.2.0",
"@mui/types": "^7.2.0",
"@mui/utils": "^5.10.6",
"@popperjs/core": "^2.11.6",
"clsx": "^1.2.1",
"prop-types": "^15.8.1",
"react-is": "^18.2.0"
},
"dependencies": {
"react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
}
}
},
"@mui/core-downloads-tracker": {
"version": "5.10.8",
"resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.8.tgz",
"integrity": "sha512-V5D7OInO4P9PdT/JACg7fwjbOORm3GklaMVgdGomjyxiyetgRND5CC9r35e1LK/DqHdoyDuhbFzdfrqWtpmEIw=="
},
"@mui/icons-material": {
"version": "5.10.6",
"resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.10.6.tgz",
"integrity": "sha512-QwxdRmLA46S94B0hExPDx0td+A2unF+33bQ6Cs+lNpJKVsm1YeHwNdYXYcnpWeHeQQ07055OXl7IB2GKDd0MfA==",
"requires": {
"@babel/runtime": "^7.19.0"
}
},
"@mui/material": {
"version": "5.10.8",
"resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.8.tgz",
"integrity": "sha512-sF/Ka0IJjGXV52zoT4xAWEqXVRjNYbIjATo9L4Q5oQC5iJpGrKJFY16uNtWWB0+vp/nayAuPGZHrxtV+t3ecdQ==",
"requires": {
"@babel/runtime": "^7.19.0",
"@mui/base": "5.0.0-alpha.100",
"@mui/core-downloads-tracker": "^5.10.8",
"@mui/system": "^5.10.8",
"@mui/types": "^7.2.0",
"@mui/utils": "^5.10.6",
"@types/react-transition-group": "^4.4.5",
"clsx": "^1.2.1",
"csstype": "^3.1.1",
"prop-types": "^15.8.1",
"react-is": "^18.2.0",
"react-transition-group": "^4.4.5"
},
"dependencies": {
"react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
}
}
},
"@mui/private-theming": {
"version": "5.10.6",
"resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.6.tgz",
"integrity": "sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA==",
"requires": {
"@babel/runtime": "^7.19.0",
"@mui/utils": "^5.10.6",
"prop-types": "^15.8.1"
}
},
"@mui/styled-engine": {
"version": "5.10.8",
"resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.8.tgz",
"integrity": "sha512-w+y8WI18EJV6zM/q41ug19cE70JTeO6sWFsQ7tgePQFpy6ToCVPh0YLrtqxUZXSoMStW5FMw0t9fHTFAqPbngw==",
"requires": {
"@babel/runtime": "^7.19.0",
"@emotion/cache": "^11.10.3",
"csstype": "^3.1.1",
"prop-types": "^15.8.1"
}
},
"@mui/system": {
"version": "5.10.8",
"resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.8.tgz",
"integrity": "sha512-hRQ354zcrYP/KHqK8FheICSvE9raQaUgQaV+A3oD4JETaFUCVI9Ytt+RcQYgTqx02xlCXIjl8LK1rPjTneySqw==",
"requires": {
"@babel/runtime": "^7.19.0",
"@mui/private-theming": "^5.10.6",
"@mui/styled-engine": "^5.10.8",
"@mui/types": "^7.2.0",
"@mui/utils": "^5.10.6",
"clsx": "^1.2.1",
"csstype": "^3.1.1",
"prop-types": "^15.8.1"
}
},
"@mui/types": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz",
"integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==",
"requires": {}
},
"@mui/utils": {
"version": "5.10.6",
"resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.6.tgz",
"integrity": "sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q==",
"requires": {
"@babel/runtime": "^7.19.0",
"@types/prop-types": "^15.7.5",
"@types/react-is": "^16.7.1 || ^17.0.0",
"prop-types": "^15.8.1",
"react-is": "^18.2.0"
},
"dependencies": {
"react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
}
}
},
"@nodelib/fs.scandir": { "@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -24494,6 +25028,11 @@
"requires": { "requires": {
"type-fest": "^0.20.2" "type-fest": "^0.20.2"
} }
},
"type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
} }
} }
}, },
@ -24751,6 +25290,11 @@
} }
} }
}, },
"@popperjs/core": {
"version": "2.11.6",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
"integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw=="
},
"@sideway/address": { "@sideway/address": {
"version": "4.1.4", "version": "4.1.4",
"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
@ -25047,6 +25591,22 @@
"@types/react": "*" "@types/react": "*"
} }
}, },
"@types/react-is": {
"version": "17.0.3",
"resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz",
"integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==",
"requires": {
"@types/react": "*"
}
},
"@types/react-transition-group": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz",
"integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==",
"requires": {
"@types/react": "*"
}
},
"@types/responselike": { "@types/responselike": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
@ -26102,6 +26662,11 @@
"requires": { "requires": {
"has-flag": "^4.0.0" "has-flag": "^4.0.0"
} }
},
"type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
} }
} }
}, },
@ -26680,6 +27245,11 @@
"mimic-response": "^1.0.0" "mimic-response": "^1.0.0"
} }
}, },
"clsx": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
"integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="
},
"coa": { "coa": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
@ -27274,9 +27844,9 @@
} }
}, },
"csstype": { "csstype": {
"version": "3.1.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
}, },
"d": { "d": {
"version": "1.0.1", "version": "1.0.1",
@ -27546,6 +28116,15 @@
"utila": "~0.4" "utila": "~0.4"
} }
}, },
"dom-helpers": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
"integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
"requires": {
"@babel/runtime": "^7.8.7",
"csstype": "^3.0.2"
}
},
"dom-serializer": { "dom-serializer": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
@ -28006,6 +28585,11 @@
"has-flag": "^4.0.0" "has-flag": "^4.0.0"
} }
}, },
"type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
},
"yallist": { "yallist": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@ -29840,6 +30424,11 @@
"integrity": "sha512-itdhni+L7oZ9tpyipGVTmC32qcdd+FsWkDqcxnnQ9NCjEMIajPwit6fdzx/Zby1YaKVx6FSqkTp9tjQTde7BpQ==", "integrity": "sha512-itdhni+L7oZ9tpyipGVTmC32qcdd+FsWkDqcxnnQ9NCjEMIajPwit6fdzx/Zby1YaKVx6FSqkTp9tjQTde7BpQ==",
"requires": {} "requires": {}
}, },
"gatsby-plugin-mdx-source-name": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gatsby-plugin-mdx-source-name/-/gatsby-plugin-mdx-source-name-1.0.1.tgz",
"integrity": "sha512-D8DAOI84ZoWmx3c6BFYuKEnQc+Y1IU+VMhTJZbIOcKbQaoROKx66TkvjLbdHSlrpQ6Skozmi+b6NNrwIyZunzw=="
},
"gatsby-plugin-page-creator": { "gatsby-plugin-page-creator": {
"version": "4.19.0", "version": "4.19.0",
"resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-4.19.0.tgz", "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-4.19.0.tgz",
@ -29859,9 +30448,9 @@
} }
}, },
"gatsby-plugin-react-helmet": { "gatsby-plugin-react-helmet": {
"version": "5.19.0", "version": "5.24.0",
"resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-5.19.0.tgz", "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-5.24.0.tgz",
"integrity": "sha512-XXrJYfHqoaUe57oAF+/ljPHncrvYk0UonES3aUwynbWsR8UXhQpdbwqIOYZPGQgPsc1X55Kzdo+/3pU1gA9ajQ==", "integrity": "sha512-SU/SrWsbEFLQhuzDXucYlQ4O5pTdpOdxw07xIRwyFfxFzGml/9f62h2dTtUJOIXP1mYfl31bw7eCbGlc8QzF5w==",
"requires": { "requires": {
"@babel/runtime": "^7.15.4" "@babel/runtime": "^7.15.4"
} }
@ -34557,6 +35146,17 @@
"peer": true, "peer": true,
"requires": {} "requires": {}
}, },
"react-transition-group": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
"integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
"requires": {
"@babel/runtime": "^7.5.5",
"dom-helpers": "^5.0.1",
"loose-envify": "^1.4.0",
"prop-types": "^15.6.2"
}
},
"read": { "read": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
@ -36500,9 +37100,11 @@
} }
}, },
"type-fest": { "type-fest": {
"version": "0.20.2", "version": "0.13.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
"optional": true,
"peer": true
}, },
"type-is": { "type-is": {
"version": "1.6.18", "version": "1.6.18",

View file

@ -1,9 +1,10 @@
{ {
"$schema": "https://json.schemastore.org/package",
"name": "felschr.com", "name": "felschr.com",
"version": "1.0.0", "version": "1.0.0",
"private": true,
"description": "felschr.com", "description": "felschr.com",
"author": "Felix Schröter", "author": "Felix Schröter",
"license": "MIT",
"keywords": [ "keywords": [
"gatsby" "gatsby"
], ],
@ -17,16 +18,19 @@
}, },
"dependencies": { "dependencies": {
"@deckdeckgo/highlight-code": "^3.6.0", "@deckdeckgo/highlight-code": "^3.6.0",
"@emotion/react": "^11.10.0", "@emotion/react": "^11.10.4",
"@emotion/styled": "^11.10.0", "@emotion/styled": "^11.10.4",
"@mdx-js/mdx": "^1.6.22", "@mdx-js/mdx": "^1.6.22",
"@mdx-js/react": "^1.6.22", "@mdx-js/react": "^1.6.22",
"@mui/icons-material": "^5.10.6",
"@mui/material": "^5.10.8",
"gatsby": "^4.19.2", "gatsby": "^4.19.2",
"gatsby-plugin-emotion": "^7.19.0", "gatsby-plugin-emotion": "^7.19.0",
"gatsby-plugin-image": "^2.19.0", "gatsby-plugin-image": "^2.19.0",
"gatsby-plugin-manifest": "^4.19.0", "gatsby-plugin-manifest": "^4.19.0",
"gatsby-plugin-mdx": "^3.19.0", "gatsby-plugin-mdx": "^3.19.0",
"gatsby-plugin-mdx-frontmatter": "^0.0.4", "gatsby-plugin-mdx-frontmatter": "^0.0.4",
"gatsby-plugin-mdx-source-name": "^1.0.1",
"gatsby-plugin-react-helmet": "^5.19.0", "gatsby-plugin-react-helmet": "^5.19.0",
"gatsby-plugin-sharp": "^4.19.0", "gatsby-plugin-sharp": "^4.19.0",
"gatsby-plugin-sitemap": "^5.19.0", "gatsby-plugin-sitemap": "^5.19.0",

View file

@ -0,0 +1,25 @@
import { ReactNode } from "react"
import { Box, useTheme } from "@mui/material"
export type FooterProps = {
children: ReactNode
}
export const Footer = ({ children }: FooterProps) => {
const theme = useTheme()
return (
<Box
position="fixed"
display="flex"
bottom={0}
padding={2}
width="100%"
borderTop={`1px solid ${theme.palette.grey[200].toString()}`}
gap={2}
style={{ backgroundColor: theme.palette.background.default.toString()}}
>
{children}
</Box>
)
}

View file

@ -1,17 +1,97 @@
import * as React from "react" import { AppBar, Box, Button, Container, createTheme, CssBaseline, Link, ThemeProvider, Toolbar, Typography, useMediaQuery, useTheme } from "@mui/material"
import CodeIcon from "@mui/icons-material/Code"
import { ReactNode, useMemo } from "react"
import { Link as GatsbyLink } from "gatsby"
import { Footer } from "../atoms/Footer"
const pages = [
{ title: "Home", href: "/" },
{ title: "Blog", href: "/blog" },
]
type LayoutProps = { type LayoutProps = {
pageTitle: string pageTitle: string | ReactNode
children: React.ReactNode children: ReactNode
} }
const Layout = ({ pageTitle, children }: LayoutProps) => { const Layout = ({ pageTitle, children }: LayoutProps) => {
const theme = useTheme()
return ( return (
<div> <main style={{ border: 0 }}>
<h1>{pageTitle}</h1> <title>{pageTitle}</title>
<AppBar position="fixed">
<Toolbar>
<CodeIcon sx={{ display: "flex", mr: 1 }} />{" "}
<Typography
variant="h6"
noWrap
component="a"
href="/"
sx={{
mr: 2,
display: { xs: "none", md: "flex" },
fontFamily: "monospace",
fontWeight: 700,
letterSpacing: ".3rem",
color: "inherit",
textDecoration: "none",
}}
>
Felix Schröter
</Typography>
<Box sx={{ flexGrow: 1, display: "flex", justifyContent: "end" }}>
{pages.map(({ title, href }) => (
<Button
key={href}
color="inherit"
sx={{ my: 2, color: "white", display: "block" }}
{...{ href }}
>
{title}
</Button>
))}
</Box>
</Toolbar>
</AppBar>
<Container style={{ marginTop: 68.5, marginBottom: 80, minHeight: "100%" }}>
<Typography variant="h1">{pageTitle}</Typography>
{children} {children}
</div> </Container>
<Footer>
<Link rel="me" href="https://todon.eu/@felschr">Mastodon</Link>
<GatsbyLink to="/terms-of-service">Terms of Service</GatsbyLink>
</Footer>
</main>
) )
} }
export default Layout const AppLayout = (props: LayoutProps) => {
const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
const theme = useMemo(
() =>
createTheme({
palette: {
mode: prefersDarkMode ? "dark" : "light",
},
typography: {
h1: { fontSize: 48, paddingBottom: 20 },
}
}),
[prefersDarkMode],
);
return (
<ThemeProvider theme={theme}>
<CssBaseline />
<Layout {...props} />
</ThemeProvider>
)
}
export default AppLayout

9
src/global.css Normal file
View file

@ -0,0 +1,9 @@
body {
margin: 0;
--deckgo-highlight-code-carbon-toolbar-display: none;
}
a {
color: rgb(51, 125, 255);
}

View file

@ -1,27 +1,73 @@
import * as React from "react" import { ReactNode } from "react"
import { graphql, Link, PageProps } from "gatsby" import { GatsbyLinkProps, graphql, Link, PageProps } from "gatsby"
import Layout from "../../components/organisms/Layout" import Layout from "../../components/organisms/Layout"
import { Card, CardContent, Grid, Typography } from "@mui/material"
import styled from "@emotion/styled"
type PostProps = {
size?: "normal" | "highlight"
post: Queries.BlogQuery["allMdx"]["edges"][0]["node"]
}
const Post = ({ size = "normal", post }: PostProps) => {
const PostLink = styled((props: { children: ReactNode }) => (
<Link to={`/blog/${post.slug}`} {...props} />
))`
color: inherit;
text-decoration: inherit;
&:hover {
opacity: 0.8;
}
`
return (
<Grid item xs={size === "highlight" ? 12 : 4}>
<Card>
<CardContent>
<Typography variant="h5" gutterBottom>
<PostLink>
{post.frontmatter?.title}
</PostLink>
</Typography>
<Typography fontStyle="normal" color="GrayText">
<PostLink>
{post.excerpt}
</PostLink>
</Typography>
</CardContent>
</Card>
</Grid>
)
}
const Blog = ({ data: { allMdx } }: PageProps<Queries.BlogQuery>) => { const Blog = ({ data: { allMdx } }: PageProps<Queries.BlogQuery>) => {
console.log("allMdx", allMdx) const [highlight, ...posts] = allMdx.edges
return ( return (
<Layout pageTitle="Blog"> <Layout pageTitle="Blog">
{allMdx.edges.map(({ node: post }) => ( <Grid container spacing={2} alignItems="stretch">
<Link to={`/blog/${post.slug}`}> <Post size="highlight" post={highlight.node} />
<h2>{post.frontmatter?.title}</h2> {posts.map(({ node: post }) => (
</Link> <Post post={post} />
))} ))}
</Grid>
</Layout> </Layout>
) )
} }
export const query = graphql` export const query = graphql`
query Blog { query Blog {
allMdx { allMdx(
sort: { fields: [frontmatter___published], order: DESC }
filter: { fields: { source: { eq: "posts" } }, frontmatter: { published: { ne: null } } }
) {
edges { edges {
node { node {
id id
slug slug
excerpt(pruneLength: 400)
frontmatter { frontmatter {
title title
published published

View file

@ -1,14 +1,43 @@
import * as React from "react" import React from "react"
import { graphql, PageProps } from "gatsby" import { graphql, Link as GatsbyLink, PageProps } from "gatsby"
import { MDXRenderer } from "gatsby-plugin-mdx" import { MDXRenderer } from "gatsby-plugin-mdx"
import NavigateNextIcon from "@mui/icons-material/NavigateNext"
import Layout from "../../components/organisms/Layout" import Layout from "../../components/organisms/Layout"
import { defineCustomElements as deckDeckGoHighlightElement } from "@deckdeckgo/highlight-code/dist/loader"; import { defineCustomElements as deckDeckGoHighlightElement } from "@deckdeckgo/highlight-code/dist/loader";
import { Breadcrumbs, Link } from "@mui/material";
deckDeckGoHighlightElement(); deckDeckGoHighlightElement();
const BlogPost = ({ data: { mdx } }: PageProps<Queries.BlogPostQuery>) => { const BlogPost = ({ data: { mdx }, path }: PageProps<Queries.BlogPostQuery>) => {
return ( return (
<Layout pageTitle={mdx?.frontmatter?.title ?? ""}> <Layout
pageTitle={
<>
<Breadcrumbs
separator={<NavigateNextIcon fontSize="small" />}
aria-label="breadcrumb"
>
<Link
underline="hover"
color="inherit"
to="/blog"
component={GatsbyLink}
>
Blog
</Link>
<Link
underline="hover"
color="inherit"
to={path}
component={GatsbyLink}
>
{mdx?.frontmatter?.title}
</Link>
</Breadcrumbs>
{mdx?.frontmatter?.title ?? ""}
</>
}
>
<MDXRenderer> <MDXRenderer>
{mdx?.body ?? ""} {mdx?.body ?? ""}
</MDXRenderer> </MDXRenderer>
@ -18,7 +47,7 @@ const BlogPost = ({ data: { mdx } }: PageProps<Queries.BlogPostQuery>) => {
export const query = graphql` export const query = graphql`
query BlogPost($id: String) { query BlogPost($id: String) {
mdx(id: {eq: $id}) { mdx(fields: { source: { eq: "posts" } }, id: { eq: $id }) {
id id
body body
frontmatter { frontmatter {

View file

@ -1,194 +1,88 @@
import * as React from "react" import styled from "@emotion/styled"
import { Card as Card_, CardContent, Grid, Typography } from "@mui/material"
import { Link } from "gatsby"
import Layout from "../components/organisms/Layout"
// styles const Card = styled(Card_)`
const pageStyles = { height: 100%;
color: "#232129", `
padding: 96,
fontFamily: "-apple-system, Roboto, sans-serif, serif",
}
const headingStyles = {
marginTop: 0,
marginBottom: 64,
maxWidth: 320,
}
const headingAccentStyles = {
color: "#663399",
}
const paragraphStyles = {
marginBottom: 48,
}
const codeStyles = {
color: "#8A6534",
padding: 4,
backgroundColor: "#FFF4DB",
fontSize: "1.25rem",
borderRadius: 4,
}
const listStyles = {
marginBottom: 96,
paddingLeft: 0,
}
const doclistStyles = {
paddingLeft: 0,
}
const listItemStyles = {
fontWeight: 300,
fontSize: 24,
maxWidth: 560,
marginBottom: 30,
}
const linkStyle = {
color: "#8954A8",
fontWeight: "bold",
fontSize: 16,
verticalAlign: "5%",
}
const docLinkStyle = {
...linkStyle,
listStyleType: "none",
display: `inline-block`,
marginBottom: 24,
marginRight: 12,
}
const descriptionStyle = {
color: "#232129",
fontSize: 14,
marginTop: 10,
marginBottom: 0,
lineHeight: 1.25,
}
const docLinks = [
{
text: "TypeScript Documentation",
url: "https://www.gatsbyjs.com/docs/how-to/custom-configuration/typescript/",
color: "#8954A8",
},
{
text: "GraphQL Typegen Documentation",
url: "https://www.gatsbyjs.com/docs/how-to/local-development/graphql-typegen/",
color: "#8954A8",
}
]
const badgeStyle = {
color: "#fff",
backgroundColor: "#088413",
border: "1px solid #088413",
fontSize: 11,
fontWeight: "bold",
letterSpacing: 1,
borderRadius: 4,
padding: "4px 6px",
display: "inline-block",
position: "relative" as "relative",
top: -2,
marginLeft: 10,
lineHeight: 1,
}
// data
const links = [
{
text: "Tutorial",
url: "https://www.gatsbyjs.com/docs/tutorial/",
description:
"A great place to get started if you're new to web development. Designed to guide you through setting up your first Gatsby site.",
color: "#E95800",
},
{
text: "How to Guides",
url: "https://www.gatsbyjs.com/docs/how-to/",
description:
"Practical step-by-step guides to help you achieve a specific goal. Most useful when you're trying to get something done.",
color: "#1099A8",
},
{
text: "Reference Guides",
url: "https://www.gatsbyjs.com/docs/reference/",
description:
"Nitty-gritty technical descriptions of how Gatsby works. Most useful when you need detailed information about Gatsby's APIs.",
color: "#BC027F",
},
{
text: "Conceptual Guides",
url: "https://www.gatsbyjs.com/docs/conceptual/",
description:
"Big-picture explanations of higher-level Gatsby concepts. Most useful for building understanding of a particular topic.",
color: "#0D96F2",
},
{
text: "Plugin Library",
url: "https://www.gatsbyjs.com/plugins",
description:
"Add functionality and customize your Gatsby site or app with thousands of plugins built by our amazing developer community.",
color: "#8EB814",
},
{
text: "Build and Host",
url: "https://www.gatsbyjs.com/cloud",
badge: true,
description:
"Now youre ready to show the world! Give your Gatsby site superpowers: Build and host on Gatsby Cloud. Get started for free!",
color: "#663399",
},
]
// markup
const IndexPage = () => { const IndexPage = () => {
return ( return (
<main style={pageStyles}> <Layout pageTitle="Home">
<title>Home Page</title> <Grid container spacing={2} alignItems="stretch">
<h1 style={headingStyles}> <Grid item xs={4}>
Congratulations <Card>
<br /> <CardContent>
<span style={headingAccentStyles}> you just made a Gatsby site! </span> <Typography variant="h5" gutterBottom>
🎉🎉🎉 Cloud
</h1> </Typography>
<p style={paragraphStyles}>
Edit <code style={codeStyles}>src/pages/index.tsx</code> to see this page I'm experienced in designing & implementing Cloud-native software on all major Cloud platforms that is tailored to the customer's needs. Containers, microservices, serverless setups I'm familiar with all the important tools.
update in real-time. 😎 </CardContent>
</p> </Card>
<ul style={doclistStyles}> </Grid>
{docLinks.map(doc => (
<li key={doc.url} style={docLinkStyle}> <Grid item xs={4}>
<a <Card>
style={linkStyle} <CardContent>
href={`${doc.url}?utm_source=starter&utm_medium=ts-docs&utm_campaign=minimal-starter-ts`} <Typography variant="h5" gutterBottom>
> Type safety
{doc.text} </Typography>
</a>
</li> I love strong type systems. They avoid runtime exceptions like{" "}
))} <Link to="https://en.wikipedia.org/wiki/Null_pointer#History">
</ul> the billion-dollar mistake
<ul style={listStyles}> </Link>{" "}
{links.map(link => ( by checking for errors at compile time. A good type system enforces error handling & allows developers to focus more on actual application logic.
<li key={link.url} style={{ ...listItemStyles, color: link.color }}> </CardContent>
<span> </Card>
<a </Grid>
style={linkStyle}
href={`${link.url}?utm_source=starter&utm_medium=start-page&utm_campaign=minimal-starter-ts`} <Grid item xs={4}>
> <Card>
{link.text} <CardContent>
</a> <Typography variant="h5" gutterBottom>
{link.badge && ( Reproducibility
<span style={badgeStyle} aria-label="New Badge"> </Typography>
NEW!
</span> "But it works on my machine" how many times did you hear this?
)} Running into issues building software can be frustrating & time consuming.
<p style={descriptionStyle}>{link.description}</p> That's where reproducible builds with declarative environments come to the rescue!
</span> Nix is one such system that allows you to use the same dependencies on all developers' machines & in CI/CD pipelines.
</li> </CardContent>
))} </Card>
</ul> </Grid>
<img
alt="Gatsby G Logo" <Grid item xs={4}>
src="data:image/svg+xml,%3Csvg width='24' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2a10 10 0 110 20 10 10 0 010-20zm0 2c-3.73 0-6.86 2.55-7.75 6L14 19.75c3.45-.89 6-4.02 6-7.75h-5.25v1.5h3.45a6.37 6.37 0 01-3.89 4.44L6.06 9.69C7 7.31 9.3 5.63 12 5.63c2.13 0 4 1.04 5.18 2.65l1.23-1.06A7.959 7.959 0 0012 4zm-8 8a8 8 0 008 8c.04 0 .09 0-8-8z' fill='%23639'/%3E%3C/svg%3E" <Card>
/> <CardContent>
</main> <Typography variant="h5" gutterBottom>
DevOps
</Typography>
Plan, Develop, Deliver, Operate Repeat
DevOps is about continually providing value to customers.
Teams who adopt DevOps streamline their processes & automate their systems. This allows rapidly delivering features & maintaining a reliable system.
</CardContent>
</Card>
</Grid>
<Grid item xs={4}>
<Card>
<CardContent>
<Typography variant="h5" gutterBottom>
Learning
</Typography>
Software development is such a vast field and I love learning about new technologies.
You can expect software built on modern state-of-the-art technologies & methodologies from me.
</CardContent>
</Card>
</Grid>
</Grid>
</Layout>
) )
} }

View file

@ -0,0 +1,30 @@
---
title: Terms of Service
---
Information in accordance with Section 5 TMG
Felix Schröter
Salzwedeler Str. 1
21339 Lüneburg
Germany
## Contact Information
Telephone: +491723956877
E-Mail: admin@felschr.com
Website: [felschr.com](https://felschr.com)
## Disclaimer
### Accountability for content
The contents of our pages have been created with the utmost care. However, we cannot guarantee the contents' accuracy, completeness or topicality. According to statutory provisions, we are furthermore responsible for our own content on these web pages. In this matter, please note that we are not obliged to monitor the transmitted or saved information of third parties, or investigate circumstances pointing to illegal activity. Our obligations to remove or block the use of information under generally applicable laws remain unaffected by this as per §§ 8 to 10 of the Telemedia Act (TMG).
### Accountability for links
Responsibility for the content of external links (to web pages of third parties) lies solely with the operators of the linked pages. No violations were evident to us at the time of linking. Should any legal infringement become known to us, we will remove the respective link immediately.
### Copyright
Our web pages and their contents are subject to German copyright law. Unless expressly permitted by law, every form of utilizing, reproducing or processing works subject to copyright protection on our web pages requires the prior consent of the respective owner of the rights. Individual reproductions of a work are only allowed for private use. The materials from these pages are copyrighted and any unauthorized use may violate copyright laws.

29
src/pages/{mdx.slug}.tsx Normal file
View file

@ -0,0 +1,29 @@
import React from "react"
import { graphql, PageProps } from "gatsby"
import { MDXRenderer } from "gatsby-plugin-mdx"
import Layout from "../components/organisms/Layout"
const Page = ({ data: { mdx }, path }: PageProps<Queries.PageQuery>) => {
console.log("Page...", { path, mdx })
return (
<Layout pageTitle={mdx?.frontmatter?.title ?? ""}>
<MDXRenderer>
{mdx?.body ?? ""}
</MDXRenderer>
</Layout>
)
}
export const query = graphql`
query Page($id: String) {
mdx(fields: { source: { eq: "pages" } }, id: { eq: $id }) {
id
body
frontmatter {
title
}
}
}
`
export default Page