Lindsey Zhou Link Page

2 min read css, web, github-pages

A small, fast, dependency-free link-in-bio page for Lindsey (Xiaoling) Zhou, hosted on GitHub Pages.

Live: https://pfeilbr.github.io/xiaoling-lindsey-zhou-website/

What’s here

FilePurpose
index.htmlMarkup, inline brand SVGs, OpenGraph/Twitter meta, Person JSON-LD
styles.cssPalette, layout, animations, light/dark themes
script.jsTheme toggle, WeChat copy-to-clipboard, Web Share
gallery.htmlPhoto gallery page (grid + lightbox)
gallery.jsGallery rendering, lightbox, keyboard/swipe nav
assets/gallery/photos/, videos/, generated thumbs/, manifest.json
tools/build-gallery.pyBuilds thumbnails and the manifest
assets/avatar.pngProfile picture
assets/favicon.svgMonogram favicon

No build step, no framework, no external JS. The only network dependency is Google Fonts (Fraunces + Inter), and the page degrades to system fonts if that fails.

  • LinkedIn — in/xiaolingzhou
  • X (Twitter) — @lindsey7926
  • Instagram — @lindsey.zhou
  • Facebook — lingling.zhou.96
  • WeChat — ACL-beauty (tap to copy; WeChat has no profile URL scheme)

Features

  • Responsive down to ~320px, laid out with fluid clamp() type
  • Light + dark themes: follows the OS by default, overridable with the toggle, remembered in localStorage
  • Animated gradient background, spinning avatar ring, staggered entrance
  • Fully honours prefers-reduced-motion
  • Keyboard accessible with visible focus rings; aria-live toast for copy feedback
  • Clipboard fallback via execCommand for older/insecure contexts
  • Print stylesheet

Palette

Colours are pulled from the profile photo — caramel #d59a55, dusty rose #d78e9e, olive #7c8f6b.

Editing

Change a link or handle in index.html (each is one <a class="link"> block). To swap the profile picture, replace assets/avatar.png with a square image (400×400 or larger).

Drop full-size images into assets/gallery/photos/ and videos into assets/gallery/videos/, then:

python3 tools/build-gallery.py --album "Belmar Beach, July 2026"

That writes width-limited thumbnails to assets/gallery/thumbs/ and regenerates assets/gallery/manifest.json with dimensions, so the grid does not reflow as images load. Video posters are extracted with ffmpeg if it is installed.

gallery.html is not linked from index.html yet — add a card once it has photos in it.

Local preview

python3 -m http.server 8000

Then open http://localhost:8000.

Deploying

GitHub Pages serves the main branch root. Pushing to main publishes. .nojekyll is present so Jekyll doesn’t process the files.