Jamorham
Nightscout용 xDrip+ 버전
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기An automatic, zero-backend, client-side on-call and night shift scheduler for hospital doctors and medical staff, featuring Monte Carlo simulation and strict constraint management.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
PleumA.github.io
Automatic On-Call & Night Shift Doctor Scheduler
This website was developed by Vibe Code using Antigravity model Gemini 3.1 Pro, combined with Claude Sonnet 4.6 (Thinking) for allocating night-shift doctor duties.
📖 How the algorithm works (Technical Logic Report) — A detailed, deep-dive technical reference on the Monte Carlo solver engine, constraint cascades, scoring metrics, and system architecture. Essential reading for anyone auditing or extending this medical scheduling tool.README 전문 보기 ↗This website was developed by Vibe Code using Antigravity model Gemini 3.1 Pro, combined with Claude Sonnet 4.6 (Thinking) for allocating night-shift doctor duties.
📖 How the algorithm works (Technical Logic Report) — A detailed, deep-dive technical reference on the Monte Carlo solver engine, constraint cascades, scoring metrics, and system architecture. Essential reading for anyone auditing or extending this medical scheduling tool.
A:R1, B:R2) and calculates duty separately for each role pool. When OFF, treats all doctors as a single pool.
R1), leaving individual cell doctor chips completely free of role suffixes. Suffixes are also moved to headers in exported Excel spreadsheets and copied clipboard data.R1:12, R2:10), or per doctor when Role-Based mode is OFF (e.g., A:5, B:4).
ขาดคน (Missing) without crashing and displays a warning toast.ขาดคน) if no eligible doctor is available due to constraints. When OFF (default), a 5-level Must-Fill cascade progressively relaxes spacing, conflict, and off-request rules to force-fill the slot.A:B or A conflicts with B) from working the same shift.1, 2) are removed from headers and badges to keep layout cells clean.Ctrl+Z or the Undo button (shown once there is something to undo) to revert cell edits and Reset-all. Undo rebuilds the schedule from the solver's original picks, so it never needs a new solver run. Removing a doctor is not undoable.popover panel from the header button. On phones each schedule row becomes a card and the header scrolls away instead of sticking..ics file (RFC 5545) or open Google Calendar for everyone, a role group, or one person (pick the scope next to the buttons).sw.js) and a web app manifest (manifest.json) cache the app files, the locally compiled stylesheet (dist/output.css), fonts, and the version-pinned third-party libraries (SheetJS, Lucide 1.55.0) for offline use in hospital wards with spotty Wi-Fi. The app's own files are fetched network-first (a new deploy shows on the next load; offline falls back to the cache); CDN files are cache-first.git clone https://github.com/PleumA/PleumA.github.io
cd PleumA.github.io
npm install # install all dependencies
npm run build # compile Tailwind CSS → dist/output.css
npm test # run all 43 test suites (all should pass ✅)
npm run lint # ESLint + Prettier check (0 errors expected)
npx serve . # serve locally at http://localhost:3000
For a full contributor setup guide, see DEVELOPER_GUIDE.md.
Designed with mobile first-class support in mind to ensure zero stutters on phone browsers:
parseUIConfig): All DOM elements, rules, arrays, and quotas are compiled exactly once into a static state block (parseUIConfig) before the calculation runs. This prevents thousands of slow, redundant DOM lookups and key array allocations from occurring inside the Monte Carlo simulation's hot inner loop or rendering loops.renderTableView and renderCalendarView, standard inline <svg> strings are utilized. This eliminates reliance on automatic DOM-scanning icon libraries (e.g., Lucide) which are notorious for causing layout thrashing and application freezing during table updates.Set structures for conflict checking, holiday checking, and off-day requests instead of traversing nested arrays, improving search execution speeds.setTimeout(..., 0)) sequentially after chunks of iteration logic, maintaining a fluid 60FPS UI and allowing loaders to spin.-webkit-overflow-scrolling: touch and minimum viewport widths to prevent layout squishing on mobile portrait screens.Math.random() tie-breakers in the .sort() callback), which prevents infinite loops or crashes in modern browser sorting engines.< 768px): Replaces cramped inline absolute cell dropdowns on mobile screens with a full-screen blurred Bottom Sheet. Doctor selection elements inside are scaled to a minimum of 48px height with generous touch padding for error-free mobile interaction.Built for high reliability, clean execution, and security:
innerHTML insertion (schedule cells, calendar grid, stats, fairness row, title attributes) goes through esc(...), or the value is bound via textContent.jsArg(...) (a JSON literal, HTML-escaped), so names containing quotes or apostrophes (e.g., O'Connor) cannot break out of the attribute.document.execCommand methods with the modern, asynchronous navigator.clipboard.writeText API, assuring future-proof support and clean error handling via toasts.sanitizeConfig checks the shape of an imported JSON file, coerces values and cleans names (sanitizeName) before anything is applied. If applying still fails, the app is restored from a getCurrentConfig() snapshot, so a bad file never leaves a half-imported state.applyTranslations()), resolving potential browser-freezing infinite recursion loops.| File | Purpose |
|---|---|
index.html | Single-page app shell — layout, Tailwind classes, modals, PWA manifest link, service worker registration |
app.js | Scheduling state, Monte Carlo solver, UI handlers, calendar-export UI, focus-trap utility (~5 400 lines) |
structuredInputs.js | Dynamic structured components — chips, dropdowns, steppers |
translations.js | Dual-language (Thai / English) dictionaries plus shared helpers (esc, sanitizeName) |
calendarExport.js | .ics builder and duty-event collection for calendar export |
sw.js | Service worker — network-first for app files, cache-first for pinned CDN files |
manifest.json | PWA manifest — install config, theme colour |
src/input.css | Tailwind CSS entry point (@tailwind directives) |
dist/output.css | Generated — compiled & minified Tailwind CSS (run npm run build) |
tailwind.config.js | Tailwind config: darkMode: 'class', extended colours |
postcss.config.js | PostCSS pipeline: tailwindcss + autoprefixer |
.eslintrc.cjs | ESLint rules (eslint:recommended + prettier) |
.prettierrc | Prettier formatting config |
.github/workflows/ci.yml | GitHub Actions CI: lint → test → build |
sitemap.xml | Single-page sitemap for SEO |
robots.txt | Crawler permission file |
tests/*.test.js | 43 test suites covering solver logic, UI DOM (jsdom, via tests/domHarness.js), quotas, XSS, import rollback, undo/overrides, calendar export, service worker, and guard tests for Tailwind classes and translation copy. Run with npm test. |
run-tests.js | Built-in test runner — no Jest required; fails on / output and on timeouts |
.json backup file, and instantly import them later to restore your precise environment without re-typing..xlsx download support (via SheetJS).localStorage.UNHANDLEDTypeErrorDESIGN_SYSTEM.md | Reusable component classes and colour tokens |
DEVELOPER_GUIDE.md | Full contributor setup, build, lint, test, and release guide |
CONTRIBUTING.md | Contribution guidelines |
CHANGELOG.md | Version history (Keep a Changelog format) |
logic_report.md | Deep-dive technical reference on the Monte Carlo solver |