Loading repository data…
Loading repository data…
arnobt78 / repository
A modern, single-page portfolio template built with Next.js 14, React 18, and TypeScript. It showcases a full landing experience with a hero, bento grid, projects, testimonials, experience, approach, contact—with smooth animations, a 3D globe, & reusable UI components. Ideal for learning Next.js App Router, Framer Motion, Three.js/React Three Fiber
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
A modern, single-page portfolio template built with Next.js 14, React 18, and TypeScript. It showcases a full landing experience with a hero, bento grid, projects, testimonials, experience, approach, and contact—with smooth animations, a 3D globe, and reusable UI components. Ideal for learning Next.js App Router, Framer Motion, Three.js/React Three Fiber, and Tailwind CSS.
Live Demo: https://portfolio-ui-1.vercel.app/
This repository is a frontend-only portfolio template. It has no custom backend or API—all content is driven by static data in data/index.ts. The app is a single scrollable page with section IDs for in-page navigation (#about, #projects, #testimonials, #contact). It uses the Next.js App Router (app/), client components where interactivity is needed, and server-rendered layout and metadata for SEO. The UI is built from modular components (Hero, Bento Grid, Projects, Testimonials, Experience, Approach, Footer) that you can reuse or remove in your own projects.
| Feature | Description |
|---|---|
| Hero | Spotlight backgrounds, grid overlay, animated headline (word-by-word), tagline, and CTA button linking to #about. |
| Floating Nav | Fixed top navigation that hides on scroll-down and reappears on scroll-up or near top; links to #about, #projects, #testimonials, #contact. |
| Bento Grid (About) | Responsive grid of cards: images, 3D globe (Three.js), tech stack labels, and a “Copy email” cell with Lottie confetti. |
| Recent Projects | Project cards with 3D tilt on hover (Pin component), cover image, title, description, tech icons, and “Check Live Site” link. |
| Testimonials | Horizontally scrolling infinite carousel of client quotes plus a row of company logos. |
| Experience | Grid of work experience cards with animated gradient borders (MovingBorders). |
| Approach | Three phase cards; on hover, a canvas dot-matrix effect (WebGL shader) reveals and shows phase title + description. |
| Footer | CTA heading, email button, copyright, and social icons. |
| Theme | Dark/light/system via next-themes (ThemeProvider in app/provider.tsx). |
| SEO | Metadata (title, description, Open Graph, Twitter, keywords, favicon) in app/layout.tsx. |
black-100, purple, white-100)lib/utils.ts – cn()), next-themesnpm run deploy)portfolio-ui-1/
├── app/
│ ├── layout.tsx # Root layout: font, metadata, ThemeProvider, favicon
│ ├── page.tsx # Home page: composes all sections (client)
│ ├── globals.css # Tailwind + base styles, :root/.dark vars, .heading
│ ├── provider.tsx # next-themes ThemeProvider (client)
│ └── global-error.jsx # Root error boundary (own <html>/<body>)
├── components/
│ ├── Hero.tsx # Hero section
│ ├── Grid.tsx # About / bento grid section
│ ├── RecentProjects.tsx # Projects section
│ ├── Clients.tsx # Testimonials + company logos
│ ├── Experience.tsx # Work experience cards
│ ├── Approach.tsx # Three phase cards + canvas reveal
│ ├── Footer.tsx # Contact + CTA + social
│ ├── MagicButton.tsx # Button with conic-gradient border
│ └── ui/
│ ├── FloatingNavbar.tsx # Scroll-aware fixed nav
│ ├── BentoGrid.tsx # Bento layout + BentoGridItem (globe, copy-email, etc.)
│ ├── Spotlight.tsx # SVG spotlight for hero
│ ├── TextGenerateEffect.tsx # Staggered word animation
│ ├── InfiniteCards.tsx # Infinite horizontal testimonial scroll
│ ├── MovingBorders.tsx # Animated border wrapper (Button + MovingBorder)
│ ├── Pin.tsx # 3D tilt card (PinContainer, PinPerspective)
│ ├── GridGlobe.tsx # Wrapper for Globe (dynamic import, no SSR)
│ ├── Globe.tsx # Three-globe: arcs, points, rings
│ ├── GradientBg.tsx # Animated gradient background
│ ├── CanvasRevealEffect.tsx # WebGL dot-matrix reveal
│ ├── HoverBorder.tsx # Gradient border on hover/rotate
│ └── LayoutGrid.tsx # Optional grid with expandable cards
├── data/
│ ├── index.ts # navItems, gridItems, projects, testimonials, companies, workExperience, socialMedia
│ ├── globe.json # GeoJSON for globe countries
│ └── confetti.json # Lottie animation for copy-email
├── lib/
│ └── utils.ts # cn() – class name merger (clsx + tailwind-merge)
├── public/ # Static assets (images, SVGs, favicon)
├── .env.example # Sentry and optional env vars
├── next.config.mjs # Images, webpack (canvas external, .mjs)
├── tailwind.config.ts # Theme, keyframes, bg-grid/bg-dot plugins
├── tsconfig.json
└── package.json
git clone https://github.com/your-username/portfolio-ui-1.git
cd portfolio-ui-1
npm install
Copy the example env file:
cp .env.example .env.local
Edit .env.local and add any required values (see Environment Variables). The app runs without env vars; Sentry is optional.
npm run dev
Open http://localhost:3000. The single page loads with all sections; use the top nav to jump to #about, #projects, #testimonials, #contact.
npm run build
npm run start
The project can run with no environment variables. All content is static. The following are optional and mainly for error monitoring (Sentry).
| Variable | Required | Description |
|---|---|---|
SENTRY_AUTH_TOKEN | No | Sentry auth token for uploading source maps. Get it from Sentry API Auth Tokens. |
SENTRY_ORG | No | Your Sentry organization slug (from dashboard URL). |
SENTRY_PROJECT | No | Your Sentry project slug. |
NEXT_PUBLIC_SENTRY_DSN | No | Sentry DSN for client-side error reporting. From Project Keys. |
NODE_ENV | No | Usually set by Next.js (development / production). |
How to get Sentry variables (optional):
SENTRY_AUTH_TOKEN.https://sentry.io/organizations/[org]/projects/[project]/ copy org and project into SENTRY_ORG and SENTRY_PROJECT.NEXT_PUBLIC_SENTRY_DSN if you want client-side reporting.Example .env.local (minimal – app works without these):
# Optional: Sentry (only if you integrate Sentry in the app)
# SENTRY_AUTH_TOKEN=your-token
# SENTRY_ORG=your-org
# SENTRY_PROJECT=your-project
# NEXT_PUBLIC_SENTRY_DSN=https://xxx@sentry.io/xxx
| Script | Command | Purpose |
|---|---|---|
| dev | npm run dev | Start Next.js dev server (default port 3000). |
| build | npm run build | Production build. |
| start | npm run start | Run production server (after build). |
| lint | npm run lint | Run ESLint. |
| deploy | npm run deploy | Deploy to Vercel production (vercel --prod). |
This app has one route: the root / (home). There are no /api/* or other route segments.
/ – Renders app/page.tsx, which is a client c