返回作品列表
桌面應用 · 個人獨立開發

QuillNest

整合六大模組的 Windows 個人生產力桌面應用

一套整合便利貼、待辦、行事曆、記事本、專案管理與工作量追蹤的 Windows 桌面生產力套件。由單一開發者從零設計與實作,涵蓋架構設計、資料庫遷移、UI/UX 到打包發佈的完整流程。

類型
Windows 桌面應用(原生)
版本
3.0.3
技術
C# · WPF / XAML · MVVM
資料
SQLite · Entity Framework Core 10
程式規模
約 38,000 行原始碼 · 17 個 EF Core Migration
執行環境
.NET 10 · Windows 10 1809+
QuillNest 介面
專案概覽

集中管理日常工作與生活的一站式工具

QuillNest 是一款以 WPF + .NET 10 打造的 Windows 原生桌面應用,定位為「集中管理日常工作與生活的一站式生產力工具」。專案早期名為 PersonalAssistant,後期重新定位並更名為 QuillNest,同時重構了核心資料模型與部分模組架構。

整個專案由我獨立完成,從需求發想、系統設計、程式實作、資料庫遷移策略,到最終的安裝程式打包與發佈,皆一手包辦

核心功能

六大模組,圍繞一個應用

QuillNest 採模組化設計,整合六大生產力模組於單一應用中,每個模組皆可在設定中獨立開關。模組之間透過統一的 AppLabel 標籤系統串接,取代了早期分散的 Category / Tag / EventCategory 模型。

MODULE 01

便利貼Sticky Notes

桌面浮動便利貼,每張可獨立設定顏色、位置、大小、透明度、字級、置頂與摺疊,並提供多段鎖定層級防止誤改誤刪。

MODULE 02

待辦事項Todo List

任務管理,支援三段優先度、到期日、提前提醒、顏色標記與附件。透過 TodoItemWrapper 統一包裝層,行事曆事件能以「虛擬待辦」形式出現在待辦清單。

MODULE 03

行事曆Calendar

事件排程,支援全天與重複事件展開;重複事件的每次發生可個別標記完成/取消/備註(EventOccurrenceStatus),也可「分離」為獨立事件單獨編輯。

MODULE 04

記事本Notepad

長篇筆記,富文本編輯(獨立編輯視窗、插入圖片與表格)並支援 Markdown 模式,可釘選、附加檔案、單選分類搭配多選標籤。

MODULE 05

專案管理Project Management

跨模組整合中樞:待辦、事件、筆記、便利貼皆能以多對多方式關聯到專案。含活動時間軸、附情緒標記的手動反思紀錄(1 小時內可編輯)、完成狀態與獨立封存開關。

MODULE 06

工作量追蹤Workload Tracker

完全使用者自定義的工作量統計系統:以「範本」為單位,自訂欄位、目標型態、統計週期。與行事曆雙向連動,完成事件時自動帶入紀錄。

橫向系統

貫穿全應用的基礎建設

密碼保護

可鎖定整個應用或指定模組,含安全問題重設精靈與「記住解鎖」時效模式。

主題系統

淺色 / 深色主題加自訂強調色,以 DynamicResource 全域即時切換。

新手引導

首次啟動的設定精靈,搭配遮罩式互動教學(Mask + Callout 雙視窗導覽)。

備份 / 還原

備份檔內嵌版本 manifest,配合資料庫版本號機制,舊備份匯入時自動升級結構。

系統整合

系統匣常駐、開機自動啟動、Windows 原生 Toast 通知、單一實例控制(重複啟動時喚醒既有視窗)。

技術架構亮點

六件事,是這個應用真正的深度

1

完全泛用、零硬編碼的工作量追蹤系統

Workload Tracker 從零設計為使用者可自行定義的通用系統,不寫死任何特定業務邏輯。以「範本」為單位,自訂記錄欄位(文字/數字/勾選/日期)、項目列、服務對象與事件關鍵字;目標系統支援總量、分組總量、項目次數三種型態;規則引擎(WorkloadRuleEvaluator)處理頻率限制與前置條件。報表經 ClosedXML 匯出 Excel,含西元 / 民國紀年格式選項。

2

雙重資料庫 Schema 管理策略

為了同時支援「全新安裝」與「舊版資料庫升級」兩種情境,設計雙軌 schema 管理:EF Core Migrations 維持遷移快照的有效性;執行期升級路徑透過 IF NOT EXISTS 檢查實際套用 schema 變更,並加入 EnsureLatestSchemaAsync() 作為冪等的安全網。這項設計源於一個實際踩過的坑——遷移記錄被寫入卻未實際執行對應 schema 變更——進而催生出更穩健的防呆機制。

3

安裝版與可攜版雙模式

透過 PathHelper.portable 標記檔自動偵測,以獨立的建置組態(Release-Installed / Release-Portable)搭配條件編譯符號與專屬圖示區分。安裝版資料存於 AppData、透過 Inno Setup 打包、採 PrivilegesRequired=lowest可攜版資料與執行檔放在一起、自包含單檔、隨身碟即插即用。所有資料庫路徑解析統一經 PathHelper.DatabasePath,避免路徑邏輯散落各處。

4

統一的對話框與 UI 元件層

全應用的彈窗皆透過 DialogHelper / UnifiedDialog 統一處理,並針對 WPF Dispatcher 執行緒問題設計了安全呼叫包裝(SafeInvokeDialog),解決備份匯入流程中的執行緒與對話框結果設定例外。

5

穩健的備份與還原機制

備份匯出針對 SQLite 的 WAL 模式特別處理:使用 PRAGMA journal_mode=DELETE 並一併處理 -wal / -shm 檔案,避免資料庫損毀。還原時同時相容新舊兩種備份檔名,確保升級使用者的歷史資料不遺失。

6

啟動流程的防禦性設計

App.OnStartup 以 Mutex 實作單一實例控制,第二個實例會透過具名事件喚醒既有視窗後靜默退出;啟動即掛載 UnhandledException / DispatcherUnhandledException 全域例外捕捉並寫入日誌,再依序執行自動遷移檢查、設定載入與首次啟動精靈分流。

解決的技術挑戰(節錄)

具代表性的踩坑與解法

SQLite 保留字處理

Values 為 SQLite 保留字,所有原生 SQL 須以引號跳脫,EF Core 自動處理而原生 SQL 不會,需逐一檢核。

EF Core 快取一致性

全面採用 AsNoTracking() 搭配 ChangeTracker.Clear(),避免單例 Context 在刪除後讀到過期資料。

WPF 轉換器作用域

BoolToVisibilityConverter 等轉換器必須宣告於各 Window / UserControl,因 DataTrigger 的實例化早於 Visual Tree 建立。

WPF 捲動事件攔截

ComboBox、DataGrid 等控制項會吃掉捲動事件,透過 PreviewMouseWheel 重新導向至外層 ScrollViewer。

版面初次計算時序

可見性指派須在建構式中同步設定,確保 ScrollViewer 的 ExtentHeight 在首次版面 pass 即正確計算。

Mark of the Web 問題

解決 Windows 應用控制政策對未簽章 DLL 的封鎖,提供 Unblock-File 解法。

設計理念

選擇怎麼做,比選擇做什麼更重要

避免過度工程

對於單人維護的本地 SQLite 應用,刻意不導入完整的 DI / 介面抽象,在可維護性與複雜度之間取得平衡。

拒絕破壞性的「重置按鈕」式設計

刪除操作應自動串聯清理關聯資料(例如刪除工作量紀錄時連帶移除對應的事件映射),而非交由使用者手動善後。

本地優先、隱私優先

所有資料留在使用者裝置的 SQLite 中,不依賴任何雲端服務或帳號。

先理解、再驗證、後實作

採方法論式的開發節奏,每次只處理一個問題並在輪次之間進行建置驗證。

技術棧總覽

從框架到發佈的具體組成

核心.NET 10 · C# · WPF / XAML · MVVM(RelayCommand / AsyncRelayCommand)
資料層SQLite · Entity Framework Core 10 · dotnet ef CLI(遷移管理)
UI 元件MaterialDesignThemes(UI 元件) · WebView2
內容處理Markdig(Markdown 渲染) · ClosedXML(Excel 匯出) · Microsoft.Toolkit.Uwp.Notifications(Toast)
發佈dotnet publish 自包含單檔(win-x64) · 安裝版(Inno Setup)+ 可攜版(自包含單檔)
我在這個專案中的角色

唯一開發者,一路到底

作為唯一開發者,我負責了:整體系統架構與模組化設計、資料模型設計與多版本資料庫遷移策略(17 個 Migration 的演進管理)、全部前端 WPF / XAML 介面與互動邏輯、備份/通知/主題/密碼保護/跨模組標籤等共用服務、安裝程式打包與雙模式發佈流程,以及從 PersonalAssistant 到 QuillNest 的重構與重新定位。

下載 · Download
QuillNest v3.0.3

兩種發佈型態任選:安裝版透過 Inno Setup 安裝至使用者目錄(無需管理員);可攜版自包含單檔,隨身碟即插即用。所有資料一律留在本機。

安裝版 Setup.exe · 約 77 MB · 即將提供 可攜版 Portable.zip · 約 76 MB · 即將提供
未經數位簽章,Windows SmartScreen 可能顯示「未知發行者」,點「其他資訊 → 仍要執行」即可。若遇 DLL 被封鎖,執行 Unblock-File 或右鍵「解除封鎖」即可。