diff --git a/apps/web/app/(payload)/actions.ts b/apps/web/app/(payload)/actions.ts new file mode 100644 index 0000000..ad9da86 --- /dev/null +++ b/apps/web/app/(payload)/actions.ts @@ -0,0 +1,4 @@ +"use server"; +import { handleServerFunctions as payloadHandleServerFunctions } from "@payloadcms/next/layouts"; + +export const handleServerFunctions = payloadHandleServerFunctions; diff --git a/apps/web/app/(payload)/admin/importMap.js b/apps/web/app/(payload)/admin/importMap.js index fe3840c..b105d7e 100644 --- a/apps/web/app/(payload)/admin/importMap.js +++ b/apps/web/app/(payload)/admin/importMap.js @@ -1,75 +1,6 @@ -import { RscEntryLexicalCell as RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e } from "@payloadcms/richtext-lexical/rsc"; -import { RscEntryLexicalField as RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e } from "@payloadcms/richtext-lexical/rsc"; -import { LexicalDiffComponent as LexicalDiffComponent_44fe37237e0ebf4470c9990d8cb7b07e } from "@payloadcms/richtext-lexical/rsc"; -import { InlineToolbarFeatureClient as InlineToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { HorizontalRuleFeatureClient as HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { UploadFeatureClient as UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { BlockquoteFeatureClient as BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { RelationshipFeatureClient as RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { LinkFeatureClient as LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { ChecklistFeatureClient as ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { OrderedListFeatureClient as OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { UnorderedListFeatureClient as UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { IndentFeatureClient as IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { AlignFeatureClient as AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { HeadingFeatureClient as HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { ParagraphFeatureClient as ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { InlineCodeFeatureClient as InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { SuperscriptFeatureClient as SuperscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { SubscriptFeatureClient as SubscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { StrikethroughFeatureClient as StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { UnderlineFeatureClient as UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { BoldFeatureClient as BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; -import { ItalicFeatureClient as ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client"; import { CollectionCards as CollectionCards_f9c02e79a4aed9a3924487c0cd4cafb1 } from "@payloadcms/next/rsc"; export const importMap = { - "@payloadcms/richtext-lexical/rsc#RscEntryLexicalCell": - RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e, - "@payloadcms/richtext-lexical/rsc#RscEntryLexicalField": - RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e, - "@payloadcms/richtext-lexical/rsc#LexicalDiffComponent": - LexicalDiffComponent_44fe37237e0ebf4470c9990d8cb7b07e, - "@payloadcms/richtext-lexical/client#InlineToolbarFeatureClient": - InlineToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#HorizontalRuleFeatureClient": - HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#UploadFeatureClient": - UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#BlockquoteFeatureClient": - BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#RelationshipFeatureClient": - RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#LinkFeatureClient": - LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#ChecklistFeatureClient": - ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#OrderedListFeatureClient": - OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#UnorderedListFeatureClient": - UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#IndentFeatureClient": - IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#AlignFeatureClient": - AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#HeadingFeatureClient": - HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#ParagraphFeatureClient": - ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#InlineCodeFeatureClient": - InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#SuperscriptFeatureClient": - SuperscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#SubscriptFeatureClient": - SubscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#StrikethroughFeatureClient": - StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#UnderlineFeatureClient": - UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#BoldFeatureClient": - BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, - "@payloadcms/richtext-lexical/client#ItalicFeatureClient": - ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, "@payloadcms/next/rsc#CollectionCards": CollectionCards_f9c02e79a4aed9a3924487c0cd4cafb1, }; diff --git a/apps/web/app/(payload)/layout.tsx b/apps/web/app/(payload)/layout.tsx index 5c37eb4..96b4606 100644 --- a/apps/web/app/(payload)/layout.tsx +++ b/apps/web/app/(payload)/layout.tsx @@ -3,8 +3,7 @@ import "@payloadcms/next/css"; import { RootLayout } from "@payloadcms/next/layouts"; import React from "react"; -// @ts-expect-error - Export exists in JS but TS types are missing in this version -import { handleServerFunctions } from "@payloadcms/next/utilities"; +import { handleServerFunctions } from "./actions"; import { importMap } from "./admin/importMap"; export default function Layout({ children }: { children: React.ReactNode }) { diff --git a/apps/web/app/about/opengraph-image.tsx b/apps/web/app/(site)/about/opengraph-image.tsx similarity index 77% rename from apps/web/app/about/opengraph-image.tsx rename to apps/web/app/(site)/about/opengraph-image.tsx index 8fe70ec..daf6e71 100644 --- a/apps/web/app/about/opengraph-image.tsx +++ b/apps/web/app/(site)/about/opengraph-image.tsx @@ -1,6 +1,6 @@ import { ImageResponse } from "next/og"; -import { OGImageTemplate } from "../../src/components/OGImageTemplate"; -import { getOgFonts, OG_IMAGE_SIZE } from "../../src/lib/og-helper"; +import { OGImageTemplate } from "../../../src/components/OGImageTemplate"; +import { getOgFonts, OG_IMAGE_SIZE } from "../../../src/lib/og-helper"; export const size = OG_IMAGE_SIZE; export const contentType = "image/png"; diff --git a/apps/web/app/about/page.tsx b/apps/web/app/(site)/about/page.tsx similarity index 95% rename from apps/web/app/about/page.tsx rename to apps/web/app/(site)/about/page.tsx index b483f76..f2abb28 100644 --- a/apps/web/app/about/page.tsx +++ b/apps/web/app/(site)/about/page.tsx @@ -1,8 +1,8 @@ "use client"; import Image from "next/image"; -import { Section } from "../../src/components/Section"; -import { Reveal } from "../../src/components/Reveal"; +import { Section } from "@/src/components/Section"; +import { Reveal } from "@/src/components/Reveal"; import { ExperienceIllustration, ResponsibilityIllustration, @@ -11,8 +11,8 @@ import { HeroLines, ParticleNetwork, GridLines, -} from "../../src/components/Landing"; -import { Signature } from "../../src/components/Signature"; +} from "@/src/components/Landing"; +import { Signature } from "@/src/components/Signature"; import { Check } from "lucide-react"; import { H1, @@ -22,17 +22,17 @@ import { BodyText, Label, MonoLabel, -} from "../../src/components/Typography"; -import { Card, Container } from "../../src/components/Layout"; -import { Button } from "../../src/components/Button"; -import { IconList, IconListItem } from "../../src/components/IconList"; +} from "@/src/components/Typography"; +import { Card, Container } from "@/src/components/Layout"; +import { Button } from "@/src/components/Button"; +import { IconList, IconListItem } from "@/src/components/IconList"; import { GradientMesh, CodeSnippet, AbstractCircuit, -} from "../../src/components/Effects"; -import { getImgproxyUrl } from "../../src/utils/imgproxy"; -import { Marker } from "../../src/components/Marker"; +} from "@/src/components/Effects"; +import { getImgproxyUrl } from "@/src/utils/imgproxy"; +import { Marker } from "@/src/components/Marker"; export default function AboutPage() { return ( diff --git a/apps/web/app/blog/[slug]/opengraph-image.tsx b/apps/web/app/(site)/blog/[slug]/opengraph-image.tsx similarity index 86% rename from apps/web/app/blog/[slug]/opengraph-image.tsx rename to apps/web/app/(site)/blog/[slug]/opengraph-image.tsx index 4b5ac2e..5866d5e 100644 --- a/apps/web/app/blog/[slug]/opengraph-image.tsx +++ b/apps/web/app/(site)/blog/[slug]/opengraph-image.tsx @@ -1,8 +1,8 @@ import { ImageResponse } from "next/og"; -import { getAllPosts } from "../../../src/lib/posts"; -import { blogThumbnails } from "../../../src/components/blog/blogThumbnails"; -import { BlogOGImageTemplate } from "../../../src/components/BlogOGImageTemplate"; -import { getOgFonts, OG_IMAGE_SIZE } from "../../../src/lib/og-helper"; +import { getAllPosts } from "../../../../src/lib/posts"; +import { blogThumbnails } from "../../../../src/components/blog/blogThumbnails"; +import { BlogOGImageTemplate } from "../../../../src/components/BlogOGImageTemplate"; +import { getOgFonts, OG_IMAGE_SIZE } from "../../../../src/lib/og-helper"; import * as fs from "node:fs/promises"; import * as path from "node:path"; diff --git a/apps/web/app/blog/[slug]/page.tsx b/apps/web/app/(site)/blog/[slug]/page.tsx similarity index 83% rename from apps/web/app/blog/[slug]/page.tsx rename to apps/web/app/(site)/blog/[slug]/page.tsx index deeeef7..096099c 100644 --- a/apps/web/app/blog/[slug]/page.tsx +++ b/apps/web/app/(site)/blog/[slug]/page.tsx @@ -1,14 +1,14 @@ import * as React from "react"; import type { Metadata } from "next"; import { notFound } from "next/navigation"; -import { getAllPosts } from "../../../src/lib/posts"; -import { BlogPostHeader } from "../../../src/components/blog/BlogPostHeader"; -import { Section } from "../../../src/components/Section"; -import { Reveal } from "../../../src/components/Reveal"; -import { BlogPostClient } from "../../../src/components/BlogPostClient"; -import { TextSelectionShare } from "../../../src/components/TextSelectionShare"; -import { BlogPostStickyBar } from "../../../src/components/blog/BlogPostStickyBar"; -import { MDXContent } from "../../../src/components/MDXContent"; +import { getAllPosts } from "@/src/lib/posts"; +import { BlogPostHeader } from "@/src/components/blog/BlogPostHeader"; +import { Section } from "@/src/components/Section"; +import { Reveal } from "@/src/components/Reveal"; +import { BlogPostClient } from "@/src/components/BlogPostClient"; +import { TextSelectionShare } from "@/src/components/TextSelectionShare"; +import { BlogPostStickyBar } from "@/src/components/blog/BlogPostStickyBar"; +import { MDXContent } from "@/src/components/MDXContent"; export async function generateStaticParams() { const allPosts = await getAllPosts(); diff --git a/apps/web/app/blog/page.tsx b/apps/web/app/(site)/blog/page.tsx similarity index 73% rename from apps/web/app/blog/page.tsx rename to apps/web/app/(site)/blog/page.tsx index 854b859..f6c35a5 100644 --- a/apps/web/app/blog/page.tsx +++ b/apps/web/app/(site)/blog/page.tsx @@ -1,5 +1,5 @@ -import { getAllPosts } from "../../src/lib/posts"; -import { BlogClient } from "../../src/components/blog/BlogClient"; +import { getAllPosts } from "@/src/lib/posts"; +import { BlogClient } from "@/src/components/blog/BlogClient"; import type { Metadata } from "next"; export const metadata: Metadata = { diff --git a/apps/web/app/case-studies/klz-cables/page.tsx b/apps/web/app/(site)/case-studies/klz-cables/page.tsx similarity index 98% rename from apps/web/app/case-studies/klz-cables/page.tsx rename to apps/web/app/(site)/case-studies/klz-cables/page.tsx index e1af421..bc4db55 100644 --- a/apps/web/app/case-studies/klz-cables/page.tsx +++ b/apps/web/app/(site)/case-studies/klz-cables/page.tsx @@ -2,8 +2,8 @@ import React from "react"; import { motion, useScroll, useTransform } from "framer-motion"; -import { Section } from "../../../src/components/Section"; -import { Reveal } from "../../../src/components/Reveal"; +import { Section } from "@/src/components/Section"; +import { Reveal } from "@/src/components/Reveal"; import { H1, H2, @@ -12,11 +12,11 @@ import { Label, MonoLabel, BodyText, -} from "../../../src/components/Typography"; -import { BackgroundGrid, Container } from "../../../src/components/Layout"; +} from "@/src/components/Typography"; +import { BackgroundGrid, Container } from "@/src/components/Layout"; import Link from "next/link"; -import { Button } from "../../../src/components/Button"; -import { IframeSection } from "../../../src/components/IframeSection"; +import { Button } from "@/src/components/Button"; +import { IframeSection } from "@/src/components/IframeSection"; import { Activity, ArrowRight, @@ -27,8 +27,8 @@ import { Layers, } from "lucide-react"; -import { Marker } from "../../../src/components/Marker"; -import { GlitchText } from "../../../src/components/GlitchText"; +import { Marker } from "@/src/components/Marker"; +import { GlitchText } from "@/src/components/GlitchText"; export default function KLZCablesCaseStudy() { const { scrollYProgress } = useScroll(); diff --git a/apps/web/app/case-studies/page.tsx b/apps/web/app/(site)/case-studies/page.tsx similarity index 95% rename from apps/web/app/case-studies/page.tsx rename to apps/web/app/(site)/case-studies/page.tsx index bb80788..bcb8dad 100644 --- a/apps/web/app/case-studies/page.tsx +++ b/apps/web/app/(site)/case-studies/page.tsx @@ -1,12 +1,12 @@ "use client"; import Image from "next/image"; -import { Section } from "../../src/components/Section"; -import { Reveal } from "../../src/components/Reveal"; -import { H3, LeadText, Label, BodyText } from "../../src/components/Typography"; -import { Card } from "../../src/components/Layout"; -import { Button } from "../../src/components/Button"; -import { AbstractCircuit } from "../../src/components/Effects"; +import { Section } from "@/src/components/Section"; +import { Reveal } from "@/src/components/Reveal"; +import { H3, LeadText, Label, BodyText } from "@/src/components/Typography"; +import { Card } from "@/src/components/Layout"; +import { Button } from "@/src/components/Button"; +import { AbstractCircuit } from "@/src/components/Effects"; import { ArrowRight } from "lucide-react"; import { motion } from "framer-motion"; diff --git a/apps/web/app/contact/opengraph-image.tsx b/apps/web/app/(site)/contact/opengraph-image.tsx similarity index 78% rename from apps/web/app/contact/opengraph-image.tsx rename to apps/web/app/(site)/contact/opengraph-image.tsx index ab9509f..eb9891e 100644 --- a/apps/web/app/contact/opengraph-image.tsx +++ b/apps/web/app/(site)/contact/opengraph-image.tsx @@ -1,6 +1,6 @@ import { ImageResponse } from "next/og"; -import { OGImageTemplate } from "../../src/components/OGImageTemplate"; -import { getOgFonts, OG_IMAGE_SIZE } from "../../src/lib/og-helper"; +import { OGImageTemplate } from "../../../src/components/OGImageTemplate"; +import { getOgFonts, OG_IMAGE_SIZE } from "../../../src/lib/og-helper"; export const size = OG_IMAGE_SIZE; export const contentType = "image/png"; diff --git a/apps/web/app/contact/page.tsx b/apps/web/app/(site)/contact/page.tsx similarity index 67% rename from apps/web/app/contact/page.tsx rename to apps/web/app/(site)/contact/page.tsx index 5b1b855..4d2d164 100644 --- a/apps/web/app/contact/page.tsx +++ b/apps/web/app/(site)/contact/page.tsx @@ -1,6 +1,6 @@ -import { Section } from "../../src/components/Section"; -import { ContactForm } from "../../src/components/ContactForm"; -import { AbstractCircuit } from "../../src/components/Effects"; +import { Section } from "@/src/components/Section"; +import { ContactForm } from "@/src/components/ContactForm"; +import { AbstractCircuit } from "@/src/components/Effects"; export default function ContactPage() { return ( diff --git a/apps/web/app/error.tsx b/apps/web/app/(site)/error.tsx similarity index 97% rename from apps/web/app/error.tsx rename to apps/web/app/(site)/error.tsx index b7fd949..c3df6f6 100644 --- a/apps/web/app/error.tsx +++ b/apps/web/app/(site)/error.tsx @@ -2,7 +2,7 @@ import { useEffect } from "react"; import * as Sentry from "@sentry/nextjs"; -import { Button } from "../src/components/Button"; +import { Button } from "@/src/components/Button"; export default function Error({ error, diff --git a/apps/web/app/errors/api/relay/route.ts b/apps/web/app/(site)/errors/api/relay/route.ts similarity index 100% rename from apps/web/app/errors/api/relay/route.ts rename to apps/web/app/(site)/errors/api/relay/route.ts diff --git a/apps/web/app/global-error.tsx b/apps/web/app/(site)/global-error.tsx similarity index 100% rename from apps/web/app/global-error.tsx rename to apps/web/app/(site)/global-error.tsx diff --git a/apps/web/app/globals.css b/apps/web/app/(site)/globals.css similarity index 93% rename from apps/web/app/globals.css rename to apps/web/app/(site)/globals.css index b09e887..0cc8d11 100644 --- a/apps/web/app/globals.css +++ b/apps/web/app/(site)/globals.css @@ -86,7 +86,6 @@ /* Components - Tailwind utility classes */ @layer components { - /* Legacy hooks required by tests */ .file-example { @apply w-full; @@ -291,7 +290,6 @@ /* Print styles */ @media print { - .floating-back-to-top, .reading-progress-bar { display: none !important; @@ -350,30 +348,38 @@ } .highlighter-yellow { - background: linear-gradient(135deg, - rgba(255, 235, 59, 0.95) 0%, - rgba(255, 213, 79, 0.95) 100%); + background: linear-gradient( + 135deg, + rgba(255, 235, 59, 0.95) 0%, + rgba(255, 213, 79, 0.95) 100% + ); color: #3f2f00; } .highlighter-pink { - background: linear-gradient(135deg, - rgba(255, 167, 209, 0.95) 0%, - rgba(255, 122, 175, 0.95) 100%); + background: linear-gradient( + 135deg, + rgba(255, 167, 209, 0.95) 0%, + rgba(255, 122, 175, 0.95) 100% + ); color: #3f0018; } .highlighter-green { - background: linear-gradient(135deg, - rgba(129, 199, 132, 0.95) 0%, - rgba(102, 187, 106, 0.95) 100%); + background: linear-gradient( + 135deg, + rgba(129, 199, 132, 0.95) 0%, + rgba(102, 187, 106, 0.95) 100% + ); color: #002f0a; } .highlighter-blue { - background: linear-gradient(135deg, - rgba(226, 232, 240, 0.95) 0%, - rgba(203, 213, 225, 0.95) 100%); + background: linear-gradient( + 135deg, + rgba(226, 232, 240, 0.95) 0%, + rgba(203, 213, 225, 0.95) 100% + ); color: #0f172a; } @@ -409,14 +415,17 @@ border-radius: 0.18em; z-index: -1; - background: linear-gradient(180deg, - rgba(255, 255, 255, 0) 0%, - rgba(255, 255, 255, 0) 20%, - rgba(253, 230, 138, 0.7) 20%, - rgba(253, 230, 138, 0.7) 100%); + background: linear-gradient( + 180deg, + rgba(255, 255, 255, 0) 0%, + rgba(255, 255, 255, 0) 20%, + rgba(253, 230, 138, 0.7) 20%, + rgba(253, 230, 138, 0.7) 100% + ); transform-origin: left center; - transform: rotate(calc((var(--marker-seed, 0) - 3) * 0.45deg)) skewX(calc((var(--marker-seed, 0) - 3) * -0.25deg)); + transform: rotate(calc((var(--marker-seed, 0) - 3) * 0.45deg)) + skewX(calc((var(--marker-seed, 0) - 3) * -0.25deg)); filter: saturate(1.05); } @@ -431,24 +440,28 @@ border-radius: 0.18em; z-index: -1; - background: linear-gradient(90deg, - rgba(253, 230, 138, 0) 0%, - rgba(253, 230, 138, 0.6) 8%, - rgba(253, 230, 138, 0.55) 60%, - rgba(253, 230, 138, 0.35) 100%); + background: linear-gradient( + 90deg, + rgba(253, 230, 138, 0) 0%, + rgba(253, 230, 138, 0.6) 8%, + rgba(253, 230, 138, 0.55) 60%, + rgba(253, 230, 138, 0.35) 100% + ); opacity: 0.75; mix-blend-mode: multiply; - transform: rotate(calc((var(--marker-seed, 0) - 3) * 0.45deg)) translateY(0.02em); + transform: rotate(calc((var(--marker-seed, 0) - 3) * 0.45deg)) + translateY(0.02em); - mask-image: linear-gradient(180deg, - rgba(0, 0, 0, 0) 0%, - rgba(0, 0, 0, 1) 20%, - rgba(0, 0, 0, 1) 100%); + mask-image: linear-gradient( + 180deg, + rgba(0, 0, 0, 0) 0%, + rgba(0, 0, 0, 1) 20%, + rgba(0, 0, 0, 1) 100% + ); } @media (prefers-reduced-motion: no-preference) { - .post-link:hover .marker-title::before, .post-link:hover .marker-title::after { filter: saturate(1.08) contrast(1.02); @@ -711,7 +724,6 @@ pre:has(code[class*="language-"]) { /* Gradient Mesh Blob Animations */ @keyframes gradient-blob-1 { - 0%, 100% { transform: translate(0, 0) scale(1); @@ -731,7 +743,6 @@ pre:has(code[class*="language-"]) { } @keyframes gradient-blob-2 { - 0%, 100% { transform: translate(0, 0) scale(1); @@ -747,7 +758,6 @@ pre:has(code[class*="language-"]) { } @keyframes gradient-blob-3 { - 0%, 100% { transform: translate(0, 0) scale(1); @@ -783,7 +793,6 @@ pre:has(code[class*="language-"]) { /* Circuit Pulse (used for node glow effects) */ @keyframes circuit-pulse { - 0%, 100% { opacity: 0.2; @@ -887,12 +896,14 @@ pre:has(code[class*="language-"]) { inset: 0; border-radius: inherit; padding: 1px; - background: linear-gradient(90deg, - transparent 0%, - rgba(148, 163, 184, 0.3) 25%, - rgba(191, 206, 228, 0.2) 50%, - rgba(148, 163, 184, 0.3) 75%, - transparent 100%); + background: linear-gradient( + 90deg, + transparent 0%, + rgba(148, 163, 184, 0.3) 25%, + rgba(191, 206, 228, 0.2) 50%, + rgba(148, 163, 184, 0.3) 75%, + transparent 100% + ); background-size: 200% 100%; animation: border-trace 4s linear infinite; -webkit-mask: @@ -962,7 +973,6 @@ pre:has(code[class*="language-"]) { } @keyframes junctionGlow { - 0%, 100% { opacity: 0.1; @@ -971,4 +981,4 @@ pre:has(code[class*="language-"]) { 50% { opacity: 0.4; } -} \ No newline at end of file +} diff --git a/apps/web/app/(site)/layout.tsx b/apps/web/app/(site)/layout.tsx new file mode 100644 index 0000000..9a5b707 --- /dev/null +++ b/apps/web/app/(site)/layout.tsx @@ -0,0 +1,46 @@ +import type { Metadata } from "next"; +import { Inter, Newsreader } from "next/font/google"; +import { Analytics } from "@/src/components/Analytics"; +import { Footer } from "@/src/components/Footer"; +import { Header } from "@/src/components/Header"; +import { InteractiveElements } from "@/src/components/InteractiveElements"; +import "./globals.css"; + +const inter = Inter({ subsets: ["latin"], variable: "--font-inter" }); +const newsreader = Newsreader({ + subsets: ["latin"], + variable: "--font-newsreader", + style: "italic", + display: "swap", +}); + +export const metadata: Metadata = { + title: { + default: "Marc Mintel", + template: "%s | Marc Mintel", + }, + description: + "Technical problem solver's blog - practical insights and learning notes", + metadataBase: new URL("https://mintel.me"), + icons: { + icon: "/favicon.svg", + }, +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + +
+
{children}
+