diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 626a3f8..f668905 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -1,8 +1,12 @@ { "permissions": { "allow": [ - "Bash(node -e \"const l = require\\(''lucide-react''\\); console.log\\(Object.keys\\(l\\).filter\\(k => k.toLowerCase\\(\\).includes\\(''github''\\) || k.toLowerCase\\(\\).includes\\(''linkedin''\\)\\)\\)\")", - "Bash(node -e \"const l = require\\(''lucide-react''\\); console.log\\(l.Github === l.GithubIcon, l.Linkedin === l.LinkedinIcon\\)\")" + "Bash(*)", + "Edit(*)", + "Write(*)", + "Read(*)", + "Glob(*)", + "Grep(*)" ] } } \ No newline at end of file diff --git a/README.md b/README.md index e215bc4..0dad8c0 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,28 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). +# andsang.github.io -## Getting Started +Personal portfolio site for Andrés Sánchez. Built with Next.js (App Router, TypeScript, Tailwind CSS), deployed to GitHub Pages as a static export. -First, run the development server: +## Dev ```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev +npx next dev --port 3000 --webpack ``` -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. +> Use `--webpack` — Turbopack panics with `output: 'export'` mode in Next.js 16. -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. +Open [http://localhost:3000](http://localhost:3000). -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. +## Build -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! +```bash +npm run build +``` -## Deploy on Vercel +Outputs to `out/` via static export. -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. +## Stack -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. +- Next.js 16 (App Router, static export) +- TypeScript +- Tailwind CSS +- Clean Architecture (entities → use cases → interface adapters → infrastructure) diff --git a/app/globals.css b/app/globals.css index 3a43e6a..eaaf94e 100644 --- a/app/globals.css +++ b/app/globals.css @@ -18,6 +18,12 @@ --foreground: #171717; --accent: #6366f1; --secondary: #10b981; + --blob-primary: #06e2ff; + /* suit blue — hue 220°, full saturation */ + --blob-secondary: #d97706; + /* tie gold — hue 38°, full saturation */ + --blob-tertiary: #9333ea; + /* shirt lavender — hue 285°, full saturation */ } /* Dark Theme (Class-based) */ @@ -35,7 +41,15 @@ body { @layer components { .glass-card { - @apply bg-white/5 backdrop-blur-md border border-white/10 rounded-2xl shadow-2xl; + @apply bg-zinc-100/80 dark:bg-zinc-900/40 backdrop-blur-2xl backdrop-saturate-150 border border-zinc-200 dark:border-white/10 rounded-2xl shadow-lg shadow-black/8 dark:shadow-black/25 ring-1 ring-inset ring-zinc-100 dark:ring-white/5; + } + + .no-scrollbar { + scrollbar-width: none; + -ms-overflow-style: none; + } + .no-scrollbar::-webkit-scrollbar { + display: none; } } @@ -43,4 +57,57 @@ body { 100% { transform: translateX(200%); } +} + +@keyframes floatFluid { + 0% { + transform: translate(0, 0) scale(1) rotate(0deg); + } + + 100% { + transform: translate(30px, 50px) scale(1.1) rotate(10deg); + } +} + +.fluid-shape { + position: absolute; + border-radius: 50%; + filter: blur(50px); + opacity: 0.8; + animation: floatFluid 20s cubic-bezier(0.4, 0, 0.2, 1) infinite alternate; + pointer-events: none; +} + +.fluid-shape-1 { + width: 60vh; + height: 60vh; + top: -10%; + right: -10%; + background: radial-gradient(circle, var(--blob-primary), transparent 65%); + animation-delay: 0s; +} + +.fluid-shape-2 { + width: 50vh; + height: 50vh; + bottom: -10%; + left: -10%; + background: radial-gradient(circle, var(--blob-secondary), transparent 65%); + animation-delay: -5s; +} + +.fluid-shape-3 { + width: 30vh; + height: 30vh; + top: 40%; + left: 40%; + background: radial-gradient(circle, var(--blob-tertiary), transparent 65%); + animation-delay: -10s; + opacity: 0.65; +} + +@media (prefers-reduced-motion: reduce) { + .fluid-shape { + animation: none; + } } \ No newline at end of file diff --git a/app/layout.tsx b/app/layout.tsx index 8479e04..b854079 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -39,7 +39,7 @@ export default function RootLayout({
-