Engineering Notes

One Content Source, Three Reading Experiences: Web, WeChat Mini Program, and macOS

How I turned one source of technical notes into a responsive website, a WeChat Mini Program, and a native macOS reader through separate read-only APIs and platform-specific experiences.

HOUHUIYANG.COM

Scan to continue reading

Generating…

One Content Source, Three Reading Experiences: Web, WeChat Mini Program, and macOS

houhuiyang.com/en/notes/one-content-three-reading-experiences

I have gradually expanded my personal website into three real reading products: a desktop and mobile website for public access and search, a WeChat Mini Program for quick discovery inside WeChat, and a native macOS application for focused reading, bookmarks, and offline access.

They are not three separately maintained content libraries, and the clients are not differently sized web wrappers. Each article is maintained once in the website repository. Purpose-specific read-only APIs then deliver the appropriate representation to each client. The facts are shared; interaction, information density, caching, and product responsibilities remain platform-specific.

Try the products
Visit houhuiyang.com · Download Code & Product Notes for macOS 1.0.0 (macOS 14+)
SHA-256: 7a45940a1278f366f452467b766372e5a693f1d144b0be525c902461d38511e9

Why build three versions?

The same reader has different needs in different contexts. In a desktop browser, someone may arrive through search and expect complete articles, project context, and shareable URLs. Inside WeChat, the priority is opening quickly, understanding the essentials, and forwarding a useful page. At a Mac, a reader may want search, bookmarks, reading progress, and access to recently opened articles when the network is unreliable.

ClientPrimary jobContent formKey experience
WebsitePublic publishing and durable discoveryComplete Chinese and English contentSEO, sharing, responsive layout
WeChat Mini ProgramFast discovery inside WeChatChinese summaries and selected sectionsQuick launch, article and project navigation
macOSFocused desktop readingComplete MarkdownSearch, bookmarks, book spread, progress, offline cache

Website: the source of truth and the public entrance

The website owns the content. Markdown files, titles, descriptions, dates, tags, covers, and bodies live in one versioned repository. Next.js produces the localized pages, metadata, sitemap, and stable article routes.

The desktop experience carries the complete information architecture: what I am doing now, the systems I use, how I think, the path I have taken, practical AI work, and technical notes. An article therefore sits inside a broader record of long-term work rather than becoming an isolated fragment.

Full desktop version of houhuiyang.com

Desktop homepage preview. Click the image to open the complete capture.

The mobile website uses the same content but reorganizes it for a narrow viewport. Navigation becomes a mobile menu, horizontal cards turn into a vertical flow, and headings, actions, and timelines gain a different rhythm. A reader opening a link from search or chat does not need to install anything.

Full mobile version of houhuiyang.com

Mobile homepage preview. Click the image to open the complete capture.

The website retains the highest information completeness and owns public URLs, canonical metadata, Open Graph previews, the sitemap, and indexing. Native clients improve specific reading situations without replacing the open web.

WeChat Mini Program: shortening the discovery path

The Mini Program is designed for quick entry from a conversation, QR code, or profile. Its home screen keeps only an introduction, current interests, selected projects, and article access. A fixed tab bar makes Home, Articles, and Projects the three primary destinations.

Code & Product Notes WeChat Mini Program home

The Mini Program does not parse website HTML. It calls the independent /api/articles interface, which returns titles, descriptions, tags, reading time, and selected sections suitable for a lightweight client. The app renders content but cannot edit the source.

This boundary keeps website redesigns from breaking the Mini Program and lets the API deliberately control information density. The public site supports complete expression; the Mini Program supports low-friction discovery.

Scan with WeChat

Scan to open the Code & Product Notes Mini Program

macOS: turning articles into a desktop book

The macOS version is a native Swift 6 and SwiftUI reader rather than a WebView shell. Profile navigation sits on the left, a searchable article library occupies the middle, and a two-page book layout renders the selected article on the right.

Code & Product Notes macOS library and book reader

The desktop client uses the /api/reader namespace for profile sections, article lists, full Markdown, tables of contents, and public image resources. It is intentionally separate from the Mini Program API: one client needs compact summaries, while the other needs complete content and durable reading state.

The current release supports:

Download the macOS app

Download Code & Product Notes 1.0.0 DMG

It requires macOS 14 Sonoma or newer. The current package is ad-hoc signed. If macOS blocks the first launch, right-click the app in Finder and choose Open, or confirm it under System Settings → Privacy & Security.

Verify the download with:

shasum -a 256 houhuiyang-notes-macos-1.0.0.dmg

Expected digest:

7a45940a1278f366f452467b766372e5a693f1d144b0be525c902461d38511e9

How one article reaches three clients

Markdown articles and profile data
              │
              ▼
      Next.js content layer
       │          │
       │          ├── Public website: complete pages, SEO, sharing
       │
       ├── /api/articles: Mini Program summaries and selected sections
       │
       └── /api/reader: macOS Markdown, table of contents, and assets

Every client API is read-only. Articles are created, changed, and removed only in the content repository. Bookmarks, progress, and caches belong to the local experience and never become article facts.

Stable identifiers also reduce coupling. Clients can use slug + locale + updated as a cache version key, ignore unknown future fields, and fall back to the most recent successful cache when the service is unavailable. The website, Mini Program, and macOS app can evolve at different speeds without duplicating ownership.

What I learned

First, multiple clients do not require multiple content sources. A single owner and deliberate contracts let one new article reach every reading surface.

Second, responsive websites and native clients solve different problems. The web offers the lowest barrier and greatest openness. The Mini Program shortens discovery inside WeChat. The macOS app uses screen space, local storage, and native interaction to preserve deeper reading state.

Third, the APIs exist to stabilize product boundaries. The Mini Program should not depend on website DOM, and the desktop reader should not copy the article database. Contracts let clients share facts while keeping their own product decisions.

I want Code & Product Notes to become more than a portfolio page. It is a small system for sustained writing, publishing, reading, and iteration. The website, Mini Program, and macOS app are its current entrances; the durable asset is the unified, portable body of work behind them.

Back to Engineering Notes