Punch-PWA
打卡 ‧ 薪資管理 — 離線優先、純前端、零後端成本的漸進式網頁應用
關於這個專案
Punch 是一個給個人到小團隊使用的打卡 PWA,支援多公司、彈性薪資、加班/補休、自訂收入支出、歷史調薪與加密分享。整個應用採純前端、離線優先設計,資料儲存於使用者自己的 GitHub Gist,做到零後端、零託管成本 —— 資料完全由使用者擁有。
各大版本是逐步演進的分水嶺:v2 功能成形、v3 多檔儲存架構、v4 離線優先同步、v5 單筆班次資料模型、v6 導入 AI 對話助手、v7 支援 Google 雲端儲存。目前已迭代至 v7.4,持續維護中。
核心功能
- ☁️ Google 雲端儲存(v7 新增・BETA):除了 GitHub Gist,新增以自己的 Google Drive 作為後端,比 Gist 更私密(需登入授權、無公開網址)。提供三種儲存模式:① 只用 Gist ② 只用 Google 雲端 ③ Gist + 雲端即時備份(任何變動含刪除都同步),可自由切換。
- 🤖 AI 對話助手(v6 新增・BETA):內建 AI 助手,可填入任何 OpenAI 相容服務(OpenRouter、OpenAI、Groq、DeepSeek、本機 LM Studio/Ollama 等)。AI 會取得公司設定與當月出勤彙總,以聊天方式分析薪資與出勤、回答 App 用法;支援多組連線切換、串流逐字回覆、Markdown 排版,回覆一律繁體中文台灣用語,且涉及數字必依 App 資料作答、不捏造。
- 公司與薪資:多公司獨立計算與封存、月/日/時三種薪資類型、到職日年資計算、歷史調薪自動套用、每月固定扣除額(勞健保等)。
- 打卡與工時:單筆班次打卡(下班自動帶入可再編輯)、跨夜班、休息時間扣除、可調最小計算單位與捨入規則、平日/假日加班費率。
- 加班與補休:每筆班次可選加班費/換補休/無;兩種補休期限模式;補休過期自動以當時薪資結算;補休總帳與到期警示。
- 介面與圖表:日曆/年度/列表三種檢視、主頁公司篩選、月/季/年薪資區間切換、圓餅與長條圖表、深色模式、焦糖米黃 Editorial 風格。
- 資料與分享:離線優先+背景同步、免註冊先試用、多資料庫切換、加密唯讀分享連結(可選公司/薪資/密碼/期限)。
技術亮點
- AI 金鑰安全設計:AI 服務金鑰一律只存本機、不上傳資料庫(呼應「前端不放 secret」原則);對話紀錄可選擇跨裝置同步但不含金鑰,並依錯誤狀況(401/404/429/5xx/CORS)給明確指引。
- 以 GitHub Gist 作為資料庫:按年份分檔(config + 各年度 JSON),啟動只下載 config 與當前年加快開啟,巧妙繞過 Gist 單檔約 1 MB 限制。
- 離線優先同步引擎:資料即時寫入 localStorage、UI 不等網路,有網路時以 pending 佇列、時間戳比對與退避重試推送到 Gist。
- 端對端加密分享:以 PBKDF2 + AES-GCM 加密快照,存放於公開的 punch-shares Gist,接收端用連結加密碼解密;Token 與 Gist ID 僅存本機、不上傳。
- 內容凍結式 PWA 更新:Service Worker 採穩定快取名 + 手動更新重抓;並支援「強制更新」機制,重大問題版本可要求全員裝置立即更新並彈窗說明原因。
專案資訊
- 類型:漸進式網頁應用(PWA)
- 角色:個人專案・獨立開發
- 目前版本:v7.4
- 網址:punch.ladem.space
技術標籤
Google Drive API
AI 對話助手
OpenAI 相容 API
JavaScript
PWA
Service Worker
GitHub Gist API
AES-GCM
Chart.js
離線優先
純前端
設計理念
零後端、零託管成本,資料 100% 由使用者擁有並存放在自己的 Gist。離線優先讓操作不受網路影響,加密分享則在不犧牲隱私的前提下達成唯讀協作。
前往體驗 →