尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Subcutaneous Advanced Tracking and Landscape Analysis System
A static, no-build dashboard tracking high-concentration subcutaneous (SC)
injection technologies: who owns them, what stage they're at, what
concentration they've demonstrated, how they work, and the deal/news
activity behind each one -- benchmarked against our internal target
platforms (H-Cure, Thermicra) and the marketed reference product
(Dupixent).檢視完整 README ↗Subcutaneous Advanced Tracking and Landscape Analysis System
A static, no-build dashboard tracking high-concentration subcutaneous (SC) injection technologies: who owns them, what stage they're at, what concentration they've demonstrated, how they work, and the deal/news activity behind each one -- benchmarked against our internal target platforms (H-Cure, Thermicra) and the marketed reference product (Dupixent).
This repo merges two earlier prototypes: the clean data/app separation and
sidebar/table/donut layout from SC-Atlas-Tracker, plus the richer content
(deal feed, internal benchmarks, concentration-vs-stage chart) from
High-Concentration-SC. Everything is condensed into a compact table with
expandable rows and short deal summaries with a "Read more" toggle, rather
than always-expanded cards -- so the page stays scannable at a glance
without hiding anything.
index.html the dashboard page (no build step, no framework)
assets/styles.css all styling
assets/app.js fetches data/dashboard_data.json and renders everything
assets/i18n.js EN/KO string tables + label maps for the language toggle
assets/icon.svg brand mark / favicon
data/technologies_db.py EDIT THIS to add/update a technology
data/deals_db.py EDIT THIS to log a new deal or news finding
data/internal_targets.json hand-maintained: H-Cure, Thermicra, Dupixent
data/dashboard_data.json generated -- the only data file the dashboard reads
data/archive/ the original two source spreadsheets, kept for
provenance only -- nothing reads them anymore
scripts/build_data.py regenerates dashboard_data.json from the *_db.py
files + internal_targets.json. Stdlib only, no
pip install needed.
scripts/ko_check.py checks every English prose field against its
Korean mirror. Run it before build_data.py.
The app and the database are two completely separate things.
assets/app.js never touches technology/deal data directly -- it only
fetches and renders data/dashboard_data.json. Adding a finding never
means editing index.html, assets/app.js, assets/i18n.js, or
assets/styles.css; it means editing data/technologies_db.py or
data/deals_db.py (plain Python, safe for Claude or a human to edit with
a text editor) and running one script.
The header carries an EN/KR toggle; the choice is remembered per browser in
localStorage under sc-atlas-lang. All of the interface copy lives in
assets/i18n.js, along with label maps for the controlled vocabulary the
build script emits -- stage buckets, technology types, concentration
buckets and the recurring deal_type phrasings.
Interface copy is translated from the string table. Record prose --
mechanism, concentration_text, needle_size and each deal summary --
is translated in the database itself, under the same field name plus a _ko
suffix:
'mechanism': 'Recombinant human hyaluronidase temporarily depolymerizes ...',
'mechanism_ko': '재조합 인간 히알루로니다제가 간질 공간의 히알루로난을 ...',
Three things are deliberate:
build_data.py wrote; only the visible label is translated. Switching
language never changes which rows are selected._ko mirror is a
translation of that finished English string, never a second summary written
from the sources. Two independently written texts drift, and the drift is
invisible to a reader who only reads one of them. Both scan routines
enforce this (.claude/skills/sc-atlas-*/SKILL.md), and
.claude/skills/sc-atlas-daily-scan/references/ko-glossary.md holds the
standing vocabulary so terms stay consistent across runs.build_data.py copies the _ko fields through verbatim and never generates
them. ko_check.py is what guards them:
python scripts/ko_check.py
It fails on a missing mirror, on an identifier or number that did not survive
the translation (750 mg/mL quietly becoming 600 mg/mL, a dropped patent
number), and on an English string pasted into a _ko field. That is the one
class of error a reviewer reading only one of the two languages cannot catch.
Fix the Korean to match the English, never the reverse.
Any static file server works, e.g.:
python -m http.server 8000
# open http://localhost:8000
Opening index.html directly via file:// will not work -- the browser
blocks the fetch() call that loads data/dashboard_data.json. A local
server (or any real static host, e.g. GitHub Pages) is required.
This is the entire routine update loop -- intended to be run by a scheduled task (human or Claude) without touching any other file, and without installing anything:
data/technologies_db.py and add/edit a dict in TECHNOLOGIES. Copy an
existing entry as a template; give a new one a unique id (lowercase,
underscore-separated -- that's what deals join against).data/deals_db.py and add a dict to
DEALS. Its technology_id must match an id in technologies_db.py
(or a deal_id_aliases entry in internal_targets.json if it's about
an internal target rather than an external technology). Give it a
unique deal_id.data/internal_targets.json directly -- it's hand-written,
not generated, since it doesn't come from either database file.python scripts/build_data.py
data/dashboard_data.json along with whichever
*_db.py file(s) or internal_targets.json changed.The script prints a WARNING to stderr for anything it can't confidently
place -- a stage_raw value that doesn't match any bucketing rule, or a
deal whose technology_id doesn't match a known technology or
internal-target alias. Don't ignore these; either add a rule
(STAGE_RULES in scripts/build_data.py) or fix the entry that triggered it.
stage_bucket -- the raw "Development Stage" text is messy free text;
the script buckets it into six categories (Research / Academic →
Preclinical → Platform / Feasibility → Pre-registration / Late-stage →
Approved / Marketed, plus a "Varies by Program" catch-all) that drive both
the stage filter and the scatter chart's x-axis.concentration_bucket -- the numeric mg/mL column bucketed into
ranges for the concentration filter. Rows without a numeric value show as
"Not disclosed," not zero.date field is often free text ("2022-11
(option); converted to exclusive worldwide license") rather than a clean
date -- that's fine, don't force it into ISO format. The script extracts
the latest year/month/day mentioned anywhere in the text to sort deals
newest-first; the original text is preserved for display.thermicra_unconfirmed deal -- one entry in deals_db.py was
originally logged against an external company before being corrected to
an internal target. data/internal_targets.json's deal_id_aliases
field redirects any deal with that technology_id onto the Thermicra
internal target as a note, instead of showing it as an unmatched or
external entry.stage_raw text describes a mix of statuses in one
string (e.g. "Commercial (lead product approved); platform extension in
Phase III"). The bucketing picks the most senior/leading status -- check
stage_raw in data/technologies_db.py (or expand the row on the
dashboard) before citing a specific stage in a deck.flagged: True in deals_db.py)
as based on conflicting or unconfirmed secondary sources -- these carry a
visible FLAGGED badge in both the recent-activity feed and the per-tech
deal list. Don't cite a flagged item as confirmed without checking its
summary text.