忙活了一年的開源社區,終於趕上了春節前的末班車!

語言: CN / TW / HK

隨着春節的臨近,忙碌了一年的小夥伴們,是不是都已經踏上了回鄉的列車?我呢也終於在春節前,完成了 HelloGitHub.com 的重構。

HelloGitHub.com 是我在 2017 年的時候用 Flask+jQuery 開發的網站,最初的想法很簡單就是為了方便管理和發佈《HelloGitHub 月刊》,上線後這一用就是 5 年。

隨着編程技術的不斷髮展,當年構建網站用的技術棧已經有些過時了,再加上之前網站的內容是圍繞月刊而不是開源項目構建,很難再開發更多的功能,很大程度上限制了它的發展。所以我在 2022 年初的時候,決定徹底重構 HelloGitHub 網站,將它做成一個圍繞開源項目的社區,用户可以在裏分享、評論、打分開源項目,就像開源項目的豆瓣

經過一年的努力,全新的 HelloGitHub.com 社區終於順利上線,我是越用越順手、越看越喜歡,雖然她入世未深還有很多不足之處,但俗話説的好”醜媳婦總得見公婆“,而且這不是快過年了嘛,也是時候介紹給大家認識了。

> 地址:http://hellogithub.com

下面,就讓我帶大家走進這個專注於開源領域、類開源版豆瓣的開源社區——HelloGitHub

一、不破不立

我建立 HelloGitHub 的初衷很簡單,就是想讓優秀的開源項目被更多人發現和喜歡,隨着開源的蓬勃發展,優秀的開源項目如雨後春筍般層出不窮。每月一期的 HelloGitHub 月刊,每期收錄的項目從第一期不到 20 個,現在已經提高到了近 40 個,但是就算是這樣還是有很多優秀的開源項目,會因為月刊的篇幅有限而無法入選

既然月刊限制了推薦開源項目的數量,那我就將月刊頁面打散做成信息流的樣子。這樣雖然月刊收錄的項目有限,但那些沒有收錄到月刊的開源項目,也能出現在 HelloGitHub 網站的首頁,讓更多人看到。

所以,我就把 HelloGitHub 網站的「首頁」改成了信息流,這裏不僅有月刊中的項目,還有未能入選月刊但同樣優秀的開源項目。這樣一來,用户不僅可以看到更多的開源項目,同時也可以讓沒能入選月刊的開源項目,獲得流量和關注

為了做出上述的功能,我需要將原本核心的月刊表和開源項目表進行重新設計。因為,之前 HelloGitHub 的數據都是圍繞月刊,像 Star 數、鏈接等開源項目的信息,只能算是月刊內容的擴展項。現在要倒過來將月刊內容變成開源項目的擴展內容。

這就相當於把月刊打散,最小單位從月刊改成開源項目,從而實現圍繞開源項目的首頁信息流,以及根據標籤過濾開源項目、搜索等功能。

二、相輔相成

接下來,隨着項目的獨立「開源項目詳情頁」也就順勢而生,用户可以在這裏查看更多關於該項目的信息,比如:項目評分、是否包含中文、主要的編程語言、是否活躍和開源協議等。

除此之外,還可以執行點贊、收藏、分享、訪問項目、評論、評分等操作。

用户是社區的核心,用户對開源項目的評價是這個社區的價值所在。經過一番思考和調研,我又重新設計和修改了一版「詳情頁」,突出了用户最常用的訪問項目操作,最關心的評分,並將點贊、評分等操作變得更加醒目

如果將 GitHub 上的開源項目信息比作產品成分表,那麼 HelloGitHub 上的標題、附加描述、用户點贊、評論和評分就是產品包裝。我認為大多數開源項目作者都是程序員,他們喜歡醉心於項目的研發,但不願花力氣去想宣傳語、寫文案、做推廣。

既然如此,我就想出了一個組合:你負責用代碼改變世界,HelloGitHub 來為你帶上獎章。所以我做了「網站徽章」的功能,用户可以通過一鍵複製代碼,將項目在 HelloGitHub 獲得的點贊數展示出去,並且點擊該徽章後可直接進入到開源項目的詳情頁,開源項目的潛在用户不僅可以方便地查看其它使用者的評價,還可以留下自己對開源項目的看法。

我經常説“不懂編程的人也可以為開源做貢獻”,在 HelloGitHub 一個點贊、一個評論、一個分享,都是在為你喜歡的開源項目做貢獻

三、以舊換新

這次網站改版的幅度有些大,導致有的老用户剛進來有些懵,找不到之前用的功能了。其實舊功能一個都沒有少,我只是將他們的入口整齊地放在了 header。

不僅如此,我還對舊網站的月刊、編程語言排行榜、文章等模塊做了移動端適配。

以及一些細節優化,比如:月刊內的目錄、期數選擇、增加了詳情頁的入口等。

網站還增加了黑暗模式,需要登錄後才能看到切換黑暗模式按鈕,就在用户頭像的旁邊。

除此之外,這裏還展示了用户等級和貢獻值,下面介紹下獲得貢獻值的 2 種方式:

  1. 發佈評論
  2. 分享項目

分享項目的按鈕分別在首頁「提交項目」和月刊「推薦」,現在分享開源項目時只要輸入想要分享的項目鏈接,就能立刻檢測出項目是否被推薦過,不僅可以有效地防止項目重複推薦,還可以避免最後提交時才發現項目已經推薦過,白寫推薦語的悲劇。

重頭戲來了,通過「我的主頁」可以進入到個人首頁,這裏有你的貢獻值動態、評論記錄、收藏的項目,而且收藏夾不僅可以自己看,還可以支持「公開收藏夾」從而讓更多人看到你精選的開源項目集。

四、羣策羣力

至此,HelloGitHub 社區的功能就介紹完畢了,下面聊一聊網站背後的技術棧、開發過程和貢獻者們。

HelloGitHub 一共由 4 個項目組成:

  • Geese:社區前端(Next.js+Tailwind CSS)
  • Pangu:後端接口服務(FastAPI)
  • Taichi:後台管理前端(Antd Pro)
  • Sand:爬蟲(Requests+rq)

Taichi:後台管理

2022 年初,我下定決心要重構 HelloGitHub.com 的時候,做的第一件事是重啟管理後台的 Taichi 項目,因為這樣不會影響還在運行的網站。目標是將管理後台的功能做成前後端分離,並且實現用它製作併發布月刊。

Taichi 創建於 3 年前是網站的管理後台,用的還是老版的 Antd Pro V2,基本處於荒廢的狀態。一開始我和猴子在舊的項目上開發,進度十分緩慢。後來項目新來了一位叫 我是油條 的前端同學,貢獻了幾個功能後,開始吐槽項目的 antd pro 太老了,想要升級一下。

我同意了,但講真的我根本沒抱什麼希望,思想上的巨人行動上的矮子我見多了,結果當天下午他就用 V5 將 Taichi 重寫了一遍。雖説我被啪啪啪地打臉,但還是開心地笑出了豬聲。這個沉寂了多年項目,終於要開足馬力往前衝了!

後面的三個月,我就專心寫產品文檔和接口,油條負責寫前端,在 6 月份的時候,我如願以償地在 Taichi 上面製作併發布了《HelloGitHub》第 75 期月刊。

再次感謝我是油條讓我在有生之年可以用 Taichi 出月刊。

Geese:社區前端

用新的管理後台發完月刊後,我又馬不停蹄開始了新的項目:Geese 社區前端。

因為新社區也要做成前後端分離,再加上我想將部分頁面(月刊)做成服務器端渲染(SSR),所以最終就選擇了基於 React 的 Next.js 框架。然後原子 CSS 框架在國外比較火,我一想反正我也不會 CSS,用哪個都得現學,索性就用最新、最流行的吧!所以最後項目的採用了 TypeScript+Next.js+Tailwind CSS 技術棧

> 項目地址:http://github.com/HelloGitHub-Team/geese

萬事開頭難,我花了一週時間,邊看 Next.js 和 Tailwind 的文檔邊搭建項目。

我自己一個人開發實在是太慢了,所以 7 月份的時候,我寫了篇文章《求助!網站重構需要幫手》尋求幫助,眾多大神紛紛伸出援助之手,有人貢獻代碼、有人修復 bug、有人幫忙部署。六個月後的 Geese 共有 400+ commit,7 位貢獻者,感謝各位的幫助,你們每一位都是我的英雄

這裏要特別感謝 RJM1996(如故)zhangzhonghe(被雨水過濾的空氣)兩位貢獻者,他們完成了項目收藏、評論、月刊等核心功能。沒有你們的參與和支持,我無法順利完成 Geese。

後端和數據處理

最後説一下數據這塊,後端和爬蟲這塊由我一個人開發完成,沒什麼可説的。

主要的困難在數據處理這塊,為了更好地介紹開源項目,我為項目增加了更多的相關信息,比如:標題、標籤、官網和文檔鏈接等。這些都需要人工一個個處理,這個時候我們熟悉的小魚乾就來幫忙啦!但架不住項目太多,目前還差 1500 多個項目沒處理。

這些未處理的項目,因為信息不全所以沒有詳情頁,這就是為什麼明明有的項目在月刊中,但是就是搜索找不到的原因。現在網站一期的功能已經開發完,後面我會全力梳理已有的開源項目,爭取在 3 月份的時候全部搞定!

另外,因為登陸從之前的 GitHub 授權換成了微信授權,這是兩套完全不同的用户系統,無法自動關聯。所以老網站的用户數據需要人工遷移過來,如果有用户想要將舊網站的收藏夾數遷移到新社區,請聯繫我

五、最後

隨着,全新的 HelloGitHub.com 上線,網站也從之前單一的展示月刊內容,升級到了支持用户互動的開源社區。這是一個新的高度也是新的挑戰,因為我沒有運營過社區,就像五年前我沒有做過站長一樣。我有些忐忑,不停地刷新着網站,彷彿一切又回到了五年前,過往種種浮上心頭:不破不立、相輔相成、羣策羣力,我的眼神逐漸變得堅定。

不忘初心,方得始終。HelloGitHub 會牢記初心,一如既往地給大家帶來有趣、優秀的開源項目。

最後,感謝大家一路走來的支持和陪伴,提前祝大家春節快樂,我們年後見!

以上就是本文的所有內容,如果您覺得這篇文章寫得還不錯,就請給我點一個贊,您的支持就是我更新的動力。