- To get started, edit the page.tsx file. -
-- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. -
-+ {config.profile.name} +
++ {config.profile.desc} +
+diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9ff273c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,15 @@ +node_modules +.next +dist +.env.local +.git +.gitignore +npm-debug.log +yarn-debug.log +yarn-error.log +.DS_Store +*.db +*.db-shm +*.db-wal +tsconfig.tsbuildinfo +.chunk-cache \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0461e13 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM oven/bun:latest + +WORKDIR /app +COPY package.json bun.lock ./ +RUN bun install +COPY . . +RUN bun run build +EXPOSE 3000 +CMD ["bun", "start"] \ No newline at end of file diff --git a/app/favicon.ico b/app/favicon.ico index 718d6fe..ace55a0 100644 Binary files a/app/favicon.ico and b/app/favicon.ico differ diff --git a/app/globals.css b/app/globals.css index a2dc41e..4f83d84 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,26 +1,130 @@ @import "tailwindcss"; +@import "tw-animate-css"; +@import "shadcn/tailwind.css"; -:root { - --background: #ffffff; - --foreground: #171717; -} +@custom-variant dark (&:is(.dark *)); @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); + --font-sans: var(--font-sans); --font-mono: var(--font-geist-mono); + --font-heading: var(--font-sans); + --color-sidebar-ring: var(--sidebar-ring); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar: var(--sidebar); + --color-chart-5: var(--chart-5); + --color-chart-4: var(--chart-4); + --color-chart-3: var(--chart-3); + --color-chart-2: var(--chart-2); + --color-chart-1: var(--chart-1); + --color-ring: var(--ring); + --color-input: var(--input); + --color-border: var(--border); + --color-destructive: var(--destructive); + --color-accent-foreground: var(--accent-foreground); + --color-accent: var(--accent); + --color-muted-foreground: var(--muted-foreground); + --color-muted: var(--muted); + --color-secondary-foreground: var(--secondary-foreground); + --color-secondary: var(--secondary); + --color-primary-foreground: var(--primary-foreground); + --color-primary: var(--primary); + --color-popover-foreground: var(--popover-foreground); + --color-popover: var(--popover); + --color-card-foreground: var(--card-foreground); + --color-card: var(--card); + --radius-sm: calc(var(--radius) * 0.6); + --radius-md: calc(var(--radius) * 0.8); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) * 1.4); + --radius-2xl: calc(var(--radius) * 1.8); + --radius-3xl: calc(var(--radius) * 2.2); + --radius-4xl: calc(var(--radius) * 2.6); } -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; +:root { + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.518 0.253 323.949); + --primary-foreground: oklch(0.977 0.017 320.058); + --secondary: oklch(0.967 0.001 286.375); + --secondary-foreground: oklch(0.21 0.006 285.885); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --chart-1: oklch(0.833 0.145 321.434); + --chart-2: oklch(0.667 0.295 322.15); + --chart-3: oklch(0.591 0.293 322.896); + --chart-4: oklch(0.518 0.253 323.949); + --chart-5: oklch(0.452 0.211 324.591); + --radius: 0.625rem; + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.591 0.293 322.896); + --sidebar-primary-foreground: oklch(0.977 0.017 320.058); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.205 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.205 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.452 0.211 324.591); + --primary-foreground: oklch(0.977 0.017 320.058); + --secondary: oklch(0.274 0.006 286.033); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.556 0 0); + --chart-1: oklch(0.833 0.145 321.434); + --chart-2: oklch(0.667 0.295 322.15); + --chart-3: oklch(0.591 0.293 322.896); + --chart-4: oklch(0.518 0.253 323.949); + --chart-5: oklch(0.452 0.211 324.591); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.667 0.295 322.15); + --sidebar-primary-foreground: oklch(0.977 0.017 320.058); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.556 0 0); +} + +@layer base { + * { + @apply border-border outline-ring/50; } -} - -body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; -} + body { + @apply bg-background text-foreground; + } + html { + @apply font-sans; + } +} \ No newline at end of file diff --git a/app/layout.tsx b/app/layout.tsx index 976eb90..24d8225 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,20 +1,22 @@ import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; +import { Geist, Anuphan } from "next/font/google"; import "./globals.css"; +import { cn } from "@/lib/utils"; const geistSans = Geist({ variable: "--font-geist-sans", subsets: ["latin"], }); -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], +const anuphan = Anuphan({ + variable: "--font-anuphan", + subsets: ["latin", "thai"], + display: "swap", }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "Erika", + description: "Erika's website", }; export default function RootLayout({ @@ -25,9 +27,11 @@ export default function RootLayout({ return ( -
{children} + + {children} + ); } diff --git a/app/page.tsx b/app/page.tsx index 3f36f7c..23c7833 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,65 +1,74 @@ +import { config } from "@/lib/config"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader } from "@/components/ui/card"; import Image from "next/image"; +import Link from "next/link"; +import ShaderBackground from "@/components/ShaderBackground"; export default function Home() { return ( -- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. -
-+ {config.profile.desc} +
+