From 519d346d892ef8c761b531734198f4b43517c67e Mon Sep 17 00:00:00 2001 From: Adrien KISSIE Date: Mon, 23 Sep 2024 22:25:31 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A7=20some=20more=20progress?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .prettierrc | 17 ++ .vscode/settings.json | 2 +- package.json | 4 +- pnpm-lock.yaml | 48 +++++- src/components/icon.astro | 213 ++++++++++++++++------- src/content/config.ts | 24 +++ src/content/work/modularcloud.md | 13 ++ src/content/work/monemprunt.com.md | 17 ++ src/content/work/propr-consulting.md | 10 ++ src/layouts/base-layout.astro | 210 +++++++++++----------- src/lib/utils.ts | 10 ++ src/pages/index.astro | 249 ++++++++++++++++----------- 12 files changed, 546 insertions(+), 271 deletions(-) create mode 100644 .prettierrc create mode 100644 src/content/config.ts create mode 100644 src/content/work/modularcloud.md create mode 100644 src/content/work/monemprunt.com.md create mode 100644 src/content/work/propr-consulting.md create mode 100644 src/lib/utils.ts diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..ae43039 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,17 @@ +{ + "tabWidth": 2, + "useTabs": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "jsxBracketSameLine": true, + "pluginSearchDirs": ["."], + "plugins": ["prettier-plugin-astro"], + "overrides": [ + { + "files": "*.astro", + "options": { + "parser": "astro" + } + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 7a458e6..e3f522b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,7 +12,7 @@ "typescript.preferences.importModuleSpecifier": "non-relative", "typescript.tsdk": "node_modules/typescript/lib", "[json]": { - "editor.defaultFormatter": "biomejs.biome" + "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[astro]": { "editor.defaultFormatter": "astro-build.astro-vscode" diff --git a/package.json b/package.json index e6299c7..75d2d3b 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "typescript": "^5.6.2" }, "devDependencies": { - "@types/node": "^22.5.5" + "@types/node": "^22.5.5", + "prettier": "^3.3.3", + "prettier-plugin-astro": "^0.14.1" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb4e1f2..ba87319 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,7 +7,7 @@ settings: dependencies: '@astrojs/check': specifier: ^0.9.3 - version: 0.9.3(typescript@5.6.2) + version: 0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2) '@astrojs/sitemap': specifier: ^3.1.6 version: 3.1.6 @@ -31,6 +31,12 @@ devDependencies: '@types/node': specifier: ^22.5.5 version: 22.5.5 + prettier: + specifier: ^3.3.3 + version: 3.3.3 + prettier-plugin-astro: + specifier: ^0.14.1 + version: 0.14.1 packages: @@ -47,13 +53,13 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: false - /@astrojs/check@0.9.3(typescript@5.6.2): + /@astrojs/check@0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2): resolution: {integrity: sha512-I6Dz45bMI5YRbp4yK2LKWsHH3/kkHRGdPGruGkLap6pqxhdcNh7oCgN04Ac+haDfc9ow5BYPGPmEhkwef15GQQ==} hasBin: true peerDependencies: typescript: ^5.0.0 dependencies: - '@astrojs/language-server': 2.14.2(typescript@5.6.2) + '@astrojs/language-server': 2.14.2(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2) chokidar: 3.6.0 fast-glob: 3.3.2 kleur: 4.1.5 @@ -66,13 +72,12 @@ packages: /@astrojs/compiler@2.10.3: resolution: {integrity: sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw==} - dev: false /@astrojs/internal-helpers@0.4.1: resolution: {integrity: sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g==} dev: false - /@astrojs/language-server@2.14.2(typescript@5.6.2): + /@astrojs/language-server@2.14.2(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2): resolution: {integrity: sha512-daUJ/+/2pPF3eGG4tVdXKyw0tabUDrJKwLzU8VTuNhEHIn3VZAIES6VT3+mX0lmKcMiKM8/bjZdfY+fPfmnsMA==} hasBin: true peerDependencies: @@ -94,10 +99,12 @@ packages: '@volar/typescript': 2.4.5 fast-glob: 3.3.2 muggle-string: 0.4.1 + prettier: 3.3.3 + prettier-plugin-astro: 0.14.1 volar-service-css: 0.0.61(@volar/language-service@2.4.5) volar-service-emmet: 0.0.61(@volar/language-service@2.4.5) volar-service-html: 0.0.61(@volar/language-service@2.4.5) - volar-service-prettier: 0.0.61(@volar/language-service@2.4.5) + volar-service-prettier: 0.0.61(@volar/language-service@2.4.5)(prettier@3.3.3) volar-service-typescript: 0.0.61(@volar/language-service@2.4.5) volar-service-typescript-twoslash-queries: 0.0.61(@volar/language-service@2.4.5) volar-service-yaml: 0.0.61(@volar/language-service@2.4.5) @@ -3052,6 +3059,14 @@ packages: which-pm: 3.0.0 dev: false + /prettier-plugin-astro@0.14.1: + resolution: {integrity: sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@astrojs/compiler': 2.10.3 + prettier: 3.3.3 + sass-formatter: 0.7.9 + /prettier@2.8.7: resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} engines: {node: '>=10.13.0'} @@ -3060,6 +3075,11 @@ packages: dev: false optional: true + /prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + /prismjs@1.29.0: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} engines: {node: '>=6'} @@ -3288,6 +3308,14 @@ packages: queue-microtask: 1.2.3 dev: false + /s.color@0.0.15: + resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} + + /sass-formatter@0.7.9: + resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==} + dependencies: + suf-log: 2.5.3 + /sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} dev: false @@ -3485,6 +3513,11 @@ packages: ts-interface-checker: 0.1.13 dev: false + /suf-log@2.5.3: + resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} + dependencies: + s.color: 0.0.15 + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -3813,7 +3846,7 @@ packages: vscode-uri: 3.0.8 dev: false - /volar-service-prettier@0.0.61(@volar/language-service@2.4.5): + /volar-service-prettier@0.0.61(@volar/language-service@2.4.5)(prettier@3.3.3): resolution: {integrity: sha512-F612nql5I0IS8HxXemCGvOR2Uxd4XooIwqYVUvk7WSBxP/+xu1jYvE3QJ7EVpl8Ty3S4SxPXYiYTsG3bi+gzIQ==} peerDependencies: '@volar/language-service': ~2.4.0 @@ -3825,6 +3858,7 @@ packages: optional: true dependencies: '@volar/language-service': 2.4.5 + prettier: 3.3.3 vscode-uri: 3.0.8 dev: false diff --git a/src/components/icon.astro b/src/components/icon.astro index 7c47df1..73601ec 100644 --- a/src/components/icon.astro +++ b/src/components/icon.astro @@ -1,71 +1,168 @@ --- interface Props { - class?: string; - type: "map-pin" | "arrow-external" | "suitcase"; + class?: string; + type: + | "map-pin" + | "arrow-external" + | "suitcase" + | "github" + | "twitter" + | "twitch" + | "arobase" + | "linkedin"; } const { class: className, type } = Astro.props; --- { - type === "map-pin" && ( - - ) + type === "map-pin" && ( + + ) } { - type === "arrow-external" && ( - - ) + type === "arrow-external" && ( + + ) } { - type === "suitcase" && ( - - ) + type === "suitcase" && ( + + ) +} +{ + type === "github" && ( + + ) +} +{ + type === "arobase" && ( + + ) +} +{ + type === "twitter" && ( + + ) +} +{ + type === "linkedin" && ( + + ) +} +{ + type === "twitch" && ( + + ) } diff --git a/src/content/config.ts b/src/content/config.ts new file mode 100644 index 0000000..37d36c1 --- /dev/null +++ b/src/content/config.ts @@ -0,0 +1,24 @@ +import { defineCollection, z } from "astro:content"; + +const workExperienceCollection = defineCollection({ + type: "content", + schema: z.object({ + company: z.string().min(1), + jobTitle: z.string().min(1), + link: z.string().url(), + startDate: z.coerce.date(), + endDate: z.coerce.date().optional(), + }), +}); + +const projectCollection = defineCollection({ + type: "content", + schema: z.object({ + /* ... */ + }), +}); + +export const collections = { + work: workExperienceCollection, + project: projectCollection, +}; diff --git a/src/content/work/modularcloud.md b/src/content/work/modularcloud.md new file mode 100644 index 0000000..802613d --- /dev/null +++ b/src/content/work/modularcloud.md @@ -0,0 +1,13 @@ +--- +company: "modular cloud" +jobTitle: Full-stack Developper +link: https://explorer.modular.cloud +startDate: "2023-09-01" +endDate: "2024-04-31" +--- + +I joined Modular Cloud as a full-stack developer in September 2023, initially as a contractor, and became full-time in November. ModularCloud builds open-source tools for blockchain developers, and I primarily worked on a [block explorer](https://explorer.modular.cloud) for viewing blockchain data. My key responsibilities included: + +- Migrating the project from its [old design](https://nautscan.com) to a new design system in collaboration with a designer. +- Implementing an Electron port for a local developer-friendly version of the app. +- Improving the [codebase](https://github.com/modularcloud/explorer) and resolving performance issues as new features were added. \ No newline at end of file diff --git a/src/content/work/monemprunt.com.md b/src/content/work/monemprunt.com.md new file mode 100644 index 0000000..f2a1afc --- /dev/null +++ b/src/content/work/monemprunt.com.md @@ -0,0 +1,17 @@ +--- +company: "Monemprunt.com" +jobTitle: Frontend Developper, Devops +link: https://monemprunt.com +startDate: "2021-04-24" +endDate: "2023-09-06" +--- + +As a frontend developer at monemprunt.com, I worked on: + +- Migrating monemprunt.com from Drupal to Gatsby/Strapi, deploying on Google Cloud. +- Implementing a reusable design system and component library. [Demo](https://mec-design-system.netlify.app/) +- Creating a monorepo for all frontend websites and apps. +- Developing mortgage simulator widgets for partner websites, redirecting users to +monemprunt.com. [Demo](https://www.monemprunt.com/simulation-emprunt-immobilier/calcul-mensualites-credit-immobilier/) +- Integrating [pro.monemprunt.com](https://pro.monemprunt.com), showcased at the "RENT" real estate exhibition in Paris (Oct 2021). +- Configuring a root Google Cloud Platform load balancer to deploy all services with Google Cloud Run (for APIs) and Cloud Storage (for frontend), migrating old services to a fully cloud-based environment. \ No newline at end of file diff --git a/src/content/work/propr-consulting.md b/src/content/work/propr-consulting.md new file mode 100644 index 0000000..314e3b3 --- /dev/null +++ b/src/content/work/propr-consulting.md @@ -0,0 +1,10 @@ +--- +company: "ProPR Consulting" +jobTitle: Frontend Developper +link: https://proprconsulting.com +startDate: "2022-08-01" +endDate: "2022-08-08" +--- + +I was contacted by Propr Consulting for the integration of their new landing page. +We started with a Figma mockup containing 3 pages, integrated the project with NextJs and TailwindCSS and deployed the site on vercel. diff --git a/src/layouts/base-layout.astro b/src/layouts/base-layout.astro index 3276a56..9e627ca 100644 --- a/src/layouts/base-layout.astro +++ b/src/layouts/base-layout.astro @@ -1,10 +1,10 @@ --- import Icon from "~/components/icon.astro"; import TailwindIndicator from "~/components/tailwind-indicator.astro"; -import { ViewTransitions } from 'astro:transitions'; +import { ViewTransitions } from "astro:transitions"; interface Props { - title?: string; + title?: string; } const { title } = Astro.props; @@ -12,109 +12,117 @@ const { title } = Astro.props; const currentPath = Astro.url.pathname; const headTitle = title ? `${title} | Fred KISSIE` : "Fred KISSIE"; const description = - "Software Engineer, amateur chef, amateur cyclist and twitch streamer"; + "Software Engineer, amateur chef, amateur cyclist and twitch streamer"; --- - - - - - - {headTitle} - + + + + + + {headTitle} + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - Skip to main content - -
- -
-
- -
-
- Copyright © 2024 - Fred KISSIE -
- Built with Astro & deployed on ZaneOps - Inspired by nexxel.dev -
-
- {process.env.NODE_ENV === "development" && } - + + + + + + Skip to main content + +
+ +
+
+ +
+
+ Copyright © 2024 - Fred KISSIE +
+ + Built with Astro & deployed on  + ZaneOps + + + Inspired by + + nexxel.dev + + +
+
+ {process.env.NODE_ENV === "development" && } + diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..7c570ec --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,10 @@ +export function formattedDate(dateInput: string | Date): string { + const date = new Date(dateInput); + const formattedDate = new Intl.DateTimeFormat("en-US", { + month: "short", + // day: "numeric", + year: "numeric", + }).format(date); + + return formattedDate; +} diff --git a/src/pages/index.astro b/src/pages/index.astro index 00f5363..fbc1ba7 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -3,119 +3,162 @@ import BaseLayout from "~/layouts/base-layout.astro"; import { Image } from "astro:assets"; import portraitImage from "~/images/headshot.png"; import Icon from "~/components/icon.astro"; +import { getCollection } from "astro:content"; +import { formattedDate } from "~/lib/utils"; const totalYearsXP = new Date().getFullYear() - 2021; const totalYearsDev = new Date().getFullYear() - 2017; + +const workExperiences = (await getCollection("work")).sort( + (a, b) => + (b.data.endDate?.getTime() ?? new Date().getTime()) - + (a.data.endDate?.getTime() ?? new Date().getTime()) +); --- - - +
+

projects

+