尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A multi-backend RESTful API that serves portfolio data for the portfolio website. Implemented in four languages — TypeScript, Go, Rust, and Haskell — all returning identical JSON responses. Bilingual (Japanese/English) support via ?lang=en query parameter.
TypeScript is the source of truth. All other backends mirror its data and response format.
All endpoints are under /api/ and return JSON. Most support ?lang=en for English (default: Japanese).
bash
cd ts
npm install
npm run dev # Start dev server on port 3004
npm test # Run tests (vitest)
npm run build # Compile TypeScript檢視完整 README ↗A multi-backend RESTful API that serves portfolio data for the portfolio website. Implemented in four languages — TypeScript, Go, Rust, and Haskell — all returning identical JSON responses. Bilingual (Japanese/English) support via ?lang=en query parameter.
| Backend | Framework | Port | Directory |
|---|---|---|---|
| TypeScript | ElysiaJS | 3004 | ts/ |
| Go | Chi | 3005 | go/ |
| Rust | Actix Web | 3006 | rust/ |
| Haskell | Scotty | 3007 | haskell/ |
TypeScript is the source of truth. All other backends mirror its data and response format.
All endpoints are under /api/ and return JSON. Most support ?lang=en for English (default: Japanese).
| Endpoint | Description |
|---|---|
GET / | Welcome message with endpoint list |
GET /health | Health check |
GET /api/profile | Personal profile |
GET /api/experience | Professional experience |
GET /api/projects | Project portfolio |
GET /api/skills | Technical skills |
GET /api/other-skills | Other skills |
GET /api/education | Educational background |
GET /api/contact | Contact information |
GET /api/certifications | Certifications |
GET /api/changelogs | Changelogs |
GET /api/faqs | FAQs |
GET /api/links | External links |
GET /api/strong-points | Strong points |
GET /api/notifications | Notifications |
GET /api/articles | Articles (fetched from Qiita) |
GET /api/download-pdf | Download resume as PDF (?format=compact|executive|technical|academic|modern) |
portfolio-api/
├── ts/ # TypeScript backend (source of truth)
├── go/ # Go backend
├── rust/ # Rust backend
├── haskell/ # Haskell backend
├── packages/ # Shared type package (@shinguakira/portfolio-api-types)
├── public/images/ # Production images (served by Vercel)
├── scripts/ # Utility scripts (image sync, etc.)
└── vercel.json # Vercel deployment config
cd ts
npm install
npm run dev # Start dev server on port 3004
npm test # Run tests (vitest)
npm run build # Compile TypeScript
cd go
go mod tidy
go run . # Start REST (port 3005) + gRPC (port 50051) servers
go test ./... # Run tests
The Go backend also exposes the same data over gRPC (default port 50051,
override with GRPC_PORT) alongside REST. Server reflection and the standard
health service are enabled. See go/docs/grpc-guide-ja.md
for a beginner-friendly explanation (terminology, REST vs gRPC, how to regenerate
code and test with grpcurl).
cd rust
cargo run # Start server on port 3006
cargo test # Run tests
cd haskell
stack build
stack exec portfolio-api-haskell # Start server on port 3007
stack test # Run tests
Deployed on Vercel. The vercel.json routes:
/images/* → public/images/ (static assets)/icons/* → ts/public/icons/ (static assets)/api/* and / → TypeScript backendRoot public/images/ is the production source of truth. Use the sync script to keep ts/public/images/ in sync for local dev:
node scripts/sync-public.mjs # Sync root → ts
node scripts/sync-public.mjs --reverse # Sync ts → root
node scripts/sync-public.mjs --dry-run # Preview changes
MIT