Skip to content

Potato-dev-inc/project-locker

Repository files navigation

專案管理(Next.js)

Next.js 建置的自架式應用,主要給專案經理(PM)與小型產品/開發團隊使用:把與專案相關的資料集中在一處,例如 Markdown 需求與會議紀錄、PDF(合約、一頁式摘要、架構圖 PDF),以及放在各專案 docs/ 下的其他檔案(圖片、HTML 等,由文件檢視器處理)。每個專案有固定網址、方便上傳的儀表板、可選的自訂首頁(HTML 或 TSX,適合團隊入口頁),以及需要對外分享時的選用公開連結(免登入檢視特定文件或首頁)。

登入為選用:若設定驗證相關環境變數,介面與 API 會透過 電子郵件 OTPResend)保護;未設定時則完全開放,適合本機或內部試用。

部署與安全建議: 建議盡量在區域網路(LAN)或僅限信任的環境執行本應用,不要將實例長期對公開網際網路大範圍暴露。這樣可降低驗證設定疏漏、公開分享內容或自訂頁面帶來的風險,並減少惡意掃描、濫用與攻擊嘗試的暴露面。

English overview: README.en.md


適用對象

  • 專案經理:依專案/倡議整理需求、會議紀錄與 PDF 交付物。
  • 小型開發團隊(或設計+工程小組):共用 Markdown 說明、Runbook 與二進位/設計資產,以檔案系統為後端,不必另外架設完整 wiki 或雜亂的雲端資料夾結構。

功能概覽

  • 專案列表 /:建立專案(名稱會轉成網址安全的 slug)、進入首頁或儀表板。
  • 專案首頁 /{slug}:預設歡迎頁,或 home/custom.html(以 iframe 沙箱顯示整頁 HTML),或 home/custom.tsx(透過 react-live、Sucrase 即時預覽 React)。
  • 儀表板 /{slug}/dashboard:自訂首頁/TSX 與 docs/ 檔案樹分頁;上傳、重新命名、刪除等。
  • 文件總覽 /docs:瀏覽所有專案的 docs/;可用 ?project={slug} 篩選單一專案。
  • Markdown 與文件路由/{slug}/md/... 檢視 Markdown;/{slug}/doc/... 檢視 PDF、圖片、HTML 等由路由提供的檔案(另有對應的 /public/... 公開路由)。
  • 介面語系英文繁體中文zh-TW),依 Cookie 與 Accept-Language(見 src/lib/i18n/)。
  • 主題:淺色/深色。

src/app/layout.tsx 的 metadata 將產品描述為:具穩定網址路徑的每專案首頁與文件。


架構摘要

層級 說明
Next.js App Router 伺服端讀取資料;編輯器、對話框、預覽等為客戶端元件。
檔案系統 資料來源:data/projects/{slug}/(可用 PROJECT_DATA_ROOT 覆寫)。
src/middleware.ts 選用登入導向、公開檢視路徑略過、若設定 DOMAIN 則協助 /api/* CORS。
src/lib/projects.ts project.jsondocs/home/ 的讀寫;安全路徑解析(含 NFC/空白容錯的文件路徑)。
src/lib/public-share.ts public-share.json:哪些 homemd/…doc/… 可在 /{slug}/public/... 匿名存取。

沒有內建資料庫;備份即為複製資料目錄。


磁碟目錄結構

預設根目錄:data/projects/(或環境變數 PROJECT_DATA_ROOT)。

data/projects/
  {slug}/
    project.json          # { name, slug, createdAt }
    public-share.json     # 選用:{ "paths": ["home", "md/README.md", ...] }
    docs/                 # 由 doc/md 路由提供的檔案
    home/
      custom.html         # 選用:整頁 iframe 首頁
      custom.tsx          # 選用:即時 React 片段首頁

由本 app 建立的 slug 為小寫 [a-z0-9-]+


網址對照

路徑 用途
/ 專案列表、建立專案
/docs 跨專案文件瀏覽(?project= 篩選)
/login 已設定驗證時的 OTP 登入
/{slug} 專案首頁
/{slug}/dashboard 管理 home/*docs/*
/{slug}/md/[[...path]] Markdown 檢視(開啟驗證時需登入)
/{slug}/doc/[[...path]] 文件檢視(例如 PDF、圖片、HTML)
/{slug}/public、… 公開檢視(須列於 public-share.json

API(代表性子路徑):

  • GETPOST /api/projects — 列表/建立
  • DELETE /api/projects/{slug} — 刪除整個專案目錄
  • 其餘 …/api/projects/{slug}/… — 見 src/app/api/projects/
  • POST /api/auth/send-otpverify-otplogout — 工作階段流程

驗證行為

僅在 getAuthEnvConfig() 成功時啟用(src/lib/auth/config.ts):需 AUTH_SECRET(至少 16 字元)、非空的 AUTH_ALLOWED_EMAILSRESEND_API_KEYRESEND_FROM(或 AUTH_RESEND_FROM)。

啟用後:

  • 未登入使用者會被導向 /login(可帶 next= 返回路徑),例外為:
    • /{slug}/public/...(slug 不可為保留字 apilogindocs),
    • /api/auth/send-otp/api/auth/verify-otp
  • 其餘 /api/* 若無有效 session Cookie 則回 401

設定完整驗證時,不強制登入(利於本機沙盒)。


公開分享

透過應用內分享 UI 維護 public-share.json,可讓下列鍵在不登入情況下由 /public/... 提供:

  • 例如 homemd/{相對於 docs 的路徑}doc/{…}(詳見 src/lib/public-share.ts)。

僅 manifest 列出的鍵會在公開路由上提供。


本地開發

npm install
cp .env.example .env.local
# 編輯 .env.local — 見下表「環境變數」
npm run dev

瀏覽器開啟 http://localhost:3000

npm run build
npm run start

環境變數

.env.example 複製為 .env.local。請勿將 .env.local 提交版本庫。

變數 驗證是否必填 說明
AUTH_SECRET 工作階段簽章密鑰,至少 16 字元
AUTH_ALLOWED_EMAILS 允許登入的信箱(逗號、; 或換行分隔)。
RESEND_API_KEY Resend API 金鑰,用於寄送 OTP。
RESEND_FROMAUTH_RESEND_FROM 寄件者(須符合 Resend 已驗證網域;測試環境請遵守 Resend 測試寄件限制)。
DOMAIN 若設定,須與瀏覽器 Origin 完全一致(含 https://、無結尾斜線),供 /api/* CORSsrc/lib/cors.ts)。並納入 next.config.tsallowedDevOrigins 解析。
PROJECT_DATA_ROOT 專案資料根目錄;預設 ./data/projects
AUTH_ALLOWLIST_MAX 僅信任允許清單前 N 筆信箱。
NEXT_ALLOWED_DEV_ORIGINS 開發時額外允許的來源(逗號分隔)。

指令

指令 說明
npm run dev 開發伺服器
npm run build 正式建置
npm run start 正式伺服器
npm run lint ESLint

本倉庫的 Next.js

專案使用 Next.js 16 等版本,行為可能與舊教學不同。修改框架相關行為前,建議閱讀 node_modules/next/dist/docs/ 內說明與棄用提示(見倉庫根目錄 AGENTS.mdCLAUDE.md)。


部署注意

  • 正式環境設定與本機相同的驗證與 Resend 變數。
  • DOMAIN 與實際網站 Origin 一致,以便依 Cookie/CORS 呼叫 API 的客戶端運作。
  • 使用持久化磁碟或設定 PROJECT_DATA_ROOT,避免重啟後資料遺失。
  • 平台細節可參考 Next.js 部署說明

授權

package.jsonprivate: true — 預設為個人或內部專案;若對外發布請自行新增授權條款檔案。

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages