Skip to content

howard-haowen/howard-haowen.github.io

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Howard Jiang's Personal Website

This repository contains the source code and content for Howard Jiang's personal website, built with Hugo and the PaperMod theme.

Purpose

The website serves as a digital portfolio, showcasing Howard's education, experience, projects, publications, presentations, certifications, and more. It is designed to be fast, responsive, and easy to maintain.

Tools & Technologies

  • Hugo: A fast and flexible static site generator written in Go.
  • PaperMod Theme: A clean, feature-rich Hugo theme focused on speed and usability.
  • Markdown: All content is written in Markdown for simplicity and portability.
  • GitHub Actions: Used for continuous deployment and workflow automation (see README.md for workflow details).
  • VS Code: Recommended for editing and managing the project.

Repository Structure

  • content/ — Main website content (Markdown files for pages and sections)
  • archetypes/ — Archetype templates for new content
  • layouts/ — Custom layout overrides
  • static/ — Static assets (images, files)
  • themes/PaperMod/ — PaperMod theme (as a Git submodule)
  • public/ — Generated site output (ignored in version control)
  • resources/ — Hugo-generated resources (ignored in version control)
  • .github/ — GitHub workflows and issue templates
  • .vscode/ — VS Code settings

Getting Started

  1. Install Hugo:
    Installation Guide

  2. Clone the repository:

    git clone --recurse-submodules https://github.com/howard-haowen/howard-haowen.github.io.git
  3. Start the development server:

    hugo server

GitHub Actions

The diagram below illustrates the workflow defined in .github/workflows/deploy2pages.yml.

flowchart TD
  %% Triggers
  subgraph "Workflow Triggers"
    direction TB
    T1["Push to main<br><i>on.push.branches: [main]</i>"]:::trigger
    T2["Manual Dispatch<br><i>on.workflow_dispatch</i>"]:::trigger
  end

  %% Permissions & Concurrency
  subgraph "Workflow Settings"
    direction TB
    P1["Permissions:<br>contents: read<br>pages: write<br>id-token: write"]:::perm
    C1["Concurrency:<br>group: pages<br>cancel-in-progress: false"]:::concur
    D1["Defaults:<br>shell: bash"]:::default
  end

  %% Build Job
  subgraph "Build Job"
    direction TB
    B0["Job: build<br>runs-on: ubuntu-latest"]:::job
    Benv["Env:<br>HUGO_VERSION=0.146.0"]:::env
    B1["Install Hugo CLI"]:::step
    B2["Install Dart Sass"]:::step
    B3["Checkout Repo<br>submodules: recursive"]:::step
    B4["Setup Pages<br>id: pages"]:::step
    B5["Install Node.js dependencies<br>npm ci if lockfile exists"]:::step
    B6["Build with Hugo<br>env:<br>HUGO_CACHEDIR, HUGO_ENVIRONMENT=production<br>args: --minify --baseURL"]:::step
    B7["Upload artifact<br>path: ./public"]:::step
  end

  %% Deploy Job
  subgraph "Deploy Job"
    direction TB
    D0["Job: deploy<br>runs-on: ubuntu-latest"]:::job
    Denv["Environment:<br>github-pages"]:::env
    D1["Deploy to GitHub Pages<br>id: deployment"]:::step
    Durl["Outputs:<br>page_url"]:::output
  end

  %% Artifact Flow
  subgraph "Artifacts"
    direction LR
    A1["public/ (Hugo Output)"]:::artifact
    A2["GitHub Pages Artifact"]:::artifact
  end

  %% Relationships
  T1 --> B0
  T2 --> B0
  B0 --> D0
  P1 -.-> B0
  P1 -.-> D0
  C1 -.-> B0
  D1 -.-> B0
  B0 -->|uses| Benv
  D0 -->|uses| Denv
  B0 -->|outputs| A1
  A1 -->|upload| B7
  B7 -->|artifact| A2
  A2 -->|deploy| D1
  D1 -->|outputs| Durl

  %% Build Steps
  B0 --> B1
  B1 --> B2
  B2 --> B3
  B3 --> B4
  B4 --> B5
  B5 --> B6
  B6 --> B7

  %% Deploy Steps
  D0 --> D1
  D1 --> Durl

  %% Styling
  classDef trigger fill:#e0f7fa,stroke:#00838f,stroke-width:2px,font-size:14px;
  classDef perm fill:#fff3e0,stroke:#ef6c00,stroke-width:2px,font-size:13px;
  classDef concur fill:#f3e5f5,stroke:#6a1b9a,stroke-width:2px,font-size:13px;
  classDef default fill:#f1f8e9,stroke:#33691e,stroke-width:2px,font-size:13px;
  classDef job fill:#e8eaf6,stroke:#1a237e,stroke-width:3px,font-size:16px;
  classDef step fill:#fffde7,stroke:#fbc02d,stroke-width:2px,font-size:12px;
  classDef env fill:#e0f2f1,stroke:#00695c,stroke-width:2px,font-size:12px;
  classDef artifact fill:#fce4ec,stroke:#ad1457,stroke-width:2px,font-size:12px;
  classDef output fill:#ede7f6,stroke:#4527a0,stroke-width:2px,font-size:12px;

  %% Tooltips and Clicks
  click T1 "https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#push" "Triggered on push to main"
  click T2 "https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch" "Manual trigger"
  click P1 "https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs" "GitHub Actions Permissions"
  click C1 "https://docs.github.com/en/actions/using-jobs/using-concurrency" "Concurrency Control"
  click D1 "https://docs.github.com/en/actions/using-jobs/workflow-syntax-for-github-actions#defaultsrun" "Default Shell"
  click B1 "https://github.com/gohugoio/hugo/releases" "Hugo Releases"
  click B2 "https://snapcraft.io/dart-sass" "Dart Sass Snap"
  click B3 "https://github.com/actions/checkout" "actions/checkout"
  click B4 "https://github.com/actions/configure-pages" "actions/configure-pages"
  click B7 "https://github.com/actions/upload-pages-artifact" "upload-pages-artifact"
  click D1 "https://github.com/actions/deploy-pages" "actions/deploy-pages"
  click A2 "https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts" "GitHub Actions Artifacts"
Loading

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • HTML 100.0%