<feed xmlns="http://www.w3.org/2005/Atom">
<id>https://vivien.garden/blog</id>
<title>vivien.garden</title>
<subtitle>The personal site of Vivien Ngo</subtitle>
<link href="https://vivien.garden/rss" rel="self" type="application/rss+xml" />
<updated>2026-03-27T14:57:38.305Z</updated>
<author>
  <name>Vivien Ngo</name>
  <uri>https://vivien.garden</uri>
</author>
<icon>https://vivien.garden/favicon.ico</icon>
<entry>
<id>https://vivien.garden/blog/2025-media</id>
<title>My 2025 media favorites</title>
<link href="https://vivien.garden/blog/2025-media" />
<content type="html">&lt;hr&gt;
&lt;h2&gt;Books&lt;/h2&gt;
&lt;p&gt;I read a lot more nonfiction this year, which I found to be enriching and educational. For 2026 though, I think I want to read more literature to "nourish my soul" a bit more.&lt;/p&gt;
&lt;h3&gt;Nonfiction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Mood Machine&lt;/strong&gt;&lt;/em&gt; (2025) by Liz Pelly&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Empire of AI&lt;/strong&gt;&lt;/em&gt; (2025) by Karen Hao&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Are Prisons Obsolete?&lt;/strong&gt;&lt;/em&gt; (2003) by Angela Y. Davis&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Copaganda&lt;/strong&gt;&lt;/em&gt; (2025) by Alec Karakatsanis&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Fiction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;The Sympathizer&lt;/strong&gt;&lt;/em&gt; (2016) by Viet Thanh Nguyen&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Perfection&lt;/strong&gt;&lt;/em&gt; (2025) by Vincenzo Latronico, tr. Sophie Hughes&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Comics&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;The Nice House on the Lake&lt;/strong&gt;&lt;/em&gt; (2021-2024) and &lt;em&gt;&lt;strong&gt;The Nice House by the Sea&lt;/strong&gt;&lt;/em&gt; (2024-ongoing) by writer James Tynion IV and artist Álvaro Martínez Bueno&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Tongues&lt;/strong&gt;&lt;/em&gt;, Vol. 1 (2025) by Anders Nilsen&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Why Art?&lt;/strong&gt;&lt;/em&gt; (2018) by Eleanor Davis
&lt;blockquote&gt;
&lt;p&gt;I reread this one after a few years, and it still hits.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Chainsaw Man&lt;/strong&gt;&lt;/em&gt; (2018-ongoing) by Tatsuki Fujimoto
&lt;blockquote&gt;
&lt;p&gt;Like many, I got interested in &lt;em&gt;&lt;strong&gt;Chainsaw Man&lt;/strong&gt;&lt;/em&gt; after the recent movie was released in U.S. theaters, and last year, I really enjoyed the &lt;em&gt;&lt;strong&gt;Look Back&lt;/strong&gt;&lt;/em&gt; movie adapted from the work by the same mangaka.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Fire Punch&lt;/strong&gt;&lt;/em&gt; (2016-2018) by Tatsuki Fujimoto&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Movies&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;13 Going on 30&lt;/strong&gt;&lt;/em&gt; (2004), dir. Gary Winick&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Boys Go to Jupiter&lt;/strong&gt;&lt;/em&gt; (2024), dir. Julian Glander&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Happyend&lt;/strong&gt;&lt;/em&gt; (2024), dir. Neo Sora
&lt;blockquote&gt;
&lt;p&gt;My favorite movie this year---it touched on many themes that I find personally meaningful.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Blue Moon&lt;/strong&gt;&lt;/em&gt; (2025), dir. Richard Linklater&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Angel’s Egg&lt;/strong&gt;&lt;/em&gt; (1985), dir. Mamoru Oshii&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Hamnet&lt;/strong&gt;&lt;/em&gt; (2025), dir. Chloé Zhao&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;After Life&lt;/strong&gt;&lt;/em&gt; (1998), dir. Hirokazu Kore-eda&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Marriage Italian Style&lt;/strong&gt;&lt;/em&gt; (1964) dir. Vittorio De Sica&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Yesterday, Today and Tomorrow&lt;/strong&gt;&lt;/em&gt; (1963) dir. Vittorio De Sica
&lt;blockquote&gt;
&lt;p&gt;My parents are fans of the Italian actress Sophia Loren. I wasn't familiar with her work, but we watched a couple of movies where she stars opposite Marcello Mastroianni, both directed by Vittorio De Sica. We found these to be so fun. I was struck by how well these movies represented a lively and connected community, something I wish I saw portrayed in movies more often.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Music&lt;/h2&gt;
&lt;p&gt;I am planning to write a more thorough blog on my music-listening. Will update here when I do~&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Reflections&lt;/h2&gt;
&lt;p&gt;When I read back these lists, I can't help but think that I enjoyed a lot of great art this year. And especially with movies, I very often got to experience them with people I really love. The world is so big, and people can be so awesome.&lt;/p&gt;</content>
<summary>Books, comics, and movies that especially made me feel/think</summary>
<published>2026-01-04T00:00:00.000Z</published>

<author>
  <name>Vivien Ngo</name>
  <uri>https://vivien.garden</uri>
</author>
</entry><entry>
<id>https://vivien.garden/blog/sveltekit-on-sourcehut</id>
<title>Hosting my SvelteKit site and blog on SourceHut</title>
<link href="https://vivien.garden/blog/sveltekit-on-sourcehut" />
<content type="html">&lt;p&gt;First, some background: This year, I redid my personal site, the one you're on now. For my &lt;a href="https://2021.vivien.garden/"&gt;previous site&lt;/a&gt; that I made back in 2021, I built it using &lt;a href="https://sapper.svelte.dev/"&gt;Sapper&lt;/a&gt;, the predecessor to &lt;a href="https://svelte.dev/docs/kit/introduction"&gt;SvelteKit&lt;/a&gt;. I hosted my code on GitLab, which would automatically deploy to Netlify.&lt;/p&gt;
&lt;p&gt;For this iteration of my site, I decided to go just go full in with SourceHut---both for hosting my git repository and for hosting the resultant static site! Just like GitHub Pages or GitLab Pages, there is also, reasonably enough, &lt;a href="https://srht.site/quickstart"&gt;SourceHut Pages&lt;/a&gt;. I've been interested in SourceHut because of its strong alignment with open-source; this &lt;a href="https://blog.parasrah.com/posts/why-use-sourcehut/"&gt;writeup at parasrah.com&lt;/a&gt; is a helpful rundown on SourceHut's positives.&lt;/p&gt;
&lt;p&gt;In my web searches, I didn't find much info on how to specifically deploy SvelteKit with SourceHut pages, so I pieced together things based on resources for deploying other static site generator code on SourceHut. I thought I'd write it down in case it's useful to someone else~&lt;/p&gt;
&lt;h2&gt;Building SvelteKit as a static site&lt;/h2&gt;
&lt;p&gt;Because SourceHut pages can only deploy static sites, we have to build our SvelteKit project as a static files using &lt;a href="https://svelte.dev/docs/kit/adapter-static"&gt;&lt;code&gt;adapter-static&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For example, my &lt;code&gt;svelte.config.js&lt;/code&gt; looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-js"&gt;import adapter from '@sveltejs/adapter-static';
import { mdsvex } from 'mdsvex';
import mdsvexConfig from './mdsvex.config.js';

/** @type {import('@sveltejs/kit').Config} */
const config = {
	extensions: ['.svelte', ...mdsvexConfig.extensions],
	preprocess: [mdsvex(mdsvexConfig)],
	kit: {
		adapter: adapter({
			fallback: '404.html'
		})
	}
};

export default config;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;SourceHut configuration&lt;/h2&gt;
&lt;p&gt;To &lt;a href="https://srht.site/automating-deployments/"&gt;automatically deploy&lt;/a&gt; on SourceHut, we need a &lt;code&gt;.build.yml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I based mine off of &lt;a href="https://git.sr.ht/~sircmpwn/pages.sr.ht-examples/tree/master/item/eleventy.yml"&gt;this Eleventy sample&lt;/a&gt;, and ended up with this:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yml"&gt;image: alpine/edge
oauth: pages.sr.ht/PAGES:RW
packages:
  - nodejs
  - npm
  - hut
environment:
  repo: &#x3C;REPO_NAME&gt;
  site: &#x3C;SITE_URL&gt;
  # Disable npm progress bar
  # https://docs.npmjs.com/cli/v9/using-npm/config#progress
  npm_config_progress: 'false'
secrets:
  - &#x3C;UUID_FOR_SECRET&gt;
tasks:
  - install: |
      cd $repo
      npm install
  - package: |
      cd $repo
      npm run build
      tar -C build -cvz . &gt; ../site.tar.gz
  - upload: |
      hut pages publish -d $site site.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Blog setup&lt;/h2&gt;
&lt;p&gt;I want to get into blogging for the sake of documenting technical things like this and also just to practice writing more. :-)&lt;/p&gt;
&lt;p&gt;I knew I wanted to be able to write posts as separate Markdown files. To that end, I found &lt;a href="https://joshcollinsworth.com/blog/build-static-sveltekit-markdown-blog"&gt;this blog post by Josh Collinsworth&lt;/a&gt; incredibly helpful. I don't really have anything else to add, but if you're interested in doing similar, I'd start there! Most of my setup is identical.&lt;/p&gt;
&lt;p&gt;I also took some inspiration for my MDsveX settings from &lt;a href="https://www.jvp.design/blog/building-a-blog-with-sveltekit-tailwind-mdsvex"&gt;this blog post by Jeff Pohlmeyer&lt;/a&gt;. So my &lt;code&gt;mdsvex.config.js&lt;/code&gt; looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-js"&gt;import { defineMDSveXConfig as defineConfig } from 'mdsvex';

const config = defineConfig({
	extensions: ['.md', '.svx'],
	smartypants: { quotes: true, ellipses: true, dashes: 'oldschool' }
});

export default config;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In particular, I love the &lt;a href="https://mdsvex.pngwn.io/docs#smartypants"&gt;&lt;code&gt;smartypants&lt;/code&gt; options&lt;/a&gt;, which save me time from figuring out how to make curly quotes in my code editor ha.&lt;/p&gt;
&lt;h2&gt;RSS feed&lt;/h2&gt;
&lt;p&gt;For my RSS feed, I wanted to be able to have the full contents of each post show up in RSS feed readers, so I referenced Kyle Nazario's posts on the topic (&lt;a href="https://kylenazario.com/blog/full-content-rss-feed-with-sveltekit"&gt;part one&lt;/a&gt; + &lt;a href="https://kylenazario.com/blog/full-content-rss-feed-with-sveltekit-part-two"&gt;part two&lt;/a&gt;), which also build on Josh Collinsworth's guide.&lt;/p&gt;
&lt;h2&gt;Reflections&lt;/h2&gt;
&lt;p&gt;I don't have much to say other than "it's been fun." Svelte has been fun and refreshing to use, and I feel like I understand a bit more about routing than when I started. I've enjoyed working on this site and steadily making adjustments and designing websites that are a bit "weirder" than I might be allowed in a corporate context. Totally recommend &lt;a href="https://kayserifserif.place/posts/2025/what-should-i-use-to-make-a-website"&gt;making your own site&lt;/a&gt;, SvelteKit or no!&lt;/p&gt;</content>
<summary>How I built my personal site using SvelteKit as a static site with a Markdown blog</summary>
<published>2025-12-13T00:00:00.000Z</published>
<updated>2026-01-23T00:00:00.000Z</updated>
<author>
  <name>Vivien Ngo</name>
  <uri>https://vivien.garden</uri>
</author>
</entry>
</feed>
