just the content
This commit is contained in:
@@ -25,3 +25,68 @@ body {
|
||||
text-wrap: balance;
|
||||
}
|
||||
}
|
||||
|
||||
@layer base {
|
||||
:root {
|
||||
--background: 0 0% 100%;
|
||||
--foreground: 0 0% 3.9%;
|
||||
--card: 0 0% 100%;
|
||||
--card-foreground: 0 0% 3.9%;
|
||||
--popover: 0 0% 100%;
|
||||
--popover-foreground: 0 0% 3.9%;
|
||||
--primary: 0 0% 9%;
|
||||
--primary-foreground: 0 0% 98%;
|
||||
--secondary: 0 0% 96.1%;
|
||||
--secondary-foreground: 0 0% 9%;
|
||||
--muted: 0 0% 96.1%;
|
||||
--muted-foreground: 0 0% 45.1%;
|
||||
--accent: 0 0% 96.1%;
|
||||
--accent-foreground: 0 0% 9%;
|
||||
--destructive: 0 84.2% 60.2%;
|
||||
--destructive-foreground: 0 0% 98%;
|
||||
--border: 0 0% 89.8%;
|
||||
--input: 0 0% 89.8%;
|
||||
--ring: 0 0% 3.9%;
|
||||
--chart-1: 12 76% 61%;
|
||||
--chart-2: 173 58% 39%;
|
||||
--chart-3: 197 37% 24%;
|
||||
--chart-4: 43 74% 66%;
|
||||
--chart-5: 27 87% 67%;
|
||||
--radius: 0.5rem;
|
||||
}
|
||||
.dark {
|
||||
--background: 0 0% 3.9%;
|
||||
--foreground: 0 0% 98%;
|
||||
--card: 0 0% 3.9%;
|
||||
--card-foreground: 0 0% 98%;
|
||||
--popover: 0 0% 3.9%;
|
||||
--popover-foreground: 0 0% 98%;
|
||||
--primary: 0 0% 98%;
|
||||
--primary-foreground: 0 0% 9%;
|
||||
--secondary: 0 0% 14.9%;
|
||||
--secondary-foreground: 0 0% 98%;
|
||||
--muted: 0 0% 14.9%;
|
||||
--muted-foreground: 0 0% 63.9%;
|
||||
--accent: 0 0% 14.9%;
|
||||
--accent-foreground: 0 0% 98%;
|
||||
--destructive: 0 62.8% 30.6%;
|
||||
--destructive-foreground: 0 0% 98%;
|
||||
--border: 0 0% 14.9%;
|
||||
--input: 0 0% 14.9%;
|
||||
--ring: 0 0% 83.1%;
|
||||
--chart-1: 220 70% 50%;
|
||||
--chart-2: 160 60% 45%;
|
||||
--chart-3: 30 80% 55%;
|
||||
--chart-4: 280 65% 60%;
|
||||
--chart-5: 340 75% 55%;
|
||||
}
|
||||
}
|
||||
|
||||
@layer base {
|
||||
* {
|
||||
@apply border-border;
|
||||
}
|
||||
body {
|
||||
@apply bg-background text-foreground;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -14,8 +14,8 @@ const geistMono = localFont({
|
||||
});
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Create Next App",
|
||||
description: "Generated by create next app",
|
||||
title: "Quintavalle Pietro",
|
||||
description: "My personal website",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
+256
-97
@@ -1,101 +1,260 @@
|
||||
import Image from "next/image";
|
||||
import Link from "next/link"
|
||||
import { Input } from "@/components/ui/input"
|
||||
import { Textarea } from "@/components/ui/textarea"
|
||||
import { Button } from "@/components/ui/button"
|
||||
import { JSX, SVGProps } from "react"
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<div className="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20 font-[family-name:var(--font-geist-sans)]">
|
||||
<main className="flex flex-col gap-8 row-start-2 items-center sm:items-start">
|
||||
<Image
|
||||
className="dark:invert"
|
||||
src="https://nextjs.org/icons/next.svg"
|
||||
alt="Next.js logo"
|
||||
width={180}
|
||||
height={38}
|
||||
priority
|
||||
/>
|
||||
<ol className="list-inside list-decimal text-sm text-center sm:text-left font-[family-name:var(--font-geist-mono)]">
|
||||
<li className="mb-2">
|
||||
Get started by editing{" "}
|
||||
<code className="bg-black/[.05] dark:bg-white/[.06] px-1 py-0.5 rounded font-semibold">
|
||||
app/page.tsx
|
||||
</code>
|
||||
.
|
||||
</li>
|
||||
<li>Save and see your changes instantly.</li>
|
||||
</ol>
|
||||
|
||||
<div className="flex gap-4 items-center flex-col sm:flex-row">
|
||||
<a
|
||||
className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5"
|
||||
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Image
|
||||
className="dark:invert"
|
||||
src="https://nextjs.org/icons/vercel.svg"
|
||||
alt="Vercel logomark"
|
||||
width={20}
|
||||
height={20}
|
||||
/>
|
||||
Deploy now
|
||||
</a>
|
||||
<a
|
||||
className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 sm:min-w-44"
|
||||
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Read our docs
|
||||
</a>
|
||||
</div>
|
||||
</main>
|
||||
<footer className="row-start-3 flex gap-6 flex-wrap items-center justify-center">
|
||||
<a
|
||||
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
|
||||
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Image
|
||||
aria-hidden
|
||||
src="https://nextjs.org/icons/file.svg"
|
||||
alt="File icon"
|
||||
width={16}
|
||||
height={16}
|
||||
/>
|
||||
Learn
|
||||
</a>
|
||||
<a
|
||||
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
|
||||
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Image
|
||||
aria-hidden
|
||||
src="https://nextjs.org/icons/window.svg"
|
||||
alt="Window icon"
|
||||
width={16}
|
||||
height={16}
|
||||
/>
|
||||
Examples
|
||||
</a>
|
||||
<a
|
||||
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
|
||||
href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Image
|
||||
aria-hidden
|
||||
src="https://nextjs.org/icons/globe.svg"
|
||||
alt="Globe icon"
|
||||
width={16}
|
||||
height={16}
|
||||
/>
|
||||
Go to nextjs.org →
|
||||
</a>
|
||||
</footer>
|
||||
</div>
|
||||
);
|
||||
<div className="bg-[#00004d] text-white font-['Segoe UI', 'FiraCode'] min-h-screen">
|
||||
<header className="py-4 px-6 flex items-center justify-between border-b border-[#4d4dff]">
|
||||
<div className="flex items-center gap-4">
|
||||
<TerminalIcon className="w-8 h-8"/>
|
||||
<h1 className="text-2xl font-semibold">Pietro Quintavalle</h1>
|
||||
</div>
|
||||
<nav className="flex items-center gap-6">
|
||||
{["About", "Skills", "Certifications", "Portfolio", "Contact"].map((item) => (
|
||||
<Link key={item} href={`#${item.toLowerCase()}`} className="hover:text-[#4d4dff] transition-colors">
|
||||
{item}
|
||||
</Link>
|
||||
))}
|
||||
</nav>
|
||||
</header>
|
||||
<main className="px-6 py-12">
|
||||
<section id="about" className="mb-12">
|
||||
<h2 className="text-3xl font-semibold mb-4">About Me</h2>
|
||||
<div className="prose prose-invert max-w-3xl">
|
||||
<p>
|
||||
Hello! I'm Pietro Quintavalle, a dedicated IT hobbyist with a strong foundation in IT support and
|
||||
data analytics who's currently pursuing a bachelor in Economics.
|
||||
My passion lies in leveraging technology to solve complex problems and derive meaningful insights from
|
||||
data.
|
||||
With a combination of technical skills and analytical thinking, I'm equipped to tackle challenges
|
||||
in
|
||||
both IT infrastructure and data-driven decision-making.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<section id="skills" className="mb-12">
|
||||
<h2 className="text-3xl font-semibold mb-4">Skills</h2>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
{[
|
||||
{
|
||||
title: "IT & Networking",
|
||||
skills: [
|
||||
"IT Support", "Troubleshooting", "Computer Networking",
|
||||
"Network Architecture", "Network Model", "Computer Architecture",
|
||||
"Network Security", "Cloud Computing"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Data Science & Analytics",
|
||||
skills: [
|
||||
"Data Analysis", "Data Visualization", "Data Management",
|
||||
"General Statistics", "Data Science", "Business Analysis"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Programming & Software",
|
||||
skills: [
|
||||
"Python Programming", "R Programming", "SQL",
|
||||
"Computer Programming", "Numpy", "Pandas",
|
||||
"Spreadsheet Software"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Business & Communication",
|
||||
skills: [
|
||||
"Business Communication", "Accounting",
|
||||
"Leadership and Management", "Critical Thinking",
|
||||
"Human Computer Interaction"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Tools & Platforms",
|
||||
skills: [
|
||||
"Tableau", "Git", "Linux", "Microsoft Office Suite"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Methodologies",
|
||||
skills: [
|
||||
"Data-Driven Decision Making", "Agile",
|
||||
"IT Service Management", "Project Management"
|
||||
]
|
||||
},
|
||||
].map((category, index) => (
|
||||
<div key={index} className="bg-[#0000b3] rounded-md p-4">
|
||||
<h3 className="text-xl font-semibold mb-2">{category.title}</h3>
|
||||
<ul className="list-disc pl-4 space-y-2">
|
||||
{category.skills.map((skill, skillIndex) => (
|
||||
<li key={skillIndex}>{skill}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
<section id="certifications" className="mb-12">
|
||||
<h2 className="text-3xl font-semibold mb-4">Certifications</h2>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<div className="bg-[#0000b3] rounded-md p-4">
|
||||
<h3 className="text-xl font-semibold mb-2">Google IT Support Professional Certificate</h3>
|
||||
<iframe
|
||||
src="/certificates/Coursera_RZ1V4RU6JP2D.png"
|
||||
className="w-full h-96 border-none"
|
||||
title="Google IT Support Professional Certificate"
|
||||
></iframe>
|
||||
</div>
|
||||
<div className="bg-[#0000b3] rounded-md p-4">
|
||||
<h3 className="text-xl font-semibold mb-2">Google Data Analytics Professional Certificate</h3>
|
||||
<iframe
|
||||
src="/certificates/Coursera_EN181NFH7VYT.png"
|
||||
className="w-full h-96 border-none"
|
||||
title="Google Data Analytics Professional Certificate"
|
||||
></iframe>
|
||||
</div>
|
||||
<div className="bg-[#0000b3] rounded-md p-4">
|
||||
<h3 className="text-xl font-semibold mb-2">IBM Python for Data Science, AI & Development</h3>
|
||||
<iframe
|
||||
src="/certificates/Coursera_QT9WT5VCHJNU.png"
|
||||
className="w-full h-96 border-none"
|
||||
title="IBM Python for Data Science, AI & Development"
|
||||
></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="portfolio" className="mb-12">
|
||||
<h2 className="text-3xl font-semibold mb-4">Portfolio</h2>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
{[
|
||||
{
|
||||
title: "password-generator",
|
||||
description: "A unique and interactive password generator built with Next.js and React. ",
|
||||
technologies: ["Nextjs", "Encryption", "Typescript"],
|
||||
githubLink: "#"
|
||||
},
|
||||
{
|
||||
title: "Valgo",
|
||||
description: "A website for visualizing sorting algorithms for the visual learners out there.",
|
||||
technologies: ["Typescript", "React", "Algorithms"],
|
||||
githubLink: "#"
|
||||
},
|
||||
{
|
||||
title: "Gravity",
|
||||
description: "3D Gravity Simulator is a C++ program that visualizes the gravitational interactions between celestial bodies",
|
||||
technologies: ["C++", "OpenGL", "Physics", "3D", "Simulation", "Cmake", "VCPKG"],
|
||||
githubLink: "#"
|
||||
},
|
||||
{
|
||||
title: "Boston Housing Price Prediction",
|
||||
description: "A simulation of the Boston Housing Price Prediction project that involves building a machine learning model to predict housing prices. ",
|
||||
technologies: ["Python", "Machine Learning", "Data Analysis", "Data Visualization", "Jupyter Notebook", "Probability", "Statistics"],
|
||||
githubLink: "#"
|
||||
},
|
||||
{
|
||||
title: "Forest Fire Simulation",
|
||||
description: "An assignment for the Probability & Statistics course at USI that aims to model the spread of forest fires over a grid representing a forest landscape.",
|
||||
technologies: ["Statistics", "Python", "Jupyter Notebook", "Simulation", "Probability"],
|
||||
githubLink: "#"
|
||||
},
|
||||
{
|
||||
title: "Network Monitoring Tool",
|
||||
description: "A tool for monitoring and analyzing network traffic, demonstrating networking skills and data visualization.",
|
||||
technologies: ["Python", "Scapy", "Matplotlib"],
|
||||
githubLink: "#"
|
||||
}
|
||||
].map((project, index) => (
|
||||
<div key={index} className="bg-[#0000b3] rounded-md p-4">
|
||||
<h3 className="text-xl font-semibold mb-2">{project.title}</h3>
|
||||
<p className="mb-4">{project.description}</p>
|
||||
<div className="mb-4">
|
||||
{project.technologies.map((tech, techIndex) => (
|
||||
<span key={techIndex}
|
||||
className="inline-block bg-[#4d4dff] text-white rounded-full px-3 py-1 text-sm font-semibold mr-2 mb-2">
|
||||
{tech}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
<div className="flex justify-end">
|
||||
<Link
|
||||
href={project.githubLink}
|
||||
className="inline-flex items-center rounded-md bg-[#4d4dff] px-4 py-2 text-sm font-medium text-white shadow-sm transition-colors hover:bg-[#3b3bd9] focus:outline-none focus:ring-2 focus:ring-[#4d4dff] focus:ring-offset-2"
|
||||
>
|
||||
View on GitHub
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
<section id="contact" className="mb-12">
|
||||
<h2 className="text-3xl font-semibold mb-4">Contact Me</h2>
|
||||
<form className="max-w-xl mx-auto">
|
||||
<div className="mb-4">
|
||||
<label htmlFor="name" className="block mb-2">Name</label>
|
||||
<Input
|
||||
type="text"
|
||||
id="name"
|
||||
name="name"
|
||||
placeholder="Enter your name"
|
||||
className="bg-[#0000b3] border-[#4d4dff] focus:border-[#7f7fff] focus:ring-[#7f7fff]"
|
||||
/>
|
||||
</div>
|
||||
<div className="mb-4">
|
||||
<label htmlFor="email" className="block mb-2">Email</label>
|
||||
<Input
|
||||
type="email"
|
||||
id="email"
|
||||
name="email"
|
||||
placeholder="Enter your email"
|
||||
className="bg-[#0000b3] border-[#4d4dff] focus:border-[#7f7fff] focus:ring-[#7f7fff]"
|
||||
/>
|
||||
</div>
|
||||
<div className="mb-4">
|
||||
<label htmlFor="message" className="block mb-2">Message</label>
|
||||
<Textarea
|
||||
id="message"
|
||||
name="message"
|
||||
rows={5}
|
||||
placeholder="Enter your message"
|
||||
className="bg-[#0000b3] border-[#4d4dff] focus:border-[#7f7fff] focus:ring-[#7f7fff]"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex justify-end">
|
||||
<Button
|
||||
type="submit"
|
||||
className="inline-flex items-center rounded-md bg-[#4d4dff] px-4 py-2 text-sm font-medium text-white shadow-sm transition-colors hover:bg-[#3b3bd9] focus:outline-none focus:ring-2 focus:ring-[#4d4dff] focus:ring-offset-2"
|
||||
>
|
||||
Submit
|
||||
</Button>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
</main>
|
||||
<footer className="bg-[#0000b3] py-6 px-6 text-center text-sm">
|
||||
<p>© 2024 Pietro Quintavalle. All rights reserved.</p>
|
||||
</footer>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function TerminalIcon(props: JSX.IntrinsicAttributes & SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
{...props}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeWidth="2"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
>
|
||||
<polyline points="4 17 10 11 4 5"/>
|
||||
<line x1="12" x2="20" y1="19" y2="19"/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user