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

前言

我在 JISOU 學習中,Heyho-。
作為學習 React 的一環,我從個人應用的構思到 MVP 建立,再到應用開發進行了全過程。
在約一個月的有限時間內,透過「從 0 到 1 的創造」這次首次經驗,我獲得了許多學習和啟發。
本文將總結應用的概述、開發過程、所遇到的困難以及所採取的創新措施。


創建的應用概述

這次創建的是「可以根據家裡調味料提出替代品的應用」

例如當「沒有豆瓣醬」時,AI 會提議「味噌+七味辣椒+芝麻油」等,
通過組合家中現有的調味料來提供替代的點子。

開發的起因

我平時喜歡烹飪,但有以下幾個煩惱:
「即使購買調味料,最終也無法用完而被丟掉」
「在查詢替代調味料時,卻出現家中並不擁有的調味料」

每個家庭擁有的調味料各不相同。
因此我想,如果有「只根據自己家裡現有調味料提出替代方案的應用會很方便」
便開發了這款應用。

應用希望解決的問題

這款應用解決了以下幾個問題:

  • 減少無法用完而產生的調味料浪費
  • 使能夠用家中已有的食材完成烹飪
  • 省去購買食材的需求,節省開支與時間

此外,通過註冊飲食限制(如:素食、無麩質等)和過敏資訊,
也能提供適合自己的替代方案

功能概述

登入畫面

使用 Supabase Auth 實現以 Google 帳戶登入。
登入後,將能處理用戶專屬的數據。
image.png

新規註冊畫面

每位用戶可以選擇「家中擁有的調味料」和「飲食限制(過敏、素食等)」。
調味料採用勾選框形式,最小化用戶的輸入負擔
image.png

搜索畫面

帶入註冊時的信息,輸入想要替代的食材後點擊搜索按鈕,將利用 Gemini API 生成替代建議。
搜索結果會即時反映為歷史記錄。
image.png

image.png

使用技術

類別 使用技術
前端 React / TypeScript / Vite
認證與資料庫 Supabase (Auth, Postgres)
測試 Vitest/React Testing Library
部署 Firebase Hosting
樣式設計 TailwindCSS / shadcn/ui
CICD Github Actions
AI 工具 Gemini API

使用 Gemini 的原因及與 ChatGPT 的不同

在此次的 AI 提案部分,我使用了 Gemini API。
原因是我在之前參加的黑客松中曾經使用過 Gemini,
因此想要將這些知識應用到自己的應用中去實現 AI

雖然 ChatGPT 也能實現相同的功能,但
這次我重視的是「如何將 AI整合到自己的應用中」。

選擇 Gemini 使我能具體體驗到 API 鍵的設置、請求的發送和響應的處理等,
對於 AI 在應用中的實現流程有了更深入的了解

我的目的是學習「如何整合 AI」,而不是僅僅關注結果的精確度,
這是與直接使用 ChatGPT 的一個重要區別。

實現中的創新點

  • 讓用戶只需在輸入框中輸入一個「想替代的食材名」,便可進行搜索,
    消除了「用文字輸入」的麻煩。
  • 家中現有的調味料可通過勾選框形式註冊,並且調整使其便於瀏覽和滾動。
  • 每位用戶的家中調味料各有不同,因此可以針對每位用戶搜索替代建議。
  • 聚合所有用戶數據,顯示「常用調味料排名」,可視化一般使用的調味料,以便未來開發使用。

苦戰中的難點和學習

設計的困難和 MVP 思維的重要性

這是我首次自己設計 MVP(最小可行產品),
實施時遇到許多問題,例如「我想添加這個功能,但現在的資料表設計無法支持」。

最終需要進行重新設計和大幅度的資料表結構變更,
我深刻感受到預先建立良好的數據結構的重要性

但另一方面,當我試圖在設計上做到完美時,卻發現自己很難展開行動。
因此我覺得首先應該製作出可運行的產品,然後再慢慢改進
這種 MVP 思維至關重要。

通過小步驟逐漸成長,開發進程能更加積極向前推進,這是我發現的一個亮點。


透過 Supabase Auth 進行會話管理

我實現了以 Google 登入的功能,但在刷新時會話資訊卻無法保持,
畫面從登入狀態還原回登出狀態的現象令我困擾不已。
在查找原因的過程中,我意識到自己並未理解會話的機制。
因此我從頭學習這一機制,最終通過 onAuthStateChange 監控狀態,
並將其存入 sessionStorage,成功解決了這個問題。

這次經驗讓我深刻感受到,前端開發中認證和會話管理的理解不可或缺。


個人開發中的學習深化

在這次開發過程中,我自己查找並實現了課程或教材中未提及的技術(Supabase Auth、Gemini API 整合等)。
一開始遇到很多困難,但因為有一個「讓我的應用運作所需的技術」的明確目標,自然而然地提升了我的學習動機。

我注意到一旦目標明確,理解的速度就會顯著提高。
迫於需要學習,使我獲得了“知識與實感並存”的體驗。


超越想法的牆的難點

最開始的時候,我只想到像「TODO 應用」或「食譜應用」這類已存在的想法。
即使意識到「向用戶提供價值」、「與他人區別開來」這一主題,卻常常模糊到無法進展。
通過與講師的磋商,我終於從內心深處引出新的理念。

從這次經驗中我學會了思考創意的方式,
培養了在日常生活中關注不便之處的習慣,並開始考慮「這個問題在其他領域是如何解決的」。


小步驟開發的重要性

在開發初期,我常常想將所有想做的功能都添加進來,
但結果是做的事情變得太多,導致動力下降。

然而,在我意識到「首先要完成最基本的功能」後,
即使是小規模的、可運行的東西也讓我體會到了成就感,從而提升了開發的動力。

這段經驗讓我意識到,小步驟開發並逐步成長是持續個人開發的關鍵。
與其追求完美,不如先行動,隨後自然會顯現出下個挑戰。
這樣的思維方式我希望未來的開發中依然能夠秉持。


設定期限的重要性

這次我設定了「在 1 個月內完成」的期限來推進開發。
結果是這個設定的期限成為了強大的推進力。

有了限制時間後,更能意識到優先次序,
並且能全神貫注於「現在該做的事」,這是這次的一個好處。

如果沒有期限,我覺得機能會無止境增添而無法完工。
這次經驗讓我覺得設定期限也是設計的一部分。

短時間內完成一次釋出,然後不斷改進,
這樣的循環能更快速地促進學習。


未來希望追加的功能

烹飪器具的替代提案功能

不僅限於調味料,希望能夠提出烹飪器具的替代方案。
我考慮增加一個功能,利用 AI 提供基於日用品的替代方案。

調味料的用戶登記功能

目前只能選擇已註冊於資料庫的調味料,
希望能讓用戶能夠自己新增調味料。
另外,當調味料數量增加時,也希望能改善搜尋和勾選的介面。

支援 Google 以外的登入

由於此次開發將期間設定為一個月,因此僅限於 Google 登入,
我希望能讓用戶能夠使用姓名或電子郵件等方式進行註冊。


結尾

半年前我還沒有使用過 React 或 TypeScript,完全沒有開發經驗,但
這次,竟然能夠自己完成個人應用,讓我感到非常驚訝。

通過這次開發,我體會到「從開發中獲得的涵養,遠超過學習技術本身」的道理。
設計、學習、動力、時間管理等,都是必須要親手操作過才能理解的內容。

透過這次經驗,我學會了即使是小規模,也要先試著把它做成型的勇氣
以及將問題轉化為學習的心態的重要性

我的技術仍然不成熟,但我期待在持續的個人開發中磨練自己的技能,
希望能夠作為一名工程師不斷成長

JISOU 正在招募新成員!

在程式設計輔導 JISOU,我們正在招募新成員。
不如在日本首屈一指的輸出社群中提升自己的職業生涯?
有興趣的朋友,歡迎查看我們的官方網站!
▼▼▼


原文出處:https://qiita.com/y-keiyu/items/86a75714a4f14d484c87


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

共有 0 則留言


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