New design: studio backdrop with a perspective floor and X/Z axis lines, an orientation gizmo that orbits on scroll, Bricolage Grotesque and Instrument Sans (bundled, no build-time network). Projects are laid out as plates by a row planner that keeps every row full for any count; a demo image from the repo root is shown when present, otherwise a generated voxel sculpture. Text and projects still come live from Gitea. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XtcZtnG4GQA1d6mW5PNrS9
22 lines
925 B
TypeScript
22 lines
925 B
TypeScript
import type { Metadata } from 'next'
|
|
import localFont from 'next/font/local'
|
|
import './globals.css'
|
|
|
|
// Both fonts are bundled (SIL Open Font License), so building never depends on the network.
|
|
const display = localFont({ src: './fonts/BricolageGrotesque-Variable.woff2', variable: '--font-display', weight: '200 800', display: 'swap' })
|
|
const text = localFont({ src: './fonts/InstrumentSans-Variable.woff2', variable: '--font-text', weight: '400 700', display: 'swap' })
|
|
|
|
export const metadata: Metadata = {
|
|
title: 'Emil Shanayev — Resume',
|
|
description: 'Resume of Emil Shanayev: backend, DevOps, AI systems, scientific software and game technology.',
|
|
authors: [{ name: 'Emil Shanayev' }],
|
|
}
|
|
|
|
export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
|
|
return (
|
|
<html lang="en" className={`${display.variable} ${text.variable}`}>
|
|
<body>{children}</body>
|
|
</html>
|
|
)
|
|
}
|