A modern, terminal-inspired portfolio website built with Astro, featuring smooth animations, dark mode, and a unique command-line aesthetic.
- Astro (v4.16.0) - Static site generator with component islands architecture
- TypeScript (v5.6.2) - Type-safe development
- Tailwind CSS (v3.4.1) - Utility-first CSS framework
- @astrojs/tailwind (v5.1.0) - Astro integration for Tailwind
- IBM Plex Mono - Primary monospace font
- JetBrains Mono - Secondary monospace font for headings
- Space Grotesk - Sans-serif fallback
- @astrojs/check (v0.9.0) - Type checking for Astro projects
- Terminal-Inspired UI - Command-line aesthetic with terminal prompts and syntax
- Dark Mode - System preference detection with manual toggle, persisted via localStorage
- Smooth Animations - Scroll-triggered terminal command animations
- Sequential Content Loading - Projects and sections appear one-by-one after animations
- Responsive Design - Mobile-first approach with Tailwind breakpoints
- Terminal Loading Screen - Animated terminal commands on initial page load
- Page-Specific Loaders - Custom loading messages for different routes
- Scroll Animations - Intersection Observer API for scroll-triggered terminal animations
- Typewriter Effect - Animated "whoami" command in hero section
- Astro Content Collections - Type-safe markdown content for projects
- Dynamic Project Pages - Automatic routing from markdown files
- Project Ordering - Custom ordering system for featured projects
portfolio-site/
βββ public/ # Static assets
β βββ images/ # Images (profile, project thumbnails)
β βββ favicon.svg # Site favicon
β βββ robots.txt # SEO robots file
β
βββ src/
β βββ components/ # Astro components
β β βββ About.astro # About section with education
β β βββ Contact.astro # Contact information and links
β β βββ DarkModeToggle.astro # Dark mode toggle button
β β βββ Footer.astro # Site footer
β β βββ Header.astro # Navigation header
β β βββ Hero.astro # Hero section with animated whoami
β β βββ PageLoader.astro # Page-specific loading screen
β β βββ ProjectCard.astro # Individual project card component
β β βββ ProjectGrid.astro # Projects grid layout
β β βββ Skills.astro # Skills and technologies section
β β βββ TerminalAnimation.astro # Scroll-triggered terminal animations
β β βββ TerminalLoader.astro # Initial page loading screen
β β
β βββ content/ # Content collections
β β βββ config.ts # Content collection schema definitions
β β βββ projects/ # Project markdown files
β β
β βββ layouts/
β β βββ BaseLayout.astro # Base layout with theme initialization
β β
β βββ pages/ # File-based routing
β β βββ index.astro # Homepage
β β βββ projects/
β β βββ index.astro # Projects listing page
β β βββ [slug].astro # Dynamic project detail pages
β β
β βββ styles/
β βββ global.css # Global styles and Tailwind imports
β
βββ astro.config.mjs # Astro configuration
βββ tailwind.config.mjs # Tailwind CSS configuration
βββ tsconfig.json # TypeScript configuration
βββ package.json # Dependencies and scripts
βββ vercel.json # Vercel deployment configuration
βββ README.md # This file
- Node.js (v18 or higher recommended)
- npm or yarn
-
Clone the repository (or navigate to the project directory)
cd portfolio-site -
Install dependencies
npm install
-
Start the development server
npm run dev
-
Open your browser
- Navigate to
http://localhost:4321(Astro's default port)
- Navigate to
npm run dev- Start development server with hot module reloadnpm run build- Build for production (includes type checking)npm run preview- Preview the production build locallynpm run astro- Run Astro CLI commands
npm run buildThis command:
- Runs TypeScript type checking (
astro check) - Builds static HTML files to the
dist/directory - Optimizes assets and inlines critical CSS
The output is a fully static site that can be deployed to any static hosting service.
The project includes vercel.json configuration for easy deployment:
- Push your code to GitHub
- Import the project in Vercel
- Vercel will automatically detect the Astro framework and deploy
Configuration:
- Build Command:
npm run build - Output Directory:
dist - Framework:
astro - Region:
iad1(US East)
The dist/ folder contains static HTML, CSS, and JavaScript files that can be deployed to:
- Netlify
- GitHub Pages
- Cloudflare Pages
- AWS S3 + CloudFront
- Any static file hosting service
Scroll-triggered component that types terminal commands and reveals content sequentially. Uses Intersection Observer API for performance.
Features:
- Types commands character-by-character
- Shows output messages
- Triggers sequential content reveals
- Supports custom delays and target IDs
Initial page load animation that displays terminal commands before the main content appears.
Persistent dark mode toggle that:
- Respects system preferences
- Saves user preference to localStorage
- Prevents flash of unstyled content (FOUC)
Projects are managed through Astro's content collections system:
Schema Fields:
title- Project namedate- Publication datetags- Array of tag stringsstack- Technologies usedrepoUrl- GitHub repository (optional)liveUrl- Live demo URL (optional)demoVideoUrl- Video demo URL (optional)featured- Boolean for featured projectsheroImage- Path to project imagesummary- Short descriptionorder- Custom ordering number
This portfolio embraces a terminal/engineered aesthetic that reflects a developer's workflow:
- Monospace Typography - Code-like appearance
- Command-Line Prompts - Terminal-style UI elements
- Sequential Animations - Mimics terminal output
- Minimal Color Palette - Neutral grays with accent colors (green for prompts, blue for paths)
- Dark-First - Dark mode as the default experience
- Static site output
- Tailwind integration
- Auto-inline stylesheets for performance
- Site URL for SEO
- Class-based dark mode
- Custom font families
- Content paths for purging unused styles
- Extends Astro's strict TypeScript configuration
- Ensures type safety across the project
- Create a new markdown file in
src/content/projects/ - Use the following frontmatter structure:
---
title: "Project Name"
date: 2024-01-01
tags: ["tag1", "tag2"]
stack: ["Technology1", "Technology2"]
repoUrl: "https://github.com/username/repo"
liveUrl: "https://example.com"
heroImage: "/images/projects/project.svg"
summary: "Brief project description"
order: 1
featured: true
---
Your project description in markdown...- Add a project image to
public/images/projects/ - The project will automatically appear on the projects page
- Modern browsers (Chrome, Firefox, Safari, Edge)
- ES2020+ features
- CSS Grid and Flexbox
- Intersection Observer API
- LocalStorage API
This project is a personal portfolio website. All rights reserved.
Jake Estrada
- Email: liminal.innovations@gmail.com
- GitHub: @JakeEstrada
- LinkedIn: jake-estrada-03734a271
- Instagram: @jektesnek
Built with β€οΈ using Astro and Tailwind CSS