A minimal, terminal-style personal portfolio built with Next.js and TypeScript.
This project presents a developer portfolio as an interactive CLI/terminal experience in the browser. It uses a small set of focused React components to emulate a terminal interface and showcase projects, links, and quick commands.
- Terminal-like UX with interactive commands
- Lightweight Next.js + React app (TypeScript-ready)
- Reusable components:
Terminal,Monitor,QuickCommands,MatrixRain - Content driven by
lib/portfolio-data.tsandlib/commands.ts
Run locally (instructions below) to explore the interactive portfolio at http://localhost:3000.
- Node.js 18+ (or the version compatible with Next.js 16)
- npm, yarn, or pnpm
- Clone the repository
git clone <repo-url>
cd cli-folio
- Install dependencies
npm install
# or `yarn` / `pnpm install`
- Run the development server
npm run dev
# open http://localhost:3000
- Build for production
npm run build
npm start
Quick Docker steps to build and run this project.
-
Prerequisite: install Docker Desktop (or Docker Engine) on your machine.
-
Build the image (from repo root):
docker build -t cli-folio .
- Run the image (production/static build, serves on port 3000):
docker run --rm -p 3000:3000 cli-folio
# then open http://localhost:3000
app/— Next.js app routes and page entrypointscomponents/— UI components used to build the terminal experienceTerminal.tsx,TerminalWrapper.tsx— terminal UI and glueQuickCommands.tsx— predefined quick actions and shortcutsMatrixRain.tsx,Monitor.tsx— visual/ornamental components
lib/— small utilities and datacommands.ts— CLI command handlersportfolio-data.ts— portfolio content (projects, links, metadata)
public/— static assets
- The UI is intentionally minimal and component-driven — adapt
lib/portfolio-data.tsto update content without changing components. - Commands are defined and wired in
lib/commands.ts— add new commands by exporting handlers and mapping them into the terminal command registry. - Styling uses Tailwind CSS; check
postcss.config.mjsandtailwind.configif you extend styles.
Run the linter with:
npm run lint