Medical Research Skills for Claude Code, Codex, Cursor & Copilot
의사가 만든 58개 오픈소스 스킬로 의료 연구 전 과정을 지원
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗長照補助試算 + 日照中心媒合平台。Project #1 of the 4-project roadmap.
/match, /facilities/{id}), verified against real Supabase data/frontend — a 3-step wizard that estimates the monthly long-term care (長照 2.0/3.0)
subsidy quota based on:
The subsidy math lives in frontend/src/data/subsidyRules.js as a config object,
not hardcoded into components — this matters because Taiwan is currently
phasing in 長照3.0, so these numbers will need updating. Check
RULES_LAST_VERIFIED in that file and re-verify against 1966.gov.tw before
relying on it for anything real.
Important caveat baked into the UI on purpose: the tool is explicit that this is an estimate, not an official determination — actual CMS level is set by a government care manager (照顧管理專員) after an in-home assessment. This isn't just a legal-safety thing; giving families a confident-looking wrong number is worse than not having the tool at all.
backend/data_pipeline)Data source: 桃園市日間照顧、小規模多機能服務提供單位名冊 — official Taoyuan City open data, maintained by 社會局, updated yearly (last updated 2026-05-29 as of this writing). This is a live, city-specific dataset, not the national PDF roster — better than the original roadmap assumed.
Usage:
raw_daycare.csv in this folder, already converted) or the script will error.cd backend/data_pipeline && pip install -r requirements.txtpython ingest_daycare_centers.py raw_daycare.csv cleaned_daycare.json
(geocodes each address via OpenStreetMap Nominatim, ~1 sec/row —
~91 rows takes about 2 minutes)schema.sql in the Supabase SQL Editor to create the facilities tablecleaned_daycare.json into that table (Supabase Table Editor →
Insert → Import data from JSON, or a short Python script using the
supabase-py client — we'll add that once the backend exists)Already done: raw_daycare.csv (converted to UTF-8) and
cleaned_daycare_no_geocode.json (91 facilities, parsed and validated,
footer/note rows stripped) are already in this folder. Geocoding is the
one step you need to run yourself — Nominatim isn't reachable from
Claude's sandboxed environment, so run step 3 above locally to add lat/lng
to each row before importing to Supabase.
Data snapshot (91 facilities across 12 districts): 桃園21・中壢19・八德8・ 楊梅7・平鎮6・龜山6・蘆竹6・大園5・龍潭5・大溪4・新屋2・觀音2. 86 currently active (服務中), 5 not yet under contract (尚未特約) — worth deciding whether to show those or filter them out in the matching UI.
Known limitation: Nominatim's free geocoder is decent for major roads but sometimes fails on rural or newly-built addresses. The script logs any rows it couldn't geocode so we can fix those by hand.
backend/app)FastAPI + the official supabase-py client, talking to Supabase over its
REST API (HTTPS, port 443) rather than a raw Postgres connection.
Why this instead of a direct Postgres connection: we originally built
this with SQLModel + a direct postgresql:// connection string, but hit a
wall of environment-specific problems on Windows — Python 3.14/3.15
compatibility issues with SQLModel's Pydantic internals, psycopg2 needing
a C compiler toolchain, and finally Supabase's direct-connection hostname
being IPv6-only (unroutable on most home networks). Switching to the
Supabase URL + anon key over HTTPS sidesteps all of that: it's just a web
request, which works everywhere, and dropping the ORM layer also
eliminates the SQLModel/Pydantic version-compatibility problems entirely.
The tradeoff: slightly less query flexibility (no arbitrary SQL), which is
fine for a matching endpoint like this — precision-based sorting is just
done in Python after fetching, which is trivial at ~100 rows.
Endpoints:
GET /health — sanity checkGET /match?district=桃園&only_active=true&limit=50&offset=0 — main matching
endpoint. Filters by district (exact match, e.g. 桃園, 中壢, 八德) and
active status (excludes 尚未特約 by default). Results are ordered by
geocode precision — exact address matches first, then street-level, then
district-level approximations last — so the most trustworthy pins surface
first in the UI.GET /facilities/{id} — single facility detail, 404s if not foundSetup:
cd backend/app
pip install -r requirements.txt
cp .env.example .env
# Edit .env: Supabase dashboard -> Project Settings -> API
# SUPABASE_URL = Project URL
# SUPABASE_KEY = anon public key (safe to use here -- facilities table
# only allows public SELECT via RLS, see schema.sql)
uvicorn main:app --reload --app-dir .
Then open http://127.0.0.1:8000/docs for interactive API docs.
Verified: app boots cleanly, /health responds, and /match fails
gracefully (clean 502, not a crash) when Supabase is unreachable -- tested
against a fake project since I don't have your real credentials. Not yet
tested against your actual Supabase data -- that's the next step.
The wizard now has a 4th step: after picking household type, the person
picks their district (行政區 dropdown), then sees the subsidy result
alongside real day care facilities in that district, pulled live from the
FastAPI /match endpoint.
Config: frontend/.env.example — copy to .env, set
VITE_API_BASE_URL (defaults to http://127.0.0.1:8000, matches local
uvicorn dev server). Update this once the backend is deployed somewhere.
Error handling: if the backend isn't reachable (e.g. you forgot to
start uvicorn), the UI shows a clear Chinese-language message rather
than a blank screen or console-only error — this matters since the
target audience isn't going to open dev tools to debug a fetch failure.
Data honesty: facilities with district-level (approximate) geocode
precision get a small caveat note in the UI (⚠ 約略位置...) rather than
being presented with the same confidence as exact-address matches — this
follows the same principle as the subsidy calculator's disclaimer: don't
show a confident-looking wrong answer.
Not yet tested: I verified the build compiles cleanly and the fetch
logic is correct, but I have not run this against your live backend +
Supabase end-to-end (I don't have a way to run your local uvicorn
server from here). That's the next verification step — see "What to do"
below.
backend/sync_service)A separate, small service whose only job is to periodically refresh facility data from the government source and push changes into Supabase. Deployed separately from the main API so a heavy dependency (headless Chromium) doesn't slow down or bloat the service that needs to stay fast for the LINE bot.
Why headless browser instead of a simple HTTP request: the source portal (opendata.tycg.gov.tw) is JavaScript-rendered with no stable, directly-fetchable API endpoint we could find — even the linked Swagger docs URL is blocked by robots.txt. So this uses Playwright to actually render the page and click the download button, matched by its visible text ("下載CSV") rather than a CSS selector, since text survives page redesigns better.
⚠️ Not yet verified against the live site — I can't run a browser or
reach that domain from my environment. Everything except the actual
browser-click-and-download step has been tested (CSV parsing against real
data, the add/update/unchanged diff logic, the auth-protected endpoint).
The browser step needs to be confirmed by actually running it. If the
click fails, inspect the live page in a real browser and check whether
the button's visible text still says exactly "下載CSV" — update the
page.click("text=...") line in sync.py if not.
What it does on each sync:
last_synced_at timestampsource_still_listed = false, never hard-deleted (preserves any
vacancy data tied to them)Setup:
cd backend/sync_service
pip install -r requirements.txt
playwright install --with-deps chromium
cp .env.example .env
# Fill in: SUPABASE_URL, SUPABASE_KEY (service_role key, NOT anon --
# this service writes to the DB), OPENCAGE_API_KEY, SYNC_SECRET_TOKEN
# (make up a long random string yourself)
python -m uvicorn main:app --reload --app-dir .
Test locally first: http://127.0.0.1:8000/sync?token=<your-token>
Deploy on Render (as its own Web Service, separate from the main API):
backend/sync_servicepip install -r requirements.txt && playwright install --with-deps chromiumuvicorn main:app --host 0.0.0.0 --port $PORT.env aboveSchedule it: cron-job.org (free) → create a
job pinging https://<your-render-url>/sync?token=<your-secret> monthly
(matches how infrequently the source data itself actually updates).
/match endpointfacilities table/match endpoint