A modern, terminal-based portfolio website built with Next.js, TypeScript, and deployed as a static site to GitHub Pages.
Visit the live portfolio at: https://andrese03.github.io
Type these commands in the terminal:
help - Show available commandswhoami - About Andrés Encarnaciónprojects - List all projectscontact - Show contact informationclear - Clear the terminalClone the repository:
git clone https://github.com/andrese03/andrese03.github.io.git
cd andrese03.github.io
Install dependencies:
npm install
Run development server:
npm run dev
Build for production:
npm run build
Serve static files locally:
npm start
Create a .env.local file for local development:
NEXT_PUBLIC_SHEET_API_BASE=https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec
To set up dynamic data from Google Sheets:
Create a Google Apps Script with the following code:
function doGet(e) {
const tab = e.parameter.t || 'projects';
const sheet = SpreadsheetApp.openById('YOUR_SPREADSHEET_ID');
const data = sheet.getSheetByName(tab);
const rows = data.getDataRange().getValues();
const headers = rows[0];
const result = rows.slice(1).map(row => {
const obj = {};
headers.forEach((header, index) => {
obj[header] = row[index];
});
return obj;
});
return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(
ContentService.MimeType.JSON
);
}
Deploy as Web App with execute permissions for “Anyone”
Update your environment with the deployment URL
Create sheets with these tabs and columns:
The project is configured for automatic deployment to GitHub Pages:
out/ directoryFor manual deployment:
npm run build
# Commit and push the generated files
├── app/ # Next.js App Router
│ ├── layout.tsx # Root layout with metadata
│ ├── page.tsx # Homepage
│ ├── not-found.tsx # 404 page
│ └── globals.css # Global styles with Tailwind
├── components/ # React components
│ └── SimpleTerminal.tsx # Terminal interface
├── lib/ # Utility libraries
│ ├── api.ts # Data layer with Google Sheets integration
│ └── commands.ts # Command processor (advanced version)
├── types/ # TypeScript type definitions
│ └── index.ts # Project types
├── public/ # Static assets
│ ├── images/ # Images and icons
│ ├── favicon.ico # Favicon
│ └── manifest.json # Web app manifest
└── out/ # Generated static files (after build)
Edit components/SimpleTerminal.tsx and add to the processCommand function:
case 'newcommand':
return [
'Your command output here',
'Multiple lines supported'
];
Themes are defined in the terminal component. Modify the getThemeClasses function to add new color schemes.
The API layer in lib/api.ts supports multiple data sources. Add new endpoints or modify the mock data as needed.
development: Active development branchmain: Production branch for GitHub Pages deploymentThis project is open source and available under the MIT License.
Built with ❤️ by Andrés Encarnación