Personal Website

Personal Website

Overview

My personal website. It serves as a place to publish projects, writings, notes, development logs, data visualization, photography, etc.

I built this website with a focus on simplicity, performance, and a clean reading experience.

Explore the site

  • Projects — Things I’ve built
  • Writings — Articles grouped by year
  • Stream — Short updates, dev logs, and experiments
  • Now — What I’m currently working on
  • About — A short introduction
  • Notes — Digital garden
  • Uses — Tools and equipments I use
  • Photos — Collection of my amateur photographs
  • Guestbook — Say hi?
  • Colophon — How this site was made

Tech Stack

  • Astro 6.1
  • TailwindCSS 4.2
  • Cloudflare Pages
  • Cloudflare R2 Storage — To store images used in /photos
  • GitHub (Private Repository)

Roadmap

Project Stream

Stream taxonomy update

Mar 30, 2026

I’ve changed some icons and narrow down the Stream post categorization

Maintenance — To make it flat, a combination of refactor and fix Release — Package icon made more sense here Life — Potted plant gave the “life” vibes

Also, dropped the idea category to simplify things since I have a Notes page.

Digital garden now synced with Obsidian

Mar 28, 2026

Digital garden posts in /notes are now synced with my Obsidian vault. It’s stored in a separate private repository, linked via git submodules and updated using the Obsidian Git plugin.

Migrating to Astro 6

Mar 27, 2026

The site is now running on Astro 6 🚀. Made a few tweaks to migrate from Astro 5:

  • Moved src/content/config.ts (old content collection) to the new src/content.config.ts. Also, now we import { z } from astro/zod instead of astro:content.

  • Removed @astrolib/seo because of compatibility issue with Astro 6.

    Cloudflare Pages — Build log
    28 collapsed lines
    2026-03-26T13:35:38.020109Z Cloning repository...
    2026-03-26T13:35:38.697968Z From https://github.com/odhyp/odhyp.com
    2026-03-26T13:35:38.69854Z * branch 17ba1bde64cc7d69801e7adf9725a85af534c474 -> FETCH_HEAD
    2026-03-26T13:35:38.698666Z
    2026-03-26T13:35:38.732626Z HEAD is now at 17ba1bd refactor: update uses page
    2026-03-26T13:35:38.733003Z
    2026-03-26T13:35:38.801733Z
    2026-03-26T13:35:38.802168Z Using v2 root directory strategy
    2026-03-26T13:35:38.814951Z Success: Finished cloning repository files
    2026-03-26T13:35:41.134317Z Checking for configuration in a Wrangler configuration file (BETA)
    2026-03-26T13:35:41.134982Z
    2026-03-26T13:35:42.240986Z No Wrangler configuration file found. Continuing.
    2026-03-26T13:35:42.473427Z Detected the following tools from environment: npm@10.9.2, nodejs@22.16.0
    2026-03-26T13:35:42.473838Z Installing project dependencies: npm clean-install --progress=false
    2026-03-26T13:35:44.705903Z npm error code ERESOLVE
    2026-03-26T13:35:44.706235Z npm error ERESOLVE could not resolve
    2026-03-26T13:35:44.706384Z npm error
    2026-03-26T13:35:44.706461Z npm error While resolving: @astrolib/seo@1.0.0-beta.8
    2026-03-26T13:35:44.706523Z npm error Found: astro@6.0.8
    2026-03-26T13:35:44.706555Z npm error node_modules/astro
    2026-03-26T13:35:44.706583Z npm error astro@"^6.0.8" from the root project
    2026-03-26T13:35:44.706621Z npm error peer astro@"^6.0.0" from @astrojs/mdx@5.0.2
    2026-03-26T13:35:44.706714Z npm error node_modules/@astrojs/mdx
    2026-03-26T13:35:44.706754Z npm error @astrojs/mdx@"^5.0.2" from the root project
    2026-03-26T13:35:44.70679Z npm error 1 more (astro-expressive-code)
    2026-03-26T13:35:44.706828Z npm error
    2026-03-26T13:35:44.70688Z npm error Could not resolve dependency:
    2026-03-26T13:35:44.706926Z npm error peer astro@"^1.2.1 || ^2.0.0 || ^3.0.0-beta.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-beta.0 || ^5.0.0" from @astrolib/seo@1.0.0-beta.8
    2026-03-26T13:35:44.706981Z npm error node_modules/@astrolib/seo
    2026-03-26T13:35:44.70703Z npm error @astrolib/seo@"^1.0.0-beta.8" from the root project
    2026-03-26T13:35:44.707251Z npm error Conflicting peer dependency: astro@5.18.1
    2026-03-26T13:35:44.707296Z npm error node_modules/astro
    2026-03-26T13:35:44.707338Z npm error peer astro@"^1.2.1 || ^2.0.0 || ^3.0.0-beta.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-beta.0 || ^5.0.0" from @astrolib/seo@1.0.0-beta.8
    18 collapsed lines
    2026-03-26T13:35:44.707369Z npm error node_modules/@astrolib/seo
    2026-03-26T13:35:44.707435Z npm error @astrolib/seo@"^1.0.0-beta.8" from the root project
    2026-03-26T13:35:44.707541Z npm error
    2026-03-26T13:35:44.707583Z npm error Fix the upstream dependency conflict, or retry
    2026-03-26T13:35:44.707636Z npm error this command with --force or --legacy-peer-deps
    2026-03-26T13:35:44.707685Z npm error to accept an incorrect (and potentially broken) dependency resolution.
    2026-03-26T13:35:44.707722Z npm error
    2026-03-26T13:35:44.70776Z npm error
    2026-03-26T13:35:44.707796Z npm error For a full report see:
    2026-03-26T13:35:44.70792Z npm error /opt/buildhome/.npm/_logs/2026-03-26T13_35_43_047Z-eresolve-report.txt
    2026-03-26T13:35:44.708001Z npm error A complete log of this run can be found in: /opt/buildhome/.npm/_logs/2026-03-26T13_35_43_047Z-debug-0.log
    2026-03-26T13:35:44.767113Z Error: Exit with error code: 1
    2026-03-26T13:35:44.767497Z at ChildProcess.<anonymous> (/snapshot/dist/run-build.js)
    2026-03-26T13:35:44.767818Z at Object.onceWrapper (node:events:652:26)
    2026-03-26T13:35:44.768276Z at ChildProcess.emit (node:events:537:28)
    2026-03-26T13:35:44.768397Z at ChildProcess._handle.onexit (node:internal/child_process:291:12)
    2026-03-26T13:35:44.773818Z Failed: build command exited with code: 1
    2026-03-26T13:35:45.943035Z Failed: error occurred while running build command

    I implemented a custom Head.astro component. SEO metadata is now handled via props passed through BaseLayout.astro for every pages.

New stream post icons

Mar 10, 2026

I’ve added some new icons for Stream posts, with each tag represents the type of update.

Feature — A new capability or functionality Refactor — Code improvements or restructure Fix — Bug fixes or corrections to previously broken things Experiment — Small tests, prototypes, or technical explorations Idea — Concepts and potential features that may be developed later Release — Version updates, deployments, or notable milestones Life — Personal updates or notes not directly related to development

Hello World!

Jan 03, 2026

Welcome to Stream, a new addition to the site.

This page host a chaotic stream of short notes, development logs (new features, bug fixes), experiments, ideas, and occasional life updates. Somewhere between a micro-blog and a dev log.

Tags:
#Astro#Tailwind CSS
Back to Projects

Comment