157 lines
6.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React from "react"
import Link from "next/link"
import SidebarMenu from "@/app/components/sidebar-menu"
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"
import { FlipWords } from "@/components/ui/flip-words"
import { AvatarMotion } from "@/app/components/avatar-motion"
import { BlogPosts } from "@/components/posts"
export const metadata = {
title: "Nicholai",
description: "Professional portfolio of Nicholai — VFX Supervisor & Developer",
openGraph: {
title: "Nicholai — VFX Supervisor & Developer",
description: "Professional portfolio of Nicholai — VFX Supervisor & Developer",
url: "https://nicholai.work",
images: ["/images/profile.jpg"],
type: "website",
},
};
export const dynamic = "force-dynamic"
export default function Home() {
const year = new Date().getFullYear();
return (
<main className="min-h-screen">
<div className="mx-auto grid w-full max-w-5xl grid-cols-1 gap-6 px-4 pt-10 pb-16 md:grid-cols-12 md:gap-8">
{/* Sidebar */}
<div className="md:col-span-3">
<SidebarMenu />
</div>
{/* Content column */}
<div className="md:col-span-9 flex flex-col gap-6">
{/* About */}
<section id="about" aria-label="About">
<Card>
<CardHeader className="flex items-center gap-4 sm:flex-row">
<AvatarMotion
src="/images/profile.jpg"
alt="Hand drawn portrait of Nicholai"
size={96}
/>
<div>
<CardTitle className="tracking-tight !normal-case">About</CardTitle>
<CardDescription>Nicholai VFX Artist & Developer</CardDescription>
</div>
</CardHeader>
<CardContent className="space-y-4">
<p className="text-sm text-neutral-700 dark:text-neutral-300">
I wanted to justify the $6.39 I spent on the domain. Building cinematic, accessible web experiences.
</p>
<div className="text-sm text-neutral-800 dark:text-neutral-200">
<FlipWords words={["VFX Artist", "Developer"]} className="font-medium" />
</div>
<ul className="flex flex-wrap gap-3 pt-1 text-sm">
<li className="text-neutral-900 dark:text-neutral-200">
VFX Supervisor at{" "}
<a href="https://biohazardvfx.com" target="_blank" rel="noopener noreferrer">
Biohazard VFX
</a>
</li>
<li className="text-neutral-900 dark:text-neutral-200">
Developer{" "}
<a href="https://fortura.cc" target="_blank" rel="noopener noreferrer">
Fortura Data Solutions
</a>
</li>
<li>
<a href="mailto:nicholai@biohazardvfx.com" className="underline underline-offset-4">
Email me
</a>
</li>
<li className="text-neutral-900 dark:text-neutral-200">
<a
href="https://www.instagram.com/nicholai.exe/"
target="_blank"
rel="me noopener noreferrer"
>
Instagram
</a>
<span className="ml-1 text-xs text-neutral-500"> I hate Instagram</span>
</li>
</ul>
{/* Listening */}
<div className="pt-2">
<h3 className="mb-2 text-xs font-medium uppercase tracking-wider text-neutral-600 dark:text-neutral-500">
Listening
</h3>
<div className="spotify-card">
<iframe
title="Spotify playlist"
style={{ borderRadius: 12 }}
src="https://open.spotify.com/embed/playlist/1kV9JPnhvpfk0UtcpslRpa?utm_source=generator&theme=0"
width="290"
height="220"
loading="lazy"
allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture"
/>
</div>
</div>
</CardContent>
</Card>
</section>
{/* Writing */}
<section id="writing" aria-label="Writing">
<Card>
<CardHeader>
<CardTitle className="!normal-case">Writing</CardTitle>
<CardDescription>Recent posts</CardDescription>
</CardHeader>
<CardContent>
<div className="my-2">
<BlogPosts />
</div>
<div className="mt-4">
<Link
href="/blog"
className="inline-flex items-center rounded-md border border-black/10 dark:border-white/10 px-3 py-2 text-sm hover:bg-black/[0.04] dark:hover:bg-white/5"
>
View all posts
</Link>
</div>
</CardContent>
</Card>
</section>
{/* Contact */}
<section id="contact" aria-label="Contact">
<Card>
<CardHeader>
<CardTitle className="!normal-case">Contact</CardTitle>
<CardDescription>Let's build something</CardDescription>
</CardHeader>
<CardContent>
<p className="text-sm">
Prefer email:
{" "}
<a href="mailto:nicholai@biohazardvfx.com" className="underline underline-offset-4">
nicholai@biohazardvfx.com
</a>
</p>
<p className="footer-small mt-4">© {year} Nicholai · $6.39 well spent.</p>
</CardContent>
</Card>
</section>
</div>
</div>
</main>
)
}