diff --git a/frontend/package-lock.json b/frontend/package-lock.json index cd2439a..0b35540 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -16,6 +16,7 @@ "clsx": "^2.0.0", "lucide-react": "^0.288.0", "next": "13.5.6", + "next-auth": "^4.24.3", "react": "^18", "react-dom": "^18", "react-hook-form": "^7.47.0", @@ -387,6 +388,14 @@ "node": ">= 8" } }, + "node_modules/@panva/hkdf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.1.1.tgz", + "integrity": "sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/@radix-ui/primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", @@ -1433,6 +1442,14 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2990,6 +3007,14 @@ "jiti": "bin/jiti.js" } }, + "node_modules/jose": { + "version": "4.15.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", + "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3138,7 +3163,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -3278,6 +3302,33 @@ } } }, + "node_modules/next-auth": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.3.tgz", + "integrity": "sha512-n1EvmY7MwQMSOkCh6jhI6uBneB6VVtkYELVMEwVaCLD1mBD3IAAucwk+90kgxramW09nSp5drvynwfNCi1JjaQ==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@panva/hkdf": "^1.0.2", + "cookie": "^0.5.0", + "jose": "^4.11.4", + "oauth": "^0.9.15", + "openid-client": "^5.4.0", + "preact": "^10.6.3", + "preact-render-to-string": "^5.1.19", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "next": "^12.2.5 || ^13", + "nodemailer": "^6.6.5", + "react": "^17.0.2 || ^18", + "react-dom": "^17.0.2 || ^18" + }, + "peerDependenciesMeta": { + "nodemailer": { + "optional": true + } + } + }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", @@ -3301,6 +3352,11 @@ "node": ">=0.10.0" } }, + "node_modules/oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3426,6 +3482,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/oidc-token-hash": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", + "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", + "engines": { + "node": "^10.13.0 || >=12.0.0" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3434,6 +3498,28 @@ "wrappy": "1" } }, + "node_modules/openid-client": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.1.tgz", + "integrity": "sha512-PtrWsY+dXg6y8mtMPyL/namZSYVz8pjXz3yJiBNZsEdCnu9miHLB4ELVC85WvneMKo2Rg62Ay7NkuCpM0bgiLQ==", + "dependencies": { + "jose": "^4.15.1", + "lru-cache": "^6.0.0", + "object-hash": "^2.2.0", + "oidc-token-hash": "^5.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/openid-client/node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -3689,6 +3775,26 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "node_modules/preact": { + "version": "10.18.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.18.1.tgz", + "integrity": "sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/preact-render-to-string": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz", + "integrity": "sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==", + "dependencies": { + "pretty-format": "^3.8.0" + }, + "peerDependencies": { + "preact": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3698,6 +3804,11 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-format": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", + "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==" + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -4548,6 +4659,14 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -4659,8 +4778,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "2.3.3", diff --git a/frontend/package.json b/frontend/package.json index aff706c..5fac6c2 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,6 +17,7 @@ "clsx": "^2.0.0", "lucide-react": "^0.288.0", "next": "13.5.6", + "next-auth": "^4.24.3", "react": "^18", "react-dom": "^18", "react-hook-form": "^7.47.0", diff --git a/frontend/src/app/mentors/[id]/page.tsx b/frontend/src/app/mentors/[id]/page.tsx index 435632e..4a30116 100644 --- a/frontend/src/app/mentors/[id]/page.tsx +++ b/frontend/src/app/mentors/[id]/page.tsx @@ -1,7 +1,13 @@ +"use client" import { LinkButtonSecondary } from "@/components/ui/linkButton" import Image from "next/image" +import mentorsData from '@/data/mentors.json'; +import useState from 'react' -export default function MentorDetails() { +export default function MentorDetails({ params }: { + params: { id: string } +}) { + const selectedMentor = mentorsData.filter((mentor) => mentor.id === parseInt(params.id))[0]; return
@@ -10,17 +16,20 @@ export default function MentorDetails() {
- +
-
ODANOU Massahoud
-
Full stack developer
+
{selectedMentor.name}
+
{selectedMentor.profession}
- - - + + - Disponible + {selectedMentor.isBusy ? ( +

Indisponible

+ ) : ( +

Disponible

+ )}
@@ -35,27 +44,23 @@ export default function MentorDetails() {
Á PROPOS

- Experienced (15+ years) developer and friendly Ruby on Rails and React/Next.js/Redux Developer/Mentor (with passion for helping others learn) | ★ 3,520+ 5 ★ sessions/jobs. 7+ years on top of the Codementor Ranking ★ + {selectedMentor.description}

EXPERTISE
-
-
Flutter
-
- 11 ans d'expérience | - 10 sessions -
-
-
Node js
-
- 11 ans d'expérience | - 10 sessions + {selectedMentor.expertise.map((expertise, index) => ( +
+
{expertise.technology}
+
+ {expertise.experienceYears} ans d'expérience | + {expertise.sessionNumbers} sessions
-
+ ))} +
diff --git a/frontend/src/app/register/page.tsx b/frontend/src/app/register/page.tsx index 9925c77..c56c5ed 100644 --- a/frontend/src/app/register/page.tsx +++ b/frontend/src/app/register/page.tsx @@ -1,4 +1,167 @@ +"use client" + +import { zodResolver } from "@hookform/resolvers/zod" +import { useForm } from "react-hook-form" +import * as z from "zod" + +import { Button } from "@/components/ui/button" +import { + Form, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form" +import { Input } from "@/components/ui/input" +import { toast } from "@/components/ui/use-toast" +import Image from "next/image" +import { LinkButtonOutline } from "@/components/ui/linkButton" + +const FormSchema = z.object({ + email: z.string().min(2, { + message: "Identifiant requis", + }), + password: z.string().min(2, { + message: "Mot de passe requis", + }), + username:z.string().min(2,{ + message:"Votre nom d'utilisateur est requis " + }) +}) + + export default function register () { - return "" + const form = useForm>({ + resolver: zodResolver(FormSchema), + defaultValues: { + email: "", + password: "", + }, + }) + + function onSubmit(data: z.infer) { + + toast({ + title: "You submitted the following values:", + description: ( +
+                    {JSON.stringify(data, null, 2)}
+                
+ ), + }) + } + + return ( +
+
+
+
+ xmentor-logo +

+ Une plateforme de mentorat vous aide à vous améliorer en codage. Vous pouvez utiliser le même compte pour vous connecter à la fois à Codementor et à Arc. +

+
+ +
+
+
+
+ +
+ S'inscrire sur Xmentor +
+
+ +
+ github + + Se connecter avec Google + + +
+
+ + +
+ google + + Se connecter avec Google + + +
+
+
+ Ou s'inscrire 'par email +
+
+ ( + + Nom d'utilisateur + + + + + + )} + /> + ( + + Email + + + + + + )} + /> + ( + + Mot de passe + + + + + + )} /> +
+ +
+ + +
+
+
+ +
+ + ) +} + -} \ No newline at end of file diff --git a/frontend/src/components/ui/mentor/filterBar.tsx b/frontend/src/components/ui/mentor/filterBar.tsx index 8acc782..34888b8 100644 --- a/frontend/src/components/ui/mentor/filterBar.tsx +++ b/frontend/src/components/ui/mentor/filterBar.tsx @@ -159,7 +159,7 @@ const FilterBar = () => { ) : (
{mentors?.map((mentor, index) => ( -
+
{mentor.name} @@ -169,45 +169,54 @@ const FilterBar = () => { 1000 reviews
- Full Stack PHP / NODE/REACT/ WORDPRESS/SHOPIFY web developer + {mentor.profession}
- Français,Anglais - 10 Sessions + + { + mentor?.languages?.map((language, index) => ( +

{language}

+ )) + }
+ Sessions

- I am an experienced full stack developer 15 years in the field with consistent knowledge in developing web portals with expertise in all opensource of PHP like Wordpress , Opencart, Oscommerce... + {mentor.description}

-
+
+ { mentor?.stack?.map((skill, index) => ( -

{skill}

+

{skill}

)) } -
- {mentor.isBusy ? ( - - - - - Disponible - + + + + {mentor.isBusy ? ( +

Indisponible

+ ) : ( +

Disponible

+ )}
- ) : ( - - - - - Occupée - - - )} +
diff --git a/frontend/src/data/mentors.json b/frontend/src/data/mentors.json index e5f8714..e289227 100644 --- a/frontend/src/data/mentors.json +++ b/frontend/src/data/mentors.json @@ -2,26 +2,44 @@ { "id": 1, "name": "Guy Hawkins", - "profession": "Developpeur full-stack", + "profession": "Full-Stack Developer", "stars": 4.8, "image": "/assets/mentors/mentor4.jpg", "sessions": 234, "stack": ["HTML", "CSS", "JavaScript", "Node.js", "React", "Express", "MongoDB"], "isBusy": false, - "languages": ["Francais", "Anglais"], - "sessionHour": 3 + "languages": ["French", "English"], + "sessionHour": 3, + "description": "Hi there! I'm Guy Hawkins, a passionate Full-Stack Developer. With 234 mentorship sessions, I'm here to guide you through the exciting world of web development. Whether it's HTML, CSS, JavaScript, or any of the other technologies in my stack, I've got you covered. Let's build something amazing together!", + "expertise": [ + { "technology": "HTML", "experienceYears": 5, "sessionNumbers": 100 }, + { "technology": "CSS", "experienceYears": 6, "sessionNumbers": 120 }, + { "technology": "JavaScript", "experienceYears": 7, "sessionNumbers": 150 }, + { "technology": "Node.js", "experienceYears": 4, "sessionNumbers": 80 }, + { "technology": "React", "experienceYears": 4, "sessionNumbers": 70 }, + { "technology": "Express", "experienceYears": 3, "sessionNumbers": 60 }, + { "technology": "MongoDB", "experienceYears": 3, "sessionNumbers": 50 } + ] }, { "id": 2, "name": "Sarah Johnson", - "profession": "Front-end Developer", + "profession": "Front-End Developer", "stars": 4, "image": "/assets/mentors/mentor1.jpg", "sessions": 150, "stack": ["HTML", "CSS", "JavaScript", "React", "Vue.js"], "isBusy": true, - "languages": ["Francais", "Anglais"], - "sessionHour": 7 + "languages": ["French", "English"], + "sessionHour": 7, + "description": "Hello, I'm Sarah Johnson, a Front-End Developer with a flair for creativity. I've conducted 150 mentorship sessions, and I'm ready to help you master the art of building beautiful, responsive web interfaces using HTML, CSS, JavaScript, React, and Vue.js. Let's make the web more stunning together!", + "expertise": [ + { "technology": "HTML", "experienceYears": 4, "sessionNumbers": 50 }, + { "technology": "CSS", "experienceYears": 5, "sessionNumbers": 60 }, + { "technology": "JavaScript", "experienceYears": 5, "sessionNumbers": 70 }, + { "technology": "React", "experienceYears": 3, "sessionNumbers": 30 }, + { "technology": "Vue.js", "experienceYears": 2, "sessionNumbers": 20 } + ] }, { "id": 3, @@ -32,8 +50,16 @@ "sessions": 200, "stack": ["Node.js", "Express", "MongoDB", "Python", "Django"], "isBusy": false, - "languages": ["Francais", "Anglais", "Ewe"], - "sessionHour": 2 + "languages": ["French", "English", "Ewe"], + "sessionHour": 2, + "description": "Hey, I'm John Smith, a Backend Developer with a love for server-side technologies. I've shared my knowledge in 200 mentorship sessions and can't wait to help you dive into Node.js, Express, MongoDB, Python, Django, and more. Let's power the digital world together!", + "expertise": [ + { "technology": "Node.js", "experienceYears": 4, "sessionNumbers": 80 }, + { "technology": "Express", "experienceYears": 3, "sessionNumbers": 60 }, + { "technology": "MongoDB", "experienceYears": 3, "sessionNumbers": 50 }, + { "technology": "Python", "experienceYears": 5, "sessionNumbers": 70 }, + { "technology": "Django", "experienceYears": 4, "sessionNumbers": 60 } + ] }, { "id": 4, @@ -44,8 +70,15 @@ "sessions": 180, "stack": ["React Native", "Swift", "Kotlin", "Firebase"], "isBusy": false, - "languages": ["Francais", "Kotokoli"], - "sessionHour": 5 + "languages": ["French", "Kotokoli"], + "sessionHour": 5, + "description": "Greetings! I'm Alice Wilson, a Mobile App Developer with a passion for crafting mobile experiences. In 180 mentorship sessions, I've helped others explore the world of React Native, Swift, Kotlin, and Firebase. Let's create the next big app together!", + "expertise": [ + { "technology": "React Native", "experienceYears": 4, "sessionNumbers": 60 }, + { "technology": "Swift", "experienceYears": 3, "sessionNumbers": 50 }, + { "technology": "Kotlin", "experienceYears": 2, "sessionNumbers": 40 }, + { "technology": "Firebase", "experienceYears": 4, "sessionNumbers": 30 } + ] }, { "id": 5, @@ -56,8 +89,15 @@ "sessions": 120, "stack": ["Adobe XD", "Sketch", "Figma", "InVision"], "isBusy": true, - "languages": ["Anglais"], - "sessionHour": 1 + "languages": ["English"], + "sessionHour": 1, + "description": "Hi, I'm Emily Brown, a UX/UI Designer dedicated to enhancing user experiences. In 120 mentorship sessions, I've delved into Adobe XD, Sketch, Figma, and InVision. Let's design engaging and user-friendly interfaces together!", + "expertise": [ + { "technology": "Adobe XD", "experienceYears": 4, "sessionNumbers": 40 }, + { "technology": "Sketch", "experienceYears": 3, "sessionNumbers": 30 }, + { "technology": "Figma", "experienceYears": 3, "sessionNumbers": 30 }, + { "technology": "InVision", "experienceYears": 2, "sessionNumbers": 20 } + ] }, { "id": 6, @@ -66,10 +106,18 @@ "stars": 4.9, "image": "/assets/mentors/mentor6.jpg", "sessions": 220, - "stack": ["Java", "C++", "Python", "Git", "Linux"], + "stack": ["Java", "C++", "Python", "Git", "Linux"], "isBusy": false, - "languages": ["Francais", "Anglais", "Kotokoli"], - "sessionHour": 8 + "languages": ["French", "English", "Kotokoli"], + "sessionHour": 8, + "description": "Hey, I'm Michael Lee, a Software Engineer passionate about coding. In 220 mentorship sessions, I've dived into Java, C++, Python, Git, Linux, and more. Let's create efficient and robust software together!", + "expertise": [ + { "technology": "Java", "experienceYears": 6, "sessionNumbers": 80 }, + { "technology": "C++", "experienceYears": 5, "sessionNumbers": 70 }, + { "technology": "Python", "experienceYears": 4, "sessionNumbers": 60 }, + { "technology": "Git", "experienceYears": 4, "sessionNumbers": 60 }, + { "technology": "Linux", "experienceYears": 3, "sessionNumbers": 50 } + ] }, { "id": 7, @@ -80,8 +128,16 @@ "sessions": 100, "stack": ["Docker", "Kubernetes", "Jenkins", "AWS", "Linux"], "isBusy": false, - "languages": ["Francais", "Anglais", "Ewe"], - "sessionHour": 6 + "languages": ["French", "English", "Ewe"], + "sessionHour": 6, + "description": "Hello, I'm Olivia Taylor, a DevOps Engineer specializing in continuous integration and delivery. In 100 mentorship sessions, I've explored Docker, Kubernetes, Jenkins, AWS, and Linux. Let's automate and streamline software development together!", + "expertise": [ + { "technology": "Docker", "experienceYears": 4, "sessionNumbers": 40 }, + { "technology": "Kubernetes", "experienceYears": 3, "sessionNumbers": 30 }, + { "technology": "Jenkins", "experienceYears": 3, "sessionNumbers": 30 }, + { "technology": "AWS", "experienceYears": 4, "sessionNumbers": 40 }, + { "technology": "Linux", "experienceYears": 3, "sessionNumbers": 30 } + ] }, { "id": 8, @@ -92,7 +148,14 @@ "sessions": 120, "stack": ["Cybersecurity", "Penetration Testing", "Firewalls"], "isBusy": true, - "languages": ["Francais", "Anglais"], - "sessionHour": 10 + "languages": ["French", "English"], + "sessionHour": 10, + "description": "Greetings! I'm Daniel Martinez, a Cybersecurity Analyst committed to safeguarding digital assets. In 120 mentorship sessions, I've explored cybersecurity, penetration testing, and firewalls. Let's protect the digital world together!", + "expertise": [ + { "technology": "Cybersecurity", "experienceYears": 5, "sessionNumbers": 60 }, + { "technology": "Penetration Testing", "experienceYears": 4, "sessionNumbers": 50 }, + { "technology": "Firewalls", "experienceYears": 3, "sessionNumbers": 40 } + ] } ] + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b14c559 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "h23_team3", + "lockfileVersion": 3, + "requires": true, + "packages": {} +}