Rootrees:我把家裡的舊族譜,做成一款家族樹 App

我一直想做一款可以整理家族資料的 App。

這個想法不是突然出現的,而是來自一個很實際的需求:我手上有家裡族譜的電子檔。

其中很多資料,是早期手寫族譜拍照後留下來的數位檔案。雖然資料有被保存下來,但閱讀、整理與分享都不算方便。

以前我曾經嘗試用 Photoshop 重新整理。

但家族成員一多,整張圖就會變得非常龐大。畫面需要不斷往左右延伸,修改關係也很麻煩。如果想輸出成紙本,還會遇到尺寸與排版問題。

這個想法一直放在心裡,只是遲遲沒有真正開始執行。

直到今年四月,我才正式把需求拿出來,開始和 ChatGPT 討論:能不能做一款可以在手機和平板上建立家族資料,並且匯出 PDF 的家族樹 App?

這就是 Rootrees 的起點。

我真正需要的,不只是一張家族樹圖片

一開始看起來,需求似乎很簡單。

只要讓使用者可以新增家族成員、設定彼此關係,然後產生家族樹狀圖就好了。

但仔細思考之後,就會發現真正需要的功能比想像中更多。

家族資料不只是姓名而已,還可能包含:

  • 出生日期與離世日期
  • 性別
  • 照片
  • 備註與生平資料
  • 配偶關係
  • 父母與子女關係
  • 不同世代之間的排列方式

除了在 App 裡查看,我也希望資料可以匯出。

而且 PDF 不能只有一種形式。

有些時候,需要的是方便閱讀與保存的文字版本;有些時候,則需要可以一眼看出家族關係的樹狀版本。

因此,Rootrees 的 PDF 匯出功能分成兩種方向:

  • 家族成員資料的文字版 PDF
  • 呈現世代與親屬關係的家族樹狀 PDF

這兩種格式用途不同,也各自有不同的排版挑戰。

從規劃到上架,大約花了一個月

Rootrees 的開發時程大致如下:

  • 四月第一週:開始整理需求與規劃產品方向
  • 4 月 7 日:正式建立專案並進入開發
  • 4 月底:完成主要功能與測試
  • 5 月 7 日:上架 Google Play,正式對外開放下載

從開始建立專案到正式上架,大約是一個月。

如果只看時間,可能會覺得開發速度很快。

但這一個月並不是單純把功能列出來,然後交給 AI 自動完成。實際過程中,仍然需要不斷確認需求、測試功能、修正資料關係,並且處理許多原本沒有預想到的問題。

Rootrees 不只是一個 App

Rootrees 比較特別的地方,是它不是單一專案,而是由三個部分組成。

A. Web:行銷網站

Rootrees 有一個獨立的官方網站:

https://rootrees.app/

網站主要用來介紹產品功能、提供下載資訊,以及放置隱私權政策等相關內容。

目前網站使用 Vercel 架設。

B. Backend:後端服務

後端主要負責提供 API 給 App 使用,採用Digitalocean做為後端服務商。

使用者建立的家族成員資料、人物關係與相關內容,都需要透過後端進行儲存與同步。

這也表示 Rootrees 不只是一款單機工具,而是一個需要處理資料結構、帳號與雲端同步的完整服務。

C. App:雙平台應用程式

Rootrees 支援中文與英文,也同時支援 Android 與 iOS。

使用者可以在手機或平板上建立家族資料、整理人物關係、查看家族樹,並且匯出 PDF 檔案。

整體開發順序是:

Backend → App → Web

我先把後端資料結構與 API 建立起來,再進入 App 功能開發。等主要流程完成後,才補上行銷網站。

最大的挑戰,是需求和 AI 理解之間的落差

Rootrees 是我目前在 Vibe Coding 過程中,遇到最多問題的一個專案。

最大的挑戰不是單純的「程式能不能寫出來」,而是:

我腦中想要的功能,和 AI 理解到的功能,常常會有落差。

有些功能用文字描述看起來很清楚,但實際做出來後,才會發現彼此理解的畫面完全不同。

尤其是畫面流程、資料結構、人物關係與 PDF 輸出格式,不能只用一句話簡單帶過。

很多時候,必須搭配範例、使用情境,甚至像分鏡一樣,把每一個步驟說清楚,AI 才比較有機會理解真正的需求。

「PDF 顯示錯了」不是一個足夠清楚的需求

家族樹狀 PDF 是整個專案裡比較複雜的功能之一。

在 App 裡顯示的家族樹,和匯出成 PDF 後的結果,並不是完全相同的事情。

App 畫面可以讓使用者縮放、拖曳,也可以依照螢幕大小即時調整。

但 PDF 是固定尺寸的文件。

當家族成員數量增加,或某一代的兄弟姊妹、配偶與子女比較多時,就可能出現排列擁擠、節點重疊或頁面過大的問題。

遇到這種情況,不能只對 AI 說:

「PDF 顯示錯了,請幫我修正。」

因為問題可能來自很多不同地方:

  • 家族成員的資料排序
  • 父母、配偶與子女的關係判斷
  • 不同世代的層級位置
  • 兄弟姊妹之間的排列方式
  • 配偶節點是否占用額外空間
  • 樹狀圖節點之間的間距
  • PDF 頁面尺寸與輸出方向
  • 內容超出頁面時如何縮放

必須先把問題拆開,確認可能出錯的環節,再針對不同方案和 AI 討論。

有時候需要調整節點位置,有時候需要修改資料排序,有時候則必須重新思考 PDF 的輸出方式。

通常不會只靠一次對話就得到最適合的答案,而是需要經過多輪測試與修正。

表達需求,本身就是 Vibe Coding 的重要能力

開發 Rootrees 之後,我更明顯感受到一件事:

使用 AI 寫程式,並不代表只要會下指令就夠了。

真正重要的是,能不能把需求說清楚。

如果自己也沒有想清楚流程、資料關係與使用情境,AI 很容易做出一個「表面上可以執行」,但實際上不符合需求的版本。

尤其是比較複雜的產品,不能只用一句話要求 AI 完成整套功能。

比較有效的方式是:

  • 先拆分功能
  • 說明使用情境
  • 提供具體範例
  • 指出目前畫面與預期結果的差異
  • 分析可能出錯的位置
  • 設計幾種不同解法
  • 逐步測試與修正

AI 可以協助產生程式碼,也可以協助討論方案。

但產品設計、需求拆解與結果判斷,仍然需要自己負責。

從家裡的舊族譜,變成可以持續使用的工具

Rootrees 最初只是來自一個很單純的問題:

家裡留下來的族譜資料,有沒有更方便的整理方式?

從早期手寫資料的照片,到 Photoshop 裡龐大的族譜圖片,再到可以在手機與平板上建立資料、整理關係、匯出 PDF 的 App,整個過程其實就是把一個生活中的需求,逐步轉換成產品。

目前 Rootrees 已經支援中文與英文,並且陸續上架 Android 與 iOS 平台。

它還有很多可以持續改善的地方,但對我來說,這個專案已經不只是一次技術練習。

它也是目前最能代表我使用 AI 協助開發產品的一次經驗。

AI 的確讓一個人可以更快完成過去需要多人合作的工作。

但越深入做下去,就越會發現:真正決定產品品質的,仍然是你有沒有辦法把問題想清楚。

 

如果想要試試這個族譜App,歡迎下載。雙平台下載:AppStore | Google Play

發表迴響