Important
This repository is deprecated (August 2026). The blog moved into the
lawrencewu-net monorepo, under apps/blog/.
Read the blog at https://lawrencewu.net. This repository is archived and read-only.
Source for https://lawrencewu.net, built with Quarto.
- I used Albert Rapp's guide to starting a Quarto blog which was very helpful
- The Quarto documentation on "Creating a Website" was also helpful: https://quarto.org/docs/websites/
- From the beginning of the blog 2023-03-24 to 2026-03-16, the blog was hosted on Github Pages and the source code was at lawwu/lawwu.github.io
- On 2026-03-16, I started self-hosting the blog at a new domain, https://lawrencewu.net and deploying to Cloudflare Pages.
I used to run quarto render and commit the rendered files. Now, this blog is automatically deployed using GitHub Actions whenever changes are pushed to the main branch. Here's how it works:
- The workflow is defined in .github/workflows/publish.yml
- When changes are pushed to
main, GitHub Actions:- Checks out the repository
- Sets up UV (fast Python package installer)
- Sets up Python using the version specified in
.python-version - Installs Jupyter and other dependencies (required for Quarto pages that contain code)
- Sets up Quarto
- Renders the Quarto documents and publishes to the
gh-pagesbranch
The rendered site is served via GitHub Pages from the gh-pages branch and available at https://lawrencewu.net.
To manually trigger deployment:
- Go to the "Actions" tab in the repository
- Select the "Quarto Publish" workflow
- Click "Run workflow" and select the branch to deploy from
To preview the blog locally, run:
quarto previewNotes for me:
To shrink all png files in a directory, use the following command:
brew install pngquant
for file in *.png; do pngquant --force --output "$file" --quality 60-80 "$file"; doneIt's possible to embed Streamlit apps directly into a Quarto page using an iframe:
<iframe
src="https://llm-impact-on-jobs.streamlit.app/?embed=true"
height="1200"
style="width:100%;border:none;"
></iframe>