終於寫到Day 30了~在過去寫文章的日子裡,從一個模糊的想法開始,透過每天的持續推進,一手打造出橫跨前後端、整合了LLM人工智慧、具備雲端同步與雙平台上架能力的App。學習與實踐的馬拉松。
今天想回顧這趟充實的開發之旅,分享過程中遇到的挑戰與收穫,整理專案中使用的所有資源,並看看這個靈感App未來還可以怎麼樣,但要先休息一下寫文章,因為其實我真正實作做的進度是落後的,要補回來一下,因為我會一直邊操作邊修改文章
一、專案回顧:30天的開發之旅
這30天的開發過程,我大致劃分為四個階段:
這個階段是從 0 到 1 的過程。我們確立了Flutter x LLM x n8n的技術選型,並迅速搭建起後端的自動化工作流。n8n負責定時抓取RSS來源、篩選內容,然後呼叫LLM API (如 OpenAI 或 Google AI) 產生摘要與標籤,最終透過Webhook API將這些寶貴的靈感資料提供給前端。這週的挑戰在於Prompt的設計與後端流程的穩定性。
有了數據源,就開始往Flutter前端前進,打造使用者最直接的互動體驗。我們實作了核心的卡片滑動介面、引入Riverpod進行狀態管理,並透過Hive建立了離線快取功能,確保 App 在無網路狀態下依然可用。這週的重點是將抽象的資料轉化為流暢、直覺的操作。
當App有了核心體驗後,我們開始將它與更廣闊的雲端生態系連結。我們整合了Firebase Cloud Messaging (FCM) 來實現推播通知,並透過Firebase Auth和Firestore實現了匿名登入與多裝置間的資料即時同步。這讓「三則靈感」從一個單機App,蛻變為一個具備雲端能力的服務。
在最後衝刺階段,我們為App加入了畫龍點睛的「語音轉文字筆記」功能。更重要的是,透過單元測試與整合測試為 App的穩定性把關,並完成了App Icon和啟動畫面的設計。走完Android和iOS兩大平台從簽署、打包到發布至內部測試軌道的完整流程。
二、挑戰與解決方案
回顧這段路,有幾個特別值得分享的挑戰:
如何設計出能穩定生成高品質摘要與標籤的Prompt,我覺得這是一門藝術,因為需要不斷的嘗試與調整,才能找到一個兼顧內容精煉度與格式穩定性的Prompt模板。
從純本地狀態(Hive)遷移到雲端同步狀態(Firestore)的過程很繁瑣,透過Riverpod的Provider架構,將資料來源抽象化,讓UI層可以無縫地在離線快取和雲端即時數據之間切換。
Android的Keystore簽署和iOS的憑證與Bundle ID設定,是兩個截然不同卻同樣充滿細節的流程,加上我對Android系統好不熟悉,唯一的解決方案就是耐心、細心地遵循官方文件,還有更重要的,不斷跟我的AI溝通~一步步完成設定。
三、專案資源總整理
為了方便大家學習與交流,我將專案的相關資源整理如下:
四、未來展望
30天的挑戰雖然結束了,但靈感App的發展才要開始,想好App名字與重新再次過一遍App架構(強迫症的我自己需要這麼做)
對於未來,期許自己:
一、能使用更智慧的LLM整合:除了生成摘要,未來可以讓 LLM 根據使用者的筆記內容,提供個人化的深入分析或相關靈感推薦。
二、來源的完全客製化:將Day 21建立的UI擴充成完整功能,讓使用者可以自由新增、管理自己感興趣的任何 RSS 來源 。
三、靈感筆記的深化:增加筆記的編輯功能,支援Markdown格式,甚至可以讓使用者將多則相關的靈感串連成一個知識網路。
四、跨平台擴展:善用Flutter的功能,將靈感App擴展到平板、桌面甚至網頁端,實現全平台的靈感捕捉體驗。
最後,感謝有觀看我鐵人賽30天的讀者~希望這個系列文章能為你帶來一些啟發,也鼓勵你動手去實現自己的想法,因為最大的靈感與收穫,永遠來自於手動創造的「過程」本身。
【哈囉你好:)感謝你的閱讀!其他我會常出沒的地方:Threads】