MedGryd
의대생이 만든 하나의 계정으로 플래너·문제은행·환자 시뮬레이터·보드 플랜·OMM 프로토콜·성적 관리까지 제공
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.