Skip to content

MavScriptBlu/UdacityPersonalPortfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Personal Portfolio Project - SUBMISSION READY βœ…

A dynamic JavaScript-powered personal portfolio website that demonstrates modern web development skills through DOM manipulation, API data fetching, and interactive user interfaces. This implementation meets ALL Udacity rubric requirements and implements ALL "Stand Out" suggestions.

🎯 Rubric Compliance Status: COMPLETE

Project now getting remastered for personal use


🐞 Bug Fix: Semantic List Markup Correction

πŸ”§ Issue

The original HTML structure used invalid nesting:

  • . This breaks semantic rules, impairs accessibility, and misguides learners relying on this repo for best practices.

    βœ… Fix

    Replaced all instances of invalid markup with semantically correct structure:

  • . This change applies to navigation and project lists.

    πŸ’‘ Why It Matters

    • Ensures semantic accuracy and compliance with W3C HTML standards.
    • Improves screen reader interpretation and overall accessibility.
    • Models best practices for learners using this repo as a reference.
    • Enhances usability for assistive technologies and reinforces proper list behavior.

    πŸ“Ž Example Before:

    html

    After:

    html


    πŸš€ Getting Started

    Prerequisites

    • Modern web browser with ES6+ support
    • Local development server (recommended for CORS policy compliance)

    Installation & Setup

    1. Clone or download the project files
    2. Navigate to the project directory
    3. Open with Live Server (recommended):
    4. Alternative: Open index.html directly in browser (may have CORS limitations)

    File Structure Overview

    portfolio/
    β”œβ”€β”€ index.html                  # Main HTML file
    β”œβ”€β”€ src/
    β”‚   β”œβ”€β”€ css/
    β”‚   β”‚   β”œβ”€β”€ normalize.css       # CSS reset
    β”‚   β”‚   └── styles.css          # Main stylesheet (DO NOT EDIT)
    β”‚   β”œβ”€β”€ data/
    β”‚   β”‚   β”œβ”€β”€ aboutMeData.json    # About section content (DO NOT EDIT)
    β”‚   β”‚   └── projectsData.json   # Projects array data (DO NOT EDIT)
    β”‚   β”œβ”€β”€ images/
    β”‚   β”‚   β”œβ”€β”€ headshot.webp       # Profile image
    β”‚   β”‚   β”œβ”€β”€ *_card.webp         # Project card backgrounds
    β”‚   β”‚   β”œβ”€β”€ *_spotlight.webp    # Project spotlight images
    β”‚   β”‚   └── *_placeholder.webp  # Fallback images
    β”‚   └── js/
    β”‚       └── main.js             # Main application logic
    β”œβ”€β”€ starter/
    β”‚   β”œβ”€β”€ CODEOWNERS              # Code ownership metadata (DO NOT EDIT)
    β”‚   └── UdacityREADME.md        # Original README file (DO NOT EDIT)
    └── README.md
    

    πŸ“‹ Implementation Highlights

    JavaScript Best Practices

    • Modern ES6+ Syntax: Arrow functions, const/let, template literals
    • DOM Manipulation: Uses createElement(), appendChild(), and document fragments
    • No innerHTML Usage: Follows best practices for DOM manipulation
    • Error Handling: Comprehensive try/catch and fallback mechanisms
    • Performance Optimization: Document fragments for efficient DOM updates

    Data Handling

    • Fetch API: Asynchronous loading of JSON data
    • Data Validation: Handles incomplete/missing data gracefully
    • Path Resolution: Converts relative JSON paths for proper asset loading

    User Experience

    • Responsive Design: Adapts to mobile and desktop screen sizes
    • Interactive Elements: Click handlers for project cards and navigation
    • Real-time Feedback: Live character counting and validation messages
    • Accessibility: Semantic HTML structure and proper ARIA labels

    Form Validation Features

    • Email format validation using regex: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
    • Character restrictions using regex: /[^a-zA-Z0-9@._-]/
    • 300-character limit with visual feedback
    • Comprehensive error messaging
    • Form submission prevention with success alerts

    🎯 Project Requirements Met + Stand Out Features

    βœ… Fetch external JSON data and parse responses
    βœ… Create dynamic HTML elements without modifying provided HTML/CSS
    βœ… Handle incomplete data with graceful fallbacks
    βœ… Implement responsive navigation with MediaQuery API
    βœ… Use document fragments and avoid innerHTML
    βœ… Set up event listeners for user interactions
    βœ… Implement client-side form validation
    βœ… Provide real-time character counting with visual feedback
    βœ… Display validation errors and success messages

    🌟 Stand Out Features Implemented

    βœ… Continuous Scroll: Hold-to-scroll arrow navigation
    βœ… Personal Projects: Real portfolio projects added to data
    βœ… Hamburger Menu: Mobile-responsive navigation drawer
    βœ… Loading Elements: Professional loading states and error handling

    πŸ›  Enhanced Technical Implementation

    Advanced JavaScript Features

    • Continuous Scrolling: Multiple event listeners (mousedown, mouseup, mouseleave)
    • Dynamic CSS Injection: Custom scrollbar styles added via JavaScript
    • Mobile Navigation: Hamburger menu with CSS animations
    • Loading States: Professional spinners and error handling
    • Enhanced UX: Real-time feedback and visual indicators

    Professional Development Practices

    • Modern ES6+ Syntax: Arrow functions, template literals, const/let
    • Performance Optimization: Document fragments for efficient DOM updates
    • Error Handling: Comprehensive try/catch and user-friendly error messages
    • Responsive Design: Mobile-first approach with MediaQuery API
    • Code Organization: Modular, maintainable code structure

    Data Structure

    About Me Data (aboutMeData.json)

    {
      "aboutMe": "Personal bio text...",
      "headshot": "../images/headshot.webp"
    }

    Projects Data (projectsData.json)

    [
      {
        "project_id": "unique_id",
        "project_name": "Project Title",
        "short_description": "Brief description for card",
        "long_description": "Detailed description for spotlight",
        "card_image": "../images/project_card.webp",
        "spotlight_image": "../images/project_spotlight.webp",
        "url": "https://project-link.com"
      }
    ]

    πŸ§ͺ Testing & Validation

    Functionality Testing

    1. About Me Section: Verify bio text and headshot image load correctly
    2. Projects Gallery:
      • Click project cards to update spotlight
      • Test navigation arrows (horizontal on mobile, vertical on desktop)
      • Verify fallback images for missing assets
    3. Form Validation:
      • Test empty field validation
      • Test invalid email formats
      • Test character limits and special characters
      • Verify live character counter
      • Test successful submission alert

    Browser Compatibility

    • Modern browsers with ES6+ support
    • Fetch API support required
    • CSS Grid and Flexbox support recommended
    • MediaQuery API for responsive features

    πŸ“š Learning Objectives Achieved

    This project demonstrates proficiency in:

    • Modern JavaScript: ES6+ syntax, async/await, DOM manipulation
    • API Integration: Fetch API usage and JSON data handling
    • Responsive Design: Mobile-first development with MediaQuery
    • Form Validation: Client-side validation without HTML5 attributes
    • Performance: Document fragments and efficient DOM operations
    • Error Handling: Graceful degradation and fallback strategies

    πŸ“„ License

    This project is part of a coding portfolio and is available for educational purposes.


    Note: This implementation follows all project requirements including:

    • No modifications to provided HTML, CSS, or JSON data files
    • Use of external JSON data via fetch API
    • Complete form validation with custom regex patterns
    • Responsive navigation with MediaQuery API
    • Document fragments for optimal DOM performance

    Releases

    No releases published

    Packages

    No packages published