added page images, widen view
|
@ -32,6 +32,10 @@ const ContactButton: React.FC<ContactButtonProps> = ({platform, title, descripti
|
||||||
buttonColor = "#0866FF";
|
buttonColor = "#0866FF";
|
||||||
iconFile = icons.siFacebook.svg;
|
iconFile = icons.siFacebook.svg;
|
||||||
break;
|
break;
|
||||||
|
case 'peertube':
|
||||||
|
buttonColor = "#F1680D";
|
||||||
|
iconFile = icons.siPeertube.svg;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
buttonColor = "";
|
buttonColor = "";
|
||||||
iconFile = "";
|
iconFile = "";
|
||||||
|
@ -39,7 +43,7 @@ const ContactButton: React.FC<ContactButtonProps> = ({platform, title, descripti
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col gap-4">
|
<div className="flex flex-col gap-4 sm:max-lg:items-center">
|
||||||
<div className="flex flex-col">
|
<div className="flex flex-col">
|
||||||
<p className="text-xl font-bold"> { title } </p>
|
<p className="text-xl font-bold"> { title } </p>
|
||||||
<p className="text-base text-slate-600 dark:text-slate-300">
|
<p className="text-base text-slate-600 dark:text-slate-300">
|
||||||
|
@ -47,7 +51,7 @@ const ContactButton: React.FC<ContactButtonProps> = ({platform, title, descripti
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="grid grid-col-3">
|
<div>
|
||||||
<Link
|
<Link
|
||||||
href={ href }
|
href={ href }
|
||||||
>
|
>
|
||||||
|
|
|
@ -10,7 +10,7 @@ let ContactIcons = () => {
|
||||||
<i
|
<i
|
||||||
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
||||||
style={
|
style={
|
||||||
{['width']: '30px', ['height']: '30px', ['fill']: 'white', ['display']: 'inline-block'}
|
{['width']: '35px', ['height']: '35px', ['fill']: 'white', ['display']: 'inline-block'}
|
||||||
}
|
}
|
||||||
dangerouslySetInnerHTML={{ __html: icons.siForgejo.svg }}>
|
dangerouslySetInnerHTML={{ __html: icons.siForgejo.svg }}>
|
||||||
</i>
|
</i>
|
||||||
|
@ -21,7 +21,7 @@ let ContactIcons = () => {
|
||||||
<i
|
<i
|
||||||
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
||||||
style={
|
style={
|
||||||
{['width']: '30px', ['height']: '30px', ['fill']: 'white', ['display']: 'inline-block'}
|
{['width']: '35px', ['height']: '35px', ['fill']: 'white', ['display']: 'inline-block'}
|
||||||
}
|
}
|
||||||
dangerouslySetInnerHTML={{ __html: icons.siGithub.svg }}>
|
dangerouslySetInnerHTML={{ __html: icons.siGithub.svg }}>
|
||||||
</i>
|
</i>
|
||||||
|
@ -32,7 +32,7 @@ let ContactIcons = () => {
|
||||||
<i
|
<i
|
||||||
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
||||||
style={
|
style={
|
||||||
{['width']: '30px', ['height']: '30px', ['fill']: 'white', ['display']: 'inline-block'}
|
{['width']: '35px', ['height']: '35px', ['fill']: 'white', ['display']: 'inline-block'}
|
||||||
}
|
}
|
||||||
dangerouslySetInnerHTML={{ __html: icons.siActivitypub.svg }}>
|
dangerouslySetInnerHTML={{ __html: icons.siActivitypub.svg }}>
|
||||||
</i>
|
</i>
|
||||||
|
@ -43,7 +43,7 @@ let ContactIcons = () => {
|
||||||
<i
|
<i
|
||||||
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
||||||
style={
|
style={
|
||||||
{['width']: '30px', ['height']: '30px', ['fill']: 'white', ['display']: 'inline-block'}
|
{['width']: '35px', ['height']: '35px', ['fill']: 'white', ['display']: 'inline-block'}
|
||||||
}
|
}
|
||||||
dangerouslySetInnerHTML={{ __html: icons.siMisskey.svg }}>
|
dangerouslySetInnerHTML={{ __html: icons.siMisskey.svg }}>
|
||||||
</i>
|
</i>
|
||||||
|
@ -54,18 +54,29 @@ let ContactIcons = () => {
|
||||||
<i
|
<i
|
||||||
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
||||||
style={
|
style={
|
||||||
{['width']: '30px', ['height']: '30px', ['fill']: 'white', ['display']: 'inline-block'}
|
{['width']: '35px', ['height']: '35px', ['fill']: 'white', ['display']: 'inline-block'}
|
||||||
}>
|
}>
|
||||||
<PixelfedIcon />
|
<PixelfedIcon />
|
||||||
</i>
|
</i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://peertube.winscloud.net/c/wins_dominoes" className="text-gray-500 hover:text-gray-900 dark:hover:text-white dark:text-gray-400">
|
||||||
|
<i
|
||||||
|
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
||||||
|
style={
|
||||||
|
{['width']: '35px', ['height']: '35px', ['fill']: 'white', ['display']: 'inline-block'}
|
||||||
|
}
|
||||||
|
dangerouslySetInnerHTML={{ __html: icons.siPeertube.svg }}>
|
||||||
|
</i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="https://matrix.to/#/@winsdominoes:matrix.winscloud.net" className="text-gray-500 hover:text-gray-900 dark:hover:text-white dark:text-gray-400">
|
<a href="https://matrix.to/#/@winsdominoes:matrix.winscloud.net" className="text-gray-500 hover:text-gray-900 dark:hover:text-white dark:text-gray-400">
|
||||||
<i
|
<i
|
||||||
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
className="w-7 h-7 transition ease-in-out delay-60 opacity-60 hover:opacity-100 hover:scale-105 duration-300"
|
||||||
style={
|
style={
|
||||||
{['width']: '30px', ['height']: '30px', ['fill']: 'white', ['display']: 'inline-block'}
|
{['width']: '35px', ['height']: '35px', ['fill']: 'white', ['display']: 'inline-block'}
|
||||||
}
|
}
|
||||||
dangerouslySetInnerHTML={{ __html: icons.siMatrix.svg }}>
|
dangerouslySetInnerHTML={{ __html: icons.siMatrix.svg }}>
|
||||||
</i>
|
</i>
|
||||||
|
|
|
@ -20,7 +20,7 @@ export default function RootLayout({
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<html className={`${inter.className} text-black bg-white dark:text-white dark:bg-slate-900`} lang="en">
|
<html className={`${inter.className} text-black bg-white dark:text-white dark:bg-slate-900`} lang="en">
|
||||||
<body className="antialiased mt-8 mb-8 lg:max-w-4xl min-lg:flex min-lg:flex-col lg:mx-auto max-lg:grid max-lg:place-items-center max-sm:place-items-start">
|
<body className="antialiased mt-8 mb-8 lg:max-w-screen-xl min-lg:flex min-lg:flex-col lg:mx-auto max-lg:grid max-lg:place-items-center max-sm:place-items-start">
|
||||||
<Navbar />
|
<Navbar />
|
||||||
{children}
|
{children}
|
||||||
<Footer />
|
<Footer />
|
||||||
|
|
40
app/page.tsx
|
@ -7,18 +7,29 @@ import ContactButton from './components/ContactButton';
|
||||||
|
|
||||||
const frontImages = [
|
const frontImages = [
|
||||||
[
|
[
|
||||||
|
{ src: '/images/photos/cosplay/tasm-2-asiatique.jpg', href: '/hobbies', alt: 'TASM2 Asiatique Event' },
|
||||||
|
{ src: '/images/photos/software/dateapp.jpg', href: '/projects', alt: 'Date Calculator' },
|
||||||
{ src: '/images/photos/iot/raspberrypi.jpg', href: '/projects', alt: 'Raspberry Pi' },
|
{ src: '/images/photos/iot/raspberrypi.jpg', href: '/projects', alt: 'Raspberry Pi' },
|
||||||
|
{ src: '/images/photos/hardware/freebsd.jpg', href: '/projects', alt: 'PC running FreeBSD' },
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
{ src: '/images/photos/events/ai-engineering.jpg', href: '/projects', alt: 'CMKL A.I. Engineering Event' },
|
||||||
{ src: '/images/photos/company/main-server-rack/20231221_151039.jpg', href: '/projects', alt: 'Office Main Rack' },
|
{ src: '/images/photos/company/main-server-rack/20231221_151039.jpg', href: '/projects', alt: 'Office Main Rack' },
|
||||||
|
{ src: '/images/photos/cosplay/spiderverse.jpg', href: '/hobbies', alt: 'The Spider-Verse Cosplay' },
|
||||||
{ src: '/images/photos/hardware/homelab.jpg', href: '/projects', alt: 'Homelab' },
|
{ src: '/images/photos/hardware/homelab.jpg', href: '/projects', alt: 'Homelab' },
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
{ src: '/images/photos/hardware/dell-optiplex.jpg', href: '/projects', alt: 'Dell Optiplex Modified' },
|
||||||
{ src: '/images/photos/robotics/robot.jpg', href: '/projects', alt: 'LEGO League'},
|
{ src: '/images/photos/robotics/robot.jpg', href: '/projects', alt: 'LEGO League'},
|
||||||
{ src: '/images/photos/cosplay/tasm-2-spider-man-2.jpg', href: '/hobbies', alt: 'Spider-Man 2 PS5 Event'}
|
{ src: '/images/photos/software/blackboard.jpg', href: '/projects', alt: 'Blackboard of Memory'},
|
||||||
|
{ src: '/images/photos/cosplay/tasm-2-spider-man-2.jpg', href: '/hobbies', alt: 'Spider-Man 2 PS5 Event'},
|
||||||
|
{ src: '/images/photos/electrical/solar-panel.jpg', href: '/projects', alt: 'Off-Grid Electrical Work' },
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ src: '/images/photos/hardware/hdd.jpg', href: '/projects', alt: 'Storage Server'}
|
{ src: '/images/photos/software/winnie-http.png', href: '/projects', alt: 'Homemade webserver'},
|
||||||
|
{ src: '/images/photos/hardware/hdd.jpg', href: '/projects', alt: 'Storage Server'},
|
||||||
|
{ src: '/images/photos/software/bkk-raindar.png', href: '/projects', alt: 'Bangkok Rain Radar'},
|
||||||
|
{ src: '/images/photos/events/the-command-center.jpg', href: '/projects', alt: 'True Digital Park' },
|
||||||
]
|
]
|
||||||
|
|
||||||
];
|
];
|
||||||
|
@ -28,17 +39,17 @@ export default function Home() {
|
||||||
<main>
|
<main>
|
||||||
<div className="min-w-0 mt-6 flex flex-col gap-8 max-lg:mx-4">
|
<div className="min-w-0 mt-6 flex flex-col gap-8 max-lg:mx-4">
|
||||||
<div className="grid grid-cols-3 gap-8 max-lg:flex max-lg:flex-col max-lg:items-center max-sm:items-start">
|
<div className="grid grid-cols-3 gap-8 max-lg:flex max-lg:flex-col max-lg:items-center max-sm:items-start">
|
||||||
<div className="col-span-1">
|
<div className="col-span-1 flex justify-center">
|
||||||
<Image
|
<Image
|
||||||
src="/images/picture.png"
|
src="/images/picture.png"
|
||||||
width={200}
|
width={250}
|
||||||
height={200}
|
height={250}
|
||||||
alt="Win's Logo"
|
alt="Win's Logo"
|
||||||
className="rounded-full"
|
className="rounded-full"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="col-span-2 grid max-lg:place-items-center max-sm:place-items-start max-lg:gap-4 lg:mt-2">
|
<div className="col-span-2 grid items-center max-lg:place-items-center max-sm:place-items-start max-lg:gap-4 my-6">
|
||||||
<p className="text-5xl font-bold">Win Pattanaphol</p>
|
<p className="text-5xl font-bold">Win Pattanaphol</p>
|
||||||
<p className="text-base">A <a className="font-bold underline decoration-2 decoration-indigo-500">hobbyist full-stack developer</a>, undergraduate student, enjoyer of 60s-80s music, language nerd, and a hobbyist electrician.</p>
|
<p className="text-base">A <a className="font-bold underline decoration-2 decoration-indigo-500">hobbyist full-stack developer</a>, undergraduate student, enjoyer of 60s-80s music, language nerd, and a hobbyist electrician.</p>
|
||||||
<ContactIcons />
|
<ContactIcons />
|
||||||
|
@ -83,17 +94,18 @@ export default function Home() {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="grid grid-cols-3 gap-4 max-md:flex max-md:flex-col justify-items-center">
|
<div className="col-span-4 justify-self-start">
|
||||||
<div className="col-span-3 justify-self-start">
|
|
||||||
<p className="text-4xl font-bold">
|
<p className="text-4xl font-bold">
|
||||||
Contact
|
Contact
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div className="grid grid-cols-4 gap-2 max-lg:grid-cols-2 max-sm:flex max-sm:flex-col justify-items-center">
|
||||||
|
|
||||||
<ContactButton
|
<ContactButton
|
||||||
platform="git"
|
platform="git"
|
||||||
title="Like my work?"
|
title="Like my work?"
|
||||||
description="Check them out on my Git instance!"
|
description="Check them out on my Forgejo!"
|
||||||
href="https://git.winscloud.net/winsdominoes"
|
href="https://git.winscloud.net/winsdominoes"
|
||||||
username="@winsdominoes"
|
username="@winsdominoes"
|
||||||
/>
|
/>
|
||||||
|
@ -101,11 +113,19 @@ export default function Home() {
|
||||||
<ContactButton
|
<ContactButton
|
||||||
platform="activitypub"
|
platform="activitypub"
|
||||||
title="See more posts?"
|
title="See more posts?"
|
||||||
description="Check updates on my fediverse profile!"
|
description="Check posts on my Fediverse!"
|
||||||
href="https://fedi.winscloud.net/@winsdominoes"
|
href="https://fedi.winscloud.net/@winsdominoes"
|
||||||
username="@winsdominoes"
|
username="@winsdominoes"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<ContactButton
|
||||||
|
platform="peertube"
|
||||||
|
title="Watch some videos?"
|
||||||
|
description="Check my PeerTube page!"
|
||||||
|
href="https://peertube.winscloud.net/@winsdominoes"
|
||||||
|
username="@winsdominoes"
|
||||||
|
/>
|
||||||
|
|
||||||
<ContactButton
|
<ContactButton
|
||||||
platform="matrix"
|
platform="matrix"
|
||||||
title="Get in touch?"
|
title="Get in touch?"
|
||||||
|
|
After Width: | Height: | Size: 3.4 MiB |
After Width: | Height: | Size: 143 KiB |
After Width: | Height: | Size: 323 KiB |
After Width: | Height: | Size: 2.9 MiB |
After Width: | Height: | Size: 638 KiB |
After Width: | Height: | Size: 246 KiB |
After Width: | Height: | Size: 3.3 MiB |
After Width: | Height: | Size: 106 KiB |
After Width: | Height: | Size: 89 KiB |