Merge pull request #7 from bartvdbraak/feat/content-and-style
New content, style and features
|
@ -1,2 +1,2 @@
|
||||||
ignores: ["@types/node", "@types/react-dom", "autoprefixer", "postcss", "@commitlint/config-conventional", "prettier"]
|
ignores: ["@types/node", "@types/react-dom", "autoprefixer", "postcss", "@commitlint/config-conventional", "prettier", "@t3-oss/env-nextjs"]
|
||||||
skip-missing: false
|
skip-missing: false
|
||||||
|
|
4
.env.example
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# App
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
NEXT_PUBLIC_APP_URL=http://localhost:3000
|
113
app/layout.tsx
|
@ -1,79 +1,96 @@
|
||||||
import { Inter, Fjalla_One } from "next/font/google";
|
import { Inter as FontSans } from "next/font/google";
|
||||||
|
import localFont from "next/font/local";
|
||||||
|
|
||||||
|
import "@/styles/globals.css";
|
||||||
|
import { siteConfig } from "@/config/site";
|
||||||
|
import { absoluteUrl, cn } from "@/lib/utils";
|
||||||
|
import { Analytics } from "@/components/analytics";
|
||||||
|
import { TailwindIndicator } from "@/components/tailwind-indicator";
|
||||||
import { ThemeProvider } from "@/components/theme-provider";
|
import { ThemeProvider } from "@/components/theme-provider";
|
||||||
import "tailwindcss/tailwind.css";
|
|
||||||
|
|
||||||
import { Metadata } from "next";
|
export const metadata = {
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
|
||||||
title: {
|
title: {
|
||||||
default: "hellob.art",
|
default: siteConfig.name,
|
||||||
template: "%s | hellob.art",
|
template: `%s | ${siteConfig.name}`,
|
||||||
},
|
},
|
||||||
description: "a simple portfolio made by bart van der braak",
|
description: siteConfig.description,
|
||||||
metadataBase: new URL("https://hellob.art"),
|
keywords: [
|
||||||
openGraph: {
|
"Next.js",
|
||||||
title: "hellob.art",
|
"React",
|
||||||
description: "a simple portfolio made by bart van der braak",
|
"Tailwind CSS",
|
||||||
url: "https://hellob.art",
|
"Server Components",
|
||||||
siteName: "hellob.art",
|
"Radix UI",
|
||||||
locale: "en-US",
|
],
|
||||||
type: "website",
|
authors: [
|
||||||
},
|
{
|
||||||
robots: {
|
name: "Bart van der Braak",
|
||||||
index: true,
|
url: siteConfig.url,
|
||||||
follow: true,
|
|
||||||
googleBot: {
|
|
||||||
index: true,
|
|
||||||
follow: true,
|
|
||||||
"max-video-preview": -1,
|
|
||||||
"max-image-preview": "large",
|
|
||||||
"max-snippet": -1,
|
|
||||||
},
|
},
|
||||||
|
],
|
||||||
|
creator: "shadcn",
|
||||||
|
themeColor: [
|
||||||
|
{ media: "(prefers-color-scheme: light)", color: "white" },
|
||||||
|
{ media: "(prefers-color-scheme: dark)", color: "black" },
|
||||||
|
],
|
||||||
|
openGraph: {
|
||||||
|
type: "website",
|
||||||
|
locale: "en_US",
|
||||||
|
url: siteConfig.url,
|
||||||
|
title: siteConfig.name,
|
||||||
|
description: siteConfig.description,
|
||||||
|
siteName: siteConfig.name,
|
||||||
},
|
},
|
||||||
twitter: {
|
twitter: {
|
||||||
title: "hellob.art",
|
|
||||||
card: "summary_large_image",
|
card: "summary_large_image",
|
||||||
|
title: siteConfig.name,
|
||||||
|
description: siteConfig.description,
|
||||||
|
images: [`${siteConfig.url}/og.jpg`],
|
||||||
|
creator: "@bartvdbraak",
|
||||||
},
|
},
|
||||||
icons: {
|
icons: {
|
||||||
shortcut: "/favicon.png",
|
icon: "/favicon.ico",
|
||||||
|
shortcut: "/favicon-16x16.png",
|
||||||
|
apple: "/apple-touch-icon.png",
|
||||||
},
|
},
|
||||||
|
manifest: `${siteConfig.url}/site.webmanifest`,
|
||||||
};
|
};
|
||||||
|
|
||||||
interface RootLayoutProps {
|
interface RootLayoutProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
const inter = Inter({
|
const fontSans = FontSans({
|
||||||
subsets: ["latin"],
|
subsets: ["latin"],
|
||||||
variable: "--font-inter",
|
variable: "--font-sans",
|
||||||
});
|
});
|
||||||
|
|
||||||
const fjallaOne = Fjalla_One({
|
// Font files can be colocated inside of `pages`
|
||||||
subsets: ["latin"],
|
const fontHeading = localFont({
|
||||||
weight: "400",
|
src: "../assets/fonts/CalSans-SemiBold.woff2",
|
||||||
variable: "--font-fjalla-one",
|
variable: "--font-heading",
|
||||||
});
|
});
|
||||||
|
|
||||||
interface RootLayoutProps {
|
interface RootLayoutProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function RootLayout({ children }: RootLayoutProps) {
|
export default function RootLayout({ children }: RootLayoutProps) {
|
||||||
return (
|
return (
|
||||||
<>
|
<html lang="en" suppressHydrationWarning>
|
||||||
<html
|
<head />
|
||||||
lang="en"
|
<body
|
||||||
suppressHydrationWarning
|
className={cn(
|
||||||
className={[inter.variable, fjallaOne.variable].join(" ")}
|
"min-h-screen bg-background font-sans antialiased",
|
||||||
|
fontSans.variable,
|
||||||
|
fontHeading.variable
|
||||||
|
)}
|
||||||
>
|
>
|
||||||
<head />
|
<ThemeProvider attribute="class" defaultTheme="system" enableSystem>
|
||||||
<body className="min-h-screen antialiased">
|
{children}
|
||||||
<ThemeProvider attribute="class" defaultTheme="dark" enableSystem>
|
<Analytics />
|
||||||
{children}
|
<TailwindIndicator />
|
||||||
</ThemeProvider>
|
</ThemeProvider>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
</>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
BIN
assets/fonts/CalSans-SemiBold.ttf
Normal file
BIN
assets/fonts/CalSans-SemiBold.woff
Normal file
BIN
assets/fonts/CalSans-SemiBold.woff2
Normal file
BIN
assets/fonts/Inter-Bold.ttf
Normal file
BIN
assets/fonts/Inter-Regular.ttf
Normal file
7
components/analytics.tsx
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
|
import { Analytics as VercelAnalytics } from "@vercel/analytics/react";
|
||||||
|
|
||||||
|
export function Analytics() {
|
||||||
|
return <VercelAnalytics />;
|
||||||
|
}
|
16
components/tailwind-indicator.tsx
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
export function TailwindIndicator() {
|
||||||
|
if (process.env.NODE_ENV === "production") return null;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="fixed bottom-1 left-1 z-50 flex h-6 w-6 items-center justify-center rounded-full bg-gray-800 p-3 font-mono text-xs text-white">
|
||||||
|
<div className="block sm:hidden">xs</div>
|
||||||
|
<div className="hidden sm:block md:hidden lg:hidden xl:hidden 2xl:hidden">
|
||||||
|
sm
|
||||||
|
</div>
|
||||||
|
<div className="hidden md:block lg:hidden xl:hidden 2xl:hidden">md</div>
|
||||||
|
<div className="hidden lg:block xl:hidden 2xl:hidden">lg</div>
|
||||||
|
<div className="hidden xl:block 2xl:hidden">xl</div>
|
||||||
|
<div className="hidden 2xl:block">2xl</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
export const siteConfig = {
|
export const siteConfig = {
|
||||||
name: "Taxonomy",
|
name: "hellob.art",
|
||||||
description:
|
description: "a simple portfolio made by bart van der braak.",
|
||||||
"An open source application built using the new router, server components and everything new in Next.js 13.",
|
|
||||||
url: "https://hellob.art",
|
url: "https://hellob.art",
|
||||||
ogImage: "https://hellob.art/og.jpg",
|
ogImage: "https://hellob.art/og.jpg",
|
||||||
links: {
|
links: {
|
||||||
|
|
15
env.mjs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import { createEnv } from "@t3-oss/env-nextjs";
|
||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
|
export const env = createEnv({
|
||||||
|
server: {
|
||||||
|
// This is optional because it's only used in development.
|
||||||
|
// See https://next-auth.js.org/deployment.
|
||||||
|
},
|
||||||
|
client: {
|
||||||
|
NEXT_PUBLIC_APP_URL: z.string().min(1),
|
||||||
|
},
|
||||||
|
runtimeEnv: {
|
||||||
|
NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
|
||||||
|
},
|
||||||
|
});
|
|
@ -1,6 +1,8 @@
|
||||||
import { ClassValue, clsx } from "clsx";
|
import { ClassValue, clsx } from "clsx";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
|
import { env } from "@/env.mjs";
|
||||||
|
|
||||||
export function cn(...inputs: ClassValue[]) {
|
export function cn(...inputs: ClassValue[]) {
|
||||||
return twMerge(clsx(inputs));
|
return twMerge(clsx(inputs));
|
||||||
}
|
}
|
||||||
|
@ -13,3 +15,7 @@ export function formatDate(input: string | number): string {
|
||||||
year: "numeric",
|
year: "numeric",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function absoluteUrl(path: string) {
|
||||||
|
return `${env.NEXT_PUBLIC_APP_URL}${path}`;
|
||||||
|
}
|
||||||
|
|
|
@ -17,9 +17,12 @@
|
||||||
"format:check": "prettier . --check --cache"
|
"format:check": "prettier . --check --cache"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@t3-oss/env-nextjs": "^0.4.0",
|
||||||
|
"@tailwindcss/typography": "^0.5.9",
|
||||||
"@types/node": "20.3.1",
|
"@types/node": "20.3.1",
|
||||||
"@types/react": "18.2.12",
|
"@types/react": "18.2.12",
|
||||||
"@types/react-dom": "18.2.5",
|
"@types/react-dom": "18.2.5",
|
||||||
|
"@vercel/analytics": "^1.0.1",
|
||||||
"autoprefixer": "10.4.14",
|
"autoprefixer": "10.4.14",
|
||||||
"class-variance-authority": "^0.6.0",
|
"class-variance-authority": "^0.6.0",
|
||||||
"clsx": "^1.2.1",
|
"clsx": "^1.2.1",
|
||||||
|
@ -32,6 +35,7 @@
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
"tailwind-merge": "^1.13.1",
|
"tailwind-merge": "^1.13.1",
|
||||||
"tailwindcss": "3.3.2",
|
"tailwindcss": "3.3.2",
|
||||||
|
"tailwindcss-animate": "^1.0.6",
|
||||||
"typescript": "5.1.3"
|
"typescript": "5.1.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
lockfileVersion: '6.0'
|
lockfileVersion: '6.0'
|
||||||
|
|
||||||
|
settings:
|
||||||
|
autoInstallPeers: true
|
||||||
|
excludeLinksFromLockfile: false
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
|
'@t3-oss/env-nextjs':
|
||||||
|
specifier: ^0.4.0
|
||||||
|
version: 0.4.0(typescript@5.1.3)(zod@3.21.4)
|
||||||
|
'@tailwindcss/typography':
|
||||||
|
specifier: ^0.5.9
|
||||||
|
version: 0.5.9(tailwindcss@3.3.2)
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: 20.3.1
|
specifier: 20.3.1
|
||||||
version: 20.3.1
|
version: 20.3.1
|
||||||
|
@ -10,6 +20,9 @@ dependencies:
|
||||||
'@types/react-dom':
|
'@types/react-dom':
|
||||||
specifier: 18.2.5
|
specifier: 18.2.5
|
||||||
version: 18.2.5
|
version: 18.2.5
|
||||||
|
'@vercel/analytics':
|
||||||
|
specifier: ^1.0.1
|
||||||
|
version: 1.0.1
|
||||||
autoprefixer:
|
autoprefixer:
|
||||||
specifier: 10.4.14
|
specifier: 10.4.14
|
||||||
version: 10.4.14(postcss@8.4.24)
|
version: 10.4.14(postcss@8.4.24)
|
||||||
|
@ -46,6 +59,9 @@ dependencies:
|
||||||
tailwindcss:
|
tailwindcss:
|
||||||
specifier: 3.3.2
|
specifier: 3.3.2
|
||||||
version: 3.3.2
|
version: 3.3.2
|
||||||
|
tailwindcss-animate:
|
||||||
|
specifier: ^1.0.6
|
||||||
|
version: 1.0.6(tailwindcss@3.3.2)
|
||||||
typescript:
|
typescript:
|
||||||
specifier: 5.1.3
|
specifier: 5.1.3
|
||||||
version: 5.1.3
|
version: 5.1.3
|
||||||
|
@ -307,6 +323,39 @@ packages:
|
||||||
tslib: 2.5.3
|
tslib: 2.5.3
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@t3-oss/env-core@0.4.0(typescript@5.1.3)(zod@3.21.4):
|
||||||
|
resolution: {integrity: sha512-6JlMp0Vru15q/axHzBKsQQjiyGS6k+EsZBY1iErGVmOGzNSoVluBahnYFP7tEkwZ7KoRgSq4NRIc1Ez7SVYuxQ==}
|
||||||
|
peerDependencies:
|
||||||
|
typescript: '>=4.7.2'
|
||||||
|
zod: ^3.0.0
|
||||||
|
dependencies:
|
||||||
|
typescript: 5.1.3
|
||||||
|
zod: 3.21.4
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@t3-oss/env-nextjs@0.4.0(typescript@5.1.3)(zod@3.21.4):
|
||||||
|
resolution: {integrity: sha512-K1u2i+S/uEhjfg++FqWlOzS6x237EARRbWGowH2MkDkFu2q7ZJSiJBJT8e47L7NHWH5IyZrTCM6BdOxyWEnQuQ==}
|
||||||
|
peerDependencies:
|
||||||
|
typescript: '>=4.7.2'
|
||||||
|
zod: ^3.0.0
|
||||||
|
dependencies:
|
||||||
|
'@t3-oss/env-core': 0.4.0(typescript@5.1.3)(zod@3.21.4)
|
||||||
|
typescript: 5.1.3
|
||||||
|
zod: 3.21.4
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@tailwindcss/typography@0.5.9(tailwindcss@3.3.2):
|
||||||
|
resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==}
|
||||||
|
peerDependencies:
|
||||||
|
tailwindcss: '>=3.0.0 || insiders'
|
||||||
|
dependencies:
|
||||||
|
lodash.castarray: 4.4.0
|
||||||
|
lodash.isplainobject: 4.0.6
|
||||||
|
lodash.merge: 4.6.2
|
||||||
|
postcss-selector-parser: 6.0.10
|
||||||
|
tailwindcss: 3.3.2
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@types/json5@0.0.29:
|
/@types/json5@0.0.29:
|
||||||
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
|
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -399,6 +448,10 @@ packages:
|
||||||
eslint-visitor-keys: 3.4.1
|
eslint-visitor-keys: 3.4.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@vercel/analytics@1.0.1:
|
||||||
|
resolution: {integrity: sha512-Ux0c9qUfkcPqng3vrR0GTrlQdqNJ2JREn/2ydrVuKwM3RtMfF2mWX31Ijqo1opSjNAq6rK76PwtANw6kl6TAow==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/acorn-jsx@5.3.2(acorn@8.8.2):
|
/acorn-jsx@5.3.2(acorn@8.8.2):
|
||||||
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
|
@ -1801,6 +1854,14 @@ packages:
|
||||||
p-locate: 5.0.0
|
p-locate: 5.0.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/lodash.castarray@4.4.0:
|
||||||
|
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/lodash.isplainobject@4.0.6:
|
||||||
|
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/lodash.merge@4.6.2:
|
/lodash.merge@4.6.2:
|
||||||
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -2192,6 +2253,14 @@ packages:
|
||||||
postcss-selector-parser: 6.0.13
|
postcss-selector-parser: 6.0.13
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/postcss-selector-parser@6.0.10:
|
||||||
|
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
|
||||||
|
engines: {node: '>=4'}
|
||||||
|
dependencies:
|
||||||
|
cssesc: 3.0.0
|
||||||
|
util-deprecate: 1.0.2
|
||||||
|
dev: false
|
||||||
|
|
||||||
/postcss-selector-parser@6.0.13:
|
/postcss-selector-parser@6.0.13:
|
||||||
resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
|
resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
|
@ -2545,6 +2614,14 @@ packages:
|
||||||
resolution: {integrity: sha512-tRtRN22TDokGi2TuYSvuHQuuW6BJ/zlUEG+iYpAQ9i66msc/0eU/+HPccbPnNNH0mCPp0Ob8thaC8Uy9CxHitQ==}
|
resolution: {integrity: sha512-tRtRN22TDokGi2TuYSvuHQuuW6BJ/zlUEG+iYpAQ9i66msc/0eU/+HPccbPnNNH0mCPp0Ob8thaC8Uy9CxHitQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/tailwindcss-animate@1.0.6(tailwindcss@3.3.2):
|
||||||
|
resolution: {integrity: sha512-4WigSGMvbl3gCCact62ZvOngA+PRqhAn7si3TQ3/ZuPuQZcIEtVap+ENSXbzWhpojKB8CpvnIsrwBu8/RnHtuw==}
|
||||||
|
peerDependencies:
|
||||||
|
tailwindcss: '>=3.0.0 || insiders'
|
||||||
|
dependencies:
|
||||||
|
tailwindcss: 3.3.2
|
||||||
|
dev: false
|
||||||
|
|
||||||
/tailwindcss@3.3.2:
|
/tailwindcss@3.3.2:
|
||||||
resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==}
|
resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==}
|
||||||
engines: {node: '>=14.0.0'}
|
engines: {node: '>=14.0.0'}
|
||||||
|
@ -2767,7 +2844,3 @@ packages:
|
||||||
/zod@3.21.4:
|
/zod@3.21.4:
|
||||||
resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
|
resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
settings:
|
|
||||||
autoInstallPeers: true
|
|
||||||
excludeLinksFromLockfile: false
|
|
||||||
|
|
BIN
public/android-chrome-192x192.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
public/android-chrome-512x512.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
public/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
public/favicon-16x16.png
Normal file
After Width: | Height: | Size: 920 B |
BIN
public/favicon-32x32.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
public/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
|
@ -1,8 +1,8 @@
|
||||||
<svg width="13" height="13" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="13" height="13" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path
|
<path
|
||||||
d="M4 12C5.65685 12 7 10.6569 7 9C7 7.34315 5.65685 6 4 6C2.34315 6 1 7.34315 1 9C1 10.6569 2.34315 12 4 12Z"
|
d="M4 12C5.65685 12 7 10.6569 7 9C7 7.34315 5.65685 6 4 6C2.34315 6 1 7.34315 1 9C1 10.6569 2.34315 12 4 12Z"
|
||||||
stroke="#D9D9D9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
<path d="M1 4V12" stroke="#D9D9D9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
<path d="M1 4V12" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
<path
|
<path
|
||||||
d="M9 1L8.36667 2.93333C8.33424 3.03374 8.27844 3.12501 8.20386 3.19965C8.12928 3.27429 8.03805 3.33016 7.93767 3.36267L6 4L7.93333 4.63333C8.03374 4.66576 8.12501 4.72156 8.19965 4.79614C8.27429 4.87072 8.33016 4.96195 8.36267 5.06233L9 7L9.63333 5.06667C9.66576 4.96626 9.72156 4.87499 9.79614 4.80035C9.87072 4.72571 9.96195 4.66984 10.0623 4.63733L12 4L10.0667 3.36667C9.96626 3.33424 9.87499 3.27844 9.80035 3.20386C9.72571 3.12928 9.66984 3.03805 9.63733 2.93767L9 1Z"
|
d="M9 1L8.36667 2.93333C8.33424 3.03374 8.27844 3.12501 8.20386 3.19965C8.12928 3.27429 8.03805 3.33016 7.93767 3.36267L6 4L7.93333 4.63333C8.03374 4.66576 8.12501 4.72156 8.19965 4.79614C8.27429 4.87072 8.33016 4.96195 8.36267 5.06233L9 7L9.63333 5.06667C9.66576 4.96626 9.72156 4.87499 9.79614 4.80035C9.87072 4.72571 9.96195 4.66984 10.0623 4.63733L12 4L10.0667 3.36667C9.96626 3.33424 9.87499 3.27844 9.80035 3.20386C9.72571 3.12928 9.66984 3.03805 9.63733 2.93767L9 1Z"
|
||||||
stroke="#EAAF17" stroke-linecap="round" stroke-linejoin="round" />
|
stroke="#EAAF17" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
|
Before Width: | Height: | Size: 975 B After Width: | Height: | Size: 975 B |
BIN
public/og.jpg
Normal file
After Width: | Height: | Size: 112 KiB |
19
public/site.webmanifest
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"name": "hellob.art",
|
||||||
|
"short_name": "hellob.art",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/android-chrome-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/android-chrome-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"theme_color": "#5c5c5c",
|
||||||
|
"background_color": "#5c5c5c",
|
||||||
|
"display": "standalone"
|
||||||
|
}
|
81
styles/globals.css
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
|
@layer base {
|
||||||
|
:root {
|
||||||
|
--background: 0 0% 100%;
|
||||||
|
--foreground: 222.2 47.4% 11.2%;
|
||||||
|
|
||||||
|
--muted: 210 40% 96.1%;
|
||||||
|
--muted-foreground: 215.4 16.3% 46.9%;
|
||||||
|
|
||||||
|
--popover: 0 0% 100%;
|
||||||
|
--popover-foreground: 222.2 47.4% 11.2%;
|
||||||
|
|
||||||
|
--border: 214.3 31.8% 91.4%;
|
||||||
|
--input: 214.3 31.8% 91.4%;
|
||||||
|
|
||||||
|
--card: 0 0% 100%;
|
||||||
|
--card-foreground: 222.2 47.4% 11.2%;
|
||||||
|
|
||||||
|
--primary: 222.2 47.4% 11.2%;
|
||||||
|
--primary-foreground: 210 40% 98%;
|
||||||
|
|
||||||
|
--secondary: 210 40% 96.1%;
|
||||||
|
--secondary-foreground: 222.2 47.4% 11.2%;
|
||||||
|
|
||||||
|
--accent: 210 40% 96.1%;
|
||||||
|
--accent-foreground: 222.2 47.4% 11.2%;
|
||||||
|
|
||||||
|
--destructive: 0 100% 50%;
|
||||||
|
--destructive-foreground: 210 40% 98%;
|
||||||
|
|
||||||
|
--ring: 215 20.2% 65.1%;
|
||||||
|
|
||||||
|
--radius: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark {
|
||||||
|
--background: 224 71% 4%;
|
||||||
|
--foreground: 213 31% 91%;
|
||||||
|
|
||||||
|
--muted: 223 47% 11%;
|
||||||
|
--muted-foreground: 215.4 16.3% 56.9%;
|
||||||
|
|
||||||
|
--accent: 216 34% 17%;
|
||||||
|
--accent-foreground: 210 40% 98%;
|
||||||
|
|
||||||
|
--popover: 224 71% 4%;
|
||||||
|
--popover-foreground: 215 20.2% 65.1%;
|
||||||
|
|
||||||
|
--border: 216 34% 17%;
|
||||||
|
--input: 216 34% 17%;
|
||||||
|
|
||||||
|
--card: 224 71% 4%;
|
||||||
|
--card-foreground: 213 31% 91%;
|
||||||
|
|
||||||
|
--primary: 210 40% 98%;
|
||||||
|
--primary-foreground: 222.2 47.4% 1.2%;
|
||||||
|
|
||||||
|
--secondary: 222.2 47.4% 11.2%;
|
||||||
|
--secondary-foreground: 210 40% 98%;
|
||||||
|
|
||||||
|
--destructive: 0 63% 31%;
|
||||||
|
--destructive-foreground: 210 40% 98%;
|
||||||
|
|
||||||
|
--ring: 216 34% 17%;
|
||||||
|
|
||||||
|
--radius: 0.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@layer base {
|
||||||
|
* {
|
||||||
|
@apply border-border;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
@apply bg-background text-foreground;
|
||||||
|
font-feature-settings: "rlig" 1, "calt" 1;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,36 +1,82 @@
|
||||||
const { fontFamily } = require("tailwindcss/defaultTheme");
|
const { fontFamily } = require("tailwindcss/defaultTheme");
|
||||||
const colors = require("tailwindcss/colors");
|
|
||||||
|
|
||||||
/** @type {import('tailwindcss').Config} */
|
/** @type {import('tailwindcss').Config} */
|
||||||
module.exports = {
|
module.exports = {
|
||||||
content: [
|
content: [
|
||||||
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
|
"./app/**/*.{ts,tsx}",
|
||||||
"./components/**/*.{js,ts,jsx,tsx,mdx}",
|
"./components/**/*.{ts,tsx}",
|
||||||
"./app/**/*.{js,ts,jsx,tsx,mdx}",
|
"./ui/**/*.{ts,tsx}",
|
||||||
|
"./content/**/*.{md,mdx}",
|
||||||
],
|
],
|
||||||
|
darkMode: ["class"],
|
||||||
theme: {
|
theme: {
|
||||||
container: {
|
container: {
|
||||||
center: true,
|
center: true,
|
||||||
padding: "1.5rem",
|
padding: "2rem",
|
||||||
screens: {
|
screens: {
|
||||||
"2xl": "1440px",
|
"2xl": "1400px",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
extend: {
|
extend: {
|
||||||
colors: {
|
colors: {
|
||||||
primary: colors.zinc,
|
border: "hsl(var(--border))",
|
||||||
|
input: "hsl(var(--input))",
|
||||||
|
ring: "hsl(var(--ring))",
|
||||||
|
background: "hsl(var(--background))",
|
||||||
|
foreground: "hsl(var(--foreground))",
|
||||||
|
primary: {
|
||||||
|
DEFAULT: "hsl(var(--primary))",
|
||||||
|
foreground: "hsl(var(--primary-foreground))",
|
||||||
|
},
|
||||||
|
secondary: {
|
||||||
|
DEFAULT: "hsl(var(--secondary))",
|
||||||
|
foreground: "hsl(var(--secondary-foreground))",
|
||||||
|
},
|
||||||
|
destructive: {
|
||||||
|
DEFAULT: "hsl(var(--destructive))",
|
||||||
|
foreground: "hsl(var(--destructive-foreground))",
|
||||||
|
},
|
||||||
|
muted: {
|
||||||
|
DEFAULT: "hsl(var(--muted))",
|
||||||
|
foreground: "hsl(var(--muted-foreground))",
|
||||||
|
},
|
||||||
|
accent: {
|
||||||
|
DEFAULT: "hsl(var(--accent))",
|
||||||
|
foreground: "hsl(var(--accent-foreground))",
|
||||||
|
},
|
||||||
|
popover: {
|
||||||
|
DEFAULT: "hsl(var(--popover))",
|
||||||
|
foreground: "hsl(var(--popover-foreground))",
|
||||||
|
},
|
||||||
|
card: {
|
||||||
|
DEFAULT: "hsl(var(--card))",
|
||||||
|
foreground: "hsl(var(--card-foreground))",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
borderRadius: {
|
||||||
|
lg: `var(--radius)`,
|
||||||
|
md: `calc(var(--radius) - 2px)`,
|
||||||
|
sm: "calc(var(--radius) - 4px)",
|
||||||
},
|
},
|
||||||
fontFamily: {
|
fontFamily: {
|
||||||
sans: ["Inter", "var(--font-inter)", ...fontFamily.sans],
|
sans: ["var(--font-sans)", ...fontFamily.sans],
|
||||||
display: ["Fjalla One", "var(--font-fjalla-one)"],
|
heading: ["var(--font-heading)", ...fontFamily.sans],
|
||||||
},
|
},
|
||||||
backgroundImage: {
|
keyframes: {
|
||||||
"gradient-radial": "radial-gradient(var(--tw-gradient-stops))",
|
"accordion-down": {
|
||||||
"gradient-conic":
|
from: { height: 0 },
|
||||||
"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))",
|
to: { height: "var(--radix-accordion-content-height)" },
|
||||||
filter: "brightness(120%) saturate(120%) blur(2px)",
|
},
|
||||||
|
"accordion-up": {
|
||||||
|
from: { height: "var(--radix-accordion-content-height)" },
|
||||||
|
to: { height: 0 },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
animation: {
|
||||||
|
"accordion-down": "accordion-down 0.2s ease-out",
|
||||||
|
"accordion-up": "accordion-up 0.2s ease-out",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins: [],
|
plugins: [require("tailwindcss-animate"), require("@tailwindcss/typography")],
|
||||||
};
|
};
|
||||||
|
|