🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

前言:對於工程師來說「最佳鬧鐘」是什麼

早上,無法起床。

我試過了大聲的鬧鐘、能用光線喚醒的鬧鐘燈,以及必須解決計算問題才能停止的應用程式。但是,一旦習慣了,二次入睡是很容易的。因為大腦會學習到「這只是一個鬧鐘而已」。

不過,對我們這些工程師來說,不論睡得多深,只要聽到的瞬間心跳會迅速上升,配合冷汗驚醒的「聲音」 應該是存在的。

沒錯,「生產環境的故障通知」

「如果每早固定時間生產環境燒起來,絕對能夠起床吧?」

為了驗證這種瘋狂的假設,我們開發了一個能實時生成虛構系統故障,由Zunda Mon(VOICEVOX)喚醒你的鬧鐘應用

0. 完成的WEB應用

儀表板畫面

🔗 目前公開的WEB應用在這裡↓

注意!

  • 這是一個玩笑WEB應用。心臟不好的朋友和疲勞值班的人請勿使用。
  • 此外,可能會出現無法正常運作的情況,請勿將其作為主要鬧鐘使用。

1. 我們做了什麼

在設定的時間(預設每天早上6點),Google Gemini 生成「虛擬的故障事件」,然後Zunda Mon(VOICEVOX)用悲慘的尖叫聲報告情況的Web應用。

挑戰模式

Zunda Mon: 「前輩!糟糕了!核心支付系統完全停止了!這是因為前輩以前寫的複雜奇怪的代碼嗎…?已經連系統重啟都做不了…!客戶的數據,糟了!你要怎麼辦…!」

畫面紅色閃爍,Web Audio API生成的不愉快警報聲回響著。
要停止這個聲音,必須準確地在屏幕上輸入顯示的「解決命令(例如:pcore-svc restart --force)」(挑戰模式)。

此外,儀表板可實時確認『語音合成伺服器的存活狀態』和『過去的事件數量(警報發射次數)』

2. 無謂而壯觀的系統架構

為了造一個鬧鐘,

  • 前端使用的是最新的 Nuxt 4
  • 後端使用的是近期熱門的 Convex
  • 實時故障生成使用有免費額度的 Google Gemini
  • 運行伺服器使用超高速的 Cloudflare Pages
  • 安全通信使用令人信賴的 Cloudflare Tunnel + Access
  • 然後,用於生成Zunda Mon語音的「「「自家的遊戲電腦」」」

這一切都是動員上陣的。雲端費用全在免費額度內,運行成本只有自家遊戲電腦的電費。

為何會這樣的架構

  1. AI生成「不會厭倦」的故障
    每天都同樣的鬧鐘聲會讓大腦習慣。利用Gemini 2.5 Flash,我設計出可以讓你每天享受新鮮的絕望,例如「資料庫的死鎖」、「信用卡支付的重複請求」和「DDoS攻擊」等。

  2. 有效利用家裡的GPU
    即時生成Zunda Mon的聲音(VOICEVOX)明顯需要GPU更快。但是雲端的GPU實例相當昂貴。因此,我們使用Cloudflare TunnelCloudflare Access來安全地公開自家的電腦,作為安全的語音合成API伺服器使用。
    「為了鬧鐘讓遊戲電腦常時運行」的矛盾感,成為這個應用的調味料。

遊戲電腦在空閒時測量的消耗功率為39Wh,因此30天計算,每度電31元的情況下,假如使用者為0人,大約是870元/月。如果有人使用,GPU就會發熱,消耗電力會暴增,但請隨意使用。

3. 實作中的瘋狂點

3.1 讓Gemini「做噩夢」的提示

使用Vercel AI SDK的 generateObject 來讓Gemini輸出結構化的JSON。在提示中學習「工程師絕望的情境」(是懷著這種心情寫的)。

// convex/generateIncident.ts
const result = await generateObject({
  model: google("gemini-2.5-flash"),
  schema: z.object({
    level: z.enum(["warning", "critical", "disaster"]),
    service: z.string(),
    logs: z.array(z.string()),
    voiceMessage: z.string(),
    resolveCommand: z.string(),
  }),
  prompt: `你是一個生成類似噩夢的系統故障的AI。
請依照以下條件生成一個虛構的生產環境故障:
- level: critical
- logs: Linux風格的錯誤日誌(讓心臟受不了的那種)
- voiceMessage: Zunda Mon用「的」語氣,將責任推給前輩(使用者)的絕望吼叫
- resolveCommand: 解決的Linux命令`
});

提示中將責任推給前輩(使用者)的絕望吼叫是關鍵。這能生成響應用戶心靈的悲鳴。

3.2 使用Web Audio API生成「不愉快」的警報聲

使用免費的警報聲音素材太過於溫柔。
我使用Web Audio API中的振盪器,生成能直接震撼腦部的鋸齒波。通過LFO調整頻率,以此來提升不安感。

// app/components/IncidentView.vue
const playSiren = () => {
  const osc = audioContext.value.createOscillator();
  osc.type = 'sawtooth'; // 使用鋸齒波以增強刺激

  // 不安感頻率調整
  osc.frequency.linearRampToValueAtTime(880, audioContext.value.currentTime + 1);
  osc.frequency.linearRampToValueAtTime(440, audioContext.value.currentTime + 2);

  // ... (省略) ...
  osc.start();
};

3.3 使用Cloudflare Tunnel + Access 將家裡要塞化

公開自家伺服器是相當恐怖的。因此,我們使用Cloudflare Tunnel來公開,而不需要經由路由器開啟端口。此外,還使用Cloudflare Access的Service Token認證,讓除了有認證資訊的請求外,其他一律拒絕。
「鬧鐘應用的安全性過於堅固」成為一個笑話。

3.4 通過Convex Cron進行「持續監控」

如果遊戲電腦掉了電,就不會響鬧鐘……為了避免這種情況,每30秒進行一次VOICEVOX伺服器的存活檢查。使用Convex的Cron功能,只需幾行代碼即可實現無伺服器的定期執行。

// convex/crons.ts
const crons = cronJobs();

// 每30秒執行一次Voice Server的健康檢查
crons.interval(
  "voice-server-health-check",
  { seconds: 30 },
  internal.healthCheck.runHealthCheck
);

在儀表板上,伺服器的狀態會實時顯示,若掉線則會發出警告。「明明是鬧鐘應用,卻有專業的監控儀表板」是其過度品質的亮點。

3.5 通過實時更新演出「監控儀表板感」

Convex的優勢是實時同步。伺服器狀態和事件數量不是透過polling,而是使用WebSocket進行推送通知,即刻反映至畫面。

// app/composables/useIncidentCount.ts
export const useIncidentCount = () => {
  const incidentCount = ref<number | null>(null);

  const startSubscription = () => {
    const { $convex } = useNuxtApp();
    // 訂閱DB變更,自動重新獲取變更
    unsubscribe = $convex.onUpdate(
      api.queries.getIncidentCount,
      {},
      (count: number) => {
        incidentCount.value = count;
      }
    );
  };
  // ...
};

當其他人解除鬧鐘時,自身畫面的事件數量(警報次數)也會實時增加……真是能夠體驗到「真正的故障應對儀表板」的臨場感。

4. 實際使用感受

效果非常顯著。

每天早上6點,從枕邊的智慧型手機傳來「前輩!!糟糕了!!」的尖叫。
在睡眼惺忪的腦海中「咦,什麼? 部署? 昨天做過什麼嗎?」驚慌失措地查看屏幕,看到紅色的控制台上出現CRITICAL ALERT的字樣。

心跳急速上升,完全清醒過來。
顫抖的手輸入pcore-svc restart --force等命令時,當鬧鐘停止,睡過頭的動力便也隨之消失。

5. 總結

這個應用是對工程師的「職業病」進行哈克的生活黑科技工具。
不過,副作用則是「做工作的夢頻率增加」「對來電音效變得敏感」等症狀已經從我這裡被報告出來。


以上就是爛應用 Advent Calendar 2025的第一天。明天將由@nabettu帶來「我製作了跟AI一起開心聊天的落子遊戲」。敬請期待✨️


原文出處:https://qiita.com/alclimb/items/e303cf655373992f61f4


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝15   💬3   ❤️3
315
🥈
我愛JS
📝1   💬3   ❤️2
45
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付