Wenlan
Wenlan은 소스 기반 AI 지식베이스·LLM 위키로, 문서·결정을 페이지화해 검색·검토·리뷰 가능
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A small, dependency-free Node.js web app that reads 7 "Task Tracker" Google Sheets (Task / Assigned By / Assigned to / Priority Level / Date Received / Deadline / Date Closed / Status / Notes) and shows weekly Pending / In Progress / Completed counts, current totals, and a per-team breakdown.
No npm install required — everything is built on Node's standard library
(node:http, node:crypto, fetch). Requires Node 18+.
node server.js
Open http://localhost:3000. Out of the box it runs on bundled demo data (a real export of the "Task Tracker - FO" sheet) for any sheet slot that isn't configured yet, so you can see it working immediately.
Edit config/sheets.js. All 7 are pre-filled: FO, R&D, B2B, GTMT (via
sheetId, Sheets API), and Marketing/Ecomm/Finance (via csvUrl pointed at
the specific tab you shared — Ecomm points at that spreadsheet's "EOD" tab
specifically, since the tab in the link you sent has no Status column to
count). Swap any of them if they're not the right ones.
Each entry needs the sheet's ID (the long string in its URL:
https://docs.google.com/spreadsheets/d/<THIS PART>/edit) and, optionally,
the tab name if it isn't Sheet1.
There are three ways to get live data in, pick whichever is easiest for you:
appscript/Code.gs./exec).appScriptUrl in config/sheets.js.If a sheet's data tab isn't named Sheet1, append ?tab=<tab name> to the
web app URL before pasting it in.
Redeploying after you edit the script requires Deploy → Manage deployments → edit (pencil) → New version — saving the script alone doesn't update the live URL.
csvUrl in config/sheets.js.This works with zero setup, but the sheet's contents become fetchable by anyone with the link (that's what "publish to web" means).
In Google Cloud Console, create (or reuse) a project, enable the Google Sheets API, and create a Service Account.
Create a JSON key for that service account and note its client_email
and private_key.
Open each of the 7 Google Sheets and share it with that
client_email address (Viewer access is enough).
Set two environment variables before starting the server:
export GOOGLE_SERVICE_ACCOUNT_EMAIL="[email protected]"
export GOOGLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
node server.js
(Copy .env.example to .env and fill it in if you'd rather use a
.env file — you'll need to load it, e.g. node --env-file=.env server.js
on Node 20.6+.)
Sheets keep working on demo data individually until you fill in their
appScriptUrl/csvUrl/sheetId and (for Option B) credentials are present
— nothing breaks if only some of the 7 are wired up.
The Status column is free text in these sheets ("Done", "WIP", "Not
started", "On Hold", "Not yet approved", blank, ...). It's normalized into 4
buckets (lib/statusUtils.js), on top of which a 5th (Overdue) is applied
when a non-completed task's deadline has passed:
Edit lib/statusUtils.js if you want different bucketing.
Each task is placed in the ISO week (Monday–Sunday) of its Date Received — falling back to Deadline, then Date Closed, if that's blank. Tasks with no usable date anywhere are still counted in the totals and per-team breakdown, just excluded from the weekly chart (the dashboard footer tells you how many).
Three report types, each scoped per tab (Total or a single team) via a toggle above the Generate button:
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗