Interactive portfolio built with Next.js, React, TypeScript, and Tailwind CSS.
The site is designed as a terminal-first personal portfolio: visitors can type commands such as whoami, projects, experience, contact, or curl to explore the profile. Some commands open full-screen overlays for richer sections like projects and contact.
- Terminal-style landing page with command history and autocomplete
whoamisection with fastfetch-inspired profile outputprojectsoverlay with image cardscontactoverlay with social links and a minimal terminal-style message formexperiencecommand that groups both work experience and educationcurlcommand to download the CV directly- Static export configured for GitHub Pages
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS 4
- React Icons
- Catppuccin Mocha-inspired palette
Available terminal commands:
help- show available commandswhoami- profile / fastfetch-style summaryskills- technologies and stackprojects- open project gallery overlayexperience- work experience and educationcontact- open contact overlaycurl- download CV / resumeblog- blog sectionbanner- show ASCII bannerloadkeys en|es- switch languageclear- clear terminal outputsudo- easter egg
Requirements:
- Node.js
>=24 <25 pnpm 10.26.2
Install dependencies:
pnpm installStart the development server:
pnpm devOpen http://localhost:3000.
Other scripts:
pnpm build
pnpm start
pnpm lintapp/
components/
Terminal.tsx
commands/
blog.tsx
contact.tsx
education.tsx
experience.tsx
projects.tsx
skills.tsx
whoami.tsx
lib/
commands.tsx
data.ts
site.ts
types.ts
public/
pdf/
.github/workflows/
deploy-pages.yml
Key files:
app/components/Terminal.tsx- terminal shell, input handling, overlays, historyapp/lib/commands.tsx- command registry and command executionapp/lib/data.ts- all profile content in English and Spanishapp/components/commands/*.tsx- command output UIsapp/lib/site.ts- base-path aware helpers for GitHub Pagesnext.config.ts- static export and Pages configuration
Most portfolio content lives in:
app/lib/data.ts
This includes:
- profile summary
- achievements
- skills
- projects
- work experience
- education
- contact links
- CV URL
Command names and descriptions are defined in:
app/lib/commands.tsx
Main terminal shell:
app/components/Terminal.tsx
Global styles:
app/globals.css
Put your PDF in:
public/pdf/
Then update cvUrl in app/lib/data.ts.
Put project screenshots in public/image/ and update the image fields in app/lib/data.ts.
This project is already configured for static deployment to GitHub Pages.
What is included:
next.config.tsconfigured withoutput: "export"images.unoptimized = truefor static export- repo-aware
basePath/assetPrefix .github/workflows/deploy-pages.ymlworkflow for automatic deployment
In your repository:
- Go to
Settings->Pages - Under
Build and deployment, chooseGitHub Actions - Push to
main
The workflow will build the static export and publish it automatically.
For a standard project repository, the site would be available at:
https://<your-user>.github.io/website/
Because this repository is named 0xGeN02.github.io, GitHub Pages serves it from the root domain instead of a repo subpath. Your site URL is:
https://0xGeN02.github.io/
- The project uses a repo base path on GitHub Pages, so asset URLs should go through
withBasePath(...)when needed. next/imageis configured in unoptimized mode because GitHub Pages does not provide the Next.js image optimizer.- The production deployment is static, so anything requiring a backend should use an external service or a client-side fallback.
This repository currently has no explicit license. Add one if you want others to reuse the code.