Github:https://github.com/mohdjami/Travel
部署連結:https://travelplanai.vercel.app/
YouTube 影片:https://youtu.be/oeioDsKQ4cQ?si=U35aBhen3L3zJApq
上圖給出了應用程式、服務和解決方案的高級概述。
我利用了 Next.js、Supabase、Gemini-1.5-flash Model、Shadcn、Typescript 和 Tailwind CSS。
使用 Supabase 對使用者進行身份驗證和授權
為什麼要使用 Supabase 進行身份驗證和資料儲存?
吉圖布
證書
這裡我們使用了 Google gemini-1.5-flash 模型。
Next.js 用於建立全端應用程式。
由於伺服器端渲染、靜態網站產生和 SEO,Next.js 是一個絕佳的選擇。
從行程表中收到使用者首選項後,請求將連同所有資料傳送到後端。
然後在組件中使用行程來顯示資料。我還整合了傳單中的地圖。
Gemini-1.5-flash 是 Google 開發的先進人工智慧模型,為我們應用程式中的行程生成提供支援。該模型擅長理解複雜的旅行偏好並產生詳細的個人化行程。透過利用 Gemini-1.5-flash,我們能夠創建高度客製化的旅行計劃,並考慮預算限制、個人興趣和旅行持續時間等因素。
它為我們的旅行行程應用程式提供了幾個關鍵優勢。首先,人工智慧驅動的行程產生可以比手動方法更快、更有效率地處理大量有關目的地、景點和用戶偏好的數據。其次,它允許高度個人化的推薦,可以適應每個用戶的獨特興趣和限制。最後,人工智慧可以根據用戶回饋和旅行趨勢不斷學習和改進其建議,確保我們的應用程式對旅行者保持相關性和價值。
Leaflet 是一個開源 JavaScript 函式庫,用於行動友善的互動式地圖。為了將 Leaflet 地圖整合到我們的旅行行程應用程式中,我們遵循了以下關鍵步驟:
透過合併傳單地圖,我為生成的行程中的每個目的地和活動提供視覺背景,從而增強了使用者體驗。
我還遇到了傳單的問題,即地圖元件未加載 100%,導致錯誤和頁面無法正確加載。所以我用這個解決方案解決了這個問題。
為了增強使用者體驗並管理 API 使用,我實作了一個基於積分的系統。它的工作原理如下:
該系統使我們能夠控制 API 成本,同時為使用者提供使用服務的靈活性。
儀表板為使用者提供了產生的行程、剩餘積分和帳戶資訊的概覽。主要特點包括:
使用者設定檔和設定部分允許使用者自訂他們的體驗並管理他們的帳戶資訊。本節的主要特點包括:
為了增加產生 Itineray 的回應時間,我實作了一個佇列系統。
使用佇列處理所有非關鍵任務。
雖然產生行程後出現錯誤,但應該有一個回退機制。現在,如果資料庫中輸入資料有任何錯誤,則沒有後備機制,因此行程會遺失,需要修復。
目前我已停用 RLS 策略。將致力於此
問題:
旅行產生路線需要花費大量時間來產生行程。
它包含幾個過程:
解決方案:
透過仔細分析該路線,我可以看出插入使用者首選項、插入回應和更新積分不是關鍵任務,而將回應傳送給使用者是主要的關鍵任務。
因此,我可以使用佇列非同步執行這些非關鍵任務。
這種非同步方法可以減少很多反應時間。
實施快取機制可以顯著提高我們的旅行行程應用程式的效能和回應時間。透過快取經常存取的資料(例如熱門目的地或常見用戶偏好),我們可以減少伺服器的負載並為用戶提供更快的結果。這對於重複使用者或在產生更個人化的結果時顯示初始推薦特別有益。
我將為儀表板執行此操作,我將快取最近訪問的旅行行程,這將減少對資料庫的請求數量,最終使應用程式更快。
對應用程式進行 Docker 化,以便在 AWS Elastic Container Service 上輕鬆部署,這是自動擴展的最佳方法。
目前它部署在 Vercel 上用於演示使用。