Skip to content

26ytph/YTP-Sybau

Repository files navigation

🏅 2026 YTP 黑客松 — 青年組 第 4 名 佳作

作品:YTP Sybau(青年職涯+創業 simulation) 主辦方公開展示版 | 完整得獎名單見 26ytph organization


YTP Sybau

AI 陪台北青年從履歷走到創業 — 把政府資源、專案合作、創業媒合接成一條路。

賽題分類:賽題 B · 行善台北 團隊:YTP Sybau

hero

30 秒看懂這個專案

現在的求職市場有一個矛盾:Junior 職缺減少、企業卻要求「有經驗」、AI 又 正在取代初階工作 —— 新鮮人很難獲得「第一份經驗」。

YTP Sybau 是一個「模擬真實職場」的平台:使用者加入模擬專案,與 AI / 真人 組成團隊,實際完成工作任務,在過程中累積經驗與能力 —— 在被錄取前,就先 「工作過一次」。同時整合 台北政府資源創業媒合,讓青年 從「累積經驗」一路接到「找到工作 / 開始創業」。

主要功能

  • 🤖 AI 隊友 + 真人協作 — 加入專案(例如:打造 AI 筆記 App),選擇職位 (PM / 工程師 / 設計 / 行銷…)。當人數不足時 AI 補上各種職位,模擬真實 團隊互動;能力提升後,團隊逐漸由真人取代 AI。
  • 📈 多團隊並行 + 個人化教練 — 同一專案可有多個團隊各自做出不同解法。 AI 教練解析履歷 PDF、追蹤聊天 / 專案 / 活動心得,系統分析你的技能與 團隊表現。
  • 🏛 政府資源一鍵對接 — 每天爬最新台北青年補助 / 活動 / 創業窗口(青年局、 SBA、新創園…),AI 為每位用戶個人化排序,按一鍵加入活動清單。
  • 🚀 創業機會(最大亮點) — 當團隊合作良好時,系統會詢問是否要直接組成 創業團隊;2 人以上同意 → 自動配對 Mentor + 政府資源 + 30 天起跑清單; 不創業也仍獲得完整經驗與能力提升。

一句話總結:用 AI 模擬職場,讓使用者在被錄取前,就已經「做過這份工作」。

Live demo

cp .env.example .env  # drop in your ANTHROPIC_API_KEY
docker compose up --build -d   # 含資料種子,~30 秒
open http://localhost:8080

完整 demo 腳本:specs/demo-abing.md — 文組青年阿丙 從註冊到加入創業團隊的 6-8 分鐘走查。

Multi-platform

The web app installs as a PWA on iOS / Android / macOS / Windows / ChromeOS — one tap from the browser. For App Store / Play Store distribution, a Capacitor wrapper is preconfigured (no code rewrite — same /frontend, generated ios/ + android/ projects). See specs/multi-platform.md.

Topics(GitHub 標籤建議)

taipei youth-employment government-data ai-coach career-platform anthropic-claude nodejs postgresql docker civic-tech


我們在解決什麼問題?

現在的求職市場出現一個矛盾:

  • Junior 職缺減少
  • 企業卻要求「有經驗」
  • AI 正在取代初階工作

👉 新鮮人很難獲得「第一份經驗」。YTP Sybau 讓使用者在被錄取前,就先「工作過一次」

對台北市政府:投入的 youth 就業資源,從觸達不到的青年手中浮上來、留下回饋。 對青年:第一次知道台北給了我哪些資源、誰可以幫我、我下一步該做什麼。


兩個產品介面共享一個 backend

  1. Career platform(主要介面)— youth 用履歷 PDF 註冊,跟 AI 教練聊天,瀏覽 台北政府機會,加入活動和專案,升級。
  2. Git-for-Careers Simulation(子體驗)— 4-週跨職能工作模擬。分支、commit、 kanban、merge request、有人格的 AI 隊友、release + portfolio report。 從任何專案的詳細頁進入。

Seeded 專案:阿丙 demo 的「無酒精雞尾酒品牌」(4 真人 + 2 AI 隊友 + 預先植入的 startup 投票),以及「AI 課堂筆記 App」(6 AI 隊友 + 3 分支 + 開放 merge request)。

Architecture

├── docker-compose.yml      # db + api + web
├── .env                    # ANTHROPIC_API_KEY (not committed)
├── nginx.conf              # / → frontend, /api/ → api:3000
├── db/init.sql             # full schema + seed (runs ONCE on a fresh volume)
├── server/                 # Express REST + LLM proxy
│   ├── index.js            # ~1700 lines: routes, LLM wiring, password hashing
│   └── src/
│       ├── db.js           # Postgres pool + ensureRuntimeSchema (additive ALTERs)
│       ├── session.js      # HTTP-only cookie sessions
│       ├── jobs/           # Backfill / startup jobs
│       ├── services/       # LLM, gov-resources loader, recommendations, levels
│       └── utils/          # sanitizers / validators
└── frontend/               # Mobile + desktop SPA (vanilla HTML/CSS/JS)
    ├── index.html          # 6 screens: landing, onboarding, dashboard,
    │                       # project, workspace, report
    ├── js/                 # API client + i18n (en/zh)
    ├── style.css           # ~1500 lines, light by default + dark mode
    └── src/
        ├── core/           # state, routing
        ├── components/     # modal, confetti
        └── features/       # one file per screen / behavior

Services (docker compose):

service purpose
db Postgres 16, schema auto-init from db/init.sql
api Node/Express on port 3000 internal — REST + Anthropic proxy
web Nginx on port 8080 — serves frontend/, reverse-proxies /api/

Quick Start

# 1. Drop in your Anthropic key (without it, AI features fall back gracefully)
cp .env.example .env
# Edit .env: ANTHROPIC_API_KEY=sk-ant-...

# 2. Bring up the stack (clean DB)
docker compose down -v && docker compose up --build -d

# 3. Open
open http://localhost:8080

Demo walkthrough

  1. Sign up with a resume PDF (parsed server-side; the AI chat will reference your real background).
  2. From Projects, click Launch an AI Note-Taking App for University Students.
  3. On the project page, click Open simulation workspace →.
  4. Inside the workspace:
    • Board — drag tasks across todo / doing / review / done.
    • Commits — push a contribution; the LLM auto-tags 1–3 skills.
    • Graph — interactive SVG branch tree.
    • Merge requests — accept the seeded voice-first → main request (78/100 compatibility, AI-generated reason).
    • Right panel@mention Alex / Mira / Kai / Nora / Devi / Sam to get a personality-driven LLM reply.
  5. Cut release from the Release tab → personalised 7-axis report with strengths, weaknesses, and a portfolio summary you can copy.

Roles

Role Description
User Sign up, browse, join the simulation, ship contributions, get a portfolio report.
Admin / Mentor Sees AI/human distinction. Replies to the Mentor Inbox. Can replace AI agents with real humans on a project.

users.target_role (pm / design / swe / data / marketing / ops) drives the simulation report rubric.

Schema overview

Table Purpose
users Profile + scrypt password_hash + parsed resume_text + target_role
sessions HTTP-only cookie sessions (sha256 token hashes)
roles 6 selectable training roles with skills + example tasks
projects Trainings, projects, and simulations (type distinguishes)
project_members Human + AI teammates with personality LLM prompts
branches Direction within a simulation project; parent_branch_id NULL = main
commits Per-branch contributions with skill_tags JSONB
tasks Kanban entries
merge_requests source → target branch with AI compatibility_score
releases Closes a branch
reports 7-axis skill rubric + collaboration score + portfolio summary
chat_threads Per-user chat threads for the global Chat tab
chat_messages Used everywhere — scoped via thread_id (chat tab) or branch_id (workspace)
notifications, jobs, startup_interests Legacy supporting tables

API endpoints (selected)

Auth & users

Method Path Description
POST /api/users Sign up (multipart, with optional resume PDF)
POST /api/auth/login Sign in (email + password)
GET /api/auth/me Resume current session
POST /api/auth/logout Destroy session
PATCH /api/users/:id Update profile fields incl. target_role
POST /api/users/:id/resume Replace resume

Projects (legacy + simulation)

Method Path Description
GET /api/projects List
POST /api/projects Create
GET /api/projects/:id/members Project team
POST /api/projects/:id/members Add member (also AI replace flows)
GET /api/projects/:id/messages Project-wide chat (legacy)
POST /api/projects/:id/finish Close project + nudge feedback
GET /api/projects/:id/branches Simulation branch list with commit counts
POST /api/projects/:id/branches Open / fork a branch

Branch (Git-for-careers)

Method Path Description
GET /api/branches/:id Branch row
GET /api/branches/:id/commits Commit feed
POST /api/branches/:id/commits Push commit (LLM tags skills)
GET /api/branches/:id/tasks Kanban
POST /api/branches/:id/tasks Add task
PATCH /api/tasks/:id Move / edit task
DELETE /api/tasks/:id Delete task
GET /api/branches/:id/messages Branch chat
POST /api/branches/:id/messages Post in branch chat
POST /api/branches/:id/teammate_reply LLM teammate reply (personality-driven)
POST /api/branches/:id/release Cut release
POST /api/branches/:id/report Generate per-user 7-axis report

Merge requests

Method Path Description
GET /api/projects/:id/merge_requests Project-wide MR list
GET /api/merge_requests/:id Single MR
POST /api/branches/:id/merge_requests Open MR (LLM scores compatibility)
POST /api/merge_requests/:id/decide Accept / reject

Chat

Method Path Description
GET /api/chat_threads?user_id Per-user thread list (lazy default)
POST /api/chat_threads New thread
PATCH /api/chat_threads/:id Rename / change mode
DELETE /api/chat_threads/:id Delete thread
GET /api/chat?thread_id Messages in a thread
POST /api/chat Post (with thread_id)
GET /api/mentor/requests Admin inbox

Misc

Method Path Description
POST /api/llm/chat Anthropic proxy (with optional web search)
GET /api/llm/status LLM availability flag
GET /api/gov_resources Cached gov-program catalog
GET /api/users/:id/journey Contribution timeline (registered → joined → released)
GET /api/users/:id/reports All generated reports
GET /api/health Health check

Configuration

Variable Description
ANTHROPIC_API_KEY Anthropic Claude key for the LLM proxy. Without it, AI-driven endpoints fall back to sensible defaults — the demo still runs.

Development

# Reload static assets only (frontend changes)
docker compose restart web

# Tail server
docker compose logs -f api

# Migrate (additive schema changes auto-apply on api start)
docker compose up --build -d

# Reset DB (needed for breaking schema changes / seed edits)
docker compose down -v && docker compose up --build -d

Theme

Light by default. Click the ◐ toggle in the workspace topbar (or set document.body.dataset.theme = "dark" from devtools) to switch. Choice persists in localStorage.

Notes

  • frontend/app.js and the root-level index.html / style.css are stale — the live frontend is under frontend/. Nginx serves frontend/.
  • discussion.md is the original product brief (Chinese).
  • The amber promo card at the bottom of the desktop sidebar links out to twpathfinder.org — Taiwan Pathfinder, the partner youth-career program.

About

🏅 青年組 第 4 名 佳作 | YTP Sybau(青年職涯+創業 simulation) | 2026 YTP 黑客松

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors