From fbfeda83d852b2e4427df56471d98b6a7fdc29f6 Mon Sep 17 00:00:00 2001 From: Jonas <60574217+Jodekq@users.noreply.github.com> Date: Sat, 26 Oct 2024 21:57:45 +0200 Subject: [PATCH] Changes Added activity feature Added projects Dynamic age --- astro.config.mjs | 4 +- package-lock.json | 177 ++++++++++++++++-- package.json | 2 + public/assets/157134739.png | Bin 0 -> 9057 bytes public/assets/165845149.png | Bin 0 -> 24947 bytes ..._final_fu\314\210r_Hintergrund_dunkel.svg" | 115 ++++++++++++ .../ProfileImageWebsiteJodek_307x305.webp | Bin public/{ => assets}/astro-icon-logo_white.png | Bin public/{ => assets}/c-icon.png | Bin public/{ => assets}/c-sharp-c-icon.png | Bin public/{ => assets}/solidjs-icon.png | Bin src/components/Activity.astro | 26 --- src/components/ActivityStatus.tsx | 135 +++++++++++++ src/components/Age.tsx | 21 +++ src/components/Header.astro | 2 +- src/components/Navbar.astro | 11 +- src/components/ProjectCard.astro | 5 +- src/components/linktree/Header.astro | 26 +++ src/components/linktree/Link.astro | 12 ++ src/layouts/Layout.astro | 2 +- src/pages/index.astro | 45 +++-- src/pages/linktree.astro | 65 +++++++ tsconfig.json | 8 +- 23 files changed, 580 insertions(+), 76 deletions(-) create mode 100644 public/assets/157134739.png create mode 100644 public/assets/165845149.png create mode 100644 "public/assets/FWHN_Logo_final_fu\314\210r_Hintergrund_dunkel.svg" rename public/{ => assets}/ProfileImageWebsiteJodek_307x305.webp (100%) rename public/{ => assets}/astro-icon-logo_white.png (100%) rename public/{ => assets}/c-icon.png (100%) rename public/{ => assets}/c-sharp-c-icon.png (100%) rename public/{ => assets}/solidjs-icon.png (100%) delete mode 100644 src/components/Activity.astro create mode 100644 src/components/ActivityStatus.tsx create mode 100644 src/components/Age.tsx create mode 100644 src/components/linktree/Header.astro create mode 100644 src/components/linktree/Link.astro create mode 100644 src/pages/linktree.astro diff --git a/astro.config.mjs b/astro.config.mjs index 3d7f95d..f9f6b56 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -3,8 +3,10 @@ import { defineConfig } from 'astro/config'; import tailwind from '@astrojs/tailwind'; +import react from '@astrojs/react'; + // https://astro.build/config export default defineConfig({ site: 'https://jodek.dev', - integrations: [tailwind()], + integrations: [tailwind(), react()], }); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 94f2393..54dedb5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,14 @@ "version": "0.0.1", "dependencies": { "@astrojs/check": "^0.9.4", + "@astrojs/react": "^3.6.2", "@astrojs/tailwind": "^5.1.2", "astro": "^4.16.7", "boxicons": "^2.1.4", "typescript": "^5.6.3" }, "devDependencies": { + "@types/react": "^18.3.12", "tailwindcss": "^3.4.14" } }, @@ -144,6 +146,24 @@ "node": "^18.17.1 || ^20.3.0 || >=21.0.0" } }, + "node_modules/@astrojs/react": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-3.6.2.tgz", + "integrity": "sha512-fK29lYI7zK/KG4ZBy956x4dmauZcZ18osFkuyGa8r3gmmCQa2NZ9XNu9WaVYEUm0j89f4Gii4tbxLoyM8nk2MA==", + "dependencies": { + "@vitejs/plugin-react": "^4.3.1", + "ultrahtml": "^1.5.3" + }, + "engines": { + "node": "^18.17.1 || ^20.3.0 || >=21.0.0" + }, + "peerDependencies": { + "@types/react": "^17.0.50 || ^18.0.21", + "@types/react-dom": "^17.0.17 || ^18.0.6", + "react": "^17.0.2 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0-beta" + } + }, "node_modules/@astrojs/tailwind": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-5.1.2.tgz", @@ -433,6 +453,34 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/runtime": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.9.tgz", @@ -1731,6 +1779,29 @@ "@types/unist": "*" } }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" + }, + "node_modules/@types/react": { + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "peer": true, + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", @@ -1741,6 +1812,24 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", + "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, "node_modules/@volar/kit": { "version": "2.4.6", "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.4.6.tgz", @@ -2180,6 +2269,42 @@ "react-router-dom": "^4.2.2" } }, + "node_modules/boxicons/node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/boxicons/node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" + } + }, + "node_modules/boxicons/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -2598,6 +2723,11 @@ "node": ">=4" } }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, "node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -5173,30 +5303,28 @@ ] }, "node_modules/react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "peer": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" + "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^16.14.0" + "react": "^18.3.1" } }, "node_modules/react-interactive": { @@ -5217,6 +5345,14 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-router": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", @@ -5601,12 +5737,12 @@ } }, "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "peer": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "node_modules/section-matter": { @@ -6153,6 +6289,11 @@ "semver": "^7.3.8" } }, + "node_modules/ultrahtml": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.3.tgz", + "integrity": "sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==" + }, "node_modules/unified": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", diff --git a/package.json b/package.json index 40a9ed2..8e6e41d 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,14 @@ }, "dependencies": { "@astrojs/check": "^0.9.4", + "@astrojs/react": "^3.6.2", "@astrojs/tailwind": "^5.1.2", "astro": "^4.16.7", "boxicons": "^2.1.4", "typescript": "^5.6.3" }, "devDependencies": { + "@types/react": "^18.3.12", "tailwindcss": "^3.4.14" } } diff --git a/public/assets/157134739.png b/public/assets/157134739.png new file mode 100644 index 0000000000000000000000000000000000000000..0bdaa9022de9d1483b3cd528123b04df6f21f127 GIT binary patch literal 9057 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 Us0KO%A^-pY07*qoM6N<$f_AKJdjJ3c literal 0 HcmV?d00001 diff --git "a/public/assets/FWHN_Logo_final_fu\314\210r_Hintergrund_dunkel.svg" "b/public/assets/FWHN_Logo_final_fu\314\210r_Hintergrund_dunkel.svg" new file mode 100644 index 0000000..feb459f --- /dev/null +++ "b/public/assets/FWHN_Logo_final_fu\314\210r_Hintergrund_dunkel.svg" @@ -0,0 +1,115 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/public/ProfileImageWebsiteJodek_307x305.webp b/public/assets/ProfileImageWebsiteJodek_307x305.webp similarity index 100% rename from public/ProfileImageWebsiteJodek_307x305.webp rename to public/assets/ProfileImageWebsiteJodek_307x305.webp diff --git a/public/astro-icon-logo_white.png b/public/assets/astro-icon-logo_white.png similarity index 100% rename from public/astro-icon-logo_white.png rename to public/assets/astro-icon-logo_white.png diff --git a/public/c-icon.png b/public/assets/c-icon.png similarity index 100% rename from public/c-icon.png rename to public/assets/c-icon.png diff --git a/public/c-sharp-c-icon.png b/public/assets/c-sharp-c-icon.png similarity index 100% rename from public/c-sharp-c-icon.png rename to public/assets/c-sharp-c-icon.png diff --git a/public/solidjs-icon.png b/public/assets/solidjs-icon.png similarity index 100% rename from public/solidjs-icon.png rename to public/assets/solidjs-icon.png diff --git a/src/components/Activity.astro b/src/components/Activity.astro deleted file mode 100644 index a13e2d9..0000000 --- a/src/components/Activity.astro +++ /dev/null @@ -1,26 +0,0 @@ ---- -const { listeningTo, onlineStatus } = Astro.props; ---- -
- -
-
- @jodek -
-
-
- {onlineStatus ? 'Online' : 'Offline'} -
-
- -
- - -
- {listeningTo && ( -
- - {listeningTo && listeningTo.trim().toLowerCase() !== 'nothing' && listeningTo.trim() !== '' ? `Listening to: ${listeningTo}` : 'Nothing playing'} -
- )} -
\ No newline at end of file diff --git a/src/components/ActivityStatus.tsx b/src/components/ActivityStatus.tsx new file mode 100644 index 0000000..7f1bff8 --- /dev/null +++ b/src/components/ActivityStatus.tsx @@ -0,0 +1,135 @@ +// src/components/ActivityStatus.tsx +import React, { useEffect, useState } from 'react'; + +interface Activity { + id: string; + name: string; + type: number; + state?: string; + details?: string; +} + +interface DiscordUser { + id: string; + username: string; + avatar: string; +} + +interface Resp { + discord_status: 'online' | 'dnd' | 'idle'; + discord_user: DiscordUser; + activities: Activity[]; + active_on_discord_web: boolean; + active_on_discord_desktop: boolean; + active_on_discord_mobile: boolean; + listening_to_spotify: boolean; + spotify?: { + timestamps: { + start: number; + end: number; + }; + album: string; + album_art_url: string; + artist: string; + song: string; + track_id: string; + }; +} + + + +const ActivityStatus: React.FC = () => { + const [data, setData] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const ID = '485815291406843904'; + fetch(`https://api.lanyard.rest/v1/users/${ID}`) + .then((res) => res.json()) + .then((res) => { + setData(res.data); + setLoading(false); + }); + }, []); + + if (loading || !data) return ( +
+ {/* Discord Status Card */} + + +
+

+ @jodek +

+
+
+ Online +
+
+ +
+ + {/* Spotify Status Card */} +
+ +
+

Listening to:

+

+ Not currently playing anything +

+
+
+
+ ); + + return ( + + ); +}; + +export default ActivityStatus; diff --git a/src/components/Age.tsx b/src/components/Age.tsx new file mode 100644 index 0000000..f5a9816 --- /dev/null +++ b/src/components/Age.tsx @@ -0,0 +1,21 @@ +import { useState, useEffect } from 'react'; + +const Age = () => { + const today = new Date(); + const birthDate = new Date("12/13/2005"); + var age = today.getFullYear() - birthDate.getFullYear(); + const m = today.getMonth() - birthDate.getMonth(); + if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { + age--; + } + + return ( +
+

+ I'm a {age}-year-old self-taught programmer and computer science student from Germany. Motivated by passion and personal projects, I love discovering new tech, experimenting with code, and continuously learning. +

+
+ ); +}; + +export default Age; diff --git a/src/components/Header.astro b/src/components/Header.astro index d1047f8..fe6bb87 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -8,7 +8,7 @@ const { smallText, title } = Astro.props; ---
- Logo + Logo
{ smallText }
diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro index d737278..b546898 100644 --- a/src/components/Navbar.astro +++ b/src/components/Navbar.astro @@ -1,16 +1,15 @@ --- const socialLinks = [ - { href: 'https://twitter.com/yourprofile', label: 'bx bxl-twitter' }, - { href: 'https://github.com/yourprofile', label: 'bx bxl-github' }, - { href: 'https://linkedin.com/in/yourprofile', label: 'bx bxl-linkedin' } + { href: 'https://discord.com/users/485815291406843904', label: 'bx bxl-discord' }, + { href: 'https://github.com/Jodekq', label: 'bx bxl-github' }, ]; --- -
Projects -
+
+ +
+
+
+
+ +
+ + + + + +
+ + +
+ + +
+
+
+ diff --git a/tsconfig.json b/tsconfig.json index bcbf8b5..032ad64 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,3 +1,7 @@ { - "extends": "astro/tsconfigs/strict" -} + "extends": "astro/tsconfigs/strict", + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "react" + } +} \ No newline at end of file