MedGryd
Planner, question bank, patient simulator, board plan, OMM protocols and grades — one account, built by medical students.
Atlas Ladder is a study tower for Objectivism, the philosophy of Ayn Rand.
EducationJavaScript · RhaiGitHub @richardanayaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A Duolingo-style app for learning Objectivism, Ayn Rand's philosophy
Translation pending
Taken from the repository README
Loading the full README.
Read the full 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.