<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Styrigx (English)</title><description>Sloan Gray 的个人博客：AI 应用、开源项目与折腾笔记。</description><link>https://styrigx.github.io/styrigx-blog/</link><language>en</language><item><title>501 Muse Tips, Open-Sourced</title><link>https://styrigx.github.io/en/post/2026-10-07-muse-playbook/</link><guid isPermaLink="true">https://styrigx.github.io/en/post/2026-10-07-muse-playbook/</guid><description>501 Muse tips collected from across the web, deduplicated across Chinese and English sources, organized into ten categories — open-sourced on GitHub.</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently scoured the web for Muse (Meta’s personal AI assistant) tips — English and Chinese sources: X, Reddit, YouTube, V2EX, blogs, and reviews. Deduplicated, polished, and organized into ten categories: 501 tips total, now an open-source repo.&lt;/p&gt;
&lt;h2 id=&quot;repo&quot;&gt;Repo&lt;/h2&gt;
&lt;p&gt;👉 &lt;a href=&quot;https://github.com/styrigx/muse-playbook&quot;&gt;https://github.com/styrigx/muse-playbook&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;ten-categories&quot;&gt;Ten categories&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prompting&lt;/strong&gt; (53): how to talk to Muse so it gets it right the first time — delegation mindset, asking formulas, stop conditions for long tasks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Productivity&lt;/strong&gt; (62): reminders, email triage, docs and spreadsheets, meetings, creator ops, small-business use&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coding&lt;/strong&gt; (22): writing code, debugging, GitHub integration, PR review workflows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learning&lt;/strong&gt; (14): languages, exam prep, micro-learning, tutor-style companionship&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Writing&lt;/strong&gt; (23): newsletters, social posts, podcasts, video, editing and proofreading&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Daily life&lt;/strong&gt; (110): saving money, travel, shopping comparisons, food and chores, social gifting — the breakout category&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Research&lt;/strong&gt; (34): hands-on price comparisons, price tracking, sourcing, verification methods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creative fun&lt;/strong&gt; (35): image prompt structures, podcasts, video, games, playful tricks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hidden features&lt;/strong&gt; (108): Soul, memory, permissions and safety, chat operations, hardware, quota and invites&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced&lt;/strong&gt; (39): building connectors by talking, hooks automation, multi-agent setups, safety red lines&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Every tip is one actionable sentence; ones marked “self-reported” are unverified community claims&lt;/li&gt;
&lt;li&gt;Collected in October 2026 — Muse ships fast, some entries may go stale; trust the app UI&lt;/li&gt;
&lt;li&gt;PRs and issues welcome — tell me what’s missing or wrong&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Muse</category><category>AI</category><category>Open Source</category></item><item><title>Migrating the Blog from Hugo to Navfolio: Full Notes</title><link>https://styrigx.github.io/en/post/2026-10-07-navfolio-migration/</link><guid isPermaLink="true">https://styrigx.github.io/en/post/2026-10-07-navfolio-migration/</guid><description>Same URLs so comments carry over, bilingual setup, dashboard homepage, SGX mark design — the whole Hugo+PaperMod to Astro+Navfolio migration.</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The blog has a new theme. Moved from Hugo + PaperMod to Astro + Navfolio. Writing down the whole process — why, how, and what broke along the way.&lt;/p&gt;
&lt;h2 id=&quot;why-switch&quot;&gt;Why switch&lt;/h2&gt;
&lt;p&gt;PaperMod is great: light, fast, minimal. But after a while it felt like just a blog theme — post list plus post pages, nothing else.&lt;/p&gt;
&lt;p&gt;Navfolio is different. It’s a personal dashboard: avatar, motto, nav cards, writing stats, heatmap, all on one screen. The blog is one module of it. That’s closer to what I want — a blog isn’t just a place for posts, it’s a foothold on the internet.&lt;/p&gt;
&lt;p&gt;One clarification: &lt;strong&gt;the portal and the blog are two sites, two repos&lt;/strong&gt;. The portal comes later; this post is about the blog only.&lt;/p&gt;
&lt;h2 id=&quot;migration-rule-1-keep-the-urls&quot;&gt;Migration rule #1: keep the URLs&lt;/h2&gt;
&lt;p&gt;This was the most important constraint. Old posts lived at &lt;code&gt;/post/&amp;#x3C;slug&gt;/&lt;/code&gt;, and Giscus binds comments by &lt;code&gt;pathname&lt;/code&gt; — meaning &lt;strong&gt;as long as the new site serves identical article URLs, old comments carry over automatically&lt;/strong&gt;. No database migration needed.&lt;/p&gt;
&lt;p&gt;So the first job was making sure the new theme could route articles as &lt;code&gt;/post/&amp;#x3C;slug&gt;/&lt;/code&gt; with trailing slashes, then verifying every URL, Chinese and English.&lt;/p&gt;
&lt;h2 id=&quot;bilingual-setup&quot;&gt;Bilingual setup&lt;/h2&gt;
&lt;p&gt;Chinese is default at root &lt;code&gt;/&lt;/code&gt;; English under &lt;code&gt;/en/&lt;/code&gt;. Details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Auto-redirect on first visit&lt;/strong&gt; by browser language, crawlers excluded (or search indexing gets messy)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual choice remembered&lt;/strong&gt; via localStorage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Language switch jumps to the translation&lt;/strong&gt; — on a Chinese post, hitting EN goes to that post’s English version; falls back to homepage only if no translation exists&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Split search indexes&lt;/strong&gt; with Pagefind, one per language, so Chinese searches don’t surface English results&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;homepage-the-version-i-rejected&quot;&gt;Homepage: the version I rejected&lt;/h2&gt;
&lt;p&gt;First attempt was a plain blog homepage — title plus post list. I rejected it myself: too far from the official demo’s dashboard look.&lt;/p&gt;
&lt;p&gt;The redo used the official components directly: ProfileCard, IntroCard, NavigationCard, ConnectCard, BlogHeatmap, arranged as the dashboard. Two sets of copy, Chinese and English.&lt;/p&gt;
&lt;p&gt;One bug in between: the title rendered as “Hi, Hi, I’m Sloan Sloan Gray” — greeting duplicated the title. Fixed.&lt;/p&gt;
&lt;h2 id=&quot;fonts-wenkai--maple-mono&quot;&gt;Fonts: WenKai + Maple Mono&lt;/h2&gt;
&lt;p&gt;Chinese in &lt;strong&gt;LXGW WenKai&lt;/strong&gt;, English and UI in &lt;strong&gt;Maple Mono&lt;/strong&gt; monospace. That’s the theme’s “paper + typewriter” feel — the literary Kai-style Chinese against monospace techiness fits the “take it apart, put it back together” motto.&lt;/p&gt;
&lt;p&gt;Technical note: the WenKai TTF is several MB; the build subsets it to used characters only, so loading is fine. WenKai ships a single Regular weight, so bold Chinese is synthesized by the browser — acceptable at these sizes, not worth chasing.&lt;/p&gt;
&lt;p&gt;Verdict: once fonts look good and recognizable, stop. Beyond that lies madness.&lt;/p&gt;
&lt;h2 id=&quot;avatar-centered-crop&quot;&gt;Avatar: centered crop&lt;/h2&gt;
&lt;p&gt;Using my own photo. First crop was face-tracked; I rejected it for a &lt;strong&gt;centered square crop extending from the middle outward&lt;/strong&gt;. Person in the center, stable composition.&lt;/p&gt;
&lt;h2 id=&quot;favicon-the-sgx-monogram&quot;&gt;Favicon: the SGX monogram&lt;/h2&gt;
&lt;p&gt;Started with no idea — generated options: a serif S, an ink dot, folded paper. Landed on &lt;strong&gt;SGX&lt;/strong&gt;: initials of Sloan Gray, also the core of styrigx. Name and handle in three letters.&lt;/p&gt;
&lt;p&gt;A few rounds: serif S was too plain; an interlocked S/G/X geometric mark had style but was unreadable at small sizes; final version thickened the strokes and separated the letters — legibility and design balanced. Sage green to match the theme.&lt;/p&gt;
&lt;p&gt;One gotcha: the theme prefers &lt;code&gt;favicon.svg&lt;/code&gt;, and my placeholder SVG was showing in browser tabs instead of the final interlocked PNG. Deleted the SVG so browsers fall back to PNG.&lt;/p&gt;
&lt;h2 id=&quot;footer-year-20202026-automatic&quot;&gt;Footer year: 2020–2026, automatic&lt;/h2&gt;
&lt;p&gt;Was &lt;code&gt;© 2026 Sloan Gray&lt;/code&gt;, now &lt;code&gt;© 2020–2026&lt;/code&gt;. 2020 is when I first got on the outside internet — worth marking.&lt;/p&gt;
&lt;p&gt;The end year is automatic — computed from the build date, rolls forward on every deploy. One caveat: it’s build-time, not runtime. A year with zero deploys would show a stale year, but publishing posts triggers builds anyway.&lt;/p&gt;
&lt;h2 id=&quot;the-recently-module&quot;&gt;The “Recently” module&lt;/h2&gt;
&lt;p&gt;The official demo’s about page has a “Recently” section. The theme ships a DoingCard component — just unconfigured and unwired.&lt;/p&gt;
&lt;p&gt;I added 5 items in each language, all real: blog migration, portal theme hunt, Muse playbook, invite-code board, S26 upgrade plan. Future updates just edit the doing list in config.&lt;/p&gt;
&lt;h2 id=&quot;deploy-push-and-forget&quot;&gt;Deploy: push and forget&lt;/h2&gt;
&lt;p&gt;Used to be manual wrangler uploads, disconnected from GitHub. Now back to the Hugo-era fully automatic flow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Source in &lt;code&gt;styrigx/styrigx-blog&lt;/code&gt;, main branch&lt;/li&gt;
&lt;li&gt;On push, GitHub Actions builds (deps, font subsetting, Pagefind index) and deploys to Cloudflare Pages via wrangler&lt;/li&gt;
&lt;li&gt;Write a post or tweak config, push, done&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;pitfalls-worth-noting&quot;&gt;Pitfalls worth noting&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;NAVFOLIO_CONTENT_SOURCE=docs&lt;/code&gt; is a landmine.&lt;/strong&gt; The theme’s workflow sets it, making builds use demo content over yours. Delete it if you deploy via Actions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Wrangler env vars.&lt;/strong&gt; Direct-deploy scripts must preserve proxy vars and cert vars, or npm stalls and wrangler can’t connect.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TOML sub-table ordering.&lt;/strong&gt; &lt;code&gt;[params.xxx]&lt;/code&gt; sub-tables must come after sibling plain keys, or later keys get swallowed — once cost me the comment section.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Don’t touch Giscus params.&lt;/strong&gt; repo_id, category_id — change those and old comments stop matching. Migrate URL structure, leave comment config alone.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Build-time vs runtime year.&lt;/strong&gt; The footer year is computed at build time. Knowing that ends the confusion about why “automatic” still depends on deploys.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;Whole migration done in a day: plan in the morning, content in the afternoon, homepage and icons in the evening, live by night. &lt;a href=&quot;https://blog.styrigx.com&quot;&gt;https://blog.styrigx.com&lt;/a&gt; runs this now.&lt;/p&gt;
&lt;p&gt;Next: a new theme for the portal. The blog stays put.&lt;/p&gt;</content:encoded><category>blog</category><category>Astro</category><category>tinkering</category></item><item><title>Launched a Muse Invite-Code Sharing Site</title><link>https://styrigx.github.io/en/post/2026-09-27-invite-board/</link><guid isPermaLink="true">https://styrigx.github.io/en/post/2026-09-27-invite-board/</guid><description>Shipped a community Muse invite-code board: draw a code, contribute codes, vote on working ones — dead codes get hidden automatically.</description><pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shipped a small project today: a &lt;strong&gt;community Muse invite-code board&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;what-it-does&quot;&gt;What it does&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🎲 &lt;strong&gt;Draw one&lt;/strong&gt;: one click, get a random invite code contributed by the community&lt;/li&gt;
&lt;li&gt;📮 &lt;strong&gt;Contribute&lt;/strong&gt;: have a spare code? Submit it for others&lt;/li&gt;
&lt;li&gt;👍 &lt;strong&gt;Feedback&lt;/strong&gt;: got a working code? Mark it “works” to help the next person&lt;/li&gt;
&lt;li&gt;🧹 &lt;strong&gt;Auto-cleanup&lt;/strong&gt;: codes flagged invalid 3 times get hidden automatically&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-its-built&quot;&gt;How it’s built&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Frontend: single HTML file, editorial paper aesthetic, Chinese/English bilingual&lt;/li&gt;
&lt;li&gt;Backend: Cloudflare Worker API&lt;/li&gt;
&lt;li&gt;Storage: Supabase for the code table, Cloudflare KV for rate limiting, messages, and recent draws&lt;/li&gt;
&lt;li&gt;Draw logic: weighted rotation, least-drawn codes first&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;link&quot;&gt;Link&lt;/h2&gt;
&lt;p&gt;👉 &lt;a href=&quot;https://muse-invite.styrigx.com/&quot;&gt;https://muse-invite.styrigx.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Come grab a code, or contribute one. Suggestions welcome — just reach out.&lt;/p&gt;</content:encoded><category>Muse</category><category>AI</category><category>Open Source</category></item></channel></rss>