I came across Friend-Link-House while swapping links with a friend — his link page is built on top of Blog Roll, and it automatically pulls in posts from other people's blogs. That seemed worth having, so I decided to set up a copy for myself.

Get it running first, understand it later

Fork the repository to my own account, clone it onto the server, then run npm install, npm run gen, npm run dev. Nothing went wrong, and the page was there.

Swapping in my own feeds

The next job was replacing his friends' feeds with mine. The README he'd written and a look through main.js made the mechanism clear: every time the page is visited, it fetches the latest XML from the stored RSS sources, and those source URLs come from the table in README.md, read at the moment npm run gen runs. I hand-edited the table to match the friends I'd already linked with (only a few entries, so copying by hand was fine), re-ran npm run gen and npm run dev, and there were my friends' posts.

Making the front end look like mine

It worked, but the styling was still exactly my friend's. That felt a little awkward — the MIT license means reusing it is perfectly legitimate, but the look also clashed with my own homepage. The backend was more than I wanted to touch; the frontend, though, I could rewrite from scratch. I changed the background color and wrapped each post on the timeline in a card-ish container, which brought it closer to the style of my main site.

Putting it on a domain

I used nginx as a reverse proxy. My first configuration looked like this:

# proxy Friend-Link-House to the link house
location /Friend-Link-House/ {
    root /data/Friend-Link-House/web/dist/;
    index index.html;
}

After nginx -s reload, visiting loveapple.icu/Friend-Link-House returned a 503. I assumed it was a permissions problem, but even after raising privileges it still wouldn't load. So I asked DeepSeek, and the culprit turned out to be the directive itself: root gets appended to the location path, so nginx was looking in the wrong place. alias was what I needed. The working version:

# proxy Friend-Link-House to the link house
location /Friend-Link-House/ {
    alias /data/Friend-Link-House/web/dist/;
    index index.html;
    try_files $uri $uri/ /newspaper/index.html;
}

# asset resource path
location /assets/ {
    alias /data/Friend-Link-House/web/dist/assets/;
    expires 1y;
    add_header Cache-Control public;
}

With that in place, the domain loaded without complaint.

An entry point from the homepage

The remaining question was how to fold the new page into the existing site. My homepage runs on Hexo with the Butterfly theme, which has a menu setting for the items in the top-right corner — each item can take a relative or absolute URL and a custom icon. I added it like this:

menu:
  Home: / || fas fa-home
  # List||fas fa-list:
  # Music: /music/ || fas fa-music
  # Movie: /movies/ || fas fa-video
  Articles: /archives/ || fa fa-bookmark
  Tags: /tags/ || fa fa-tags
  DrawBoard: /Draw/ || fa fa-paint-brush
  Links || fas fa-list:
    Link List: /link/ || fa fa-link
    Link-House: https://loveapple.icu/Friend-Link-House/ || fa fa-newspaper

A few closing thoughts

Deploying someone else's open-source project for the first time made me nervous. I'm a complete beginner, and I kept worrying about tripping over some community rule or unwritten norm. Writing this up brought the same worry — that I'd make an obvious beginner's mistake and give people a laugh. But my honest view is that learning unfamiliar technology as a newcomer shouldn't mean getting stuck in the documentation. Even if you don't fully understand what each step does, you can get the thing running first and then work out what happened through practice and trial and error. A wall of docs is intimidating before you start; doing it by hand, step by step, is what makes it feel real.