Research blog setup
Research blog setup
The research blog is a Jekyll blog collection. Every note is a Markdown file in _blog/:
_blog/en/my-note.mdbecomes/blog/en/my-note/_blog/ko/my-note.mdbecomes/blog/ko/my-note/
Copy the two files in blog-drafts/, put one in each language directory, and give both the same translation_key. The per-post language toggle uses that key to find the paired URL. The translations remain separate Markdown sources, so they can differ where useful.
Markdown source downloads
The Download Markdown button uses the repository and blog_settings.source_branch values in _config.yml. It intentionally targets this repository’s master branch:
repository: "bluesaiyancodes/bluesaiyancodes.github.io"
blog_settings:
source_branch: "master"
Do not change source_branch when the public source links should keep targeting master.
Giscus comments and reactions
Giscus is enabled and provides GitHub Discussions-backed comments and reactions beneath each post. It uses the repository’s Announcements category:
blog_settings:
giscus:
enabled: true
repo: "bluesaiyancodes/bluesaiyancodes.github.io"
repo_id: "R_kgDOOSLWcQ"
category: "Announcements"
category_id: "DIC_kwDOOSLWcc4DBLPN"
mapping: "pathname"
strict: "0"
reactions_enabled: "1"
The repository must keep GitHub Discussions enabled and the Giscus GitHub App installed. To reconfigure it later:
- In the repository’s Settings → Features, enable Discussions.
- Install the Giscus GitHub App for
bluesaiyancodes/bluesaiyancodes.github.io. - Keep or create the
Announcementsdiscussion category. - At giscus.app, enter
bluesaiyancodes/bluesaiyancodes.github.io, chooseAnnouncements, and copy only the generateddata-category-idvalue. Replace the category ID in
_config.ymlif it changed:blog_settings: giscus: enabled: true repo: "bluesaiyancodes/bluesaiyancodes.github.io" repo_id: "R_kgDOOSLWcQ" category: "Announcements" category_id: "DIC_..." mapping: "pathname" strict: "0" reactions_enabled: "1"
The remaining defaults use pathname mapping, preferred-color-scheme theming, reactions enabled, metadata emission disabled, and the comment box below existing comments. Set comments: false in a post to omit Giscus there.
The root giscus.json limits embeds to the production site, the giscus setup preview, and localhost development. Smooth language navigation reloads the Giscus client for the destination post, so each English/Korean pathname keeps its own discussion.
GoatCounter page views
GoatCounter is enabled for the research-blog index and individual posts using the bluesaiyancodes site code:
blog_settings:
goatcounter:
enabled: true
code: "bluesaiyancodes"
Set enabled: false to remove the tracker. The existing analytics.provider: "google-analytics-4" and GA4 ID are unchanged.
RSS feed
The blog-only RSS feed is generated by Jekyll at /blog/feed.xml; it does not require an external RSS service. Its visible link and <head> discovery tag are currently disabled until the feed is actively promoted:
blog_settings:
rss:
enabled: false
Set enabled: true to show the RSS link and advertise the feed to feed readers. The XML endpoint continues to build while hidden so it can be validated before launch.
Language availability
The /blog/ index renders one card per note and shows the available translations after its date: [EN, 한], [EN], or [한]. Each language label links directly to its separate post URL. Individual posts keep the compact language switch beside the back link and only show languages that exist for that note.
Blog links use assets/js/blog-navigation.js to fetch and replace the main blog content without a full document reload. The address bar and browser history still use each post’s canonical URL, and ordinary link navigation remains the fallback when JavaScript or fetching is unavailable. Client-side transitions send a virtual pageview through GoatCounter’s JavaScript API.
