Skip to content

JakeEstrada/portfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

22 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Jake Estrada - Portfolio Website

A modern, terminal-inspired portfolio website built with Astro, featuring smooth animations, dark mode, and a unique command-line aesthetic.

πŸš€ Tech Stack

Core Framework

  • Astro (v4.16.0) - Static site generator with component islands architecture
  • TypeScript (v5.6.2) - Type-safe development

Styling

Typography

  • IBM Plex Mono - Primary monospace font
  • JetBrains Mono - Secondary monospace font for headings
  • Space Grotesk - Sans-serif fallback

Development Tools

  • @astrojs/check (v0.9.0) - Type checking for Astro projects

✨ Features

Design & UX

  • 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

Interactive Elements

  • 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

Content Management

  • 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

πŸ“ Project Structure

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

πŸ› οΈ Installation & Setup

Prerequisites

  • Node.js (v18 or higher recommended)
  • npm or yarn

Installation Steps

  1. Clone the repository (or navigate to the project directory)

    cd portfolio-site
  2. Install dependencies

    npm install
  3. Start the development server

    npm run dev
  4. Open your browser

    • Navigate to http://localhost:4321 (Astro's default port)

πŸ“œ Available Scripts

  • npm run dev - Start development server with hot module reload
  • npm run build - Build for production (includes type checking)
  • npm run preview - Preview the production build locally
  • npm run astro - Run Astro CLI commands

πŸ—οΈ Building for Production

npm run build

This command:

  1. Runs TypeScript type checking (astro check)
  2. Builds static HTML files to the dist/ directory
  3. Optimizes assets and inlines critical CSS

The output is a fully static site that can be deployed to any static hosting service.

🚒 Deployment

Vercel (Recommended)

The project includes vercel.json configuration for easy deployment:

  1. Push your code to GitHub
  2. Import the project in Vercel
  3. Vercel will automatically detect the Astro framework and deploy

Configuration:

  • Build Command: npm run build
  • Output Directory: dist
  • Framework: astro
  • Region: iad1 (US East)

Other Static Hosts

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

🎨 Key Components

TerminalAnimation

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

TerminalLoader

Initial page load animation that displays terminal commands before the main content appears.

DarkModeToggle

Persistent dark mode toggle that:

  • Respects system preferences
  • Saves user preference to localStorage
  • Prevents flash of unstyled content (FOUC)

Content Collections

Projects are managed through Astro's content collections system:

Schema Fields:

  • title - Project name
  • date - Publication date
  • tags - Array of tag strings
  • stack - Technologies used
  • repoUrl - GitHub repository (optional)
  • liveUrl - Live demo URL (optional)
  • demoVideoUrl - Video demo URL (optional)
  • featured - Boolean for featured projects
  • heroImage - Path to project image
  • summary - Short description
  • order - Custom ordering number

🎯 Design Philosophy

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

πŸ”§ Configuration

Astro Config (astro.config.mjs)

  • Static site output
  • Tailwind integration
  • Auto-inline stylesheets for performance
  • Site URL for SEO

Tailwind Config (tailwind.config.mjs)

  • Class-based dark mode
  • Custom font families
  • Content paths for purging unused styles

TypeScript Config (tsconfig.json)

  • Extends Astro's strict TypeScript configuration
  • Ensures type safety across the project

πŸ“ Adding New Projects

  1. Create a new markdown file in src/content/projects/
  2. 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...
  1. Add a project image to public/images/projects/
  2. The project will automatically appear on the projects page

🌐 Browser Support

  • Modern browsers (Chrome, Firefox, Safari, Edge)
  • ES2020+ features
  • CSS Grid and Flexbox
  • Intersection Observer API
  • LocalStorage API

πŸ“„ License

This project is a personal portfolio website. All rights reserved.

πŸ‘€ Author

Jake Estrada


Built with ❀️ using Astro and Tailwind CSS

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors