尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
用 Next.js 寫的健行紀錄工具。上傳 GPX、把軌跡畫在地圖上、用圖表看累積成果。 資料存取在 Next.js 的 server 端直接進行,沒有另外一台 API server。Server Component 本來就跑在伺服器上,為了執行 SQL 而多打一次 HTTP 是純粹的開銷。 舊版(NestJS 後端 + Vite 前端)留在 hiking_map,兩邊的資料庫與儲存空間完全獨立,互不影響。 資料存取只在 server 端。 lib/db/ 的檔案都帶 import 'server-only',從 client component import 會在編譯期直接報錯,而不是把連線字串打包進瀏覽器。寫入走 Server Action。 SQL 用 tagged template,帶入的變數會自動變成參數化查詢,不會有 injection: lib/api/(舊的 NestJS client)還有少數地方在用,尚未移除完。 顏色不要寫死。 palette.css 放原始色票,tokens.css 把它們映射成語意化的名字(--color-panel、--color-accent…),元件只用後者。深淺主題靠 .light 覆寫同一組 token,所以換主題不需要改任何元件。品牌色目前是單一值,深淺共用。檢視完整 README ↗
用 Next.js 寫的健行紀錄工具。上傳 GPX、把軌跡畫在地圖上、用圖表看累積成果。
資料存取在 Next.js 的 server 端直接進行,沒有另外一台 API server。Server Component 本來就跑在伺服器上,為了執行 SQL 而多打一次 HTTP 是純粹的開銷。
舊版(NestJS 後端 + Vite 前端)留在 hiking_map,兩邊的資料庫與儲存空間完全獨立,互不影響。
npm install
npm run dev # http://localhost:4219
需要 .env.local,至少要有:
DATABASE_URL= # Neon(PostGIS)
JWT_SECRET= # 缺了會啟動失敗,這是刻意的
R2_ACCOUNT_ID= # Cloudflare R2:圖片與完整軌跡
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=
R2_ENDPOINT=
R2_PUBLIC_URL=
其他指令:
npm run build
npm run lint
npm run storybook # http://localhost:6006
src/
├── app/[locale]/ 頁面(App Router,路由帶語系前綴)
├── components/ 跨頁面共用元件,一個資料夾一個元件
├── features/ 特定領域的元件組合
├── lib/
│ ├── db/ 直接查資料庫,只能被 server 端 import
│ │ ├── index.ts neon() 連線,tagged template 自動參數化
│ │ └── *.actions.ts Server Action
│ └── api/ 舊的 NestJS client,尚未完全移除
├── styles/ palette.css(原始色票)+ tokens.css(語意化 token)
└── testing/mocks/ Storybook 與測試用假資料
資料存取只在 server 端。 lib/db/ 的檔案都帶 import 'server-only',從 client component import 會在編譯期直接報錯,而不是把連線字串打包進瀏覽器。寫入走 Server Action。
SQL 用 tagged template,帶入的變數會自動變成參數化查詢,不會有 injection:
const rows = await sql`SELECT * FROM trails WHERE slug = ${slug}`;
lib/api/(舊的 NestJS client)還有少數地方在用,尚未移除完。
顏色不要寫死。 palette.css 放原始色票,tokens.css 把它們映射成語意化的名字(--color-panel、--color-accent…),元件只用後者。深淺主題靠 .light 覆寫同一組 token,所以換主題不需要改任何元件。品牌色目前是單一值,深淺共用。
版面交給 PageLayout。 標題、副標、返回連結、外層間距都由它決定,頁面只負責內容。最大寬度統一在 app/[locale]/layout.tsx。
雙語。 zh-TW 與 en,文案放 messages/。數字與日期用 ICU 格式(例如距離是 {distance, number, ::.00}),不要在元件裡自己 toFixed。
定位收斂為個人紀錄工具——保存自己的健行紀錄、看圖表,不做社群。追蹤功能與即時 GPS 錄製都已移除,紀錄來源改為上傳 GPX。
進行中:GPX 上傳與編輯(裁掉忘記關錄製的路段、把多段軌跡合併)。
開發時按 Shift+D,把畫面上的 React 元件直接畫出來。
query = "12345678")Alt + 點擊釘選實作在 src/lib/debug/,資料來自 React 的 fiber tree 與 commit 掛鉤,
都不是公開 API,所以只在開發環境載入,讀取全程 try/catch。