MedGryd
Planner, question bank, patient simulator, board plan, OMM protocols and grades — one account, built by medical students.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A Duolingo-style app for learning Objectivism, Ayn Rand's philosophy
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A mobile-first study tower for Objectivism, Ayn Rand’s philosophy, organized by topic. The first climb is Metaphysics, Unit 1 (the axioms) and Epistemology, Unit 1 (the senses). Later units are on the tower as coming soon, and they do not block a unit that is already built. On a wide screen the tower uses the full window: sections in a left rail, the climb in the center, and Atlas with your progress on the right. The interface is a near-black navy field with gold art-deco linework. Display type is Cinzel. Interface and lesson text use Source Sans 3.
There is no build step. index.html at the repository root is the page. Styles live in css/. Behavior is native ES modules under js/. Lesson text is JSON under content/.
Modules and the lesson files are fetched, so open the folder through a local server. Opening index.html as a file will not work.
python3 -m http.server 4173
Then visit http://127.0.0.1:4173/.
Progress (finished floors, XP, streak, and the mute setting) stays in localStorage under the key atlas-ladder-progress-v1. Reset is in the header on wider screens, and in the same dialog if you show the control.
The site uses a hash router (#/, #/lesson/..., #/sources) and relative URLs, so it can live at a project path such as /objectivist-duolingo/ or /atlas-ladder/ without a rebuild.
Two ways to publish:
.github/workflows/pages.yml deploys on every push to main. In the repository settings, set Pages to GitHub Actions.main branch, folder / (root). Keep the empty .nojekyll file so Jekyll does not touch the CSS or JSON.BASE_PATH in js/config.js stays '' for both of those. Set it only when the files are served from a nested folder and something needs an absolute URL. Include the leading and trailing slash, for example "/atlas-ladder/".
content/<section-id>.json. The catalog names that file.content/catalog.json.SOURCES.md. If you are not sure the wording is exact, mark the feedback "kind": "paraphrase" and do not put invented quotation marks around it.node scripts/validate-content.mjs
node --test tests/progress.test.js
scripts/author-content.mjs regenerates the two built section files, the catalog, and SOURCES.md together. If you change a quotation, change it there and run the script, then the validator. The app itself reads the JSON, not the script.
content/catalog.json is the tower. A section has id, title, accent (gold or copper), summary, file (or null when nothing is built yet), and units. A unit has id, title, status (ready or soon), and summary. A ready unit also has lessons: { id, title, objective }. Sections are topics. They are not keyed to a chapter outline.
Coming-soon units stay in the catalog so the tower can show them. They are left out of the unlock sequence.
content/metaphysics.json (and the other section files) look like this:
{
"id": "metaphysics",
"lessons": {
"axioms/where-it-starts": {
"exercises": []
}
}
}
The lesson key is <unit id>/<lesson id>. A built lesson needs 8 to 12 exercises. Each exercise has id, type, prompt, answer, and feedback.
| type | answer | extra fields |
|---|---|---|
choice | choice id | choices: [{ id, text }] |
quote | choice id | quote, choices |
match | omitted; each pair id matches itself | pairs: [{ id, left, right }] |
fill | array of bank ids, one per blank, or the token order in sentence mode | mode: blanks or sentence; before / after or sentence; bank: [{ id, text }]; sentence mode also uses distractors |
feedback is { kind, note, citation } and, when kind is quote, a short quote. kind is quote or paraphrase.
Accuracy matters more than color. The app quotes only short passages that were checked against the Ayn Rand Lexicon or a published excerpt. Anything else is labeled Paraphrase and is our wording. SOURCES.md lists every quotation and where it was checked. Galt’s speech is cited by the For the New Intellectual page numbers the Lexicon uses; the speech was written for Atlas Shrugged and is reprinted there. The in-app Sources screen reads that same file.
Atlas is an inline SVG in js/components/atlas-mascot.js, traced from an Art Deco line drawing of the figure kneeling under the globe. The figure is painted with a gold and bronze gradient, and the globe carries a soft glow. Looping motion is CSS. The hop, nod, and hoist use the Web Animations API. To swap in Rive or Lottie later, replace the SVG inside .stage and keep the state attribute (idle, thinking, encourage, cheer, celebrate).
assets/ holds optional PNG plates. Drop a file at a path listed in assets/SLOTS.txt (or js/assets.js) and reload. Until that file is there, the CSS and SVG drawing is what you see, and it stays the fallback if a file fails. Pose plates replace the Atlas drawing for that pose; the same CSS motion still runs. Backgrounds are the custom properties --image-bg-tower, --image-bg-lesson, --image-bg-celebrate, --image-bg-card, --image-ornament-corner, and --image-sunburst in css/tokens.css. The XP ring stays an SVG arc so it can show real progress. icons/xp.png is only the emblem inside that ring.
Visual pieces are web components (atlas-mascot, skill-tree, lesson-player, exercise-choice, exercise-match, exercise-fill, exercise-quote, xp-bar, streak-flame, lesson-complete). App, Router, ProgressStore, SoundManager, and ContentLoader are plain classes.