diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..51387b0 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "bracketSpacing": true, + "singleQuote": false, + "useTabs": true, + "tabWidth": 2, + "semi": true +} diff --git a/assets/logo.svg b/assets/logo.svg new file mode 100644 index 0000000..a9ed500 --- /dev/null +++ b/assets/logo.svg @@ -0,0 +1,28 @@ + + + +Gractwo Main Logo + + + + + + diff --git a/components/Footer/Footer.tsx b/components/Footer/Footer.tsx new file mode 100644 index 0000000..4a1f729 --- /dev/null +++ b/components/Footer/Footer.tsx @@ -0,0 +1,9 @@ +const Footer = () => { + return ( +
+

© Gractwo 2020-{new Date().getFullYear()}

+
+ ); +}; + +export default Footer; diff --git a/components/Navigation/Navigation.module.scss b/components/Navigation/Navigation.module.scss new file mode 100644 index 0000000..c233eb8 --- /dev/null +++ b/components/Navigation/Navigation.module.scss @@ -0,0 +1,36 @@ +.nav { + display: flex; + background-color: var(--black1); + min-height: 4rem; +} +.link { + display: flex; + flex-direction: column; + justify-content: center; + color: inherit; + text-decoration: none; + padding: 0 2rem; + height: auto; + user-select: none; + &:hover { + background: var(--backdrop); + color: var(--color); + } +} +.profile { + margin-left: auto; + background: var(--color); + color: var(--backdrop); +} +.logo { + padding: 0 1rem; + transition-duration: 100ms; + user-select: none; + &:hover { + background: var(--backdrop); + cursor: pointer; + } + &:active { + transform: scale(1.1); + } +} diff --git a/components/Navigation/Navigation.tsx b/components/Navigation/Navigation.tsx new file mode 100644 index 0000000..e3f514c --- /dev/null +++ b/components/Navigation/Navigation.tsx @@ -0,0 +1,43 @@ +import styles from "./Navigation.module.scss"; +import GractwoLogo from "../logo"; +import Link from "next/link"; + +const PageNavigation = () => { + let username: string = ""; + return ( + <> +
+ + {/*

Gractwo!

*/} + + główna + + + o gractwie + + + cytaty + + + rankingi + + + zaloguj się + + + {username ? username : "twój profil"} + +
+ + ); +}; + +export default PageNavigation; diff --git a/components/SEO.tsx b/components/SEO.tsx new file mode 100644 index 0000000..1a915f5 --- /dev/null +++ b/components/SEO.tsx @@ -0,0 +1,22 @@ +import Head from "next/head"; + +type seoprops = { + title?: string; + noatsign?: boolean; // simply add "noatsign" as property to element + description?: string; +}; + +const ComponentSEO = ({ title, noatsign, description }: seoprops) => { + const defaultDescription = "Witryna internetowa Gractwa."; + return ( + + + {title ? `${title}${noatsign ? "" : " @ gractwo.pl"}` : "gractwo.pl"} + + + + + ); +}; + +export default ComponentSEO; diff --git a/components/logo.tsx b/components/logo.tsx new file mode 100644 index 0000000..2cbc3f9 --- /dev/null +++ b/components/logo.tsx @@ -0,0 +1,56 @@ +import { SVGProps } from "react"; + +type logoprops = { + width?: number; + height?: number; +} & React.SVGProps; + +const GractwoLogo = ({ width, height, ...props }: logoprops) => { + return ( + + Gractwo Main Logo + + + + + ); +}; + +export default GractwoLogo; diff --git a/data/config.json b/data/config.json new file mode 100644 index 0000000..43340e7 --- /dev/null +++ b/data/config.json @@ -0,0 +1,80 @@ +{ + "splashes": [ + { + "body": "ona jest narysowana debilu", + "author": "jamesen" + }, + { + "body": "idą jak surykatki na śmierć puszczone", + "author": "mollin" + }, + { + "body": "jak spotkam stacha będziemy się napierdalać", + "author": "KuOlek" + }, + { + "body": "to nie kwestia fetyszu, to kwestia prawa izraela", + "author": "stachowiak" + }, + { + "body": "czemu ten szkielet ma oczy i czilluje", + "author": "stachowiak" + }, + { + "body": "decymalizacja człowieka", + "author": "elephant / suoń" + }, + { + "body": "pizdeczka... z całym szacunkiem", + "author": "bavil gravlax" + }, + { + "body": "mam dwunastometrowego kija w dupie", + "author": "stachowiak" + }, + { + "body": "pamięć wody o jabłku", + "author": "maciuś" + }, + { + "body": "właśnie piszę biblię", + "author": "elephant / suoń" + }, + { + "body": "bitwa o chromosom", + "author": "mollin" + } + ], + "links": [ + { + "name": "Discord", + "href": "https://discord.gg/NBXq95C", + "hrefalias": ["/discord", "/dsc", "/dc"], + "desc": "Nasz serwer na Discordzie!" + }, + { + "name": "YouTube", + "href": "https://www.youtube.com/@gractwopl", + "hrefalias": ["/youtube", "/yt"], + "desc": "Nasz kanał na YouTubie!" + }, + { + "name": "Twitter", + "href": "https://twitter.com/gractwo", + "hrefalias": ["/twitter", "/twt"], + "desc": "Nasz profil na Twitterze!" + }, + { + "name": "GitHub", + "href": "https://github.com/gractwo", + "hrefalias": ["/github", "/gh"], + "desc": "Nasz org na GitHubie!" + }, + { + "name": "Kod Źródłowy", + "href": "https://github.com/gractwo/gractwo-web", + "hrefalias": ["/source", "/oss"], + "desc": "Kod źródłowy naszej strony internetowej." + } + ] +} diff --git a/next.config.js b/next.config.js index ae88795..ff29638 100644 --- a/next.config.js +++ b/next.config.js @@ -1,7 +1,21 @@ +const { links } = require("./data/config.json"); + /** @type {import('next').NextConfig} */ const nextConfig = { - reactStrictMode: true, - swcMinify: true, -} + reactStrictMode: true, + swcMinify: true, + async redirects() { + return links + .filter((link) => !!link.hrefalias) + .map((link) => + link.hrefalias.map((source) => ({ + source, + destination: link.href, + permanent: false, + })) + ) + .flat(); + }, +}; -module.exports = nextConfig +module.exports = nextConfig; diff --git a/package-lock.json b/package-lock.json index 5fd6aa7..8678f5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "next": "13.0.6", "react": "18.2.0", "react-dom": "18.2.0", + "sass": "^1.56.2", "typescript": "4.9.4" } }, @@ -556,6 +557,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -668,6 +681,14 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -738,6 +759,43 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -1492,6 +1550,19 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -1723,6 +1794,11 @@ "node": ">= 4" } }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -1784,6 +1860,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -2225,6 +2312,14 @@ } } }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -2551,6 +2646,17 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -2665,6 +2771,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sass": { + "version": "1.56.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.2.tgz", + "integrity": "sha512-ciEJhnyCRwzlBCB+h5cCPM6ie/6f8HrhZMQOf5vlU60Y1bI1rx5Zb0vlDZvaycHsg/MqFfF1Eq2eokAa32iw8w==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -3366,6 +3488,15 @@ "color-convert": "^2.0.1" } }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -3451,6 +3582,11 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3496,6 +3632,31 @@ "supports-color": "^7.1.0" } }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -4065,6 +4226,12 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -4224,6 +4391,11 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==" }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -4270,6 +4442,14 @@ "has-bigints": "^1.0.1" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -4558,6 +4738,11 @@ "styled-jsx": "5.1.0" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4770,6 +4955,14 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -4836,6 +5029,16 @@ "is-regex": "^1.1.4" } }, + "sass": { + "version": "1.56.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.2.tgz", + "integrity": "sha512-ciEJhnyCRwzlBCB+h5cCPM6ie/6f8HrhZMQOf5vlU60Y1bI1rx5Zb0vlDZvaycHsg/MqFfF1Eq2eokAa32iw8w==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, "scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", diff --git a/package.json b/package.json index 3830f30..8792504 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "next": "13.0.6", "react": "18.2.0", "react-dom": "18.2.0", + "sass": "^1.56.2", "typescript": "4.9.4" } } diff --git a/pages/404.tsx b/pages/404.tsx new file mode 100644 index 0000000..da7fe7f --- /dev/null +++ b/pages/404.tsx @@ -0,0 +1,12 @@ +import SEO from "../components/SEO"; + +const PageError404 = () => { + return ( + <> + + Error 404!! + + ); +}; + +export default PageError404; diff --git a/pages/_app.tsx b/pages/_app.tsx index c055f25..e8cc3de 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,6 +1,16 @@ -import '../styles/globals.css' -import type { AppProps } from 'next/app' +import "../styles/globals.scss"; +import type { AppProps } from "next/app"; +import Navigation from "../components/Navigation/Navigation"; +import Footer from "../components/Footer/Footer"; +import SEO from "../components/SEO"; export default function App({ Component, pageProps }: AppProps) { - return + return ( + <> + + + +