diff --git a/app/page.tsx b/app/page.tsx index 8d3e52f..7ce1545 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -2,13 +2,11 @@ import React from 'react' import {Card} from '@/components/ui/Card' import {Views} from '@/components/ui/Views' import {Resume} from '@/components/ui/Resume' -import {SocialLink} from '@/components/ui/SocialLink' -import {Container} from '@/components/common/Container' -import {GitHubIcon, LinkedInIcon} from '@/components/icons/SocialIcons' import {getAllArticles} from '@/lib/getAllArticles' import {formatDate} from '@/lib/formatDate' import type {Article} from '@/types' import {metadata as _metadata} from '@/lib/generateMetadata' +import {SimpleLayout} from "@/components/layouts/SimpleLayout"; const meta = { title: 'Ryan Freeman - Full-stack software engineer based in Dublin, Ireland.', @@ -66,47 +64,25 @@ export default async function Home() { .map(component => component) return ( - <> - -
-

- {meta.heading} -

-

- {meta.description} -

-
- +
+
+ {articles.map(({slug, title, description, date}) => ( +
- -
+ ))}
- - -
-
- {articles.map(({slug, title, description, date}) => ( -
- ))} -
-
- -
+
+
- - +
+ ) } \ No newline at end of file diff --git a/app/providers.tsx b/app/providers.tsx index 96ffbb1..305b54c 100644 --- a/app/providers.tsx +++ b/app/providers.tsx @@ -8,7 +8,7 @@ export function Providers({children}: { }) { return ( - + {children} ) diff --git a/components/common/Header.tsx b/components/common/Header.tsx index 5b8f1c4..891053a 100644 --- a/components/common/Header.tsx +++ b/components/common/Header.tsx @@ -1,192 +1,19 @@ 'use client' -import {useEffect, useRef} from 'react' -import {usePathname} from 'next/navigation' import {Container} from './Container' import {ThemeButton} from '@/components/ui/ThemeButton' import {DesktopNavigation, MobileNavigation} from '@/components/ui/Navigation' -import {Avatar, AvatarContainer} from '@/components/ui/Avatar' - -function clamp(num: number, a: number, b: number) { - let min = Math.min(a, b) - let max = Math.max(a, b) - return Math.min(Math.max(num, min), max) -} export function Header() { - const pathname = usePathname() - const isHomePage = pathname === '/' - - const headerRef = useRef(null) - const avatarRef = useRef(null) - const isInitial = useRef(true) - - const headerPosition: Object = { - position: 'var(--header-position)' - } - const headerInnerPosition: Object = { - position: 'var(--header-inner-position)' - } - - useEffect(() => { - let downDelay = avatarRef.current?.offsetTop ?? 0 - let upDelay = 64 - - function setProperty(property: string, value: string) { - document.documentElement.style.setProperty(property, value.toString()) - } - - function removeProperty(property: string) { - document.documentElement.style.removeProperty(property) - } - - function updateHeaderStyles() { - const headerBoundingRect = headerRef.current?.getBoundingClientRect() - let top = headerBoundingRect?.top! - let height = headerBoundingRect?.height! - - let scrollY = clamp( - window.scrollY, - 0, - document.body.scrollHeight - window.innerHeight - ) - - if (isInitial.current) { - setProperty('--header-position', 'sticky') - } - - setProperty('--content-offset', `${downDelay}px`) - - if (isInitial.current || scrollY < downDelay) { - setProperty('--header-height', `${downDelay + height}px`) - setProperty('--header-mb', `${-downDelay}px`) - } else if (top + height < -upDelay) { - let offset = Math.max(height, scrollY - upDelay) - setProperty('--header-height', `${offset}px`) - setProperty('--header-mb', `${height - offset}px`) - } else if (top === 0) { - setProperty('--header-height', `${scrollY + height}px`) - setProperty('--header-mb', `${-scrollY}px`) - } - - if (top === 0 && scrollY > 0 && scrollY >= downDelay) { - setProperty('--header-inner-position', 'fixed') - removeProperty('--header-top') - removeProperty('--avatar-top') - } else { - removeProperty('--header-inner-position') - setProperty('--header-top', '0px') - setProperty('--avatar-top', '0px') - } - } - - function updateAvatarStyles() { - if (!isHomePage) { - return - } - - let fromScale = 1 - let toScale = 36 / 64 - let fromX = 0 - let toX = 2 / 16 - - let scrollY = downDelay - window.scrollY - - let scale = (scrollY * (fromScale - toScale)) / downDelay + toScale - scale = clamp(scale, fromScale, toScale) - - let x = (scrollY * (fromX - toX)) / downDelay + toX - x = clamp(x, fromX, toX) - - setProperty( - '--avatar-image-transform', - `translate3d(${x}rem, 0, 0) scale(${scale})` - ) - - let borderScale = 1 / (toScale / scale) - let borderX = (-toX + x) * borderScale - let borderTransform = `translate3d(${borderX}rem, 0, 0) scale(${borderScale})` - - setProperty('--avatar-border-transform', borderTransform) - setProperty('--avatar-border-opacity', (scale === toScale ? 1 : 0).toString()) - } - - function updateStyles() { - updateHeaderStyles() - updateAvatarStyles() - isInitial.current = false - } - - updateStyles() - - const opts: AddEventListenerOptions & EventListenerOptions = {passive: true} - - if (isHomePage) { - window.addEventListener('scroll', updateStyles, opts) - window.addEventListener('resize', updateStyles) - } - - return () => { - window.removeEventListener('scroll', updateStyles, opts) - window.removeEventListener('resize', updateStyles) - } - }, [isHomePage]) - return ( <>
- {isHomePage && ( - <> -
- -
-
- - -
-
-
- - )} + className="pointer-events-none relative z-50 flex flex-col">
- + className="top-0 z-10 h-16 pt-6"> +
- {!isHomePage && ( - - - - )}
@@ -201,7 +28,6 @@ export function Header() {
- {isHomePage &&
} ) } diff --git a/components/ui/Avatar.tsx b/components/ui/Avatar.tsx deleted file mode 100644 index cec7945..0000000 --- a/components/ui/Avatar.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import {Props} from '@/types' -import clsx from 'clsx' -import Link from 'next/link' -import Image from 'next/image' -import me from '/public/images/me.jpg' - -export function AvatarContainer({className, ...props}: { style?: Object } & Props) { - return ( -
- ) -} - -export function Avatar({large = false, className, ...props}: { large?: boolean, style?: Object } & Props) { - return ( - - - - ) -} \ No newline at end of file