A modern web portfolio/site built with Next.js (App Router) and React. It uses Tailwind CSS v4 for styling, GSAP for animations, and Lenis for smooth scrolling. The codebase mixes TypeScript support with predominantly JSX components.
This README documents the stack, requirements, setup, commands, project structure, and outstanding TODOs.
- Framework: Next.js 16 (App Router)
- UI: React 19
- Styling: Tailwind CSS v4, PostCSS
- Animations: GSAP (@gsap/react, ScrollTrigger, CustomEase), Lenis smooth scrolling
- Icons: lucide-react, react-icons
- Transitions: next-view-transitions, motion
- Language: JavaScript/TypeScript (TypeScript config present; many components are .jsx)
- Linting/Formatting: ESLint 9, eslint-config-next, Prettier
- Node.js: 18.18+ (recommended 20 LTS or newer)
- Note: Exact engines are not pinned in package.json. TODO: Add
enginesfield once the team finalizes target Node version.
- Note: Exact engines are not pinned in package.json. TODO: Add
- npm (package-lock.json present, indicating npm is the package manager)
- Install dependencies
npm install- Run the development server
npm run devThen open http://localhost:3000 in your browser.
- Build for production
npm run build- Start the production server (after build)
npm run startDefined in package.json:
- dev: next dev
- build: next build
- start: next start
- lint: eslint
Top-level directories and notable files:
.
├─ app/ # Next.js App Router (routes, pages, layouts)
│ ├─ page.tsx # Home route (/)
│ ├─ work/page.jsx # /work
│ ├─ contact/page.jsx # /contact
│ ├─ archive/page.jsx # /archive
│ ├─ sample-project/page.jsx # /sample-project
│ └─ studio/page.jsx # /studio
├─ components/ # Reusable UI components (Copy, Menu, etc.)
├─ contants/ # Project constants (e.g., portfolio.js) [sic]
├─ lib/ # Utility modules (if any present)
├─ public/ # Static assets (images, icons, etc.)
├─ client-layout.js # Client-side layout wrapper with Lenis & Menu
├─ next.config.ts # Next.js configuration
├─ tsconfig.json # TypeScript configuration
├─ eslint.config.mjs # ESLint configuration
├─ postcss.config.mjs # PostCSS configuration
├─ components.json # Component tooling config (if applicable)
├─ package.json # Scripts and dependencies
├─ package-lock.json # npm lockfile (indicates npm usage)
└─ README.md
- Primary entry: app/page.tsx (client component using GSAP animations and a preloader)
- Additional routes: app/work/page.jsx, app/contact/page.jsx, app/archive/page.jsx, app/sample-project/page.jsx, app/studio/page.jsx
- Client layout helper: client-layout.js wraps children with ReactLenis and includes the Menu component
- next.config.ts currently sets
typescript.ignoreBuildErrors: trueto avoid type-check build failures. TODO: Revisit once type coverage improves. - Tailwind CSS v4 is configured (postcss + tailwind packages present). Styles are declared in app/globals.css and component-level classNames.
- ESLint 9 with
eslint-config-nextis available vianpm run lint.
No environment variables are currently referenced in the repository.
- TODO: If/when env vars are introduced, document them here and in a
.env.examplefile.
No test framework or tests were found in this repository.
- TODO: Add tests (e.g., Jest/Vitest for unit tests, Playwright/Cypress for E2E) and document how to run them.
- This project uses both .tsx and .jsx files. TypeScript support exists, but many components are plain JSX.
- Animations rely on GSAP and may access the DOM; ensure components using GSAP are client components ("use client").
- Smooth scrolling is handled by Lenis (see client-layout.js). Review settings for mobile vs desktop behavior.
- Any Node-capable host that supports Next.js can be used.
- Vercel is a common choice for Next.js deployments. See Next.js docs for deployment guides: https://nextjs.org/docs/app/building-your-application/deploying
- Note on peer dependency conflicts during deploy: This project currently uses React 19 while
next-view-transitions@0.3.4declares a peer on React ^18. To prevent install failures in CI/CD, an.npmrcis included withlegacy-peer-deps=true(andstrict-peer-deps=false). Most hosts (including Vercel when using npm) will honor this and proceed with install/build. If you prefer strict installs, either downgrade React to 18.x or remove/replacenext-view-transitions.
No license file detected in the repository.
- TODO: Add a LICENSE file (e.g., MIT, Apache-2.0) and update this section accordingly.