main
Nestly
Nestly 是一個以 Go 打造的房地產系統。後端使用 chi 作為 HTTP 路由器,網頁介面不依賴任何前端框架,直接以 Go 標準庫 html/template 進行 server-side rendering(SSR),樣式採用 Tailwind CSS(standalone CLI 建置,無需 Node.js)。
特色
- 輕量技術棧:chi 路由器、
html/template模板引擎與 GORM,不引入前端打包工具或 JavaScript 框架 - Server-side rendering:頁面由後端直接輸出完整 HTML,first paint 快、SEO 友善
- Tailwind CSS:以 standalone CLI 掃描模板產生最小化的 CSS,模板與靜態資源透過
go:embed內嵌,部署只需單一執行檔 - 中介軟體架構:利用 chi 內建的 middleware(logger、recoverer 等)與自訂 middleware 處理日誌、錯誤還原與驗證
- 巢狀路由:以 chi 的
Route組織資源導向的 URL 結構
技術棧
| 項目 | 說明 |
|---|---|
| 語言 | Go 1.26+ |
| 路由 | chi v5 |
| 模板 | 標準庫 html/template(go:embed 內嵌) |
| 樣式 | Tailwind CSS v4(standalone CLI 建置) |
| ORM | GORM(gorm.io/gorm) |
| 資料庫 | SQLite(開發環境,glebarez/sqlite 純 Go driver;PostgreSQL 規劃中) |
| Session | HMAC-SHA256 簽名 cookie(internal/auth) |
快速開始
環境需求
- Go 1.26 以上
- Tailwind standalone CLI(已放在
tools/tailwindcss;或自行下載對應平台的執行檔)
安裝與執行
# 取得專案
git clone <repository-url>
cd nestly
# 安裝依賴
go mod download
# 編譯 CSS 並執行
make css
make run
伺服器預設啟動於 http://localhost:3000,可透過環境變數調整:
| 環境變數 | 預設 | 說明 |
|---|---|---|
PORT |
3000 |
監聽埠號 |
DB_DSN |
nestly.db |
SQLite 資料庫檔案路徑 |
SESSION_SECRET |
開發用預設值(會印出警告) | session cookie 的 HMAC 簽章密鑰 |
COOKIE_SECURE |
false |
設為 true 時 cookie 僅經 HTTPS 傳送 |
首次啟動會自動建立示範帳號 demo@nestly.test(密碼 nestly1234),可直接至 /login 試用登入流程。
Tailwind CSS 開發流程
- 來源檔:
web/static/src/input.css;編譯產物:web/static/css/app.css(已列入版本控制,執行檔內嵌此檔) - 修改模板中的 class 後執行
make css重新編譯;開發時可用make watch自動重建
專案結構
nestly/
├── main.go # 程式進入點:初始化資料庫、session 與路由
├── internal/
│ ├── auth/ # HMAC 簽名 cookie session
│ ├── handlers/ # HTTP handlers(每個資源一個檔案)
│ ├── models/ # 資料結構與資料存取
│ ├── storage/ # 資料庫連線
│ ├── templates/ # html/template 模板渲染邏輯
│ └── middleware/ # 自訂 chi middleware(規劃中)
├── web/
│ ├── web.go # go:embed 內嵌模板與靜態資源
│ ├── templates/ # HTML 模板(layout.html + pages/*.html)
│ └── static/ # 靜態資源(src/input.css → css/app.css)
├── tools/ # 開發工具(tailwindcss standalone CLI)
├── Makefile
├── go.mod
└── README.md
路由
目前完成與規劃中的路由:
| 方法 | 路徑 | 說明 |
|---|---|---|
| GET | / |
首頁(顯示登入狀態) |
| GET | /login |
登入頁面 |
| POST | /login |
登入(驗證成功建立 session) |
| POST | /logout |
登出(清除 session) |
| GET | /properties |
物件列表(支援搜尋、篩選、分頁,規劃中) |
| GET | /properties/{id} |
物件詳細資訊(規劃中) |
| GET | /properties/new |
新增物件表單(規劃中) |
| POST | /properties |
建立物件(規劃中) |
| GET | /properties/{id}/edit |
編輯物件表單(規劃中) |
| PUT | /properties/{id} |
更新物件(規劃中) |
| DELETE | /properties/{id} |
刪除物件(規劃中) |
開發
make css # 編譯 Tailwind CSS
make watch # 監看並自動重建 CSS
make run # 啟動開發伺服器
go vet ./... # 靜態檢查
make test # 執行測試
Languages
Go
81%
HTML
17.4%
Makefile
1.3%
CSS
0.3%