一堆單頁小工具。每個都是一個 HTML 檔、零依賴、離線可用,資料全部留在瀏覽器裡。
線上版:https://toolbox.catcatcatcat.cc
🟢 目前維護中。 持續新增與修正單頁小工具。
| 路徑 | 說明 |
|---|---|
zine-fold/ |
八折小誌拼版器——把 8 張頁面圖排進一張 A4 橫向紙,列印後折三次、剪一刀就是一本 8 頁小誌 |
id-photo-sheet/ |
證明寫真風圖片產生器——一張照片排成 2×4 八格相片,可調姓名、日期、用途與流水號 |
budget-quest/ |
月光貓貓:預算生存記帳——把 1–10 個預算池當成生命條,記帳、節約、匯出本機備份 |
receipt-maker/ |
領據產生器——填好抬頭、事由與金額排成一張 A4 領據,付款方式可選現金或匯款,可選代扣稅額,戶籍地址會提示要寫到鄰里,直接列印或存成 PDF |
speaker-timer/ |
講者計時器——給活動講者看的超大倒數,剩下設定的時間時響一次提醒音,時間到再響一次,超時改成紅色往上加,可鋪滿整個螢幕 |
沒有框架、沒有 build step、沒有後端。每個工具就是一份 HTML,用瀏覽器直接打開即可,也可以存成檔案帶著走。想在本機預覽整站:
python3 -m http.server 4180
工具不會把你的檔案送到任何地方。程式碼裡沒有 fetch、沒有 XMLHttpRequest、沒有後端。需要跨次記憶的 zine-fold 設定留在 localStorage、頁面圖片留在 IndexedDB;id-photo-sheet 連照片都不保存,關閉分頁即清除;receipt-maker 只把抬頭、稅率這類文件設定寫進 localStorage,姓名、身分證字號、地址與帳號不留存;speaker-timer 只記演講長度與提醒音偏好,提醒音是瀏覽器即時合成的,沒有音檔。這些資料都只存在使用者自己的瀏覽器裡。
receipt-maker 的「複製回傳連結」把填好的內容編碼在網址的 # 片段裡。依 HTTP 規格,# 之後的內容不會送給伺服器,所以連結只在你和收件者之間傳遞;但它畢竟是一段網址,會留在你貼上的聊天室或信件裡,個資敏感時請只傳給信任的對象。
工具資料留在瀏覽器裡:字型直接內嵌在 HTML 裡,不走 Google Fonts CDN;目前工具頁沒有第三方請求。即使未來加入廣告,使用者放進工具的圖片、文字與檔案也不會交給廣告服務。頁面存成本機檔案後離線打開,核心功能與外觀仍可使用。
自己驗證:開發者工具 Network 分頁重新整理頁面,除了頁面本身不該出現任何請求;或在 Console 執行 performance.getEntriesByType('resource'),應該回傳空陣列。
程式碼以 MIT License 釋出。
字型內嵌在頁面裡,等同隨本專案散布,因此附上授權全文與版權宣告。兩者皆採 SIL Open Font License 1.1:
| 字型 | 版權 | 授權全文 |
|---|---|---|
| Archivo | Copyright 2020 The Archivo Project Authors (Omnibus-Type/Archivo) | fonts/OFL-Archivo.txt |
| IBM Plex Sans/Mono | Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" | fonts/OFL-IBM-Plex.txt |
OFL 允許內嵌與再散布,但要求保留版權宣告與授權全文,請勿刪除 fonts/OFL-*.txt。
字型來源檔與內嵌腳本住在 fonts/。改動字型設定後重新產生內嵌區塊:
python3 fonts/build-fonts.py # 用本機 .woff2 重建頁面
python3 fonts/build-fonts.py --fetch # 先重新下載字型再重建
腳本只會覆寫每個頁面裡 <!-- fonts:begin --> 到 <!-- fonts:end --> 之間的內容。