moved to API

This commit is contained in:
2026-03-08 22:24:34 -07:00
parent cf6b2611aa
commit 2caf566bf6
94 changed files with 1257 additions and 40930 deletions

View File

@@ -10,16 +10,16 @@ A web-based esoteric correspondence app for tarot, astrology, calendars, symbols
## Features ## Features
- Correspondence explorer for multiple occult/esoteric systems. - Correspondence explorer for multiple occult/esoteric systems.
- Tarot deck support via a generated deck registry. - Tarot deck support served by the TaroTime API.
- Pluggable deck structure using per-deck `deck.json` manifests. - Fast local static shell serving with `http-server`.
- Fast local static serving with `http-server`.
## Quick Start ## Quick Start
1. Install Node.js: https://nodejs.org/en/download 1. Install Node.js: https://nodejs.org/en/download
2. Clone this repository. 2. Start the API and confirm its base URL and API key.
3. Install dependencies. 3. Clone this repository.
4. Start the app. 4. Install dependencies.
5. Start the client.
```powershell ```powershell
git clone https://code.glowers.club/goyimnose/taroTime.git git clone https://code.glowers.club/goyimnose/taroTime.git
@@ -28,7 +28,16 @@ npm install
npm run start npm run start
``` ```
The app opens in your browser (typically at `http://127.0.0.1:8080`). The app opens in your browser (typically at `http://127.0.0.1:8080`) and stays in shell mode until you enter a reachable API base URL and a valid API key.
For local development with the current API configuration:
```powershell
API Base URL: http://localhost:3100
API Key: aaa
```
The current API also accepts `bbb` as a valid key.
@@ -36,10 +45,8 @@ The app opens in your browser (typically at `http://127.0.0.1:8080`).
| Command | Description | | Command | Description |
| --- | --- | | --- | --- |
| `npm run start` | Generate deck registry, then serve the app locally and open `index.html`. | | `npm run start` | Serve the static client locally and open `index.html`. |
| `npm run dev` | Alias of `npm run start`. | | `npm run dev` | Alias of `npm run start`. |
| `npm run generate:decks` | Rebuild `asset/tarot deck/decks.json`. |
| `npm run validate:decks` | Strict validation only (no write), exits on manifest/file problems. |
## Project Links ## Project Links

127
app.js
View File

@@ -72,6 +72,11 @@ const latEl = document.getElementById("lat");
const lngEl = document.getElementById("lng"); const lngEl = document.getElementById("lng");
const nowSkyLayerEl = document.getElementById("now-sky-layer"); const nowSkyLayerEl = document.getElementById("now-sky-layer");
const nowPanelEl = document.getElementById("now-panel"); const nowPanelEl = document.getElementById("now-panel");
const connectionGateEl = document.getElementById("connection-gate");
const connectionGateBaseUrlEl = document.getElementById("connection-gate-base-url");
const connectionGateApiKeyEl = document.getElementById("connection-gate-api-key");
const connectionGateStatusEl = document.getElementById("connection-gate-status");
const connectionGateConnectEl = document.getElementById("connection-gate-connect");
const nowElements = { const nowElements = {
nowHourEl: document.getElementById("now-hour"), nowHourEl: document.getElementById("now-hour"),
@@ -230,6 +235,7 @@ appRuntime.init?.({
}); });
let currentSettings = { ...DEFAULT_SETTINGS }; let currentSettings = { ...DEFAULT_SETTINGS };
let hasRenderedConnectedShell = false;
function setStatus(text) { function setStatus(text) {
if (!statusEl) { if (!statusEl) {
@@ -239,6 +245,121 @@ function setStatus(text) {
statusEl.textContent = text; statusEl.textContent = text;
} }
function getConnectionSettings() {
return window.TarotAppConfig?.getConnectionSettings?.() || {
apiBaseUrl: "",
apiKey: ""
};
}
function syncConnectionGateInputs() {
const connectionSettings = getConnectionSettings();
if (connectionGateBaseUrlEl) {
connectionGateBaseUrlEl.value = String(connectionSettings.apiBaseUrl || "");
}
if (connectionGateApiKeyEl) {
connectionGateApiKeyEl.value = String(connectionSettings.apiKey || "");
}
}
function setConnectionGateStatus(text, tone = "default") {
if (!connectionGateStatusEl) {
return;
}
connectionGateStatusEl.textContent = text || "";
if (tone && tone !== "default") {
connectionGateStatusEl.dataset.tone = tone;
} else {
delete connectionGateStatusEl.dataset.tone;
}
}
function showConnectionGate(message, tone = "default") {
syncConnectionGateInputs();
if (connectionGateEl) {
connectionGateEl.hidden = false;
}
document.body.classList.add("connection-gated");
setConnectionGateStatus(message, tone);
}
function hideConnectionGate() {
if (connectionGateEl) {
connectionGateEl.hidden = true;
}
document.body.classList.remove("connection-gated");
}
function getConnectionSettingsFromGate() {
return {
apiBaseUrl: String(connectionGateBaseUrlEl?.value || "").trim(),
apiKey: String(connectionGateApiKeyEl?.value || "").trim()
};
}
async function ensureConnectedApp(nextConnectionSettings = null) {
if (nextConnectionSettings) {
window.TarotAppConfig?.updateConnectionSettings?.(nextConnectionSettings);
}
syncConnectionGateInputs();
const configuredConnection = getConnectionSettings();
if (!configuredConnection.apiBaseUrl) {
showConnectionGate("Enter an API Base URL to load TaroTime.", "error");
return false;
}
showConnectionGate("Connecting to the API...", "pending");
const probeResult = await window.TarotDataService?.probeConnection?.();
if (!probeResult?.ok) {
showConnectionGate(probeResult?.message || "Unable to reach the API.", "error");
return false;
}
hideConnectionGate();
if (!hasRenderedConnectedShell) {
sectionStateUi.setActiveSection?.("home");
hasRenderedConnectedShell = true;
}
setConnectionGateStatus("Connected.", "success");
setStatus(`Connected to ${configuredConnection.apiBaseUrl}.`);
await appRuntime.renderWeek?.();
return true;
}
function bindConnectionGate() {
syncConnectionGateInputs();
if (connectionGateConnectEl) {
connectionGateConnectEl.addEventListener("click", () => {
void ensureConnectedApp(getConnectionSettingsFromGate());
});
}
[connectionGateBaseUrlEl, connectionGateApiKeyEl].forEach((element) => {
if (!element) {
return;
}
element.addEventListener("keydown", (event) => {
if (event.key === "Enter") {
event.preventDefault();
void ensureConnectedApp(getConnectionSettingsFromGate());
}
});
});
document.addEventListener("connection:updated", () => {
syncConnectionGateInputs();
});
}
window.TarotNumbersUi?.init?.({ window.TarotNumbersUi?.init?.({
getReferenceData: () => appRuntime.getReferenceData?.() || null, getReferenceData: () => appRuntime.getReferenceData?.() || null,
getMagickDataset: () => appRuntime.getMagickDataset?.() || null, getMagickDataset: () => appRuntime.getMagickDataset?.() || null,
@@ -331,6 +452,7 @@ settingsUi.init?.({
}, },
onSyncSkyBackground: (geo, force) => homeUi.syncNowSkyBackground?.(geo, force), onSyncSkyBackground: (geo, force) => homeUi.syncNowSkyBackground?.(geo, force),
onStatus: (text) => setStatus(text), onStatus: (text) => setStatus(text),
onConnectionSaved: async () => ensureConnectedApp(),
getActiveSection: () => sectionStateUi.getActiveSection?.() || "home", getActiveSection: () => sectionStateUi.getActiveSection?.() || "home",
onReopenActiveSection: (section) => sectionStateUi.setActiveSection?.(section), onReopenActiveSection: (section) => sectionStateUi.setActiveSection?.(section),
onRenderWeek: () => appRuntime.renderWeek?.() onRenderWeek: () => appRuntime.renderWeek?.()
@@ -412,6 +534,5 @@ window.TarotNatal = {
const initialSettings = settingsUi.loadInitialSettingsAndApply?.() || { ...DEFAULT_SETTINGS }; const initialSettings = settingsUi.loadInitialSettingsAndApply?.() || { ...DEFAULT_SETTINGS };
homeUi.syncNowSkyBackground?.({ latitude: initialSettings.latitude, longitude: initialSettings.longitude }, true); homeUi.syncNowSkyBackground?.({ latitude: initialSettings.latitude, longitude: initialSettings.longitude }, true);
sectionStateUi.setActiveSection?.("home"); bindConnectionGate();
void ensureConnectedApp();
void appRuntime.renderWeek?.();

132
app/app-config.js Normal file
View File

@@ -0,0 +1,132 @@
(function () {
const apiBaseUrlStorageKey = "tarot-time-api-base-url";
const apiKeyStorageKey = "tarot-time-api-key";
const defaultApiBaseUrl = "";
function normalizeBaseUrl(value) {
return String(value || "")
.trim()
.replace(/\/+$/, "");
}
function normalizeApiKey(value) {
return String(value || "").trim();
}
function normalizeConnectionSettings(settings) {
return {
apiBaseUrl: normalizeBaseUrl(settings?.apiBaseUrl),
apiKey: normalizeApiKey(settings?.apiKey)
};
}
function persistConnectionSettings(settings) {
let didPersist = true;
try {
const params = new URLSearchParams(window.location.search || "");
const queryValue = String(params.get("apiBaseUrl") || "").trim();
const queryApiKey = String(params.get("apiKey") || params.get("api_key") || "").trim();
if (queryValue) {
window.localStorage.setItem(apiBaseUrlStorageKey, normalizeBaseUrl(queryValue));
}
if (queryApiKey) {
window.localStorage.setItem(apiKeyStorageKey, normalizeApiKey(queryApiKey));
}
if (settings.apiBaseUrl) {
window.localStorage.setItem(apiBaseUrlStorageKey, settings.apiBaseUrl);
} else {
window.localStorage.removeItem(apiBaseUrlStorageKey);
}
if (settings.apiKey) {
window.localStorage.setItem(apiKeyStorageKey, settings.apiKey);
} else {
window.localStorage.removeItem(apiKeyStorageKey);
}
} catch (_error) {
didPersist = false;
}
return didPersist;
}
function readConfiguredConnectionSettings() {
try {
const params = new URLSearchParams(window.location.search || "");
const queryValue = String(params.get("apiBaseUrl") || "").trim();
const queryApiKey = String(params.get("apiKey") || params.get("api_key") || "").trim();
if (queryValue) {
window.localStorage.setItem(apiBaseUrlStorageKey, normalizeBaseUrl(queryValue));
}
if (queryApiKey) {
window.localStorage.setItem(apiKeyStorageKey, normalizeApiKey(queryApiKey));
}
const storedBaseUrl = String(window.localStorage.getItem(apiBaseUrlStorageKey) || "").trim();
const storedApiKey = String(window.localStorage.getItem(apiKeyStorageKey) || "").trim();
return normalizeConnectionSettings({
apiBaseUrl: storedBaseUrl,
apiKey: storedApiKey
});
} catch (_error) {
return normalizeConnectionSettings({
apiBaseUrl: "",
apiKey: ""
});
}
}
const initialConnectionSettings = readConfiguredConnectionSettings();
window.TarotAppConfig = {
...(window.TarotAppConfig || {}),
apiBaseUrl: initialConnectionSettings.apiBaseUrl,
apiKey: initialConnectionSettings.apiKey,
getApiBaseUrl() {
return normalizeBaseUrl(this.apiBaseUrl);
},
getApiKey() {
return normalizeApiKey(this.apiKey);
},
isConnectionConfigured() {
return Boolean(this.getApiBaseUrl());
},
getConnectionSettings() {
return {
apiBaseUrl: this.getApiBaseUrl(),
apiKey: this.getApiKey()
};
},
updateConnectionSettings(nextSettings = {}) {
const previous = this.getConnectionSettings();
const current = normalizeConnectionSettings({
...previous,
...nextSettings
});
const didPersist = persistConnectionSettings(current);
this.apiBaseUrl = current.apiBaseUrl;
this.apiKey = current.apiKey;
if (previous.apiBaseUrl !== current.apiBaseUrl || previous.apiKey !== current.apiKey) {
document.dispatchEvent(new CustomEvent("connection:updated", {
detail: {
previous,
current: { ...current }
}
}));
}
return {
...current,
didPersist
};
}
};
})();

View File

@@ -77,7 +77,7 @@
clearInterval(nowInterval); clearInterval(nowInterval);
} }
const tick = () => { const tick = async () => {
if (!referenceData || !currentGeo || renderInProgress) { if (!referenceData || !currentGeo || renderInProgress) {
return; return;
} }
@@ -91,12 +91,17 @@
return; return;
} }
config.services.updateNowPanel?.(referenceData, currentGeo, config.nowElements, currentTimeFormat); try {
config.calendarVisualsUi?.applyDynamicNowIndicatorVisual?.(now); await config.services.updateNowPanel?.(referenceData, currentGeo, config.nowElements, currentTimeFormat);
config.calendarVisualsUi?.applyDynamicNowIndicatorVisual?.(now);
} catch (_error) {
}
}; };
tick(); void tick();
nowInterval = setInterval(tick, 1000); nowInterval = setInterval(() => {
void tick();
}, 1000);
} }
async function renderWeek() { async function renderWeek() {
@@ -138,7 +143,7 @@
applyCenteredWeekWindow(anchorDate); applyCenteredWeekWindow(anchorDate);
const events = config.services.buildWeekEvents?.(currentGeo, referenceData, anchorDate) || []; const events = await config.services.buildWeekEvents?.(currentGeo, referenceData, anchorDate) || [];
config.calendar?.clear?.(); config.calendar?.clear?.();
config.calendar?.createEvents?.(events); config.calendar?.createEvents?.(events);
config.calendarVisualsUi?.applySunRulerGradient?.(anchorDate); config.calendarVisualsUi?.applySunRulerGradient?.(anchorDate);

View File

@@ -1,4 +1,5 @@
(function () { (function () {
const dataService = window.TarotDataService || {};
const { const {
DAY_IN_MS, DAY_IN_MS,
toTitleCase, toTitleCase,
@@ -11,83 +12,24 @@
const BACKFILL_DAYS = 4; const BACKFILL_DAYS = 4;
const FORECAST_DAYS = 7; const FORECAST_DAYS = 7;
function buildWeekEvents(geo, referenceData, anchorDate) { function normalizeApiEvent(event) {
const baseDate = anchorDate || new Date(); if (!event || typeof event !== "object") {
const events = []; return event;
let runningId = 1;
for (let offset = -BACKFILL_DAYS; offset <= FORECAST_DAYS; offset += 1) {
const date = new Date(baseDate.getTime() + offset * DAY_IN_MS);
const hours = calcPlanetaryHoursForDayAndLocation(date, geo);
const moonIllum = window.SunCalc.getMoonIllumination(date);
const moonPhase = getMoonPhaseName(moonIllum.phase);
const sunInfo = getDecanForDate(date, referenceData.signs, referenceData.decansBySign);
const moonTarot = referenceData.planets.luna?.tarot?.majorArcana || "The High Priestess";
events.push({
id: `moon-${offset}`,
calendarId: "astrology",
category: "allday",
title: `Moon: ${moonPhase} (${Math.round(moonIllum.fraction * 100)}%) · ${moonTarot}`,
start: new Date(date.getFullYear(), date.getMonth(), date.getDate()),
end: new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59),
isReadOnly: true
});
if (sunInfo?.sign) {
const rulerPlanet = referenceData.planets[sunInfo.sign.rulingPlanetId];
const bodyParts = [
`${sunInfo.sign.symbol} ${toTitleCase(sunInfo.sign.element)} ${toTitleCase(sunInfo.sign.modality)}`,
rulerPlanet ? `Sign ruler: ${rulerPlanet.symbol} ${rulerPlanet.name}` : `Sign ruler: ${sunInfo.sign.rulingPlanetId}`
];
if (sunInfo.decan) {
const decanRuler = referenceData.planets[sunInfo.decan.rulerPlanetId];
const decanText = decanRuler
? `Decan ${sunInfo.decan.index}: ${sunInfo.decan.tarotMinorArcana} (${decanRuler.symbol} ${decanRuler.name})`
: `Decan ${sunInfo.decan.index}: ${sunInfo.decan.tarotMinorArcana}`;
bodyParts.unshift(decanText);
}
events.push({
id: `sun-${offset}`,
calendarId: "astrology",
category: "allday",
title: `Sun in ${sunInfo.sign.name} · ${sunInfo.sign.tarot.majorArcana}`,
body: bodyParts.join("\n"),
start: new Date(date.getFullYear(), date.getMonth(), date.getDate()),
end: new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59),
isReadOnly: true
});
}
for (const hour of hours) {
const planet = referenceData.planets[hour.planetId];
if (!planet) continue;
const calendarId = PLANET_CALENDAR_IDS.has(hour.planetId)
? `planet-${hour.planetId}`
: "planetary";
events.push({
id: `ph-${runningId++}`,
calendarId,
category: "time",
title: `${planet.symbol} ${planet.name} · ${planet.tarot.majorArcana}`,
body: `${planet.weekday} current · ${hour.isDaylight ? "Day" : "Night"} hour\n${planet.magickTypes}`,
raw: {
planetSymbol: planet.symbol,
planetName: planet.name,
tarotName: planet.tarot.majorArcana
},
start: hour.start,
end: hour.end,
isReadOnly: true
});
}
} }
return events; return {
...event,
start: event.start ? new Date(event.start) : event.start,
end: event.end ? new Date(event.end) : event.end
};
}
async function buildWeekEvents(geo, referenceData, anchorDate) {
const payload = await dataService.fetchWeekEvents?.(geo, anchorDate);
const events = Array.isArray(payload?.events)
? payload.events
: (Array.isArray(payload) ? payload : []);
return events.map((event) => normalizeApiEvent(event));
} }
window.TarotEventBuilder = { window.TarotEventBuilder = {

View File

@@ -107,8 +107,6 @@
quality: 82 quality: 82
}; };
const DECK_REGISTRY_PATH = "asset/tarot deck/decks.json";
let deckManifestSources = buildDeckManifestSources(); let deckManifestSources = buildDeckManifestSources();
const manifestCache = new Map(); const manifestCache = new Map();
@@ -116,6 +114,21 @@
const cardBackThumbnailCache = new Map(); const cardBackThumbnailCache = new Map();
let activeDeckId = DEFAULT_DECK_ID; let activeDeckId = DEFAULT_DECK_ID;
function getApiBaseUrl() {
return String(window.TarotDataService?.getApiBaseUrl?.() || window.TarotAppConfig?.apiBaseUrl || "")
.trim()
.replace(/\/+$/, "");
}
function rewriteBasePathForApi(basePath) {
const normalizedBasePath = String(basePath || "").trim();
if (!normalizedBasePath) {
return normalizedBasePath;
}
return window.TarotDataService?.toApiAssetUrl?.(normalizedBasePath) || normalizedBasePath;
}
function canonicalMajorName(cardName) { function canonicalMajorName(cardName) {
return String(cardName || "") return String(cardName || "")
.trim() .trim()
@@ -256,6 +269,46 @@
return /^(https?:)?\/\//i.test(String(pathValue || "")); return /^(https?:)?\/\//i.test(String(pathValue || ""));
} }
function joinAssetPath(basePath, relativePath) {
const normalizedBasePath = String(basePath || "").trim().replace(/\/+$/, "");
const normalizedRelativePath = String(relativePath || "")
.trim()
.replace(/^\.\//, "")
.replace(/^\/+/, "");
if (!normalizedBasePath) {
return normalizedRelativePath;
}
if (!normalizedRelativePath) {
return normalizedBasePath;
}
if (!isRemoteAssetPath(normalizedBasePath)) {
return `${normalizedBasePath}/${normalizedRelativePath}`;
}
try {
const url = new URL(normalizedBasePath);
const encodedRelativePath = normalizedRelativePath
.split("/")
.filter(Boolean)
.map((segment) => {
try {
return encodeURIComponent(decodeURIComponent(segment));
} catch {
return encodeURIComponent(segment);
}
})
.join("/");
url.pathname = `${url.pathname.replace(/\/+$/, "")}/${encodedRelativePath}`;
return url.toString();
} catch {
return `${normalizedBasePath}/${normalizedRelativePath}`;
}
}
function toDeckAssetPath(manifest, relativeOrAbsolutePath) { function toDeckAssetPath(manifest, relativeOrAbsolutePath) {
const normalizedPath = String(relativeOrAbsolutePath || "").trim(); const normalizedPath = String(relativeOrAbsolutePath || "").trim();
if (!normalizedPath) { if (!normalizedPath) {
@@ -266,7 +319,7 @@
return normalizedPath; return normalizedPath;
} }
return `${manifest.basePath}/${normalizedPath.replace(/^\.\//, "")}`; return joinAssetPath(manifest.basePath, normalizedPath);
} }
function resolveDeckCardBackPath(manifest) { function resolveDeckCardBackPath(manifest) {
@@ -364,7 +417,7 @@
const id = String(entry?.id || "").trim().toLowerCase(); const id = String(entry?.id || "").trim().toLowerCase();
const basePath = String(entry?.basePath || "").trim().replace(/\/$/, ""); const basePath = String(entry?.basePath || "").trim().replace(/\/$/, "");
const manifestPath = String(entry?.manifestPath || "").trim(); const manifestPath = String(entry?.manifestPath || "").trim();
if (!id || !basePath || !manifestPath) { if (!id || !manifestPath) {
return; return;
} }
@@ -382,14 +435,35 @@
} }
function buildDeckManifestSources() { function buildDeckManifestSources() {
const registry = readManifestJsonSync(DECK_REGISTRY_PATH); if (!window.TarotDataService?.isApiEnabled?.() && !getApiBaseUrl()) {
const registryDecks = Array.isArray(registry) return {};
? registry }
: (Array.isArray(registry?.decks) ? registry.decks : null);
const registryUrl = window.TarotDataService?.buildApiUrl?.("/api/v1/decks/options") || `${getApiBaseUrl()}/api/v1/decks/options`;
if (!registryUrl) {
return {};
}
const registry = readManifestJsonSync(registryUrl);
const registryDecks = Array.isArray(registry?.decks)
? registry.decks.map((entry) => ({
id: entry?.id,
label: entry?.label,
manifestPath: window.TarotDataService?.buildApiUrl?.(`/api/v1/decks/${encodeURIComponent(String(entry?.id || "").trim().toLowerCase())}/manifest`) || `${getApiBaseUrl()}/api/v1/decks/${encodeURIComponent(String(entry?.id || "").trim().toLowerCase())}/manifest`
}))
: [];
return toDeckSourceMap(registryDecks); return toDeckSourceMap(registryDecks);
} }
function resetConnectionCaches() {
deckManifestSources = buildDeckManifestSources();
manifestCache.clear();
cardBackCache.clear();
cardBackThumbnailCache.clear();
setActiveDeck(activeDeckId);
}
function getDeckManifestSources(forceRefresh = false) { function getDeckManifestSources(forceRefresh = false) {
if (forceRefresh || !deckManifestSources || Object.keys(deckManifestSources).length === 0) { if (forceRefresh || !deckManifestSources || Object.keys(deckManifestSources).length === 0) {
deckManifestSources = buildDeckManifestSources(); deckManifestSources = buildDeckManifestSources();
@@ -442,9 +516,9 @@
return { return {
id: source.id, id: source.id,
label: String(rawManifest.label || source.label || source.id), label: String(rawManifest.label || source.label || source.id),
basePath: String(source.basePath || "").replace(/\/$/, ""), basePath: rewriteBasePathForApi(String(rawManifest.basePath || source.basePath || "").replace(/\/$/, "")),
cardBack: String(rawManifest.cardBack || "").trim(), cardBack: String(rawManifest.cardBack || "").trim(),
cardBackPath: String(source.cardBackPath || "").trim(), cardBackPath: String(rawManifest.cardBackPath || source.cardBackPath || "").trim(),
thumbnails: normalizeThumbnailConfig(rawManifest.thumbnails, source.thumbnailRoot), thumbnails: normalizeThumbnailConfig(rawManifest.thumbnails, source.thumbnailRoot),
majors: rawManifest.majors || {}, majors: rawManifest.majors || {},
minors: rawManifest.minors || {}, minors: rawManifest.minors || {},
@@ -689,17 +763,17 @@
} }
if (variant === "thumbnail") { if (variant === "thumbnail") {
return resolveDeckThumbnailPath(manifest, relativePath) || `${manifest.basePath}/${relativePath}`; return resolveDeckThumbnailPath(manifest, relativePath) || toDeckAssetPath(manifest, relativePath);
} }
return `${manifest.basePath}/${relativePath}`; return toDeckAssetPath(manifest, relativePath);
} }
function resolveTarotCardImage(cardName, optionsOrDeckId) { function resolveTarotCardImage(cardName, optionsOrDeckId) {
const { resolvedDeckId } = resolveDeckOptions(optionsOrDeckId); const { resolvedDeckId } = resolveDeckOptions(optionsOrDeckId);
const activePath = resolveWithDeck(resolvedDeckId, cardName); const activePath = resolveWithDeck(resolvedDeckId, cardName);
if (activePath) { if (activePath) {
return encodeURI(activePath); return activePath;
} }
return null; return null;
@@ -709,7 +783,7 @@
const { resolvedDeckId } = resolveDeckOptions(optionsOrDeckId); const { resolvedDeckId } = resolveDeckOptions(optionsOrDeckId);
const thumbnailPath = resolveWithDeck(resolvedDeckId, cardName, "thumbnail"); const thumbnailPath = resolveWithDeck(resolvedDeckId, cardName, "thumbnail");
if (thumbnailPath) { if (thumbnailPath) {
return encodeURI(thumbnailPath); return thumbnailPath;
} }
return null; return null;
@@ -720,7 +794,7 @@
if (cardBackCache.has(resolvedDeckId)) { if (cardBackCache.has(resolvedDeckId)) {
const cachedPath = cardBackCache.get(resolvedDeckId); const cachedPath = cardBackCache.get(resolvedDeckId);
return cachedPath ? encodeURI(cachedPath) : null; return cachedPath || null;
} }
const manifest = getDeckManifest(resolvedDeckId); const manifest = getDeckManifest(resolvedDeckId);
@@ -728,7 +802,7 @@
cardBackCache.set(resolvedDeckId, activeBackPath || null); cardBackCache.set(resolvedDeckId, activeBackPath || null);
if (activeBackPath) { if (activeBackPath) {
return encodeURI(activeBackPath); return activeBackPath;
} }
return null; return null;
@@ -739,7 +813,7 @@
if (cardBackThumbnailCache.has(resolvedDeckId)) { if (cardBackThumbnailCache.has(resolvedDeckId)) {
const cachedPath = cardBackThumbnailCache.get(resolvedDeckId); const cachedPath = cardBackThumbnailCache.get(resolvedDeckId);
return cachedPath ? encodeURI(cachedPath) : null; return cachedPath || null;
} }
const manifest = getDeckManifest(resolvedDeckId); const manifest = getDeckManifest(resolvedDeckId);
@@ -747,7 +821,7 @@
const thumbnailPath = resolveDeckThumbnailPath(manifest, relativeBackPath) || resolveDeckCardBackPath(manifest); const thumbnailPath = resolveDeckThumbnailPath(manifest, relativeBackPath) || resolveDeckCardBackPath(manifest);
cardBackThumbnailCache.set(resolvedDeckId, thumbnailPath || null); cardBackThumbnailCache.set(resolvedDeckId, thumbnailPath || null);
return thumbnailPath ? encodeURI(thumbnailPath) : null; return thumbnailPath || null;
} }
function resolveDisplayNameWithDeck(deckId, cardName, trumpNumber) { function resolveDisplayNameWithDeck(deckId, cardName, trumpNumber) {
@@ -852,6 +926,8 @@
setActiveDeck(nextDeck); setActiveDeck(nextDeck);
}); });
document.addEventListener("connection:updated", resetConnectionCaches);
window.TarotCardImages = { window.TarotCardImages = {
resolveTarotCardImage, resolveTarotCardImage,
resolveTarotCardThumbnail, resolveTarotCardThumbnail,

View File

@@ -1,6 +1,10 @@
(function () { (function () {
let magickManifestCache = null; let magickManifestCache = null;
let magickDataCache = null; let magickDataCache = null;
let deckOptionsCache = null;
const deckManifestCache = new Map();
let quizCategoriesCache = null;
const quizTemplatesCache = new Map();
const DATA_ROOT = "data"; const DATA_ROOT = "data";
const MAGICK_ROOT = DATA_ROOT; const MAGICK_ROOT = DATA_ROOT;
@@ -92,8 +96,23 @@
pluto: "Pluto" pluto: "Pluto"
}; };
function buildRequestHeaders() {
const apiKey = getApiKey();
return apiKey
? {
"x-api-key": apiKey
}
: undefined;
}
async function fetchJson(path) { async function fetchJson(path) {
const response = await fetch(path); if (!path) {
throw new Error("API connection is not configured.");
}
const response = await fetch(path, {
headers: buildRequestHeaders()
});
if (!response.ok) { if (!response.ok) {
throw new Error(`Failed to load ${path} (${response.status})`); throw new Error(`Failed to load ${path} (${response.status})`);
} }
@@ -112,6 +131,98 @@
cursor[pathParts[pathParts.length - 1]] = value; cursor[pathParts[pathParts.length - 1]] = value;
} }
function normalizeApiBaseUrl(value) {
return String(value || "")
.trim()
.replace(/\/+$/, "");
}
function getApiBaseUrl() {
return normalizeApiBaseUrl(
window.TarotAppConfig?.getApiBaseUrl?.() || window.TarotAppConfig?.apiBaseUrl || ""
);
}
function getApiKey() {
return String(window.TarotAppConfig?.getApiKey?.() || window.TarotAppConfig?.apiKey || "")
.trim();
}
function isApiEnabled() {
return Boolean(getApiBaseUrl());
}
function encodePathSegments(pathValue) {
return String(pathValue || "")
.split("/")
.filter(Boolean)
.map((segment) => {
try {
return encodeURIComponent(decodeURIComponent(segment));
} catch {
return encodeURIComponent(segment);
}
})
.join("/");
}
function buildApiUrl(path, query = {}) {
const apiBaseUrl = getApiBaseUrl();
if (!apiBaseUrl) {
return "";
}
const url = new URL(path, `${apiBaseUrl}/`);
Object.entries(query || {}).forEach(([key, value]) => {
if (value == null) {
return;
}
const normalizedValue = String(value).trim();
if (!normalizedValue) {
return;
}
url.searchParams.set(key, normalizedValue);
});
const apiKey = getApiKey();
if (apiKey && !url.searchParams.has("api_key")) {
url.searchParams.set("api_key", apiKey);
}
return url.toString();
}
function toApiAssetUrl(assetPath) {
const apiBaseUrl = getApiBaseUrl();
const normalizedAssetPath = String(assetPath || "")
.trim()
.replace(/^\/+/, "")
.replace(/^asset\//i, "");
if (!apiBaseUrl || !normalizedAssetPath) {
return "";
}
const url = new URL(`/api/v1/assets/${encodePathSegments(normalizedAssetPath)}`, `${apiBaseUrl}/`);
const apiKey = getApiKey();
if (apiKey) {
url.searchParams.set("api_key", apiKey);
}
return url.toString();
}
function resetCaches() {
magickManifestCache = null;
magickDataCache = null;
deckOptionsCache = null;
quizCategoriesCache = null;
deckManifestCache.clear();
quizTemplatesCache.clear();
}
function normalizeTarotName(value) { function normalizeTarotName(value) {
return String(value || "") return String(value || "")
.trim() .trim()
@@ -207,7 +318,7 @@
return magickManifestCache; return magickManifestCache;
} }
magickManifestCache = await fetchJson(`${MAGICK_ROOT}/MANIFEST.json`); magickManifestCache = await fetchJson(buildApiUrl("/api/v1/bootstrap/magick-manifest"));
return magickManifestCache; return magickManifestCache;
} }
@@ -216,163 +327,185 @@
return magickDataCache; return magickDataCache;
} }
const manifest = await loadMagickManifest(); magickDataCache = await fetchJson(buildApiUrl("/api/v1/bootstrap/magick-dataset"));
const files = Array.isArray(manifest?.files) ? manifest.files : [];
const jsonFiles = files.filter((file) => file.endsWith(".json"));
const entries = await Promise.all(
jsonFiles.map(async (relativePath) => {
const data = await fetchJson(`${MAGICK_ROOT}/${relativePath}`);
return [relativePath, data];
})
);
const grouped = {};
entries.forEach(([relativePath, data]) => {
const noExtensionPath = relativePath.replace(/\.json$/i, "");
const pathParts = noExtensionPath.split("/").filter(Boolean);
if (!pathParts.length) {
return;
}
buildObjectPath(grouped, pathParts, data);
});
magickDataCache = {
manifest,
grouped,
files: Object.fromEntries(entries)
};
return magickDataCache; return magickDataCache;
} }
async function loadReferenceData() { async function loadReferenceData() {
const { groupDecansBySign } = window.TarotCalc; return fetchJson(buildApiUrl("/api/v1/bootstrap/reference-data"));
const [ }
planetsJson,
signsJson,
decansJson,
sabianJson,
planetScienceJson,
gematriaCiphersJson,
iChingJson,
calendarMonthsJson,
celestialHolidaysJson,
calendarHolidaysJson,
astronomyCyclesJson,
tarotDatabaseJson,
hebrewCalendarJson,
islamicCalendarJson,
wheelOfYearJson
] = await Promise.all([
fetchJson(`${DATA_ROOT}/planetary-correspondences.json`),
fetchJson(`${DATA_ROOT}/signs.json`),
fetchJson(`${DATA_ROOT}/decans.json`),
fetchJson(`${DATA_ROOT}/sabian-symbols.json`),
fetchJson(`${DATA_ROOT}/planet-science.json`),
fetchJson(`${DATA_ROOT}/gematria-ciphers.json`).catch(() => ({})),
fetchJson(`${DATA_ROOT}/i-ching.json`),
fetchJson(`${DATA_ROOT}/calendar-months.json`),
fetchJson(`${DATA_ROOT}/celestial-holidays.json`),
fetchJson(`${DATA_ROOT}/calendar-holidays.json`).catch(() => ({})),
fetchJson(`${DATA_ROOT}/astronomy-cycles.json`).catch(() => ({})),
fetchJson(`${DATA_ROOT}/tarot-database.json`).catch(() => ({})),
fetchJson(`${DATA_ROOT}/hebrew-calendar.json`).catch(() => ({})),
fetchJson(`${DATA_ROOT}/islamic-calendar.json`).catch(() => ({})),
fetchJson(`${DATA_ROOT}/wheel-of-year.json`).catch(() => ({}))
]);
const planets = planetsJson.planets || {}; async function fetchWeekEvents(geo, anchorDate = new Date()) {
const signs = signsJson.signs || []; return fetchJson(buildApiUrl("/api/v1/calendar/week-events", {
const decans = decansJson.decans || []; latitude: geo?.latitude,
const sabianSymbols = Array.isArray(sabianJson?.symbols) ? sabianJson.symbols : []; longitude: geo?.longitude,
const planetScience = Array.isArray(planetScienceJson?.planets) date: anchorDate instanceof Date ? anchorDate.toISOString() : anchorDate
? planetScienceJson.planets }));
: []; }
const gematriaCiphers = gematriaCiphersJson && typeof gematriaCiphersJson === "object"
? gematriaCiphersJson
: {};
const iChing = {
trigrams: Array.isArray(iChingJson?.trigrams) ? iChingJson.trigrams : [],
hexagrams: Array.isArray(iChingJson?.hexagrams) ? iChingJson.hexagrams : [],
correspondences: {
meta: iChingJson?.correspondences?.meta && typeof iChingJson.correspondences.meta === "object"
? iChingJson.correspondences.meta
: {},
tarotToTrigram: Array.isArray(iChingJson?.correspondences?.tarotToTrigram)
? iChingJson.correspondences.tarotToTrigram
: []
}
};
const calendarMonths = Array.isArray(calendarMonthsJson?.months) async function fetchNowSnapshot(geo, timestamp = new Date()) {
? calendarMonthsJson.months.map((month) => enrichCalendarMonth(month)) return fetchJson(buildApiUrl("/api/v1/now", {
: []; latitude: geo?.latitude,
longitude: geo?.longitude,
date: timestamp instanceof Date ? timestamp.toISOString() : timestamp
}));
}
const celestialHolidays = Array.isArray(celestialHolidaysJson?.holidays) async function loadTarotCards(filters = {}) {
? celestialHolidaysJson.holidays.map((holiday) => enrichCelestialHoliday(holiday)) return fetchJson(buildApiUrl("/api/v1/tarot/cards", {
: []; q: filters?.query,
arcana: filters?.arcana,
suit: filters?.suit
}));
}
const calendarHolidays = Array.isArray(calendarHolidaysJson?.holidays) async function pullTarotSpread(spreadId, options = {}) {
? calendarHolidaysJson.holidays.map((holiday) => enrichCalendarHoliday(holiday)) const normalizedSpreadId = String(spreadId || "").trim() || "three-card";
: []; return fetchJson(buildApiUrl(`/api/v1/tarot/spreads/${encodeURIComponent(normalizedSpreadId)}/pull`, {
seed: options?.seed
}));
}
const astronomyCycles = astronomyCyclesJson && typeof astronomyCyclesJson === "object" async function loadDeckOptions(forceRefresh = false) {
? astronomyCyclesJson if (!forceRefresh && deckOptionsCache) {
: {}; return deckOptionsCache;
const tarotDatabase = tarotDatabaseJson && typeof tarotDatabaseJson === "object"
? tarotDatabaseJson
: {};
const sourceMeanings = tarotDatabase.meanings && typeof tarotDatabase.meanings === "object"
? tarotDatabase.meanings
: {};
if (!sourceMeanings.majorByTrumpNumber || typeof sourceMeanings.majorByTrumpNumber !== "object") {
sourceMeanings.majorByTrumpNumber = {};
} }
const existingByCardName = sourceMeanings.byCardName && typeof sourceMeanings.byCardName === "object" deckOptionsCache = await fetchJson(buildApiUrl("/api/v1/decks/options"));
? sourceMeanings.byCardName return deckOptionsCache;
: {}; }
sourceMeanings.byCardName = existingByCardName; async function loadDeckManifest(deckId, forceRefresh = false) {
const normalizedDeckId = String(deckId || "").trim().toLowerCase();
if (!normalizedDeckId) {
return null;
}
tarotDatabase.meanings = sourceMeanings; if (!forceRefresh && deckManifestCache.has(normalizedDeckId)) {
return deckManifestCache.get(normalizedDeckId);
}
const hebrewCalendar = hebrewCalendarJson && typeof hebrewCalendarJson === "object" const manifest = await fetchJson(buildApiUrl(`/api/v1/decks/${encodeURIComponent(normalizedDeckId)}/manifest`));
? hebrewCalendarJson deckManifestCache.set(normalizedDeckId, manifest);
: {}; return manifest;
const islamicCalendar = islamicCalendarJson && typeof islamicCalendarJson === "object" }
? islamicCalendarJson
: {};
const wheelOfYear = wheelOfYearJson && typeof wheelOfYearJson === "object"
? wheelOfYearJson
: {};
return { async function loadQuizCategories(forceRefresh = false) {
planets, if (!forceRefresh && quizCategoriesCache) {
signs, return quizCategoriesCache;
decansBySign: groupDecansBySign(decans), }
sabianSymbols,
planetScience, quizCategoriesCache = await fetchJson(buildApiUrl("/api/v1/quiz/categories"));
gematriaCiphers, return quizCategoriesCache;
iChing, }
calendarMonths,
celestialHolidays, async function loadQuizTemplates(query = {}, forceRefresh = false) {
calendarHolidays, const categoryId = String(query?.categoryId || "").trim();
astronomyCycles, const cacheKey = categoryId || "__all__";
tarotDatabase,
hebrewCalendar, if (!forceRefresh && quizTemplatesCache.has(cacheKey)) {
islamicCalendar, return quizTemplatesCache.get(cacheKey);
wheelOfYear }
const templates = await fetchJson(buildApiUrl("/api/v1/quiz/templates", {
categoryId
}));
quizTemplatesCache.set(cacheKey, templates);
return templates;
}
async function pullQuizQuestion(query = {}) {
return fetchJson(buildApiUrl("/api/v1/quiz/questions/pull", {
categoryId: query?.categoryId,
templateKey: query?.templateKey,
difficulty: query?.difficulty,
seed: query?.seed,
includeAnswer: query?.includeAnswer
}));
}
async function probeConnection() {
const apiBaseUrl = getApiBaseUrl();
if (!apiBaseUrl) {
return {
ok: false,
reason: "missing-base-url",
message: "Enter an API Base URL to load TaroTime."
};
}
const requestOptions = {
headers: buildRequestHeaders()
}; };
try {
const healthResponse = await fetch(buildApiUrl("/api/v1/health"), requestOptions);
if (!healthResponse.ok) {
return {
ok: false,
reason: "health-check-failed",
message: `The API responded with ${healthResponse.status} during the health check.`
};
}
const health = await healthResponse.json().catch(() => null);
const protectedResponse = await fetch(buildApiUrl("/api/v1/decks/options"), requestOptions);
if (protectedResponse.status === 401 || protectedResponse.status === 403) {
return {
ok: false,
reason: "auth-required",
message: health?.apiKeyRequired
? "The API requires a valid API key."
: "The API rejected this connection."
};
}
if (!protectedResponse.ok) {
return {
ok: false,
reason: "protected-route-failed",
message: `The API responded with ${protectedResponse.status} when loading protected data.`
};
}
const decksPayload = await protectedResponse.json().catch(() => null);
return {
ok: true,
reason: "connected",
message: "Connected.",
health,
deckCount: Array.isArray(decksPayload?.decks) ? decksPayload.decks.length : null
};
} catch (_error) {
return {
ok: false,
reason: "network-error",
message: "Unable to reach the API. Check the URL and make sure the server is running."
};
}
} }
window.TarotDataService = { window.TarotDataService = {
buildApiUrl,
fetchNowSnapshot,
fetchWeekEvents,
getApiBaseUrl,
getApiKey,
isApiEnabled,
loadDeckManifest,
loadDeckOptions,
loadQuizCategories,
loadQuizTemplates,
loadTarotCards,
loadReferenceData, loadReferenceData,
loadMagickManifest, loadMagickManifest,
loadMagickDataset loadMagickDataset,
probeConnection,
pullQuizQuestion,
pullTarotSpread,
toApiAssetUrl
}; };
document.addEventListener("connection:updated", resetCaches);
})(); })();

View File

@@ -73,6 +73,100 @@
.settings-trigger[aria-pressed="true"] { .settings-trigger[aria-pressed="true"] {
background: #3f3f46; background: #3f3f46;
} }
body.connection-gated {
overflow: hidden;
}
.connection-gate {
position: fixed;
inset: 0;
z-index: 120;
display: grid;
place-items: center;
padding: 24px;
background:
radial-gradient(circle at top, rgba(245, 158, 11, 0.18), transparent 34%),
linear-gradient(180deg, rgba(9, 9, 11, 0.84), rgba(9, 9, 11, 0.96));
-webkit-backdrop-filter: blur(8px);
backdrop-filter: blur(8px);
}
.connection-gate[hidden] {
display: none;
}
.connection-gate-card {
width: min(460px, calc(100vw - 32px));
padding: 24px;
border: 1px solid rgba(245, 158, 11, 0.28);
border-radius: 18px;
background: linear-gradient(180deg, rgba(24, 24, 27, 0.96), rgba(9, 9, 11, 0.98));
box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45);
box-sizing: border-box;
}
.connection-gate-eyebrow {
margin-bottom: 10px;
font-size: 12px;
font-weight: 700;
letter-spacing: 0.16em;
text-transform: uppercase;
color: #fbbf24;
}
.connection-gate-title {
margin: 0;
font-size: 28px;
line-height: 1.1;
color: #fafaf9;
}
.connection-gate-copy {
margin: 12px 0 18px;
color: #d4d4d8;
font-size: 14px;
line-height: 1.6;
}
.connection-gate-fields {
display: grid;
gap: 12px;
}
.connection-gate-status {
min-height: 20px;
margin-top: 14px;
font-size: 13px;
color: #d4d4d8;
}
.connection-gate-status[data-tone="error"] {
color: #fca5a5;
}
.connection-gate-status[data-tone="success"] {
color: #86efac;
}
.connection-gate-status[data-tone="pending"] {
color: #fcd34d;
}
.connection-gate-actions {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
gap: 10px;
margin-top: 18px;
}
.connection-gate-actions button {
padding: 9px 14px;
border-radius: 8px;
border: 1px solid #3f3f46;
background: #27272a;
color: #f4f4f5;
cursor: pointer;
}
.connection-gate-actions button:hover {
background: #3f3f46;
}
#connection-gate-connect {
border-color: #d97706;
background: linear-gradient(180deg, #f59e0b, #d97706);
color: #111827;
font-weight: 700;
}
#connection-gate-connect:hover {
background: linear-gradient(180deg, #fbbf24, #ea580c);
}
#tarot-section { #tarot-section {
height: calc(100vh - 61px); height: calc(100vh - 61px);
background: #18181b; background: #18181b;
@@ -3509,6 +3603,9 @@
color: #f4f4f5; color: #f4f4f5;
box-sizing: border-box; box-sizing: border-box;
} }
.settings-field input[type="password"] {
letter-spacing: 0.04em;
}
.settings-actions { .settings-actions {
margin-top: 12px; margin-top: 12px;
display: flex; display: flex;
@@ -3528,6 +3625,23 @@
.settings-popup-header button:hover { .settings-popup-header button:hover {
background: #3f3f46; background: #3f3f46;
} }
@media (max-width: 640px) {
.connection-gate {
padding: 16px;
}
.connection-gate-card {
padding: 18px;
}
.connection-gate-title {
font-size: 24px;
}
.connection-gate-actions {
justify-content: stretch;
}
.connection-gate-actions button {
flex: 1 1 100%;
}
}
#month-strip { #month-strip {
height: 28px; height: 28px;
background: #18181b; background: #18181b;

View File

@@ -258,7 +258,7 @@
function enochianGlyphUrl(letter) { function enochianGlyphUrl(letter) {
const code = enochianGlyphCode(letter); const code = enochianGlyphCode(letter);
return code ? `asset/img/enochian/char(${code}).png` : ""; return code ? (window.TarotDataService?.toApiAssetUrl?.(`img/enochian/char(${code}).png`) || "") : "";
} }
function enochianGlyphImageHtml(letter, className) { function enochianGlyphImageHtml(letter, className) {

View File

@@ -564,7 +564,7 @@
<dt>Element / Planet</dt><dd>${letter.elementOrPlanet || "—"}</dd> <dt>Element / Planet</dt><dd>${letter.elementOrPlanet || "—"}</dd>
<dt>Tarot</dt><dd>${letter.tarot || "—"}</dd> <dt>Tarot</dt><dd>${letter.tarot || "—"}</dd>
<dt>Numerology</dt><dd>${letter.numerology || "—"}</dd> <dt>Numerology</dt><dd>${letter.numerology || "—"}</dd>
<dt>Glyph Source</dt><dd>Local cache: asset/img/enochian (sourced from dCode set)</dd> <dt>Glyph Source</dt><dd>API asset: img/enochian (sourced from dCode set)</dd>
<dt>Position</dt><dd>#${letter.index} of 21</dd> <dt>Position</dt><dd>#${letter.index} of 21</dd>
</dl> </dl>
`)); `));

View File

@@ -3,6 +3,7 @@
let config = { let config = {
getAlphabets: () => null, getAlphabets: () => null,
getGematriaDb: () => null,
getGematriaElements: () => ({ getGematriaElements: () => ({
cipherEl: null, cipherEl: null,
inputEl: null, inputEl: null,
@@ -24,6 +25,10 @@
return config.getAlphabets?.() || null; return config.getAlphabets?.() || null;
} }
function getConfiguredGematriaDb() {
return config.getGematriaDb?.() || null;
}
function getElements() { function getElements() {
return config.getGematriaElements?.() || { return config.getGematriaElements?.() || {
cipherEl: null, cipherEl: null,
@@ -169,14 +174,20 @@
return state.loadingPromise; return state.loadingPromise;
} }
state.loadingPromise = fetch("data/gematria-ciphers.json") state.loadingPromise = Promise.resolve()
.then((response) => { .then(async () => {
if (!response.ok) { const configuredDb = getConfiguredGematriaDb();
throw new Error(`Failed to load gematria ciphers (${response.status})`); if (configuredDb) {
return configuredDb;
} }
return response.json();
const referenceData = await window.TarotDataService?.loadReferenceData?.();
return referenceData?.gematriaCiphers || null;
}) })
.then((db) => { .then((db) => {
if (!db) {
throw new Error("Gematria cipher data unavailable from API.");
}
state.db = sanitizeGematriaDb(db); state.db = sanitizeGematriaDb(db);
return state.db; return state.db;
}) })
@@ -342,6 +353,11 @@
...config, ...config,
...nextConfig ...nextConfig
}; };
const configuredDb = getConfiguredGematriaDb();
if (configuredDb) {
state.db = sanitizeGematriaDb(configuredDb);
}
} }
window.AlphabetGematriaUi = { window.AlphabetGematriaUi = {

View File

@@ -39,7 +39,8 @@
signPlacementById: new Map(), signPlacementById: new Map(),
planetPlacementById: new Map(), planetPlacementById: new Map(),
pathPlacementByNo: new Map() pathPlacementByNo: new Map()
} },
gematriaDb: null
}; };
function arabicDisplayName(letter) { function arabicDisplayName(letter) {
@@ -86,6 +87,7 @@
function ensureGematriaCalculator() { function ensureGematriaCalculator() {
alphabetGematriaUi.init?.({ alphabetGematriaUi.init?.({
getAlphabets: () => state.alphabets, getAlphabets: () => state.alphabets,
getGematriaDb: () => state.gematriaDb,
getGematriaElements getGematriaElements
}); });
alphabetGematriaUi.ensureCalculator?.(); alphabetGematriaUi.ensureCalculator?.();
@@ -403,6 +405,8 @@
state.monthRefsByHebrewId = buildMonthReferencesByHebrew(referenceData, state.alphabets); state.monthRefsByHebrewId = buildMonthReferencesByHebrew(referenceData, state.alphabets);
} }
state.gematriaDb = referenceData?.gematriaCiphers || null;
if (state.initialized) { if (state.initialized) {
ensureGematriaCalculator(); ensureGematriaCalculator();
syncFilterControls(); syncFilterControls();

View File

@@ -1,6 +1,8 @@
(function () { (function () {
"use strict"; "use strict";
const dataService = window.TarotDataService || {};
const { const {
DAY_IN_MS, DAY_IN_MS,
getDateKey, getDateKey,
@@ -25,62 +27,65 @@
let moonCountdownCache = null; let moonCountdownCache = null;
let decanCountdownCache = null; let decanCountdownCache = null;
function updateNowPanel(referenceData, geo, elements, timeFormat = "minutes") { function renderNowStatsFromSnapshot(elements, stats) {
if (!referenceData || !geo || !elements) { if (elements.nowStatsPlanetsEl) {
return { dayKey: getDateKey(new Date()), skyRefreshKey: "" }; elements.nowStatsPlanetsEl.replaceChildren();
const planetPositions = Array.isArray(stats?.planetPositions) ? stats.planetPositions : [];
if (!planetPositions.length) {
elements.nowStatsPlanetsEl.textContent = "--";
} else {
planetPositions.forEach((position) => {
const item = document.createElement("div");
item.className = "now-stats-planet";
item.textContent = String(position?.label || "").trim() || "--";
elements.nowStatsPlanetsEl.appendChild(item);
});
}
} }
const now = new Date(); if (elements.nowStatsSabianEl) {
const dayKey = getDateKey(now); const sunSabianSymbol = stats?.sunSabianSymbol || null;
const moonSabianSymbol = stats?.moonSabianSymbol || null;
const sunLine = sunSabianSymbol?.phrase
? `Sun Sabian ${sunSabianSymbol.absoluteDegree}: ${sunSabianSymbol.phrase}`
: "Sun Sabian: --";
const moonLine = moonSabianSymbol?.phrase
? `Moon Sabian ${moonSabianSymbol.absoluteDegree}: ${moonSabianSymbol.phrase}`
: "Moon Sabian: --";
elements.nowStatsSabianEl.textContent = `${sunLine}\n${moonLine}`;
}
}
const todayHours = calcPlanetaryHoursForDayAndLocation(now, geo); function applyNowSnapshot(elements, snapshot, timeFormat) {
const yesterday = new Date(now.getTime() - DAY_IN_MS); const timestamp = snapshot?.timestamp ? new Date(snapshot.timestamp) : new Date();
const yesterdayHours = calcPlanetaryHoursForDayAndLocation(yesterday, geo); const dayKey = String(snapshot?.dayKey || getDateKey(timestamp));
const tomorrow = new Date(now.getTime() + DAY_IN_MS); const currentHour = snapshot?.currentHour || null;
const tomorrowHours = calcPlanetaryHoursForDayAndLocation(tomorrow, geo);
const allHours = [...yesterdayHours, ...todayHours, ...tomorrowHours].sort(
(a, b) => a.start.getTime() - b.start.getTime()
);
const currentHour = allHours.find((entry) => now >= entry.start && now < entry.end);
const currentHourSkyKey = currentHour
? `${currentHour.planetId}-${currentHour.start.toISOString()}`
: "no-hour";
if (currentHour) { if (currentHour?.planet) {
const planet = referenceData.planets[currentHour.planetId]; elements.nowHourEl.textContent = `${currentHour.planet.symbol} ${currentHour.planet.name}`;
elements.nowHourEl.textContent = planet
? `${planet.symbol} ${planet.name}`
: currentHour.planetId;
if (elements.nowHourTarotEl) { if (elements.nowHourTarotEl) {
const hourCardName = planet?.tarot?.majorArcana || ""; const hourCardName = currentHour.planet?.tarot?.majorArcana || "";
const hourTrumpNumber = planet?.tarot?.number; const hourTrumpNumber = currentHour.planet?.tarot?.number;
elements.nowHourTarotEl.textContent = hourCardName elements.nowHourTarotEl.textContent = hourCardName
? nowUiHelpers.getDisplayTarotName(hourCardName, hourTrumpNumber) ? nowUiHelpers.getDisplayTarotName(hourCardName, hourTrumpNumber)
: "--"; : "--";
} }
const msLeft = Math.max(0, currentHour.end.getTime() - now.getTime()); elements.nowCountdownEl.textContent = nowUiHelpers.formatCountdown(currentHour.msRemaining, timeFormat);
elements.nowCountdownEl.textContent = nowUiHelpers.formatCountdown(msLeft, timeFormat);
if (elements.nowHourNextEl) { if (elements.nowHourNextEl) {
const nextHour = allHours.find( const nextPlanet = currentHour.nextHourPlanet;
(entry) => entry.start.getTime() >= currentHour.end.getTime() - 1000 elements.nowHourNextEl.textContent = nextPlanet
); ? `> ${nextPlanet.name}`
if (nextHour) { : "> --";
const nextPlanet = referenceData.planets[nextHour.planetId];
elements.nowHourNextEl.textContent = nextPlanet
? `> ${nextPlanet.name}`
: `> ${nextHour.planetId}`;
} else {
elements.nowHourNextEl.textContent = "> --";
}
} }
nowUiHelpers.setNowCardImage( nowUiHelpers.setNowCardImage(
elements.nowHourCardEl, elements.nowHourCardEl,
planet?.tarot?.majorArcana, currentHour.planet?.tarot?.majorArcana,
"Current planetary hour card", "Current planetary hour card",
planet?.tarot?.number currentHour.planet?.tarot?.number
); );
} else { } else {
elements.nowHourEl.textContent = "--"; elements.nowHourEl.textContent = "--";
@@ -94,28 +99,27 @@
nowUiHelpers.setNowCardImage(elements.nowHourCardEl, null, "Current planetary hour card"); nowUiHelpers.setNowCardImage(elements.nowHourCardEl, null, "Current planetary hour card");
} }
const moonIllum = window.SunCalc.getMoonIllumination(now); const moon = snapshot?.moon || null;
const moonPhase = getMoonPhaseName(moonIllum.phase); const illuminationFraction = Number(moon?.illuminationFraction || 0);
const moonTarot = referenceData.planets.luna?.tarot?.majorArcana || "The High Priestess"; const moonTarot = moon?.tarot?.majorArcana || "The High Priestess";
elements.nowMoonEl.textContent = `${moonPhase} (${Math.round(moonIllum.fraction * 100)}%)`; elements.nowMoonEl.textContent = moon
elements.nowMoonTarotEl.textContent = nowUiHelpers.getDisplayTarotName(moonTarot, referenceData.planets.luna?.tarot?.number); ? `${moon.phase} (${Math.round(illuminationFraction * 100)}%)`
: "--";
elements.nowMoonTarotEl.textContent = moon
? nowUiHelpers.getDisplayTarotName(moonTarot, moon?.tarot?.number)
: "--";
nowUiHelpers.setNowCardImage( nowUiHelpers.setNowCardImage(
elements.nowMoonCardEl, elements.nowMoonCardEl,
moonTarot, moon?.tarot?.majorArcana,
"Current moon phase card", "Current moon phase card",
referenceData.planets.luna?.tarot?.number moon?.tarot?.number
); );
if (!moonCountdownCache || moonCountdownCache.fromPhase !== moonPhase || now >= moonCountdownCache.changeAt) {
moonCountdownCache = nowUiHelpers.findNextMoonPhaseTransition(now);
}
if (elements.nowMoonCountdownEl) { if (elements.nowMoonCountdownEl) {
if (moonCountdownCache?.changeAt) { if (moon?.countdown) {
const remaining = moonCountdownCache.changeAt.getTime() - now.getTime(); elements.nowMoonCountdownEl.textContent = nowUiHelpers.formatCountdown(moon.countdown.msRemaining, timeFormat);
elements.nowMoonCountdownEl.textContent = nowUiHelpers.formatCountdown(remaining, timeFormat);
if (elements.nowMoonNextEl) { if (elements.nowMoonNextEl) {
elements.nowMoonNextEl.textContent = `> ${moonCountdownCache.nextPhase}`; elements.nowMoonNextEl.textContent = `> ${moon.countdown.nextPhase}`;
} }
} else { } else {
elements.nowMoonCountdownEl.textContent = "--"; elements.nowMoonCountdownEl.textContent = "--";
@@ -125,45 +129,39 @@
} }
} }
const sunInfo = getDecanForDate(now, referenceData.signs, referenceData.decansBySign); const decanInfo = snapshot?.decan || null;
const decanSkyKey = sunInfo?.sign if (decanInfo?.sign) {
? `${sunInfo.sign.id}-${sunInfo.decan?.index || 1}` const signMajorName = nowUiHelpers.getDisplayTarotName(
: "no-decan"; decanInfo.sign?.tarot?.majorArcana,
if (sunInfo?.sign) { decanInfo.sign?.tarot?.number
const signStartDate = nowUiHelpers.getSignStartDate(now, sunInfo.sign); );
const daysSinceSignStart = (now.getTime() - signStartDate.getTime()) / DAY_IN_MS; const signDegree = Number.isFinite(Number(decanInfo.signDegree))
const signDegree = Math.min(29.9, Math.max(0, daysSinceSignStart)); ? Number(decanInfo.signDegree).toFixed(1)
const signMajorName = nowUiHelpers.getDisplayTarotName(sunInfo.sign.tarot.majorArcana, sunInfo.sign.tarot.trumpNumber); : "0.0";
elements.nowDecanEl.textContent = `${sunInfo.sign.symbol} ${sunInfo.sign.name} · ${signMajorName} (${signDegree.toFixed(1)}°)`;
const currentDecanKey = `${sunInfo.sign.id}-${sunInfo.decan?.index || 1}`; elements.nowDecanEl.textContent = `${decanInfo.sign.symbol} ${decanInfo.sign.name} · ${signMajorName} (${signDegree}°)`;
if (!decanCountdownCache || decanCountdownCache.key !== currentDecanKey || now >= decanCountdownCache.changeAt) {
decanCountdownCache = nowUiHelpers.findNextDecanTransition(now, referenceData.signs, referenceData.decansBySign);
}
if (sunInfo.decan) { if (decanInfo.decan?.tarotMinorArcana) {
const decanCardName = sunInfo.decan.tarotMinorArcana; elements.nowDecanTarotEl.textContent = nowUiHelpers.getDisplayTarotName(decanInfo.decan.tarotMinorArcana);
elements.nowDecanTarotEl.textContent = nowUiHelpers.getDisplayTarotName(decanCardName); nowUiHelpers.setNowCardImage(elements.nowDecanCardEl, decanInfo.decan.tarotMinorArcana, "Current decan card");
nowUiHelpers.setNowCardImage(elements.nowDecanCardEl, sunInfo.decan.tarotMinorArcana, "Current decan card");
} else { } else {
const signTarotName = sunInfo.sign.tarot?.majorArcana || "--"; const signTarotName = decanInfo.sign?.tarot?.majorArcana || "--";
elements.nowDecanTarotEl.textContent = signTarotName === "--" elements.nowDecanTarotEl.textContent = signTarotName === "--"
? "--" ? "--"
: nowUiHelpers.getDisplayTarotName(signTarotName, sunInfo.sign.tarot?.trumpNumber); : nowUiHelpers.getDisplayTarotName(signTarotName, decanInfo.sign?.tarot?.number);
nowUiHelpers.setNowCardImage( nowUiHelpers.setNowCardImage(
elements.nowDecanCardEl, elements.nowDecanCardEl,
sunInfo.sign.tarot?.majorArcana, decanInfo.sign?.tarot?.majorArcana,
"Current decan card", "Current decan card",
sunInfo.sign.tarot?.trumpNumber decanInfo.sign?.tarot?.number
); );
} }
if (elements.nowDecanCountdownEl) { if (elements.nowDecanCountdownEl) {
if (decanCountdownCache?.changeAt) { if (decanInfo.countdown) {
const remaining = decanCountdownCache.changeAt.getTime() - now.getTime(); elements.nowDecanCountdownEl.textContent = nowUiHelpers.formatCountdown(decanInfo.countdown.msRemaining, timeFormat);
elements.nowDecanCountdownEl.textContent = nowUiHelpers.formatCountdown(remaining, timeFormat);
if (elements.nowDecanNextEl) { if (elements.nowDecanNextEl) {
elements.nowDecanNextEl.textContent = `> ${nowUiHelpers.getDisplayTarotName(decanCountdownCache.nextLabel)}`; elements.nowDecanNextEl.textContent = `> ${nowUiHelpers.getDisplayTarotName(decanInfo.countdown.nextLabel)}`;
} }
} else { } else {
elements.nowDecanCountdownEl.textContent = "--"; elements.nowDecanCountdownEl.textContent = "--";
@@ -184,14 +182,23 @@
} }
} }
nowUiHelpers.updateNowStats(referenceData, elements, now); renderNowStatsFromSnapshot(elements, snapshot?.stats || {});
return { return {
dayKey, dayKey,
skyRefreshKey: `${currentHourSkyKey}|${decanSkyKey}|${moonPhase}` skyRefreshKey: String(snapshot?.skyRefreshKey || "")
}; };
} }
async function updateNowPanel(referenceData, geo, elements, timeFormat = "minutes") {
if (!referenceData || !geo || !elements) {
return { dayKey: getDateKey(new Date()), skyRefreshKey: "" };
}
const snapshot = await dataService.fetchNowSnapshot?.(geo, new Date());
return applyNowSnapshot(elements, snapshot || {}, timeFormat);
}
window.TarotNowUi = { window.TarotNowUi = {
updateNowPanel updateNowPanel
}; };

View File

@@ -2,6 +2,8 @@
(function () { (function () {
"use strict"; "use strict";
const dataService = window.TarotDataService || {};
const state = { const state = {
initialized: false, initialized: false,
scoreCorrect: 0, scoreCorrect: 0,
@@ -15,6 +17,7 @@
runRetrySet: new Set(), runRetrySet: new Set(),
currentQuestion: null, currentQuestion: null,
answeredCurrent: false, answeredCurrent: false,
loadingQuestion: false,
autoAdvanceTimer: null, autoAdvanceTimer: null,
autoAdvanceDelayMs: 1500 autoAdvanceDelayMs: 1500
}; };
@@ -239,49 +242,15 @@
}; };
} }
function instantiateQuestion(template) { async function buildQuestionBank(referenceData, magickDataset) {
if (!template) { const payload = await dataService.loadQuizTemplates?.();
return null; return Array.isArray(payload?.templates)
} ? payload.templates
: (Array.isArray(payload) ? payload : []);
const prompt = String(resolveDifficultyValue(template.promptByDifficulty) || "").trim();
const answer = normalizeOption(resolveDifficultyValue(template.answerByDifficulty));
const pool = toUniqueOptionList(resolveDifficultyValue(template.poolByDifficulty) || []);
if (!prompt || !answer) {
return null;
}
const built = buildOptions(answer, pool);
if (!built) {
return null;
}
return {
key: template.key,
categoryId: template.categoryId,
category: template.category,
prompt,
answer,
options: built.options,
correctIndex: built.correctIndex
};
} }
function buildQuestionBank(referenceData, magickDataset) { async function refreshQuestionBank(referenceData, magickDataset) {
if (typeof quizQuestionBank.buildQuestionBank !== "function") { state.questionBank = await buildQuestionBank(referenceData, magickDataset);
return [];
}
return quizQuestionBank.buildQuestionBank(
referenceData,
magickDataset,
DYNAMIC_CATEGORY_REGISTRY
);
}
function refreshQuestionBank(referenceData, magickDataset) {
state.questionBank = buildQuestionBank(referenceData, magickDataset);
state.templateByKey = new Map(state.questionBank.map((template) => [template.key, template])); state.templateByKey = new Map(state.questionBank.map((template) => [template.key, template]));
const hasTemplate = (key) => state.templateByKey.has(key); const hasTemplate = (key) => state.templateByKey.has(key);
@@ -380,7 +349,7 @@
|| "Category"; || "Category";
} }
function startRun(resetScore = false) { async function startRun(resetScore = false) {
clearAutoAdvanceTimer(); clearAutoAdvanceTimer();
if (resetScore) { if (resetScore) {
@@ -425,7 +394,7 @@
state.answeredCurrent = true; state.answeredCurrent = true;
updateScoreboard(); updateScoreboard();
showNextQuestion(); await showNextQuestion();
} }
function popNextTemplateFromRun() { function popNextTemplateFromRun() {
@@ -450,6 +419,7 @@
} }
function renderRunCompleteState() { function renderRunCompleteState() {
state.loadingQuestion = false;
state.currentQuestion = null; state.currentQuestion = null;
state.answeredCurrent = true; state.answeredCurrent = true;
questionTypeEl.textContent = getRunLabel(); questionTypeEl.textContent = getRunLabel();
@@ -479,6 +449,7 @@
return; return;
} }
state.loadingQuestion = false;
state.currentQuestion = question; state.currentQuestion = question;
state.answeredCurrent = false; state.answeredCurrent = false;
@@ -505,6 +476,7 @@
return; return;
} }
state.loadingQuestion = false;
state.currentQuestion = null; state.currentQuestion = null;
state.answeredCurrent = true; state.answeredCurrent = true;
@@ -514,9 +486,25 @@
feedbackEl.textContent = "Try Random/All or switch to another category."; feedbackEl.textContent = "Try Random/All or switch to another category.";
} }
function showNextQuestion() { async function createQuestionFromTemplate(template) {
if (!template) {
return null;
}
return dataService.pullQuizQuestion?.({
templateKey: template.key,
difficulty: getActiveDifficulty(),
includeAnswer: true
});
}
async function showNextQuestion() {
clearAutoAdvanceTimer(); clearAutoAdvanceTimer();
if (state.loadingQuestion) {
return;
}
const totalPending = state.runUnseenKeys.length + state.runRetryKeys.length; const totalPending = state.runUnseenKeys.length + state.runRetryKeys.length;
if (totalPending <= 0) { if (totalPending <= 0) {
if (state.questionBank.length) { if (state.questionBank.length) {
@@ -528,13 +516,21 @@
} }
const maxAttempts = totalPending + 1; const maxAttempts = totalPending + 1;
state.loadingQuestion = true;
feedbackEl.textContent = "Loading question...";
for (let index = 0; index < maxAttempts; index += 1) { for (let index = 0; index < maxAttempts; index += 1) {
const template = popNextTemplateFromRun(); const template = popNextTemplateFromRun();
if (!template) { if (!template) {
continue; continue;
} }
const question = instantiateQuestion(template); let question = null;
try {
question = await createQuestionFromTemplate(template);
} catch (_error) {
question = null;
}
if (question) { if (question) {
renderQuestion(question); renderQuestion(question);
return; return;
@@ -589,21 +585,21 @@
categoryEl.addEventListener("change", () => { categoryEl.addEventListener("change", () => {
state.selectedCategory = String(categoryEl.value || "random"); state.selectedCategory = String(categoryEl.value || "random");
startRun(true); void startRun(true);
}); });
difficultyEl.addEventListener("change", () => { difficultyEl.addEventListener("change", () => {
state.selectedDifficulty = String(difficultyEl.value || "normal").toLowerCase(); state.selectedDifficulty = String(difficultyEl.value || "normal").toLowerCase();
syncDifficultyControl(); syncDifficultyControl();
startRun(true); void startRun(true);
}); });
resetEl.addEventListener("click", () => { resetEl.addEventListener("click", () => {
startRun(true); void startRun(true);
}); });
} }
function ensureQuizSection(referenceData, magickDataset) { async function ensureQuizSection(referenceData, magickDataset) {
ensureQuizSection._referenceData = referenceData; ensureQuizSection._referenceData = referenceData;
ensureQuizSection._magickDataset = magickDataset; ensureQuizSection._magickDataset = magickDataset;
@@ -618,23 +614,23 @@
updateScoreboard(); updateScoreboard();
} }
refreshQuestionBank(referenceData, magickDataset); await refreshQuestionBank(referenceData, magickDataset);
const categoryAdjusted = renderCategoryOptions(); const categoryAdjusted = renderCategoryOptions();
syncDifficultyControl(); syncDifficultyControl();
if (categoryAdjusted) { if (categoryAdjusted) {
startRun(false); await startRun(false);
return; return;
} }
const hasRunPending = state.runUnseenKeys.length > 0 || state.runRetryKeys.length > 0; const hasRunPending = state.runUnseenKeys.length > 0 || state.runRetryKeys.length > 0;
if (!state.currentQuestion && !hasRunPending) { if (!state.currentQuestion && !hasRunPending) {
startRun(false); await startRun(false);
return; return;
} }
if (!state.currentQuestion && hasRunPending) { if (!state.currentQuestion && hasRunPending) {
showNextQuestion(); await showNextQuestion();
} }
updateScoreboard(); updateScoreboard();

View File

@@ -14,6 +14,7 @@
onSettingsApplied: null, onSettingsApplied: null,
onSyncSkyBackground: null, onSyncSkyBackground: null,
onStatus: null, onStatus: null,
onConnectionSaved: null,
onReopenActiveSection: null, onReopenActiveSection: null,
getActiveSection: null, getActiveSection: null,
onRenderWeek: null onRenderWeek: null
@@ -30,10 +31,37 @@
timeFormatEl: document.getElementById("time-format"), timeFormatEl: document.getElementById("time-format"),
birthDateEl: document.getElementById("birth-date"), birthDateEl: document.getElementById("birth-date"),
tarotDeckEl: document.getElementById("tarot-deck"), tarotDeckEl: document.getElementById("tarot-deck"),
apiBaseUrlEl: document.getElementById("api-base-url"),
apiKeyEl: document.getElementById("api-key"),
saveSettingsEl: document.getElementById("save-settings"), saveSettingsEl: document.getElementById("save-settings"),
useLocationEl: document.getElementById("use-location") useLocationEl: document.getElementById("use-location")
}; };
} }
function getConnectionSettings() {
return window.TarotAppConfig?.getConnectionSettings?.() || {
apiBaseUrl: String(window.TarotAppConfig?.apiBaseUrl || "").trim(),
apiKey: String(window.TarotAppConfig?.apiKey || "").trim()
};
}
function syncConnectionInputs() {
const { apiBaseUrlEl, apiKeyEl } = getElements();
const connectionSettings = getConnectionSettings();
if (apiBaseUrlEl) {
apiBaseUrlEl.value = String(connectionSettings.apiBaseUrl || "");
}
if (apiKeyEl) {
apiKeyEl.value = String(connectionSettings.apiKey || "");
}
}
function hasConnectionChanged(previous, next) {
return String(previous?.apiBaseUrl || "").trim() !== String(next?.apiBaseUrl || "").trim()
|| String(previous?.apiKey || "").trim() !== String(next?.apiKey || "").trim();
}
function setStatus(text) { function setStatus(text) {
if (typeof config.onStatus === "function") { if (typeof config.onStatus === "function") {
@@ -259,6 +287,7 @@
function applySettingsToInputs(settings) { function applySettingsToInputs(settings) {
const { latEl, lngEl, timeFormatEl, birthDateEl, tarotDeckEl } = getElements(); const { latEl, lngEl, timeFormatEl, birthDateEl, tarotDeckEl } = getElements();
syncTarotDeckInputOptions(); syncTarotDeckInputOptions();
syncConnectionInputs();
const normalized = normalizeSettings(settings); const normalized = normalizeSettings(settings);
latEl.value = String(normalized.latitude); latEl.value = String(normalized.latitude);
lngEl.value = String(normalized.longitude); lngEl.value = String(normalized.longitude);
@@ -292,12 +321,22 @@
}); });
} }
function getConnectionSettingsFromInputs() {
const { apiBaseUrlEl, apiKeyEl } = getElements();
return {
apiBaseUrl: String(apiBaseUrlEl?.value || "").trim(),
apiKey: String(apiKeyEl?.value || "").trim()
};
}
function openSettingsPopup() { function openSettingsPopup() {
const { settingsPopupEl, openSettingsEl } = getElements(); const { settingsPopupEl, openSettingsEl } = getElements();
if (!settingsPopupEl) { if (!settingsPopupEl) {
return; return;
} }
applySettingsToInputs(loadSavedSettings());
settingsPopupEl.hidden = false; settingsPopupEl.hidden = false;
if (openSettingsEl) { if (openSettingsEl) {
openSettingsEl.setAttribute("aria-expanded", "true"); openSettingsEl.setAttribute("aria-expanded", "true");
@@ -319,6 +358,10 @@
async function handleSaveSettings() { async function handleSaveSettings() {
try { try {
const settings = getSettingsFromInputs(); const settings = getSettingsFromInputs();
const previousConnectionSettings = getConnectionSettings();
const connectionSettings = getConnectionSettingsFromInputs();
const connectionChanged = hasConnectionChanged(previousConnectionSettings, connectionSettings);
const connectionResult = window.TarotAppConfig?.updateConnectionSettings?.(connectionSettings) || { didPersist: true };
const normalized = applySettingsToInputs(settings); const normalized = applySettingsToInputs(settings);
syncSky({ latitude: normalized.latitude, longitude: normalized.longitude }, true); syncSky({ latitude: normalized.latitude, longitude: normalized.longitude }, true);
const didPersist = saveSettings(normalized); const didPersist = saveSettings(normalized);
@@ -327,11 +370,13 @@
config.onReopenActiveSection?.(config.getActiveSection()); config.onReopenActiveSection?.(config.getActiveSection());
} }
closeSettingsPopup(); closeSettingsPopup();
if (typeof config.onRenderWeek === "function") { if (connectionChanged && typeof config.onConnectionSaved === "function") {
await config.onConnectionSaved(connectionResult, connectionSettings);
} else if (typeof config.onRenderWeek === "function") {
await config.onRenderWeek(); await config.onRenderWeek();
} }
if (!didPersist) { if (!didPersist || connectionResult.didPersist === false) {
setStatus("Settings applied for this session. Browser storage is unavailable."); setStatus("Settings applied for this session. Browser storage is unavailable.");
} }
} catch (error) { } catch (error) {
@@ -419,6 +464,11 @@
closeSettingsPopup(); closeSettingsPopup();
} }
}); });
document.addEventListener("connection:updated", () => {
syncConnectionInputs();
syncTarotDeckInputOptions();
});
} }
function init(nextConfig = {}) { function init(nextConfig = {}) {

View File

@@ -1,9 +1,12 @@
(function () { (function () {
"use strict"; "use strict";
const dataService = window.TarotDataService || {};
let initialized = false; let initialized = false;
let activeTarotSpread = null; let activeTarotSpread = null;
let activeTarotSpreadDraw = []; let activeTarotSpreadDraw = [];
let activeTarotSpreadLoading = false;
let config = { let config = {
ensureTarotSection: null, ensureTarotSection: null,
getReferenceData: () => null, getReferenceData: () => null,
@@ -59,22 +62,6 @@
return value === "celtic-cross" ? "celtic-cross" : "three-card"; return value === "celtic-cross" ? "celtic-cross" : "three-card";
} }
function drawNFromDeck(n) {
const allCards = window.TarotSectionUi?.getCards?.() || [];
if (!allCards.length) return [];
const shuffled = [...allCards];
for (let index = shuffled.length - 1; index > 0; index -= 1) {
const swapIndex = Math.floor(Math.random() * (index + 1));
[shuffled[index], shuffled[swapIndex]] = [shuffled[swapIndex], shuffled[index]];
}
return shuffled.slice(0, n).map((card) => ({
...card,
reversed: Math.random() < 0.3
}));
}
function escapeHtml(value) { function escapeHtml(value) {
return String(value || "") return String(value || "")
.replace(/&/g, "&amp;") .replace(/&/g, "&amp;")
@@ -88,15 +75,27 @@
return spreadId === "celtic-cross" ? CELTIC_CROSS_POSITIONS : THREE_CARD_POSITIONS; return spreadId === "celtic-cross" ? CELTIC_CROSS_POSITIONS : THREE_CARD_POSITIONS;
} }
function regenerateTarotSpreadDraw() { async function regenerateTarotSpreadDraw() {
const normalizedSpread = normalizeTarotSpread(activeTarotSpread); const normalizedSpread = normalizeTarotSpread(activeTarotSpread);
const positions = getSpreadPositions(normalizedSpread); const positions = getSpreadPositions(normalizedSpread);
const cards = drawNFromDeck(positions.length);
activeTarotSpreadDraw = positions.map((position, index) => ({ activeTarotSpreadLoading = true;
position, try {
card: cards[index] || null, const payload = await dataService.pullTarotSpread?.(normalizedSpread);
revealed: false const apiPositions = Array.isArray(payload?.positions) ? payload.positions : [];
})); activeTarotSpreadDraw = apiPositions.map((entry, index) => ({
position: entry?.position || positions[index] || null,
card: entry?.card
? {
...entry.card,
reversed: Boolean(entry?.reversed ?? entry.card?.reversed)
}
: null,
revealed: false
}));
} finally {
activeTarotSpreadLoading = false;
}
} }
function renderTarotSpreadMeanings() { function renderTarotSpreadMeanings() {
@@ -158,8 +157,20 @@
|| "" || ""
).trim(); ).trim();
if (activeTarotSpreadLoading) {
tarotSpreadBoardEl.innerHTML = '<div class="spread-empty">Loading spread from API...</div>';
if (tarotSpreadMeaningsEl) {
tarotSpreadMeaningsEl.innerHTML = "";
}
return;
}
if (!activeTarotSpreadDraw.length) { if (!activeTarotSpreadDraw.length) {
regenerateTarotSpreadDraw(); tarotSpreadBoardEl.innerHTML = '<div class="spread-empty">Loading spread...</div>';
if (tarotSpreadMeaningsEl) {
tarotSpreadMeaningsEl.innerHTML = "";
}
return;
} }
tarotSpreadBoardEl.className = `tarot-spread-board tarot-spread-board--${isCeltic ? "celtic" : "three"}`; tarotSpreadBoardEl.className = `tarot-spread-board tarot-spread-board--${isCeltic ? "celtic" : "three"}`;
@@ -267,10 +278,14 @@
function showTarotSpreadView(spreadId = "three-card") { function showTarotSpreadView(spreadId = "three-card") {
activeTarotSpread = normalizeTarotSpread(spreadId); activeTarotSpread = normalizeTarotSpread(spreadId);
regenerateTarotSpreadDraw(); activeTarotSpreadLoading = true;
activeTarotSpreadDraw = [];
applyViewState(); applyViewState();
ensureTarotBrowseData(); ensureTarotBrowseData();
renderTarotSpread(); renderTarotSpread();
void regenerateTarotSpreadDraw().then(() => {
renderTarotSpread();
});
} }
function setSpread(spreadId, openTarotSection = false) { function setSpread(spreadId, openTarotSection = false) {
@@ -281,8 +296,12 @@
} }
function revealAll() { function revealAll() {
if (activeTarotSpreadLoading) {
return;
}
if (!activeTarotSpreadDraw.length) { if (!activeTarotSpreadDraw.length) {
regenerateTarotSpreadDraw(); return;
} }
activeTarotSpreadDraw.forEach((entry) => { activeTarotSpreadDraw.forEach((entry) => {
@@ -376,8 +395,12 @@
if (tarotSpreadRedrawEl) { if (tarotSpreadRedrawEl) {
tarotSpreadRedrawEl.addEventListener("click", () => { tarotSpreadRedrawEl.addEventListener("click", () => {
regenerateTarotSpreadDraw(); activeTarotSpreadLoading = true;
activeTarotSpreadDraw = [];
renderTarotSpread(); renderTarotSpread();
void regenerateTarotSpreadDraw().then(() => {
renderTarotSpread();
});
}); });
} }

View File

@@ -1,4 +1,5 @@
(function () { (function () {
const dataService = window.TarotDataService || {};
const { const {
resolveTarotCardImage, resolveTarotCardImage,
resolveTarotCardThumbnail, resolveTarotCardThumbnail,
@@ -41,7 +42,8 @@
magickDataset: null, magickDataset: null,
referenceData: null, referenceData: null,
monthRefsByCardId: new Map(), monthRefsByCardId: new Map(),
courtCardByDecanId: new Map() courtCardByDecanId: new Map(),
loadingPromise: null
}; };
const TAROT_TRUMP_NUMBER_BY_NAME = { const TAROT_TRUMP_NUMBER_BY_NAME = {
@@ -781,7 +783,19 @@
} }
} }
function ensureTarotSection(referenceData, magickDataset = null) { async function loadCards(referenceData, magickDataset) {
const payload = await dataService.loadTarotCards?.();
const cards = Array.isArray(payload?.cards)
? payload.cards
: (Array.isArray(payload) ? payload : []);
return cards.map((card) => ({
...card,
id: String(card?.id || "").trim() || cardId(card)
}));
}
async function ensureTarotSection(referenceData, magickDataset = null) {
state.referenceData = referenceData || state.referenceData; state.referenceData = referenceData || state.referenceData;
if (magickDataset) { if (magickDataset) {
@@ -853,151 +867,156 @@
return; return;
} }
const databaseBuilder = window.TarotCardDatabase?.buildTarotDatabase; if (state.loadingPromise) {
if (typeof databaseBuilder !== "function") { await state.loadingPromise;
return; return;
} }
const cards = databaseBuilder(referenceData, magickDataset).map((card) => ({ state.loadingPromise = (async () => {
...card, const cards = await loadCards(referenceData, magickDataset);
id: cardId(card)
}));
state.cards = cards; state.cards = cards;
state.monthRefsByCardId = buildMonthReferencesByCard(referenceData, cards); state.monthRefsByCardId = buildMonthReferencesByCard(referenceData, cards);
state.courtCardByDecanId = buildCourtCardByDecanId(cards); state.courtCardByDecanId = buildCourtCardByDecanId(cards);
state.filteredCards = [...cards]; state.filteredCards = [...cards];
renderList(elements); renderList(elements);
renderHouseOfCards(elements); renderHouseOfCards(elements);
syncHouseControls(elements); syncHouseControls(elements);
if (cards.length > 0) { if (cards.length > 0) {
selectCardById(cards[0].id, elements); selectCardById(cards[0].id, elements);
}
elements.tarotCardListEl.addEventListener("click", (event) => {
const target = event.target;
if (!(target instanceof Node)) {
return;
} }
const button = target instanceof Element elements.tarotCardListEl.addEventListener("click", (event) => {
? target.closest(".tarot-list-item") const target = event.target;
: null; if (!(target instanceof Node)) {
if (!(button instanceof HTMLButtonElement)) {
return;
}
const selectedId = button.dataset.cardId;
if (!selectedId) {
return;
}
selectCardById(selectedId, elements);
});
if (elements.tarotSearchInputEl) {
elements.tarotSearchInputEl.addEventListener("input", () => {
state.searchQuery = elements.tarotSearchInputEl.value || "";
applySearchFilter(elements);
});
}
if (elements.tarotSearchClearEl && elements.tarotSearchInputEl) {
elements.tarotSearchClearEl.addEventListener("click", () => {
elements.tarotSearchInputEl.value = "";
state.searchQuery = "";
applySearchFilter(elements);
elements.tarotSearchInputEl.focus();
});
}
if (elements.tarotHouseFocusToggleEl) {
elements.tarotHouseFocusToggleEl.addEventListener("click", () => {
state.houseFocusMode = !state.houseFocusMode;
syncHouseControls(elements);
});
}
if (elements.tarotHouseTopCardsVisibleEl) {
elements.tarotHouseTopCardsVisibleEl.addEventListener("change", () => {
state.houseTopCardsVisible = Boolean(elements.tarotHouseTopCardsVisibleEl.checked);
renderHouseOfCards(elements);
syncHouseControls(elements);
});
}
[
[elements.tarotHouseTopInfoHebrewEl, "hebrew"],
[elements.tarotHouseTopInfoPlanetEl, "planet"],
[elements.tarotHouseTopInfoZodiacEl, "zodiac"],
[elements.tarotHouseTopInfoTrumpEl, "trump"],
[elements.tarotHouseTopInfoPathEl, "path"]
].forEach(([checkbox, key]) => {
if (!checkbox) {
return;
}
checkbox.addEventListener("change", () => {
state.houseTopInfoModes[key] = Boolean(checkbox.checked);
renderHouseOfCards(elements);
syncHouseControls(elements);
});
});
if (elements.tarotHouseBottomCardsVisibleEl) {
elements.tarotHouseBottomCardsVisibleEl.addEventListener("change", () => {
state.houseBottomCardsVisible = Boolean(elements.tarotHouseBottomCardsVisibleEl.checked);
renderHouseOfCards(elements);
syncHouseControls(elements);
});
}
[
[elements.tarotHouseBottomInfoZodiacEl, "zodiac"],
[elements.tarotHouseBottomInfoDecanEl, "decan"],
[elements.tarotHouseBottomInfoMonthEl, "month"],
[elements.tarotHouseBottomInfoRulerEl, "ruler"],
[elements.tarotHouseBottomInfoDateEl, "date"]
].forEach(([checkbox, key]) => {
if (!checkbox) {
return;
}
checkbox.addEventListener("change", () => {
state.houseBottomInfoModes[key] = Boolean(checkbox.checked);
renderHouseOfCards(elements);
syncHouseControls(elements);
});
});
if (elements.tarotHouseExportEl) {
elements.tarotHouseExportEl.addEventListener("click", () => {
exportHouseOfCards(elements, "png");
});
}
if (elements.tarotHouseExportWebpEl) {
elements.tarotHouseExportWebpEl.addEventListener("click", () => {
exportHouseOfCards(elements, "webp");
});
}
if (elements.tarotDetailImageEl) {
elements.tarotDetailImageEl.addEventListener("click", () => {
if (elements.tarotDetailImageEl.style.display === "none" || !state.selectedCardId) {
return; return;
} }
const request = buildLightboxCardRequestById(state.selectedCardId); const button = target instanceof Element
if (!request?.src) { ? target.closest(".tarot-list-item")
: null;
if (!(button instanceof HTMLButtonElement)) {
return; return;
} }
window.TarotUiLightbox?.open?.(request); const selectedId = button.dataset.cardId;
}); if (!selectedId) {
} return;
}
state.initialized = true; selectCardById(selectedId, elements);
});
if (elements.tarotSearchInputEl) {
elements.tarotSearchInputEl.addEventListener("input", () => {
state.searchQuery = elements.tarotSearchInputEl.value || "";
applySearchFilter(elements);
});
}
if (elements.tarotSearchClearEl && elements.tarotSearchInputEl) {
elements.tarotSearchClearEl.addEventListener("click", () => {
elements.tarotSearchInputEl.value = "";
state.searchQuery = "";
applySearchFilter(elements);
elements.tarotSearchInputEl.focus();
});
}
if (elements.tarotHouseFocusToggleEl) {
elements.tarotHouseFocusToggleEl.addEventListener("click", () => {
state.houseFocusMode = !state.houseFocusMode;
syncHouseControls(elements);
});
}
if (elements.tarotHouseTopCardsVisibleEl) {
elements.tarotHouseTopCardsVisibleEl.addEventListener("change", () => {
state.houseTopCardsVisible = Boolean(elements.tarotHouseTopCardsVisibleEl.checked);
renderHouseOfCards(elements);
syncHouseControls(elements);
});
}
[
[elements.tarotHouseTopInfoHebrewEl, "hebrew"],
[elements.tarotHouseTopInfoPlanetEl, "planet"],
[elements.tarotHouseTopInfoZodiacEl, "zodiac"],
[elements.tarotHouseTopInfoTrumpEl, "trump"],
[elements.tarotHouseTopInfoPathEl, "path"]
].forEach(([checkbox, key]) => {
if (!checkbox) {
return;
}
checkbox.addEventListener("change", () => {
state.houseTopInfoModes[key] = Boolean(checkbox.checked);
renderHouseOfCards(elements);
syncHouseControls(elements);
});
});
if (elements.tarotHouseBottomCardsVisibleEl) {
elements.tarotHouseBottomCardsVisibleEl.addEventListener("change", () => {
state.houseBottomCardsVisible = Boolean(elements.tarotHouseBottomCardsVisibleEl.checked);
renderHouseOfCards(elements);
syncHouseControls(elements);
});
}
[
[elements.tarotHouseBottomInfoZodiacEl, "zodiac"],
[elements.tarotHouseBottomInfoDecanEl, "decan"],
[elements.tarotHouseBottomInfoMonthEl, "month"],
[elements.tarotHouseBottomInfoRulerEl, "ruler"],
[elements.tarotHouseBottomInfoDateEl, "date"]
].forEach(([checkbox, key]) => {
if (!checkbox) {
return;
}
checkbox.addEventListener("change", () => {
state.houseBottomInfoModes[key] = Boolean(checkbox.checked);
renderHouseOfCards(elements);
syncHouseControls(elements);
});
});
if (elements.tarotHouseExportEl) {
elements.tarotHouseExportEl.addEventListener("click", () => {
exportHouseOfCards(elements, "png");
});
}
if (elements.tarotHouseExportWebpEl) {
elements.tarotHouseExportWebpEl.addEventListener("click", () => {
exportHouseOfCards(elements, "webp");
});
}
if (elements.tarotDetailImageEl) {
elements.tarotDetailImageEl.addEventListener("click", () => {
if (elements.tarotDetailImageEl.style.display === "none" || !state.selectedCardId) {
return;
}
const request = buildLightboxCardRequestById(state.selectedCardId);
if (!request?.src) {
return;
}
window.TarotUiLightbox?.open?.(request);
});
}
state.initialized = true;
})();
try {
await state.loadingPromise;
} finally {
state.loadingPromise = null;
}
} }
function selectCardByTrump(trumpNumber) { function selectCardByTrump(trumpNumber) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 717 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 642 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 547 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 796 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 662 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 679 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 502 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 587 B

View File

@@ -1,50 +0,0 @@
{
"generatedAt": "2026-02-22T03:40:25.496Z",
"source": "data",
"output": "data",
"totals": {
"json": 37,
"assets": 1,
"files": 38
},
"files": [
"alphabets.json",
"gods.json",
"numbers.json",
"playing-cards-52.json",
"alchemy/elementals.json",
"alchemy/elements.json",
"alchemy/symbols.json",
"alchemy/terms.json",
"astrology/houses.json",
"astrology/planets.json",
"astrology/retrograde.json",
"astrology/zodiac.json",
"chakras.json",
"enochian/dictionary.json",
"enochian/letters.json",
"enochian/tablets.json",
"gd/degrees.json",
"gd/grades.json",
"geomancy/houses.json",
"geomancy/tetragrams.json",
"hebrewLetters.json",
"kabbalah/angelicOrders.json",
"kabbalah/archangels.json",
"kabbalah/cube.json",
"kabbalah/fourWorlds.json",
"kabbalah/godNames.json",
"kabbalah/kerubim.json",
"kabbalah/kabbalah-tree.json",
"kabbalah/paths.json",
"kabbalah/sephirot.json",
"kabbalah/seventyTwoAngels.json",
"kabbalah/souls.json",
"kabbalah/tribesOfIsrael.json",
"hebrew-calendar.json",
"islamic-calendar.json",
"calendar-holidays.json",
"wheel-of-year.json",
"pentagram.svg"
]
}

View File

@@ -1,54 +0,0 @@
{
"gnome": {
"id": "gnome",
"name": {
"en": "Gnome"
},
"namePlural": {
"en": "Gnomes"
},
"title": {
"en": "Spirits of Earth"
},
"elementId": "earth"
},
"sylph": {
"id": "sylph",
"name": {
"en": "Sylph"
},
"namePlural": {
"en": "Sylphs"
},
"title": {
"en": "Spirits of Air"
},
"elementId": "air"
},
"undine": {
"id": "undine",
"name": {
"en": "Undine"
},
"namePlural": {
"en": "Undines"
},
"title": {
"en": "Spirits of Water"
},
"elementId": "water"
},
"salamander": {
"id": "salamander",
"name": {
"en": "Salamander"
},
"namePlural": {
"en": "Salamanders"
},
"title": {
"en": "Spirits of Fire"
},
"elementId": "fire"
}
}

View File

@@ -1,42 +0,0 @@
{
"earth": {
"id": "earth",
"symbol": "🜃",
"name": {
"en": "Earth"
},
"elementalId": "gnome"
},
"air": {
"id": "air",
"symbol": "🜁",
"name": {
"en": "Air"
},
"elementalId": "sylph"
},
"water": {
"id": "water",
"symbol": "🜄",
"name": {
"en": "Water"
},
"elementalId": "undine"
},
"fire": {
"id": "fire",
"symbol": "🜂",
"name": {
"en": "Fire"
},
"elementalId": "salamander"
},
"spirit": {
"id": "spirit",
"symbol": "☸",
"name": {
"en": "Spirit"
},
"elementalId": ""
}
}

View File

@@ -1,109 +0,0 @@
{
"sulphur": {
"id": "sulphur",
"symbol": "🜍",
"altSymbol": "🜍",
"name": {
"en": "Sulphur"
},
"category": "principles",
"gdGrade": 1
},
"mercury": {
"id": "mercury",
"symbol": "☿︎",
"altSymbol": "☿︎",
"name": {
"en": "Mercury"
},
"category": "principles",
"gdGrade": 1
},
"salt": {
"id": "salt",
"symbol": "🜔",
"altSymbol": "🜔",
"name": {
"en": "Salt"
},
"category": "principles",
"gdGrade": 1
},
"lead": {
"id": "lead",
"symbol": "🜪",
"altSymbol": "♄︎",
"name": {
"en": "Lead"
},
"category": "planets",
"planetId": "saturn",
"gdGrade": 1
},
"tin": {
"id": "tin",
"symbol": "🜩",
"altSymbol": "♃︎",
"name": {
"en": "Tin"
},
"category": "planets",
"planetId": "jupiter",
"gdGrade": 1
},
"iron": {
"id": "iron",
"symbol": "🜜",
"altSymbol": "♂︎",
"name": {
"en": "Iron"
},
"category": "planets",
"planetId": "mars",
"gdGrade": 1
},
"gold": {
"id": "gold",
"symbol": "🜚",
"altSymbol": "☉︎",
"name": {
"en": "Gold"
},
"category": "planets",
"planetId": "sol",
"gdGrade": 1
},
"copper": {
"id": "copper",
"symbol": "🜠",
"altSymbol": "♀︎",
"name": {
"en": "Copper / Brass"
},
"category": "planets",
"planetId": "venus",
"gdGrade": 1
},
"quicksilver": {
"id": "quicksilver",
"symbol": "☿︎",
"altSymbol": "☿︎",
"name": {
"en": "Quicksilver"
},
"category": "planets",
"planetId": "mercury",
"gdGrade": 1
},
"silver": {
"id": "silver",
"symbol": "🜛",
"altSymbol": "☽︎",
"name": {
"en": "Silver"
},
"category": "planets",
"planetId": "luna",
"gdGrade": 1
}
}

View File

@@ -1,78 +0,0 @@
{
"sol-philosophorum": {
"id": "sol-philosophorum",
"name": {
"en": "Sol Philosophorum"
},
"terms": {
"en": [
"Pure living Alchemical Spirit of Gold",
"Refined Essence of Heat & Dryness"
]
},
"gdGrade": 1
},
"luna-philosophorum": {
"id": "luna-philosophorum",
"name": {
"en": "Luna Philosophorum"
},
"terms": {
"en": [
"Pure living Alchemical Spirit of Silver",
"Refined Essence of Heat & Moisture"
]
},
"gdGrade": 1
},
"green-lion": {
"id": "green-lion",
"name": {
"en": "Green Lion"
},
"terms": {
"en": [
"Stem and Root of Radical Essence of Metals"
]
},
"gdGrade": 1
},
"black-dragon": {
"id": "black-dragon",
"name": {
"en": "Black Dragon"
},
"terms": {
"en": [
"Death - Putrafaction - Decay"
]
},
"gdGrade": 1
},
"king": {
"id": "king",
"name": {
"en": "The King"
},
"terms": {
"en": [
"Red - Qabalistic Microprosopus",
"Tiphareth - Analogous to Gold and the Sun"
]
},
"gdGrade": 1
},
"queen": {
"id": "queen",
"name": {
"en": "The Queen"
},
"terms": {
"en": [
"White - Qabalistic Bride of Microprosopus",
"Malkah - Analogous to Silver and the Moon"
]
},
"gdGrade": 1
}
}

View File

@@ -1,755 +0,0 @@
{
"meta": {
"description": "Cross-alphabet reference: English (26), Hebrew (22 kabbalah letters), and Greek (24 modern + 3 archaic numerals). Hebrew entries cross-reference hebrewLetters.json and kabbalah-tree.json; Greek entries trace Phoenician/Hebrew origins via hebrewLetterId FK.",
"sources": [
"Sefer Yetzirah",
"Liber 777 — Aleister Crowley",
"Ancient Greek Alphabet & Isopsephy tradition",
"ISO 15924",
"Pythagorean numerology"
],
"notes": "Hebrew kabbalahPathNumber is a FK to kabbalah-tree.json paths[].pathNumber. hebrewLetterId is a FK to hebrewLetters.json. Greek archaic letters (Digamma, Qoppa, Sampi) are marked archaic:true and used only in isopsephy; they are not part of the modern 24-letter Greek alphabet."
},
"hebrew": [
{
"index": 1,
"hebrewLetterId": "alef",
"char": "א",
"name": "Aleph",
"transliteration": "A",
"numerology": 1,
"meaning": "ox",
"letterType": "mother",
"astrology": { "type": "element", "name": "Air" },
"kabbalahPathNumber": 11,
"tarot": { "card": "The Fool", "trumpNumber": 0 },
"greekEquivalent": "alpha"
},
{
"index": 2,
"hebrewLetterId": "bet",
"char": "ב",
"name": "Beth",
"transliteration": "B",
"numerology": 2,
"meaning": "house",
"letterType": "double",
"astrology": { "type": "planet", "name": "Mercury" },
"kabbalahPathNumber": 12,
"tarot": { "card": "The Magician", "trumpNumber": 1 },
"greekEquivalent": "beta"
},
{
"index": 3,
"hebrewLetterId": "gimel",
"char": "ג",
"name": "Gimel",
"transliteration": "G",
"numerology": 3,
"meaning": "camel",
"letterType": "double",
"astrology": { "type": "planet", "name": "Luna" },
"kabbalahPathNumber": 13,
"tarot": { "card": "The High Priestess", "trumpNumber": 2 },
"greekEquivalent": "gamma"
},
{
"index": 4,
"hebrewLetterId": "dalet",
"char": "ד",
"name": "Daleth",
"transliteration": "D",
"numerology": 4,
"meaning": "door",
"letterType": "double",
"astrology": { "type": "planet", "name": "Venus" },
"kabbalahPathNumber": 14,
"tarot": { "card": "The Empress", "trumpNumber": 3 },
"greekEquivalent": "delta"
},
{
"index": 5,
"hebrewLetterId": "he",
"char": "ה",
"name": "Heh",
"transliteration": "H",
"numerology": 5,
"meaning": "window",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Aries" },
"kabbalahPathNumber": 15,
"tarot": { "card": "The Emperor", "trumpNumber": 4 },
"greekEquivalent": "epsilon"
},
{
"index": 6,
"hebrewLetterId": "vav",
"char": "ו",
"name": "Vav",
"transliteration": "V",
"numerology": 6,
"meaning": "peg, nail, hook",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Taurus" },
"kabbalahPathNumber": 16,
"tarot": { "card": "The Hierophant", "trumpNumber": 5 },
"greekEquivalent": "digamma"
},
{
"index": 7,
"hebrewLetterId": "zayin",
"char": "ז",
"name": "Zayin",
"transliteration": "Z",
"numerology": 7,
"meaning": "sword, weapon",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Gemini" },
"kabbalahPathNumber": 17,
"tarot": { "card": "The Lovers", "trumpNumber": 6 },
"greekEquivalent": "zeta"
},
{
"index": 8,
"hebrewLetterId": "het",
"char": "ח",
"name": "Cheth",
"transliteration": "Ch",
"numerology": 8,
"meaning": "enclosure, fence",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Cancer" },
"kabbalahPathNumber": 18,
"tarot": { "card": "The Chariot", "trumpNumber": 7 },
"greekEquivalent": "eta"
},
{
"index": 9,
"hebrewLetterId": "tet",
"char": "ט",
"name": "Teth",
"transliteration": "T",
"numerology": 9,
"meaning": "serpent",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Leo" },
"kabbalahPathNumber": 19,
"tarot": { "card": "Strength", "trumpNumber": 8 },
"greekEquivalent": "theta"
},
{
"index": 10,
"hebrewLetterId": "yod",
"char": "י",
"name": "Yod",
"transliteration": "I",
"numerology": 10,
"meaning": "hand",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Virgo" },
"kabbalahPathNumber": 20,
"tarot": { "card": "The Hermit", "trumpNumber": 9 },
"greekEquivalent": "iota"
},
{
"index": 11,
"hebrewLetterId": "kaf",
"char": "כ",
"name": "Kaph",
"transliteration": "K",
"numerology": 20,
"meaning": "palm of hand",
"letterType": "double",
"astrology": { "type": "planet", "name": "Jupiter" },
"kabbalahPathNumber": 21,
"tarot": { "card": "Wheel of Fortune", "trumpNumber": 10 },
"greekEquivalent": "kappa"
},
{
"index": 12,
"hebrewLetterId": "lamed",
"char": "ל",
"name": "Lamed",
"transliteration": "L",
"numerology": 30,
"meaning": "ox-goad",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Libra" },
"kabbalahPathNumber": 22,
"tarot": { "card": "Justice", "trumpNumber": 11 },
"greekEquivalent": "lambda"
},
{
"index": 13,
"hebrewLetterId": "mem",
"char": "מ",
"name": "Mem",
"transliteration": "M",
"numerology": 40,
"meaning": "water",
"letterType": "mother",
"astrology": { "type": "element", "name": "Water" },
"kabbalahPathNumber": 23,
"tarot": { "card": "The Hanged Man", "trumpNumber": 12 },
"greekEquivalent": "mu"
},
{
"index": 14,
"hebrewLetterId": "nun",
"char": "נ",
"name": "Nun",
"transliteration": "N",
"numerology": 50,
"meaning": "fish",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Scorpio" },
"kabbalahPathNumber": 24,
"tarot": { "card": "Death", "trumpNumber": 13 },
"greekEquivalent": "nu"
},
{
"index": 15,
"hebrewLetterId": "samekh",
"char": "ס",
"name": "Samekh",
"transliteration": "S",
"numerology": 60,
"meaning": "prop, support",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Sagittarius" },
"kabbalahPathNumber": 25,
"tarot": { "card": "Temperance", "trumpNumber": 14 },
"greekEquivalent": "xi"
},
{
"index": 16,
"hebrewLetterId": "ayin",
"char": "ע",
"name": "Ayin",
"transliteration": "O",
"numerology": 70,
"meaning": "eye",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Capricorn" },
"kabbalahPathNumber": 26,
"tarot": { "card": "The Devil", "trumpNumber": 15 },
"greekEquivalent": "omicron"
},
{
"index": 17,
"hebrewLetterId": "pe",
"char": "פ",
"name": "Pe",
"transliteration": "P",
"numerology": 80,
"meaning": "mouth",
"letterType": "double",
"astrology": { "type": "planet", "name": "Mars" },
"kabbalahPathNumber": 27,
"tarot": { "card": "The Tower", "trumpNumber": 16 },
"greekEquivalent": "pi"
},
{
"index": 18,
"hebrewLetterId": "tsadi",
"char": "צ",
"name": "Tzaddi",
"transliteration": "Tz",
"numerology": 90,
"meaning": "fishhook",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Aquarius" },
"kabbalahPathNumber": 28,
"tarot": { "card": "The Star", "trumpNumber": 17 },
"greekEquivalent": "qoppa"
},
{
"index": 19,
"hebrewLetterId": "qof",
"char": "ק",
"name": "Qoph",
"transliteration": "Q",
"numerology": 100,
"meaning": "back of the head",
"letterType": "simple",
"astrology": { "type": "zodiac", "name": "Pisces" },
"kabbalahPathNumber": 29,
"tarot": { "card": "The Moon", "trumpNumber": 18 }
},
{
"index": 20,
"hebrewLetterId": "resh",
"char": "ר",
"name": "Resh",
"transliteration": "R",
"numerology": 200,
"meaning": "head",
"letterType": "double",
"astrology": { "type": "planet", "name": "Sol" },
"kabbalahPathNumber": 30,
"tarot": { "card": "The Sun", "trumpNumber": 19 },
"greekEquivalent": "rho"
},
{
"index": 21,
"hebrewLetterId": "shin",
"char": "ש",
"name": "Shin",
"transliteration": "Sh",
"numerology": 300,
"meaning": "tooth",
"letterType": "mother",
"astrology": { "type": "element", "name": "Fire" },
"kabbalahPathNumber": 31,
"tarot": { "card": "Judgement", "trumpNumber": 20 },
"greekEquivalent": "sigma"
},
{
"index": 22,
"hebrewLetterId": "tav",
"char": "ת",
"name": "Tav",
"transliteration": "Th",
"numerology": 400,
"meaning": "cross, mark",
"letterType": "double",
"astrology": { "type": "planet", "name": "Saturn" },
"kabbalahPathNumber": 32,
"tarot": { "card": "The Universe", "trumpNumber": 21 },
"greekEquivalent": "tau"
}
],
"greek": [
{
"name": "alpha",
"index": 1,
"char": "Α",
"charLower": "α",
"displayName": "Alpha",
"transliteration": "A",
"ipa": "/a/, /aː/",
"numerology": 1,
"meaning": "ox (from Phoenician aleph)",
"hebrewLetterId": "alef",
"archaic": false
},
{
"name": "beta",
"index": 2,
"char": "Β",
"charLower": "β",
"displayName": "Beta",
"transliteration": "B",
"ipa": "/b/",
"numerology": 2,
"meaning": "house (from Phoenician beth)",
"hebrewLetterId": "bet",
"archaic": false
},
{
"name": "gamma",
"index": 3,
"char": "Γ",
"charLower": "γ",
"displayName": "Gamma",
"transliteration": "G",
"ipa": "/ɡ/",
"numerology": 3,
"meaning": "camel (from Phoenician gimel)",
"hebrewLetterId": "gimel",
"archaic": false
},
{
"name": "delta",
"index": 4,
"char": "Δ",
"charLower": "δ",
"displayName": "Delta",
"transliteration": "D",
"ipa": "/d/",
"numerology": 4,
"meaning": "door (from Phoenician daleth)",
"hebrewLetterId": "dalet",
"archaic": false
},
{
"name": "epsilon",
"index": 5,
"char": "Ε",
"charLower": "ε",
"displayName": "Epsilon",
"transliteration": "E",
"ipa": "/e/",
"numerology": 5,
"meaning": "bare / simple e (adapted from Phoenician he)",
"hebrewLetterId": "he",
"archaic": false
},
{
"name": "digamma",
"index": 6,
"char": "Ϝ",
"charLower": "ϝ",
"displayName": "Digamma",
"transliteration": "W/V",
"ipa": "/w/",
"numerology": 6,
"meaning": "double-gamma; from Phoenician waw (same root as Hebrew Vav)",
"hebrewLetterId": "vav",
"archaic": true
},
{
"name": "zeta",
"index": 7,
"char": "Ζ",
"charLower": "ζ",
"displayName": "Zeta",
"transliteration": "Z",
"ipa": "/dz/ or /z/",
"numerology": 7,
"meaning": "weapon (from Phoenician zayin)",
"hebrewLetterId": "zayin",
"archaic": false
},
{
"name": "eta",
"index": 8,
"char": "Η",
"charLower": "η",
"displayName": "Eta",
"transliteration": "E / H",
"ipa": "/eː/",
"numerology": 8,
"meaning": "fence, enclosure (from Phoenician heth)",
"hebrewLetterId": "het",
"archaic": false
},
{
"name": "theta",
"index": 9,
"char": "Θ",
"charLower": "θ",
"displayName": "Theta",
"transliteration": "Th",
"ipa": "/tʰ/, /θ/",
"numerology": 9,
"meaning": "wheel; from Phoenician teth (serpent)",
"hebrewLetterId": "tet",
"archaic": false
},
{
"name": "iota",
"index": 10,
"char": "Ι",
"charLower": "ι",
"displayName": "Iota",
"transliteration": "I",
"ipa": "/i/, /iː/",
"numerology": 10,
"meaning": "hand (from Phoenician yod)",
"hebrewLetterId": "yod",
"archaic": false
},
{
"name": "kappa",
"index": 11,
"char": "Κ",
"charLower": "κ",
"displayName": "Kappa",
"transliteration": "K",
"ipa": "/k/",
"numerology": 20,
"meaning": "palm of hand (from Phoenician kaph)",
"hebrewLetterId": "kaf",
"archaic": false
},
{
"name": "lambda",
"index": 12,
"char": "Λ",
"charLower": "λ",
"displayName": "Lambda",
"transliteration": "L",
"ipa": "/l/",
"numerology": 30,
"meaning": "ox-goad (from Phoenician lamed)",
"hebrewLetterId": "lamed",
"archaic": false
},
{
"name": "mu",
"index": 13,
"char": "Μ",
"charLower": "μ",
"displayName": "Mu",
"transliteration": "M",
"ipa": "/m/",
"numerology": 40,
"meaning": "water (from Phoenician mem)",
"hebrewLetterId": "mem",
"archaic": false
},
{
"name": "nu",
"index": 14,
"char": "Ν",
"charLower": "ν",
"displayName": "Nu",
"transliteration": "N",
"ipa": "/n/",
"numerology": 50,
"meaning": "fish (from Phoenician nun)",
"hebrewLetterId": "nun",
"archaic": false
},
{
"name": "xi",
"index": 15,
"char": "Ξ",
"charLower": "ξ",
"displayName": "Xi",
"transliteration": "X",
"ipa": "/ks/",
"numerology": 60,
"meaning": "prop/support (from Phoenician samekh)",
"hebrewLetterId": "samekh",
"archaic": false
},
{
"name": "omicron",
"index": 16,
"char": "Ο",
"charLower": "ο",
"displayName": "Omicron",
"transliteration": "O",
"ipa": "/o/",
"numerology": 70,
"meaning": "small o; eye (from Phoenician ayin)",
"hebrewLetterId": "ayin",
"archaic": false
},
{
"name": "pi",
"index": 17,
"char": "Π",
"charLower": "π",
"displayName": "Pi",
"transliteration": "P",
"ipa": "/p/",
"numerology": 80,
"meaning": "mouth (from Phoenician pe)",
"hebrewLetterId": "pe",
"archaic": false
},
{
"name": "qoppa",
"index": 18,
"char": "Ϟ",
"charLower": "ϟ",
"displayName": "Qoppa",
"transliteration": "Q",
"ipa": "/kʷ/",
"numerology": 90,
"meaning": "back of head (from Phoenician qoph)",
"hebrewLetterId": "qof",
"archaic": true
},
{
"name": "rho",
"index": 19,
"char": "Ρ",
"charLower": "ρ",
"displayName": "Rho",
"transliteration": "R",
"ipa": "/r/",
"numerology": 100,
"meaning": "head (from Phoenician resh)",
"hebrewLetterId": "resh",
"archaic": false
},
{
"name": "sigma",
"index": 20,
"char": "Σ",
"charLower": "σ",
"charFinal": "ς",
"displayName": "Sigma",
"transliteration": "S",
"ipa": "/s/",
"numerology": 200,
"meaning": "tooth (from Phoenician shin)",
"hebrewLetterId": "shin",
"archaic": false
},
{
"name": "tau",
"index": 21,
"char": "Τ",
"charLower": "τ",
"displayName": "Tau",
"transliteration": "T",
"ipa": "/t/",
"numerology": 300,
"meaning": "cross, mark (from Phoenician tav)",
"hebrewLetterId": "tav",
"archaic": false
},
{
"name": "upsilon",
"index": 22,
"char": "Υ",
"charLower": "υ",
"displayName": "Upsilon",
"transliteration": "U/Y",
"ipa": "/y/, /u/",
"numerology": 400,
"meaning": "simple upsilon; from Phoenician waw (also root of Vav, W, U, V, F)",
"hebrewLetterId": "vav",
"archaic": false
},
{
"name": "phi",
"index": 23,
"char": "Φ",
"charLower": "φ",
"displayName": "Phi",
"transliteration": "Ph/F",
"ipa": "/pʰ/, /f/",
"numerology": 500,
"meaning": "light; late Phoenician pe secondary derivative",
"archaic": false
},
{
"name": "chi",
"index": 24,
"char": "Χ",
"charLower": "χ",
"displayName": "Chi",
"transliteration": "Ch/Kh",
"ipa": "/kʰ/, /x/",
"numerology": 600,
"meaning": "cross-variant; possible relation to Phoenician heth or teth",
"archaic": false
},
{
"name": "psi",
"index": 25,
"char": "Ψ",
"charLower": "ψ",
"displayName": "Psi",
"transliteration": "Ps",
"ipa": "/ps/",
"numerology": 700,
"meaning": "soul, trident; some scholars link to Phoenician tsade",
"hebrewLetterId": "tsadi",
"archaic": false
},
{
"name": "omega",
"index": 26,
"char": "Ω",
"charLower": "ω",
"displayName": "Omega",
"transliteration": "O",
"ipa": "/oː/",
"numerology": 800,
"meaning": "great o; from ayin (eye) family, contrasted with omicron",
"hebrewLetterId": "ayin",
"archaic": false
},
{
"name": "sampi",
"index": 27,
"char": "Ϡ",
"charLower": "ϡ",
"displayName": "Sampi",
"transliteration": "Ss/Ts",
"ipa": "/ss/ or /ts/",
"numerology": 900,
"meaning": "like pi (variant); Phoenician tsade origin",
"hebrewLetterId": "tsadi",
"archaic": true
}
],
"english": [
{ "index": 1, "letter": "A", "ipa": "/eɪ/", "pythagorean": 1, "hebrewLetterId": "alef", "greekEquivalent": "alpha" },
{ "index": 2, "letter": "B", "ipa": "/biː/", "pythagorean": 2, "hebrewLetterId": "bet", "greekEquivalent": "beta" },
{ "index": 3, "letter": "C", "ipa": "/siː/", "pythagorean": 3, "hebrewLetterId": "gimel", "greekEquivalent": "gamma" },
{ "index": 4, "letter": "D", "ipa": "/diː/", "pythagorean": 4, "hebrewLetterId": "dalet", "greekEquivalent": "delta" },
{ "index": 5, "letter": "E", "ipa": "/iː/", "pythagorean": 5, "hebrewLetterId": "he", "greekEquivalent": "epsilon" },
{ "index": 6, "letter": "F", "ipa": "/ɛf/", "pythagorean": 6, "hebrewLetterId": "vav", "greekEquivalent": "digamma" },
{ "index": 7, "letter": "G", "ipa": "/dʒiː/","pythagorean": 7, "hebrewLetterId": "gimel", "greekEquivalent": "gamma" },
{ "index": 8, "letter": "H", "ipa": "/eɪtʃ/","pythagorean": 8, "hebrewLetterId": "he", "greekEquivalent": "eta" },
{ "index": 9, "letter": "I", "ipa": "/aɪ/", "pythagorean": 9, "hebrewLetterId": "yod", "greekEquivalent": "iota" },
{ "index": 10, "letter": "J", "ipa": "/dʒeɪ/","pythagorean": 1, "hebrewLetterId": "yod", "greekEquivalent": "iota" },
{ "index": 11, "letter": "K", "ipa": "/keɪ/", "pythagorean": 2, "hebrewLetterId": "kaf", "greekEquivalent": "kappa" },
{ "index": 12, "letter": "L", "ipa": "/ɛl/", "pythagorean": 3, "hebrewLetterId": "lamed", "greekEquivalent": "lambda" },
{ "index": 13, "letter": "M", "ipa": "/ɛm/", "pythagorean": 4, "hebrewLetterId": "mem", "greekEquivalent": "mu" },
{ "index": 14, "letter": "N", "ipa": "/ɛn/", "pythagorean": 5, "hebrewLetterId": "nun", "greekEquivalent": "nu" },
{ "index": 15, "letter": "O", "ipa": "/oʊ/", "pythagorean": 6, "hebrewLetterId": "ayin", "greekEquivalent": "omicron" },
{ "index": 16, "letter": "P", "ipa": "/piː/", "pythagorean": 7, "hebrewLetterId": "pe", "greekEquivalent": "pi" },
{ "index": 17, "letter": "Q", "ipa": "/kjuː/","pythagorean": 8, "hebrewLetterId": "qof", "greekEquivalent": "qoppa" },
{ "index": 18, "letter": "R", "ipa": "/ɑːr/", "pythagorean": 9, "hebrewLetterId": "resh", "greekEquivalent": "rho" },
{ "index": 19, "letter": "S", "ipa": "/ɛs/", "pythagorean": 1, "hebrewLetterId": "samekh", "greekEquivalent": "sigma" },
{ "index": 20, "letter": "T", "ipa": "/tiː/", "pythagorean": 2, "hebrewLetterId": "tav", "greekEquivalent": "tau" },
{ "index": 21, "letter": "U", "ipa": "/juː/", "pythagorean": 3, "hebrewLetterId": "vav", "greekEquivalent": "upsilon" },
{ "index": 22, "letter": "V", "ipa": "/viː/", "pythagorean": 4, "hebrewLetterId": "vav", "greekEquivalent": "upsilon" },
{ "index": 23, "letter": "W", "ipa": "/ˈdʌbljuː/", "pythagorean": 5, "hebrewLetterId": "vav", "greekEquivalent": "digamma" },
{ "index": 24, "letter": "X", "ipa": "/ɛks/", "pythagorean": 6, "hebrewLetterId": "samekh", "greekEquivalent": "xi" },
{ "index": 25, "letter": "Y", "ipa": "/waɪ/", "pythagorean": 7, "hebrewLetterId": "yod", "greekEquivalent": "upsilon" },
{ "index": 26, "letter": "Z", "ipa": "/zɛd/", "pythagorean": 8, "hebrewLetterId": "zayin", "greekEquivalent": "zeta" }
],
"arabic": [
{ "index": 1, "name": "alif", "char": "ا", "nameArabic": "أَلِف", "transliteration": "ā / ʾ", "ipa": "/ʔ/, /aː/", "abjad": 1, "meaning": "ox; breath; onset", "category": "solar", "hebrewLetterId": "alef", "forms": { "isolated": "ا", "final": "ـا" } },
{ "index": 2, "name": "ba", "char": "ب", "nameArabic": "بَاء", "transliteration": "b", "ipa": "/b/", "abjad": 2, "meaning": "house", "category": "lunar", "hebrewLetterId": "bet", "forms": { "isolated": "ب", "initial": "بـ", "medial": "ـبـ", "final": "ـب" } },
{ "index": 3, "name": "jeem", "char": "ج", "nameArabic": "جِيم", "transliteration": "j", "ipa": "/d͡ʒ/", "abjad": 3, "meaning": "camel; beauty", "category": "lunar", "hebrewLetterId": "gimel", "forms": { "isolated": "ج", "initial": "جـ", "medial": "ـجـ", "final": "ـج" } },
{ "index": 4, "name": "dal", "char": "د", "nameArabic": "دَال", "transliteration": "d", "ipa": "/d/", "abjad": 4, "meaning": "door", "category": "solar", "hebrewLetterId": "dalet", "forms": { "isolated": "د", "final": "ـد" } },
{ "index": 5, "name": "ha", "char": "ه", "nameArabic": "هَاء", "transliteration": "h", "ipa": "/h/", "abjad": 5, "meaning": "window; breath; exclamation", "category": "lunar", "hebrewLetterId": "he", "forms": { "isolated": "ه", "initial": "هـ", "medial": "ـهـ", "final": "ـه" } },
{ "index": 6, "name": "waw", "char": "و", "nameArabic": "وَاو", "transliteration": "w / ū", "ipa": "/w/, /uː/", "abjad": 6, "meaning": "hook; peg; and", "category": "solar", "hebrewLetterId": "vav", "forms": { "isolated": "و", "final": "ـو" } },
{ "index": 7, "name": "zayn", "char": "ز", "nameArabic": "زَاي", "transliteration": "z", "ipa": "/z/", "abjad": 7, "meaning": "adornment; weapon", "category": "solar", "hebrewLetterId": "zayin", "forms": { "isolated": "ز", "final": "ـز" } },
{ "index": 8, "name": "ha_khaa", "char": "ح", "nameArabic": "حَاء", "transliteration": "ḥ", "ipa": "/ħ/", "abjad": 8, "meaning": "fence; enclosed courtyard; breath","category": "lunar", "hebrewLetterId": "het", "forms": { "isolated": "ح", "initial": "حـ", "medial": "ـحـ", "final": "ـح" } },
{ "index": 9, "name": "ta_tay", "char": "ط", "nameArabic": "طَاء", "transliteration": "ṭ", "ipa": "/tˤ/", "abjad": 9, "meaning": "serpent; goodness", "category": "solar", "hebrewLetterId": "tet", "forms": { "isolated": "ط", "initial": "طـ", "medial": "ـطـ", "final": "ـط" } },
{ "index": 10, "name": "ya", "char": "ي", "nameArabic": "يَاء", "transliteration": "y / ī", "ipa": "/j/, /iː/", "abjad": 10, "meaning": "hand", "category": "solar", "hebrewLetterId": "yod", "forms": { "isolated": "ي", "initial": "يـ", "medial": "ـيـ", "final": "ـي" } },
{ "index": 11, "name": "kaf", "char": "ك", "nameArabic": "كَاف", "transliteration": "k", "ipa": "/k/", "abjad": 20, "meaning": "palm of hand; like", "category": "solar", "hebrewLetterId": "kaf", "forms": { "isolated": "ك", "initial": "كـ", "medial": "ـكـ", "final": "ـك" } },
{ "index": 12, "name": "lam", "char": "ل", "nameArabic": "لَام", "transliteration": "l", "ipa": "/l/", "abjad": 30, "meaning": "ox-goad; for/to", "category": "solar", "hebrewLetterId": "lamed", "forms": { "isolated": "ل", "initial": "لـ", "medial": "ـلـ", "final": "ـل" } },
{ "index": 13, "name": "meem", "char": "م", "nameArabic": "مِيم", "transliteration": "m", "ipa": "/m/", "abjad": 40, "meaning": "water", "category": "lunar", "hebrewLetterId": "mem", "forms": { "isolated": "م", "initial": "مـ", "medial": "ـمـ", "final": "ـم" } },
{ "index": 14, "name": "nun", "char": "ن", "nameArabic": "نُون", "transliteration": "n", "ipa": "/n/", "abjad": 50, "meaning": "fish; inkwell", "category": "solar", "hebrewLetterId": "nun", "forms": { "isolated": "ن", "initial": "نـ", "medial": "ـنـ", "final": "ـن" } },
{ "index": 15, "name": "seen", "char": "س", "nameArabic": "سِين", "transliteration": "s", "ipa": "/s/", "abjad": 60, "meaning": "tooth; prop; support", "category": "solar", "hebrewLetterId": "samekh", "forms": { "isolated": "س", "initial": "سـ", "medial": "ـسـ", "final": "ـس" } },
{ "index": 16, "name": "ayn", "char": "ع", "nameArabic": "عَيْن", "transliteration": "ʿ", "ipa": "/ʕ/", "abjad": 70, "meaning": "eye; spring of water", "category": "lunar", "hebrewLetterId": "ayin", "forms": { "isolated": "ع", "initial": "عـ", "medial": "ـعـ", "final": "ـع" } },
{ "index": 17, "name": "fa", "char": "ف", "nameArabic": "فَاء", "transliteration": "f", "ipa": "/f/", "abjad": 80, "meaning": "mouth", "category": "lunar", "hebrewLetterId": "pe", "forms": { "isolated": "ف", "initial": "فـ", "medial": "ـفـ", "final": "ـف" } },
{ "index": 18, "name": "sad", "char": "ص", "nameArabic": "صَاد", "transliteration": "ṣ", "ipa": "/sˤ/", "abjad": 90, "meaning": "twisted; fishhook", "category": "solar", "hebrewLetterId": "tsadi", "forms": { "isolated": "ص", "initial": "صـ", "medial": "ـصـ", "final": "ـص" } },
{ "index": 19, "name": "qaf", "char": "ق", "nameArabic": "قَاف", "transliteration": "q", "ipa": "/q/", "abjad": 100, "meaning": "back of neck; ape", "category": "lunar", "hebrewLetterId": "qof", "forms": { "isolated": "ق", "initial": "قـ", "medial": "ـقـ", "final": "ـق" } },
{ "index": 20, "name": "ra", "char": "ر", "nameArabic": "رَاء", "transliteration": "r", "ipa": "/r/", "abjad": 200, "meaning": "head", "category": "solar", "hebrewLetterId": "resh", "forms": { "isolated": "ر", "final": "ـر" } },
{ "index": 21, "name": "sheen", "char": "ش", "nameArabic": "شِين", "transliteration": "sh", "ipa": "/ʃ/", "abjad": 300, "meaning": "tooth; composite; sun", "category": "solar", "hebrewLetterId": "shin", "forms": { "isolated": "ش", "initial": "شـ", "medial": "ـشـ", "final": "ـش" } },
{ "index": 22, "name": "ta", "char": "ت", "nameArabic": "تَاء", "transliteration": "t", "ipa": "/t/", "abjad": 400, "meaning": "mark; sign; covenant", "category": "solar", "hebrewLetterId": "tav", "forms": { "isolated": "ت", "initial": "تـ", "medial": "ـتـ", "final": "ـت" } },
{ "index": 23, "name": "tha", "char": "ث", "nameArabic": "ثَاء", "transliteration": "th", "ipa": "/θ/", "abjad": 500, "meaning": "thorny; fixed", "category": "solar", "hebrewLetterId": null, "forms": { "isolated": "ث", "initial": "ثـ", "medial": "ـثـ", "final": "ـث" } },
{ "index": 24, "name": "kha", "char": "خ", "nameArabic": "خَاء", "transliteration": "kh", "ipa": "/x/", "abjad": 600, "meaning": "penetrating; veiled", "category": "lunar", "hebrewLetterId": null, "forms": { "isolated": "خ", "initial": "خـ", "medial": "ـخـ", "final": "ـخ" } },
{ "index": 25, "name": "dhal", "char": "ذ", "nameArabic": "ذَال", "transliteration": "dh", "ipa": "/ð/", "abjad": 700, "meaning": "this; possessor of", "category": "solar", "hebrewLetterId": null, "forms": { "isolated": "ذ", "final": "ـذ" } },
{ "index": 26, "name": "dad", "char": "ض", "nameArabic": "ضَاد", "transliteration": "ḍ", "ipa": "/dˤ/", "abjad": 800, "meaning": "ribs; darkness; unique letter", "category": "solar", "hebrewLetterId": null, "forms": { "isolated": "ض", "initial": "ضـ", "medial": "ـضـ", "final": "ـض" } },
{ "index": 27, "name": "dha", "char": "ظ", "nameArabic": "ظَاء", "transliteration": "ẓ", "ipa": "/ðˤ/", "abjad": 900, "meaning": "shadow; manifest; back", "category": "solar", "hebrewLetterId": null, "forms": { "isolated": "ظ", "initial": "ظـ", "medial": "ـظـ", "final": "ـظ" } },
{ "index": 28, "name": "ghayn", "char": "غ", "nameArabic": "غَيْن", "transliteration": "gh", "ipa": "/ɣ/", "abjad": 1000, "meaning": "absence; obscured eye; rain", "category": "lunar", "hebrewLetterId": null, "forms": { "isolated": "غ", "initial": "غـ", "medial": "ـغـ", "final": "ـغ" } }
],
"enochian": [
{ "index": 1, "id": "A", "char": "A", "title": "Un", "englishLetters": ["A"], "transliteration": "ah", "elementOrPlanet": "taurus", "tarot": "hierophant", "numerology": 6, "hebrewLetterId": "alef" },
{ "index": 2, "id": "B", "char": "B", "title": "Pe", "englishLetters": ["B"], "transliteration": "beh", "elementOrPlanet": "aries", "tarot": "star", "numerology": 5, "hebrewLetterId": "bet" },
{ "index": 3, "id": "C", "char": "C", "title": "Veh", "englishLetters": ["C", "K"], "transliteration": "co", "elementOrPlanet": "fire", "tarot": "judgement", "numerology": 300, "hebrewLetterId": null },
{ "index": 4, "id": "D", "char": "D", "title": "Gal", "englishLetters": ["D"], "transliteration": "deh", "elementOrPlanet": "spirit", "tarot": "empress", "numerology": 4, "hebrewLetterId": "dalet" },
{ "index": 5, "id": "E", "char": "E", "title": "Graph", "englishLetters": ["E"], "transliteration": "ee", "elementOrPlanet": "virgo", "tarot": "hermit", "numerology": 10, "hebrewLetterId": "he" },
{ "index": 6, "id": "F", "char": "F", "title": "Orth", "englishLetters": ["F"], "transliteration": "eff", "elementOrPlanet": "Cauda Draonis", "tarot": "juggler", "numerology": 3, "hebrewLetterId": "vav" },
{ "index": 7, "id": "G", "char": "G", "title": "Ged", "englishLetters": ["G"], "transliteration": "gee", "elementOrPlanet": "cancer", "tarot": "chariot", "numerology": 8, "hebrewLetterId": "gimel" },
{ "index": 8, "id": "H", "char": "H", "title": "Na-hath", "englishLetters": ["H"], "transliteration": "heh", "elementOrPlanet": "air", "tarot": "fool", "numerology": 1, "hebrewLetterId": "he" },
{ "index": 9, "id": "I", "char": "I", "title": "Gon", "englishLetters": ["I", "Y", "J"], "transliteration": "ee", "elementOrPlanet": "sagittarius", "tarot": "temperance", "numerology": 60, "hebrewLetterId": "yod" },
{ "index": 10, "id": "L", "char": "L", "title": "Ur", "englishLetters": ["L"], "transliteration": "el, leh", "elementOrPlanet": "cancer", "tarot": "charit", "numerology": 8, "hebrewLetterId": "lamed" },
{ "index": 11, "id": "M", "char": "M", "title": "Tal", "englishLetters": ["M"], "transliteration": "em", "elementOrPlanet": "aquarius", "tarot": "emperor", "numerology": 90, "hebrewLetterId": "mem" },
{ "index": 12, "id": "N", "char": "N", "title": "Drun", "englishLetters": ["N"], "transliteration": "en", "elementOrPlanet": "scorpio", "tarot": "death", "numerology": 50, "hebrewLetterId": "nun" },
{ "index": 13, "id": "O", "char": "O", "title": "Med", "englishLetters": ["O"], "transliteration": "oh", "elementOrPlanet": "libra", "tarot": "justice", "numerology": 30, "hebrewLetterId": "ayin" },
{ "index": 14, "id": "P", "char": "P", "title": "Mals", "englishLetters": ["P"], "transliteration": "peh", "elementOrPlanet": "leo", "tarot": "strength", "numerology": 9, "hebrewLetterId": "pe" },
{ "index": 15, "id": "Q", "char": "Q", "title": "Ger", "englishLetters": ["Q"], "transliteration": "quo", "elementOrPlanet": "water", "tarot": "hanged man", "numerology": 40, "hebrewLetterId": "qof" },
{ "index": 16, "id": "R", "char": "R", "title": "Don", "englishLetters": ["R"], "transliteration": "reh, ar", "elementOrPlanet": "pesces", "tarot": "moon", "numerology": 100, "hebrewLetterId": "resh" },
{ "index": 17, "id": "S", "char": "S", "title": "Fam", "englishLetters": ["S"], "transliteration": "she, ess", "elementOrPlanet": "gemini", "tarot": "lovers", "numerology": 7, "hebrewLetterId": "samekh" },
{ "index": 18, "id": "T", "char": "T", "title": "Gisa", "englishLetters": ["T"], "transliteration": "teh", "elementOrPlanet": "leo", "tarot": "strength", "numerology": 9, "hebrewLetterId": "tav" },
{ "index": 19, "id": "V", "char": "V", "title": "Vau", "englishLetters": ["U", "V", "W"], "transliteration": "vaa", "elementOrPlanet": "capricorn", "tarot": "devil", "numerology": 70, "hebrewLetterId": "vav" },
{ "index": 20, "id": "X", "char": "X", "title": "Pal", "englishLetters": ["X"], "transliteration": "s, tz", "elementOrPlanet": "earth", "tarot": "universe", "numerology": 400, "hebrewLetterId": "samekh" },
{ "index": 21, "id": "Z", "char": "Z", "title": "Ceph", "englishLetters": ["Z"], "transliteration": "zod, zee", "elementOrPlanet": "leo", "tarot": "strength", "numerology": 9, "hebrewLetterId": "zayin" }
]
}

View File

@@ -1,170 +0,0 @@
[
{
"index": 1,
"zodiacId": "aries",
"motto": {
"la": "Vita",
"en": "Life"
},
"name": {
"en": "House of Self"
},
"interpretation": {
"en": "Physical appearance, identity and characteristics. Resourcefulness. Outlook and impressions. Ego/personality. Goals. Determination. Beginnings and initiatives."
}
},
{
"index": 2,
"zodiacId": "taurus",
"motto": {
"la": "Lucrum",
"en": "Gain"
},
"name": {
"en": "House of Value"
},
"interpretation": {
"en": "Material and immaterial things of certain value. Money. Possessions and acquisitions. Cultivation. Perseverance. Substance. Self-worth."
}
},
{
"index": 3,
"zodiacId": "gemini",
"motto": {
"la": "Fratres",
"en": "Order"
},
"name": {
"en": "House of Sharing"
},
"interpretation": {
"en": "Communication. Distribution/generosity. Intelligence/development. Siblings, cousins. Locomotion and transportation. Ephemera."
}
},
{
"index": 4,
"zodiacId": "cancer",
"motto": {
"la": "Genitor",
"en": "Parent"
},
"name": {
"en": "House of Home and Family"
},
"interpretation": {
"en": "Ancestry, heritage, roots. Foundation and environment. Mother or caretaker. Housing and the household. Neighborhood matters. Comfort, security/safety. Tidiness. Pets."
}
},
{
"index": 5,
"zodiacId": "leo",
"motto": {
"la": "Nati",
"en": "Children"
},
"name": {
"en": "House of Pleasure"
},
"interpretation": {
"en": "Recreational and leisure activities. Things which make for enjoyment and entertainment. Games/gambling/risk. Romance and limerence. Children/fertility. Self-expression. Courage."
}
},
{
"index": 6,
"zodiacId": "virgo",
"motto": {
"la": "Valetudo",
"en": "Health"
},
"name": {
"en": "House of Health"
},
"interpretation": {
"en": "Routine tasks and duties. Skills or training acquired. Employment (job). Service and being served. Strength, vitality. Wellness and healthcare."
}
},
{
"index": 7,
"zodiacId": "libra",
"motto": {
"la": "Uxor",
"en": "Spouse"
},
"name": {
"en": "House of Balance"
},
"interpretation": {
"en": "Partnerships. Marriage and business matters. Diplomacy. Agreements, contracts and all things official. Equilibrium."
}
},
{
"index": 8,
"zodiacId": "scorpio",
"motto": {
"la": "Mors",
"en": "Death"
},
"name": {
"en": "House of Transformation"
},
"interpretation": {
"en": "Cycles of deaths and rebirth. Sexual relationships and commitments of all kinds. Joint funds, finances. Other person's resource. Karma and debt (judgment). Regeneration. Self-transformation."
}
},
{
"index": 9,
"zodiacId": "sagittarius",
"motto": {
"la": "Iter",
"en": "Passage"
},
"name": {
"en": "House of Purpose"
},
"interpretation": {
"en": "Travel and foreign affairs. Culture. Expansion. Law and ethics. Education/learning/knowledge. Philosophical interests, belief systems. Experience through exploration. Things long-term."
}
},
{
"index": 10,
"zodiacId": "capricorn",
"motto": {
"la": "Regnum",
"en": "Kingdom"
},
"name": {
"en": "House of Enterprise"
},
"interpretation": {
"en": "Ambitions. Motivations. Career, achievements. Society and government. Father or authority. Notoriety. Advantage."
}
},
{
"index": 11,
"zodiacId": "aquarius",
"motto": {
"la": "Benefacta",
"en": "Support"
},
"name": {
"en": "House of Blessings"
},
"interpretation": {
"en": "Benefits from effort. Friends and acquaintances of like-minded attitudes. Belonging. Groups, communities, and associations. Charity. Connectedness/networking. Love. Wish fulfillment. Wealth."
}
},
{
"index": 12,
"zodiacId": "pisces",
"motto": {
"la": "Carcer",
"en": "Rehabilitation"
},
"name": {
"en": "House of Sacrifice"
},
"interpretation": {
"en": "Privacy, refuge; seclusion and retreating. Creativity. Clandestiny↔Revelation. Intuition. Extremes/abundance, but also addictions. Luck, miracles. Releasing/relinquishing, healing/cleansing/rejuvenation, forgiveness, and peacefulness. Finality/completion/conclusion."
}
}
]

View File

@@ -1,233 +0,0 @@
{
"primum-mobile": {
"id": "primum-mobile",
"name": {
"en": {
"en": "Primum Mobile"
},
"he": {
"he": "ראשית הגלגולים",
"roman": "Roshit HaGilgulim"
}
}
},
"zodiac": {
"id": "zodiac",
"name": {
"en": {
"en": "Zodiac"
},
"he": {
"he": "מזלות",
"roman": "Mazalot"
}
}
},
"olam-yesodot": {
"id": "olam-yesodot",
"name": {
"en": {
"en": "World of Foundations"
},
"he": {
"he": "עולם היסודות",
"roman": "Olam haYesodot"
}
}
},
"sol": {
"id": "sol",
"symbol": "☉︎",
"hebrewLetterId": "resh",
"name": {
"en": {
"en": "Sol"
},
"he": {
"he": "שמש",
"roman": "Shemesh",
"en": "Sun"
}
},
"godNameId": "yhvh-eloha-vedaat",
"archangelId": "michael",
"intelligenceId": "nakhiel",
"spiritId": "sorath",
"magickTypes": {
"en": "Career success and progression, establishing harmony, healing and improving health, leadership skills, acquiring money and resources, promotion, strengthening willpower"
}
},
"mercury": {
"id": "mercury",
"symbol": "☿︎",
"hebrewLetterId": "bet",
"name": {
"en": {
"en": "Mercury"
},
"he": {
"he": "כוכב",
"roman": "Kochav"
}
},
"godNameId": "elohim-tzvaot",
"archangelId": "raphael",
"intelligenceId": "tiriel",
"spiritId": "taphthartharath",
"magickTypes": {
"en": "Business success, improving communication skills, developing knowledge and memory, diplomacy, exam success, divination, developing influence, protection when traveling by air and land, learning music"
}
},
"venus": {
"id": "venus",
"symbol": "♀︎",
"hebrewLetterId": "dalet",
"name": {
"en": {
"en": "Venus"
},
"he": {
"he": "נגה",
"roman": "Noga"
}
},
"godNameId": "yhvh-tzvaot",
"archangelId": "anael",
"intelligenceId": "hagiel",
"spiritId": "kedemel",
"magickTypes": {
"en": "Increasing attractiveness and self-confidence, beauty and passion, enhancing creativity, improving fertility, developing friendships, obtaining love"
}
},
"earth": {
"id": "earth",
"symbol": "♁︎",
"name": {
"en": {
"en": "Earth"
}
}
},
"luna": {
"id": "luna",
"symbol": "☾︎",
"hebrewLetterId": "gimel",
"name": {
"en": {
"en": "Luna"
},
"he": {
"he": "לבנה",
"roman": "Levanah",
"en": "White"
}
},
"godNameId": "shaddai-el-chai",
"archangelId": "gabriel",
"intelligenceId": "shelachel",
"spiritId": "chasmodai",
"magickTypes": {
"en": "Developing clairvoyance and other psychic skills, ensuring safe childbirth, divination, glamour and illusions, lucid dreaming, protection when traveling by sea"
}
},
"mars": {
"id": "mars",
"symbol": "♂︎",
"hebrewLetterId": "pe",
"name": {
"en": {
"en": "Mars"
},
"he": {
"he": "מאדים",
"roman": "Ma'adim"
}
},
"godNameId": "elohim-gibor",
"archangelId": "zamael",
"intelligenceId": "graphiel",
"spiritId": "bartzabel",
"magickTypes": {
"en": "Controlling anger, increasing courage, enhancing energy and passion, increasing vigour and sex drive"
}
},
"jupiter": {
"id": "jupiter",
"symbol": "♃︎",
"hebrewLetterId": "kaf",
"name": {
"en": {
"en": "Jupiter"
},
"he": {
"he": "צדק",
"roman": "Tzedek",
"en": "Justice"
}
},
"godNameId": "el",
"archangelId": "sachiel",
"intelligenceId": "iophiel",
"spiritId": "hismael",
"magickTypes": {
"en": "Career success, developing ambition and enthusiasm, improving fortune and luck, general health, acquiring honour, improving sense of humour, legal matters and dealing with the establishment, developing leadership skills"
}
},
"saturn": {
"id": "saturn",
"symbol": "♄︎",
"name": {
"en": {
"en": "Saturn"
},
"he": {
"he": "שַׁבְּתַאי",
"roman": "Shabbathai"
}
},
"hebrewLetterId": "tav",
"godNameId": "yhvh-elohim",
"archangelId": "cassiel",
"intelligenceId": "agiel",
"spiritId": "zazel",
"magickTypes": {
"en": "Performing duty, establishing balance and equilibrium, dispelling illusions, protecting the home, legal matters, developing patience and self-discipline"
}
},
"uranus": {
"id": "uranus",
"symbol": "⛢︎",
"name": {
"en": {
"en": "Uranus"
}
}
},
"neptune": {
"id": "neptune",
"symbol": "♆︎",
"name": {
"en": {
"en": "Neptune"
}
}
},
"rahu": {
"id": "rahu",
"symbol": "☊︎",
"name": {
"en": {
"en": "Caput Draconis"
}
}
},
"ketu": {
"id": "ketu",
"symbol": "☋︎",
"name": {
"en": {
"en": "Cauda Draconic"
}
}
}
}

View File

@@ -1,244 +0,0 @@
{
"mercury": [
[
[
2020,
10,
13
],
[
2020,
11,
3
]
],
[
[
2021,
1,
30
],
[
2021,
2,
20
]
],
[
[
2021,
5,
29
],
[
2021,
6,
22
]
],
[
[
2021,
9,
27
],
[
2021,
10,
18
]
],
[
[
2022,
1,
14
],
[
2022,
2,
3
]
],
[
[
2022,
5,
10
],
[
2022,
6,
2
]
],
[
[
2022,
9,
9
],
[
2022,
10,
2
]
],
[
[
2022,
12,
29
],
[
2023,
1,
18
]
],
[
[
2023,
4,
21
],
[
2023,
5,
14
]
],
[
[
2023,
8,
23
],
[
2023,
9,
15
]
],
[
[
2023,
12,
13
],
[
2024,
1,
1
]
],
[
[
2024,
4,
1
],
[
2024,
4,
25
]
],
[
[
2024,
8,
4
],
[
2024,
8,
28
]
],
[
[
2024,
11,
25
],
[
2024,
12,
15
]
],
[
[
2025,
3,
14
],
[
2025,
4,
7
]
],
[
[
2025,
7,
17
],
[
2025,
8,
11
]
],
[
[
2025,
11,
9
],
[
2025,
11,
29
]
],
[
[
2026,
2,
25
],
[
2026,
3,
20
]
],
[
[
2026,
6,
29
],
[
2026,
7,
23
]
],
[
[
2026,
10,
24
],
[
2026,
11,
13
]
]
]
}

View File

@@ -1,326 +0,0 @@
{
"aries": {
"id": "aries",
"no": 1,
"symbol": "♈︎",
"emoji": "♈️",
"name": {
"en": "Aries"
},
"meaning": {
"en": "Ram"
},
"rulesFrom": [
[
3,
21
],
[
4,
19
]
],
"planetId": "mars",
"elementId": "fire",
"quadruplicity": "cardinal",
"tribeOfIsraelId": "gad",
"tetragrammatonPermutation": "yhvH"
},
"taurus": {
"id": "taurus",
"no": 2,
"symbol": "♉︎",
"emoji": "♉",
"name": {
"en": "Taurus"
},
"meaning": {
"en": "Bullm"
},
"rulesFrom": [
[
4,
20
],
[
5,
20
]
],
"planetId": "venus",
"elementId": "earth",
"quadruplicity": "kerubic",
"tribeOfIsraelId": "ephraim",
"tetragrammatonPermutation": "yhHv"
},
"gemini": {
"id": "gemini",
"no": 3,
"symbol": "♊︎",
"emoji": "♊",
"name": {
"en": "Gemini"
},
"meaning": {
"en": "Twins"
},
"rulesFrom": [
[
5,
21
],
[
6,
20
]
],
"planetId": "mercury",
"elementId": "air",
"quadruplicity": "mutable",
"tribeOfIsraelId": "manasseh",
"tetragrammatonPermutation": "yvhH"
},
"cancer": {
"id": "cancer",
"no": 4,
"symbol": "♋︎",
"emoji": "♋",
"name": {
"en": "Cancer"
},
"meaning": {
"en": "Crab"
},
"rulesFrom": [
[
6,
21
],
[
7,
22
]
],
"planetId": "sol",
"elementId": "water",
"quadruplicity": "cardinal",
"tribeOfIsraelId": "issachar",
"tetragrammatonPermutation": "hvyH"
},
"leo": {
"id": "leo",
"no": 5,
"symbol": "♌︎",
"emoji": "♌",
"name": {
"en": "Leo"
},
"meaning": {
"en": "Lion"
},
"rulesFrom": [
[
7,
23
],
[
8,
22
]
],
"planetId": "sol",
"elementId": "fire",
"quadruplicity": "kerubic",
"tribeOfIsraelId": "judah",
"tetragrammatonPermutation": "hvyH"
},
"virgo": {
"id": "virgo",
"no": 6,
"symbol": "♍︎",
"emoji": "♍",
"name": {
"en": "Virgo"
},
"meaning": {
"en": "Virgin"
},
"rulesFrom": [
[
8,
23
],
[
9,
22
]
],
"planetId": "mercury",
"elementId": "earth",
"quadruplicity": "mutable",
"tribeOfIsraelId": "naphtali",
"tetragrammatonPermutation": "hHvy"
},
"libra": {
"id": "libra",
"no": 7,
"symbol": "♎︎",
"emoji": "♎",
"name": {
"en": "Libra"
},
"meaning": {
"en": "Scales"
},
"rulesFrom": [
[
9,
23
],
[
10,
22
]
],
"planetId": "venus",
"elementId": "air",
"quadruplicity": "cardinal",
"tribeOfIsraelId": "asher",
"tetragrammatonPermutation": "vHyh"
},
"scorpio": {
"id": "scorpio",
"no": 8,
"symbol": "♏︎",
"emoji": "♏",
"name": {
"en": "Scorpio"
},
"meaning": {
"en": "Scorpion"
},
"rulesFrom": [
[
10,
23
],
[
11,
21
]
],
"planetId": "jupiter",
"elementId": "water",
"quadruplicity": "kerubic",
"tribeOfIsraelId": "dan",
"tetragrammatonPermutation": "vHhy"
},
"sagittarius": {
"id": "sagittarius",
"no": 9,
"symbol": "♐︎",
"emoji": "♐",
"name": {
"en": "Sagittarius"
},
"meaning": {
"en": "Archer"
},
"rulesFrom": [
[
11,
22
],
[
12,
21
]
],
"planetId": "jupiter",
"elementId": "fire",
"quadruplicity": "mutable",
"tribeOfIsraelId": "benjamin",
"tetragrammatonPermutation": "Hyhv"
},
"capricorn": {
"id": "capricorn",
"no": 10,
"symbol": "♑︎",
"emoji": "♑",
"name": {
"en": "Capricorn"
},
"meaning": {
"en": "Sea-goat"
},
"rulesFrom": [
[
12,
22
],
[
1,
19
]
],
"planetId": "saturn",
"elementId": "earth",
"quadruplicity": "cardinal",
"tribeOfIsraelId": "zebulun",
"tetragrammatonPermutation": "Hyhv"
},
"aquarius": {
"id": "aquarius",
"no": 11,
"symbol": "♒︎",
"emoji": "♒",
"name": {
"en": "Aquarius"
},
"meaning": {
"en": "Water-bearer"
},
"rulesFrom": [
[
1,
20
],
[
2,
18
]
],
"planetId": "saturn",
"elementId": "air",
"quadruplicity": "kerubic",
"tribeOfIsraelId": "reuben",
"tetragrammatonPermutation": "Hyvh"
},
"pisces": {
"id": "pisces",
"no": 12,
"symbol": "♓︎",
"emoji": "♓",
"name": {
"en": "Pisces"
},
"meaning": {
"en": "Fish"
},
"rulesFrom": [
[
2,
19
],
[
3,
20
]
],
"planetId": "jupiter",
"elementId": "water",
"quadruplicity": "mutable",
"tribeOfIsraelId": "simeon",
"tetragrammatonPermutation": "Hhyv"
}
}

View File

@@ -1,228 +0,0 @@
{
"meta": {
"version": 1,
"notes": "Core astronomical and calendrical cycles used in astronomy, chronology, and long-term sky modeling."
},
"cycles": [
{
"id": "metonic-cycle",
"name": "Metonic Cycle",
"category": "Luni-solar Calendar",
"period": "19 years",
"periodDays": 6939.69,
"description": "19 tropical years are approximately equal to 235 synodic lunar months.",
"significance": "Foundation for lunisolar calendar reconciliation.",
"related": ["Callippic Cycle", "Synodic Month"]
},
{
"id": "callippic-cycle",
"name": "Callippic Cycle",
"category": "Luni-solar Calendar",
"period": "76 years",
"periodDays": 27758.76,
"description": "Refinement of four Metonic cycles with leap-day correction.",
"significance": "Improves long-term lunisolar alignment.",
"related": ["Metonic Cycle"]
},
{
"id": "hipparchic-cycle",
"name": "Hipparchic Cycle",
"category": "Luni-solar Calendar",
"period": "304 years",
"periodDays": 111035.04,
"description": "Four Callippic cycles used as a higher-order correction block.",
"significance": "Historical long-cycle refinement in ancient astronomy.",
"related": ["Callippic Cycle"]
},
{
"id": "synodic-month",
"name": "Synodic Month",
"category": "Lunar",
"period": "29.53059 days",
"periodDays": 29.53059,
"description": "Average interval between identical lunar phases, such as full moon to full moon.",
"significance": "Primary month unit in lunar and lunisolar systems.",
"related": ["Metonic Cycle"]
},
{
"id": "draconic-month",
"name": "Draconic Month",
"category": "Lunar",
"period": "27.21222 days",
"periodDays": 27.21222,
"description": "Moon's node-to-node period relative to the ecliptic.",
"significance": "Important for eclipse timing models.",
"related": ["Saros Cycle", "Eclipse Season"]
},
{
"id": "anomalistic-month",
"name": "Anomalistic Month",
"category": "Lunar",
"period": "27.55455 days",
"periodDays": 27.55455,
"description": "Perigee-to-perigee period of the Moon.",
"significance": "Affects supermoon timing and lunar distance patterns.",
"related": ["Saros Cycle"]
},
{
"id": "eclipse-season",
"name": "Eclipse Season",
"category": "Eclipse",
"period": "173.31 days",
"periodDays": 173.31,
"description": "Interval between windows when the Sun is near a lunar node.",
"significance": "Predicts clusters of solar/lunar eclipses.",
"related": ["Draconic Month", "Saros Cycle"]
},
{
"id": "saros-cycle",
"name": "Saros Cycle",
"category": "Eclipse",
"period": "18 years 11 days 8 hours",
"periodDays": 6585.321,
"description": "Near-repeat interval for similar eclipses from geometry recurrence.",
"significance": "Classic eclipse prediction cycle.",
"related": ["Draconic Month", "Anomalistic Month", "Eclipse Season"]
},
{
"id": "inex-cycle",
"name": "Inex Cycle",
"category": "Eclipse",
"period": "29 years minus about 20 days",
"periodDays": 10571.95,
"description": "Longer eclipse recurrence interval connecting different saros families.",
"significance": "Useful for classifying eclipse series transitions.",
"related": ["Saros Cycle"]
},
{
"id": "solar-sunspot-cycle",
"name": "Solar Sunspot Cycle",
"category": "Solar",
"period": "~11 years",
"periodDays": 4017.75,
"description": "Average magnetic activity cycle of the Sun seen in sunspot counts.",
"significance": "Drives space weather and auroral activity trends.",
"related": ["Hale Magnetic Cycle"]
},
{
"id": "hale-magnetic-cycle",
"name": "Hale Magnetic Cycle",
"category": "Solar",
"period": "~22 years",
"periodDays": 8035.5,
"description": "Two sunspot cycles required for solar magnetic polarity to return.",
"significance": "Long-form solar dynamo period.",
"related": ["Solar Sunspot Cycle"]
},
{
"id": "jupiter-saturn-great-conjunction",
"name": "Jupiter-Saturn Great Conjunction",
"category": "Planetary",
"period": "~19.86 years",
"periodDays": 7255.0,
"description": "Mean interval between conjunctions of Jupiter and Saturn.",
"significance": "Major marker in historical chronology and sky cycles.",
"related": ["Great Trigon"]
},
{
"id": "great-trigon",
"name": "Great Trigon",
"category": "Planetary",
"period": "~240 years",
"periodDays": 87658.0,
"description": "Successive great conjunctions cycle through similar elemental triplicity patterns over centuries.",
"significance": "Long-cycle structure derived from Jupiter-Saturn conjunction drift.",
"related": ["Jupiter-Saturn Great Conjunction"]
},
{
"id": "venus-pentagram-cycle",
"name": "Venus Pentagram Cycle",
"category": "Planetary",
"period": "8 years",
"periodDays": 2921.94,
"description": "Five synodic Venus cycles align closely with eight Earth years, tracing a pentagram-like pattern.",
"significance": "Famous resonance in naked-eye planetary astronomy.",
"related": ["Synodic Venus Cycle"]
},
{
"id": "synodic-venus-cycle",
"name": "Synodic Venus Cycle",
"category": "Planetary",
"period": "583.92 days",
"periodDays": 583.92,
"description": "Mean interval between consecutive inferior conjunctions of Venus.",
"significance": "Basis of Venus visibility phases and cycle work.",
"related": ["Venus Pentagram Cycle"]
},
{
"id": "halley-comet-cycle",
"name": "Halley Comet Cycle",
"category": "Comet",
"period": "~75-76 years",
"periodDays": 27759.0,
"description": "Orbital return interval of 1P/Halley, varying by perturbations.",
"significance": "Most recognized periodic comet cycle.",
"related": ["Comet Period Classes"]
},
{
"id": "encke-comet-cycle",
"name": "Encke Comet Cycle",
"category": "Comet",
"period": "~3.30 years",
"periodDays": 1205.0,
"description": "Orbital return interval of Comet 2P/Encke.",
"significance": "Classic short-period comet benchmark.",
"related": ["Comet Period Classes"]
},
{
"id": "precession-of-equinoxes",
"name": "Precession of the Equinoxes",
"category": "Axial",
"period": "~25,772 years",
"periodDays": 9413478.0,
"description": "Slow conical motion of Earth's rotation axis relative to fixed stars.",
"significance": "Shifts equinox positions through zodiacal constellations over millennia.",
"related": ["Great Year (Platonic)"]
},
{
"id": "great-year-platonic",
"name": "Great Year (Platonic)",
"category": "Axial",
"period": "~25,772 years",
"periodDays": 9413478.0,
"description": "Traditional term for one full precessional cycle of the equinoxes.",
"significance": "Long-duration epochal framing in astronomy and chronology traditions.",
"related": ["Precession of the Equinoxes"]
},
{
"id": "milankovitch-obliquity",
"name": "Milankovitch Obliquity Cycle",
"category": "Climate-Astronomy",
"period": "~41,000 years",
"periodDays": 14975775.0,
"description": "Variation in Earth's axial tilt angle over tens of millennia.",
"significance": "Major pacing component in glacial-interglacial climate structure.",
"related": ["Milankovitch Precession", "Milankovitch Eccentricity"]
},
{
"id": "milankovitch-precession",
"name": "Milankovitch Precession Cycle",
"category": "Climate-Astronomy",
"period": "~19,000 to 23,000 years",
"periodDays": 7665000.0,
"description": "Seasonal timing shift from axial precession interacting with orbital geometry.",
"significance": "Controls seasonal insolation pacing over geologic time.",
"related": ["Precession of the Equinoxes", "Milankovitch Obliquity"]
},
{
"id": "milankovitch-eccentricity",
"name": "Milankovitch Eccentricity Cycle",
"category": "Climate-Astronomy",
"period": "~100,000 years (plus ~405,000-year mode)",
"periodDays": 36524250.0,
"description": "Long-term change in orbital ellipse shape from near-circular to more elliptical.",
"significance": "Dominant long pacing in Quaternary paleoclimate archives.",
"related": ["Milankovitch Obliquity", "Milankovitch Precession"]
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,379 +0,0 @@
{
"meta": {
"version": 1,
"notes": "Month-level correspondences and observances for the Calendar section.",
"links": "holidayIds map to entries in celestial-holidays.json"
},
"months": [
{
"id": "january",
"order": 1,
"name": "January",
"start": "01-01",
"end": "01-31",
"seasonNorth": "Winter",
"seasonSouth": "Summer",
"coreTheme": "Beginnings, thresholds, planning",
"associations": {
"planetId": "saturn",
"zodiacSignId": "capricorn",
"tarotCard": "The Devil",
"godId": "janus"
},
"events": [
{
"id": "january-threshold-rite",
"name": "Threshold Rite",
"date": "01-01",
"description": "Set year intentions and define a boundary/structure for one major goal.",
"associations": {
"godId": "janus",
"planetId": "saturn",
"tarotCard": "The Fool"
}
}
],
"holidayIds": ["perihelion"]
},
{
"id": "february",
"order": 2,
"name": "February",
"start": "02-01",
"end": "02-28",
"seasonNorth": "Winter",
"seasonSouth": "Summer",
"coreTheme": "Purification, preparation, hidden momentum",
"associations": {
"planetId": "saturn",
"zodiacSignId": "aquarius",
"tarotCard": "The Star",
"godId": "uranus"
},
"events": [
{
"id": "february-clearing-work",
"name": "Cleansing & Clearing",
"date": "02-11",
"description": "Remove one recurring distraction and reset practical systems.",
"associations": {
"planetId": "saturn",
"tarotCard": "The Star",
"godId": "maat"
}
}
],
"holidayIds": ["imbolc-cross-quarter"]
},
{
"id": "march",
"order": 3,
"name": "March",
"start": "03-01",
"end": "03-31",
"seasonNorth": "Spring",
"seasonSouth": "Autumn",
"coreTheme": "Initiation, momentum, first fire",
"associations": {
"planetId": "mars",
"zodiacSignId": "aries",
"tarotCard": "The Emperor",
"godId": "ares"
},
"events": [
{
"id": "march-action-cycle",
"name": "Action Cycle Start",
"date": "03-21",
"description": "Launch a focused 30-day push with daily effort tracking.",
"associations": {
"planetId": "mars",
"zodiacSignId": "aries",
"tarotCard": "The Emperor",
"godId": "ares"
}
}
],
"holidayIds": ["march-equinox", "spring-eclipse-window"]
},
{
"id": "april",
"order": 4,
"name": "April",
"start": "04-01",
"end": "04-30",
"seasonNorth": "Spring",
"seasonSouth": "Autumn",
"coreTheme": "Grounding growth, material cultivation",
"associations": {
"planetId": "venus",
"zodiacSignId": "taurus",
"tarotCard": "The Hierophant",
"godId": "aphrodite"
},
"events": [
{
"id": "april-earth-offering",
"name": "Earth Offering",
"date": "04-18",
"description": "Dedicate one practical act to long-term stability and abundance.",
"associations": {
"planetId": "venus",
"zodiacSignId": "taurus",
"tarotCard": "The Hierophant",
"godId": "demeter"
}
}
],
"holidayIds": ["spring-eclipse-window"]
},
{
"id": "may",
"order": 5,
"name": "May",
"start": "05-01",
"end": "05-31",
"seasonNorth": "Spring",
"seasonSouth": "Autumn",
"coreTheme": "Connection, exchange, and curiosity",
"associations": {
"planetId": "mercury",
"zodiacSignId": "gemini",
"tarotCard": "The Lovers",
"godId": "hermes"
},
"events": [
{
"id": "may-message-working",
"name": "Message Working",
"date": "05-14",
"description": "Refine communication in one key relationship or collaboration.",
"associations": {
"planetId": "mercury",
"zodiacSignId": "gemini",
"tarotCard": "The Lovers",
"godId": "hermes"
}
}
],
"holidayIds": ["beltane-cross-quarter"]
},
{
"id": "june",
"order": 6,
"name": "June",
"start": "06-01",
"end": "06-30",
"seasonNorth": "Summer",
"seasonSouth": "Winter",
"coreTheme": "Nourishment, protection, emotional coherence",
"associations": {
"planetId": "luna",
"zodiacSignId": "cancer",
"tarotCard": "The Chariot",
"godId": "artemis"
},
"events": [
{
"id": "june-hearth-vow",
"name": "Hearth Vow",
"date": "06-20",
"description": "Commit to one practice that protects your inner and outer home.",
"associations": {
"planetId": "luna",
"zodiacSignId": "cancer",
"tarotCard": "The Chariot",
"godId": "isis"
}
}
],
"holidayIds": ["june-solstice"]
},
{
"id": "july",
"order": 7,
"name": "July",
"start": "07-01",
"end": "07-31",
"seasonNorth": "Summer",
"seasonSouth": "Winter",
"coreTheme": "Radiance, leadership, visibility",
"associations": {
"planetId": "sol",
"zodiacSignId": "leo",
"tarotCard": "Strength",
"godId": "ra"
},
"events": [
{
"id": "july-solar-crowning",
"name": "Solar Crowning",
"date": "07-19",
"description": "Present one visible work publicly and receive clear feedback.",
"associations": {
"planetId": "sol",
"zodiacSignId": "leo",
"tarotCard": "Strength",
"godId": "ra"
}
}
],
"holidayIds": ["sirius-rising-window"]
},
{
"id": "august",
"order": 8,
"name": "August",
"start": "08-01",
"end": "08-31",
"seasonNorth": "Summer",
"seasonSouth": "Winter",
"coreTheme": "Refinement, discipline, service",
"associations": {
"planetId": "mercury",
"zodiacSignId": "virgo",
"tarotCard": "The Hermit",
"godId": "thoth"
},
"events": [
{
"id": "august-harvest-ledger",
"name": "Harvest Ledger",
"date": "08-12",
"description": "Audit progress and simplify tools before the autumn cycle.",
"associations": {
"planetId": "mercury",
"zodiacSignId": "virgo",
"tarotCard": "The Hermit",
"godId": "thoth"
}
}
],
"holidayIds": ["sirius-rising-window", "lughnasadh-cross-quarter"]
},
{
"id": "september",
"order": 9,
"name": "September",
"start": "09-01",
"end": "09-30",
"seasonNorth": "Autumn",
"seasonSouth": "Spring",
"coreTheme": "Balance, agreements, calibration",
"associations": {
"planetId": "venus",
"zodiacSignId": "libra",
"tarotCard": "Justice",
"godId": "maat"
},
"events": [
{
"id": "september-balance-work",
"name": "Balance Working",
"date": "09-23",
"description": "Rebalance effort across work, body, and relationships.",
"associations": {
"planetId": "venus",
"zodiacSignId": "libra",
"tarotCard": "Justice",
"godId": "maat"
}
}
],
"holidayIds": ["september-equinox", "autumn-eclipse-window"]
},
{
"id": "october",
"order": 10,
"name": "October",
"start": "10-01",
"end": "10-31",
"seasonNorth": "Autumn",
"seasonSouth": "Spring",
"coreTheme": "Depth work, release, transformation",
"associations": {
"planetId": "mars",
"zodiacSignId": "scorpio",
"tarotCard": "Death",
"godId": "hades"
},
"events": [
{
"id": "october-shadow-ledger",
"name": "Shadow Ledger",
"date": "10-27",
"description": "Name one pattern to end and one to transmute.",
"associations": {
"planetId": "mars",
"zodiacSignId": "scorpio",
"tarotCard": "Death",
"godId": "hades"
}
}
],
"holidayIds": ["autumn-eclipse-window", "samhain-cross-quarter"]
},
{
"id": "november",
"order": 11,
"name": "November",
"start": "11-01",
"end": "11-30",
"seasonNorth": "Autumn",
"seasonSouth": "Spring",
"coreTheme": "Meaning, direction, vision",
"associations": {
"planetId": "jupiter",
"zodiacSignId": "sagittarius",
"tarotCard": "Temperance",
"godId": "zeus"
},
"events": [
{
"id": "november-vision-arrow",
"name": "Vision Arrow",
"date": "11-22",
"description": "Choose one long-range objective and align this week to it.",
"associations": {
"planetId": "jupiter",
"zodiacSignId": "sagittarius",
"tarotCard": "Temperance",
"godId": "zeus"
}
}
],
"holidayIds": ["samhain-cross-quarter", "leonids-peak"]
},
{
"id": "december",
"order": 12,
"name": "December",
"start": "12-01",
"end": "12-31",
"seasonNorth": "Winter",
"seasonSouth": "Summer",
"coreTheme": "Closure, stillness, and renewal",
"associations": {
"planetId": "saturn",
"zodiacSignId": "capricorn",
"tarotCard": "The Devil",
"godId": "kronos"
},
"events": [
{
"id": "december-year-seal",
"name": "Year Seal",
"date": "12-31",
"description": "Consolidate lessons, close open loops, and define the next threshold.",
"associations": {
"planetId": "saturn",
"zodiacSignId": "capricorn",
"tarotCard": "The World",
"godId": "saturn"
}
}
],
"holidayIds": ["december-solstice", "geminids-peak"]
}
]
}

View File

@@ -1,203 +0,0 @@
{
"meta": {
"version": 1,
"notes": "Special celestial observances (solstices, equinoxes, eclipse windows, and notable sky events)."
},
"holidays": [
{
"id": "perihelion",
"name": "Earth Perihelion",
"kind": "solar-point",
"monthId": "january",
"date": "01-03",
"description": "Earth reaches its closest orbital point to the Sun.",
"associations": {
"planetId": "sol",
"tarotCard": "The Sun",
"godId": "ra"
}
},
{
"id": "imbolc-cross-quarter",
"name": "Imbolc Cross-Quarter",
"kind": "cross-quarter",
"monthId": "february",
"dateRange": "02-01 to 02-02",
"description": "Seasonal threshold between winter solstice and spring equinox.",
"associations": {
"planetId": "luna",
"zodiacSignId": "aquarius",
"tarotCard": "The Star",
"godId": "hecate"
}
},
{
"id": "march-equinox",
"name": "March Equinox",
"kind": "equinox",
"monthId": "march",
"date": "03-20",
"description": "Equal day and night; marks spring in the north and autumn in the south.",
"associations": {
"planetId": "sol",
"zodiacSignId": "aries",
"tarotCard": "The Emperor",
"godId": "maat"
}
},
{
"id": "spring-eclipse-window",
"name": "Spring Eclipse Window",
"kind": "eclipse-window",
"monthId": "march",
"dateRange": "03-15 to 04-15",
"description": "Typical annual window for paired solar/lunar eclipses near nodal alignments.",
"associations": {
"planetId": "luna",
"zodiacSignId": "aries",
"tarotCard": "The Moon",
"godId": "thoth"
}
},
{
"id": "beltane-cross-quarter",
"name": "Beltane Cross-Quarter",
"kind": "cross-quarter",
"monthId": "may",
"dateRange": "05-01 to 05-02",
"description": "Fertility and fire threshold between equinox and solstice.",
"associations": {
"planetId": "venus",
"zodiacSignId": "taurus",
"tarotCard": "The Empress",
"godId": "aphrodite"
}
},
{
"id": "june-solstice",
"name": "June Solstice",
"kind": "solstice",
"monthId": "june",
"date": "06-21",
"description": "Longest day in the northern hemisphere; shortest in the southern hemisphere.",
"associations": {
"planetId": "sol",
"zodiacSignId": "cancer",
"tarotCard": "The Sun",
"godId": "ra"
}
},
{
"id": "sirius-rising-window",
"name": "Sirius Rising Window",
"kind": "stellar-observance",
"monthId": "july",
"dateRange": "07-20 to 08-12",
"description": "Heliacal rising period of Sirius in many northern latitudes.",
"associations": {
"planetId": "sol",
"zodiacSignId": "leo",
"tarotCard": "Strength",
"godId": "isis"
}
},
{
"id": "lughnasadh-cross-quarter",
"name": "Lughnasadh Cross-Quarter",
"kind": "cross-quarter",
"monthId": "august",
"dateRange": "08-01 to 08-02",
"description": "Harvest threshold between solstice and equinox.",
"associations": {
"planetId": "mercury",
"zodiacSignId": "leo",
"tarotCard": "The Hermit",
"godId": "thoth"
}
},
{
"id": "september-equinox",
"name": "September Equinox",
"kind": "equinox",
"monthId": "september",
"date": "09-22",
"description": "Equal day and night; marks autumn in the north and spring in the south.",
"associations": {
"planetId": "sol",
"zodiacSignId": "libra",
"tarotCard": "Justice",
"godId": "maat"
}
},
{
"id": "autumn-eclipse-window",
"name": "Autumn Eclipse Window",
"kind": "eclipse-window",
"monthId": "september",
"dateRange": "09-15 to 10-15",
"description": "Typical annual window for eclipse pairings near opposite nodal season.",
"associations": {
"planetId": "luna",
"zodiacSignId": "libra",
"tarotCard": "The Moon",
"godId": "anubis"
}
},
{
"id": "samhain-cross-quarter",
"name": "Samhain Cross-Quarter",
"kind": "cross-quarter",
"monthId": "october",
"dateRange": "10-31 to 11-01",
"description": "Threshold of deep autumn and ancestral observance in many traditions.",
"associations": {
"planetId": "saturn",
"zodiacSignId": "scorpio",
"tarotCard": "Death",
"godId": "hades"
}
},
{
"id": "leonids-peak",
"name": "Leonids Meteor Peak",
"kind": "meteor-shower",
"monthId": "november",
"date": "11-17",
"description": "Peak of the Leonids meteor shower under dark skies.",
"associations": {
"planetId": "jupiter",
"zodiacSignId": "sagittarius",
"tarotCard": "Temperance",
"godId": "zeus"
}
},
{
"id": "december-solstice",
"name": "December Solstice",
"kind": "solstice",
"monthId": "december",
"date": "12-21",
"description": "Shortest day in the northern hemisphere; longest in the southern hemisphere.",
"associations": {
"planetId": "sol",
"zodiacSignId": "capricorn",
"tarotCard": "The World",
"godId": "saturn"
}
},
{
"id": "geminids-peak",
"name": "Geminids Meteor Peak",
"kind": "meteor-shower",
"monthId": "december",
"date": "12-14",
"description": "Peak activity of the Geminids meteor shower.",
"associations": {
"planetId": "mercury",
"zodiacSignId": "gemini",
"tarotCard": "The Lovers",
"godId": "hermes"
}
}
]
}

View File

@@ -1,120 +0,0 @@
{
"root": {
"id": "root",
"name": {
"en": "Root",
"sa": "मूलाधार",
"roman": "Muladhara"
},
"meaning": {
"en": "Root"
},
"location": "base-of-spine",
"petals": 4,
"color": "red",
"seed": "Lam",
"seedMeaning": {
"en": "earth"
}
},
"sacral": {
"id": "sacral",
"name": {
"en": "Sacral",
"sa": "स्वाधिष्ठान",
"roman": "Svadhishthana"
},
"meaning": {
"en": "Where the self is established"
},
"location": "genitals",
"petals": 6,
"color": "orange",
"seed": "Vam",
"seedMeaning": {
"en": "water"
}
},
"solar-plexus": {
"id": "solar-plexus",
"name": {
"en": "Solar Plexus",
"sa": "मणिपूर",
"roman": "Manipura"
},
"meaning": {
"en": "Jewel city"
},
"location": "navel",
"petals": 10,
"color": "yellow",
"seed": "Ram",
"seedMeaning": {
"en": "fire"
}
},
"heart": {
"id": "heart",
"name": {
"en": "Heart",
"sa": "अनाहत",
"roman": "Anahata"
},
"meaning": {
"en": "Unstruck"
},
"location": "heart",
"petals": 12,
"color": "green",
"seed": "Yam",
"seedMeaning": {
"en": "air"
}
},
"throat": {
"id": "throat",
"name": {
"en": "Throat",
"sa": "विशुद्ध",
"roman": "Vishuddha"
},
"meaning": {
"en": "Purest"
},
"location": "throat",
"petals": 16,
"color": "blue",
"seed": "Ham",
"seedMeaning": {
"en": "space"
}
},
"third-eye": {
"id": "third-eye",
"name": {
"en": "Third Eye",
"sa": "आज्ञा",
"roman": "Ajna"
},
"meaning": {
"en": "Command"
},
"location": "third-eye",
"petals": 2,
"color": "indigo"
},
"crown": {
"id": "crown",
"name": {
"en": "Crown",
"sa": "सहस्रार",
"roman": "Sahasrara"
},
"meaning": {
"en": "Thousand-petaled"
},
"location": "crown",
"petals": 1000,
"color": "violet"
}
}

View File

@@ -1,54 +0,0 @@
{
"meta": {
"notes": "Decans reference sign IDs from signs.json to avoid duplicated sign metadata."
},
"decans": [
{ "id": "aries-1", "signId": "aries", "index": 1, "rulerPlanetId": "mars", "tarotMinorArcana": "2 of Wands" },
{ "id": "aries-2", "signId": "aries", "index": 2, "rulerPlanetId": "sol", "tarotMinorArcana": "3 of Wands" },
{ "id": "aries-3", "signId": "aries", "index": 3, "rulerPlanetId": "venus", "tarotMinorArcana": "4 of Wands" },
{ "id": "taurus-1", "signId": "taurus", "index": 1, "rulerPlanetId": "mercury", "tarotMinorArcana": "5 of Pentacles" },
{ "id": "taurus-2", "signId": "taurus", "index": 2, "rulerPlanetId": "luna", "tarotMinorArcana": "6 of Pentacles" },
{ "id": "taurus-3", "signId": "taurus", "index": 3, "rulerPlanetId": "saturn", "tarotMinorArcana": "7 of Pentacles" },
{ "id": "gemini-1", "signId": "gemini", "index": 1, "rulerPlanetId": "jupiter", "tarotMinorArcana": "8 of Swords" },
{ "id": "gemini-2", "signId": "gemini", "index": 2, "rulerPlanetId": "mars", "tarotMinorArcana": "9 of Swords" },
{ "id": "gemini-3", "signId": "gemini", "index": 3, "rulerPlanetId": "sol", "tarotMinorArcana": "10 of Swords" },
{ "id": "cancer-1", "signId": "cancer", "index": 1, "rulerPlanetId": "venus", "tarotMinorArcana": "2 of Cups" },
{ "id": "cancer-2", "signId": "cancer", "index": 2, "rulerPlanetId": "mercury", "tarotMinorArcana": "3 of Cups" },
{ "id": "cancer-3", "signId": "cancer", "index": 3, "rulerPlanetId": "luna", "tarotMinorArcana": "4 of Cups" },
{ "id": "leo-1", "signId": "leo", "index": 1, "rulerPlanetId": "saturn", "tarotMinorArcana": "5 of Wands" },
{ "id": "leo-2", "signId": "leo", "index": 2, "rulerPlanetId": "jupiter", "tarotMinorArcana": "6 of Wands" },
{ "id": "leo-3", "signId": "leo", "index": 3, "rulerPlanetId": "mars", "tarotMinorArcana": "7 of Wands" },
{ "id": "virgo-1", "signId": "virgo", "index": 1, "rulerPlanetId": "sol", "tarotMinorArcana": "8 of Pentacles" },
{ "id": "virgo-2", "signId": "virgo", "index": 2, "rulerPlanetId": "venus", "tarotMinorArcana": "9 of Pentacles" },
{ "id": "virgo-3", "signId": "virgo", "index": 3, "rulerPlanetId": "mercury", "tarotMinorArcana": "10 of Pentacles" },
{ "id": "libra-1", "signId": "libra", "index": 1, "rulerPlanetId": "luna", "tarotMinorArcana": "2 of Swords" },
{ "id": "libra-2", "signId": "libra", "index": 2, "rulerPlanetId": "saturn", "tarotMinorArcana": "3 of Swords" },
{ "id": "libra-3", "signId": "libra", "index": 3, "rulerPlanetId": "jupiter", "tarotMinorArcana": "4 of Swords" },
{ "id": "scorpio-1", "signId": "scorpio", "index": 1, "rulerPlanetId": "mars", "tarotMinorArcana": "5 of Cups" },
{ "id": "scorpio-2", "signId": "scorpio", "index": 2, "rulerPlanetId": "sol", "tarotMinorArcana": "6 of Cups" },
{ "id": "scorpio-3", "signId": "scorpio", "index": 3, "rulerPlanetId": "venus", "tarotMinorArcana": "7 of Cups" },
{ "id": "sagittarius-1", "signId": "sagittarius", "index": 1, "rulerPlanetId": "mercury", "tarotMinorArcana": "8 of Wands" },
{ "id": "sagittarius-2", "signId": "sagittarius", "index": 2, "rulerPlanetId": "luna", "tarotMinorArcana": "9 of Wands" },
{ "id": "sagittarius-3", "signId": "sagittarius", "index": 3, "rulerPlanetId": "saturn", "tarotMinorArcana": "10 of Wands" },
{ "id": "capricorn-1", "signId": "capricorn", "index": 1, "rulerPlanetId": "jupiter", "tarotMinorArcana": "2 of Pentacles" },
{ "id": "capricorn-2", "signId": "capricorn", "index": 2, "rulerPlanetId": "mars", "tarotMinorArcana": "3 of Pentacles" },
{ "id": "capricorn-3", "signId": "capricorn", "index": 3, "rulerPlanetId": "sol", "tarotMinorArcana": "4 of Pentacles" },
{ "id": "aquarius-1", "signId": "aquarius", "index": 1, "rulerPlanetId": "venus", "tarotMinorArcana": "5 of Swords" },
{ "id": "aquarius-2", "signId": "aquarius", "index": 2, "rulerPlanetId": "mercury", "tarotMinorArcana": "6 of Swords" },
{ "id": "aquarius-3", "signId": "aquarius", "index": 3, "rulerPlanetId": "luna", "tarotMinorArcana": "7 of Swords" },
{ "id": "pisces-1", "signId": "pisces", "index": 1, "rulerPlanetId": "saturn", "tarotMinorArcana": "8 of Cups" },
{ "id": "pisces-2", "signId": "pisces", "index": 2, "rulerPlanetId": "jupiter", "tarotMinorArcana": "9 of Cups" },
{ "id": "pisces-3", "signId": "pisces", "index": 3, "rulerPlanetId": "mars", "tarotMinorArcana": "10 of Cups" }
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,212 +0,0 @@
{
"A": {
"id": "A",
"enochian": "A",
"title": "Un",
"english": "A",
"pronounciation": "ah",
"planet/element": "taurus",
"tarot": "hierophant",
"gematria": 6
},
"B": {
"id": "B",
"enochian": "B",
"title": "Pe",
"english": "B",
"pronounciation": "beh",
"planet/element": "aries",
"tarot": "star",
"gematria": 5
},
"C": {
"id": "C",
"enochian": "C",
"title": "Veh",
"english": "C,K",
"pronounciation": "co",
"planet/element": "fire",
"tarot": "judgement",
"gematria": 300
},
"D": {
"id": "D",
"enochian": "D",
"title": "Gal",
"english": "D",
"pronounciation": "deh",
"planet/element": "spirit",
"tarot": "empress",
"gematria": 4
},
"E": {
"id": "E",
"enochian": "E",
"title": "Graph",
"english": "E",
"pronounciation": "ee",
"planet/element": "virgo",
"tarot": "hermit",
"gematria": 10
},
"F": {
"id": "F",
"enochian": "F",
"title": "Orth",
"english": "F",
"pronounciation": "eff",
"planet/element": "Cauda Draonis",
"tarot": "juggler",
"gematria": 3
},
"G": {
"id": "G",
"enochian": "G",
"title": "Ged",
"english": "G",
"pronounciation": "gee",
"planet/element": "cancer",
"tarot": "chariot",
"gematria": 8
},
"H": {
"id": "H",
"enochian": "H",
"title": "Na-hath",
"english": "H",
"pronounciation": "heh",
"planet/element": "air",
"tarot": "fool",
"gematria": 1
},
"I": {
"id": "I",
"enochian": "I",
"title": "Gon",
"english": "I,Y,J",
"pronounciation": "ee",
"planet/element": "sagittarius",
"tarot": "temperance",
"gematria": 60
},
"L": {
"id": "L",
"enochian": "L",
"title": "Ur",
"english": "L",
"pronounciation": "el, leh",
"planet/element": "cancer",
"tarot": "charit",
"gematria": 8
},
"M": {
"id": "M",
"enochian": "M",
"title": "Tal",
"english": "M",
"pronounciation": "em",
"planet/element": "aquarius",
"tarot": "emperor",
"gematria": 90
},
"N": {
"id": "N",
"enochian": "N",
"title": "Drun",
"english": "N",
"pronounciation": "en",
"planet/element": "scorpio",
"tarot": "death",
"gematria": 50
},
"O": {
"id": "O",
"enochian": "O",
"title": "Med",
"english": "O",
"pronounciation": "oh",
"planet/element": "libra",
"tarot": "justice",
"gematria": 30
},
"P": {
"id": "P",
"enochian": "P",
"title": "Mals",
"english": "P",
"pronounciation": "peh",
"planet/element": "leo",
"tarot": "strength",
"gematria": 9
},
"Q": {
"id": "Q",
"enochian": "Q",
"title": "Ger",
"english": "Q",
"pronounciation": "quo",
"planet/element": "water",
"tarot": "hanged man",
"gematria": 40
},
"R": {
"id": "R",
"enochian": "R",
"title": "Don",
"english": "R",
"pronounciation": "reh, ar",
"planet/element": "pesces",
"tarot": "moon",
"gematria": 100
},
"S": {
"id": "S",
"enochian": "S",
"title": "Fam",
"english": "S",
"pronounciation": "she, ess",
"planet/element": "gemini",
"tarot": "lovers",
"gematria": 7
},
"T": {
"id": "T",
"enochian": "T",
"title": "Gisa",
"english": "T",
"pronounciation": "teh",
"planet/element": "leo",
"tarot": "strength",
"gematria": 9
},
"V": {
"id": "V",
"enochian": "V",
"title": "Vau",
"english": "U,V,W",
"pronounciation": "vaa",
"planet/element": "capricorn",
"tarot": "devil",
"gematria": 70
},
"X": {
"id": "X",
"enochian": "X",
"title": "Pal",
"english": "X",
"pronounciation": "s, tz",
"planet/element": "earth",
"tarot": "universe",
"gematria": 400
},
"Z": {
"id": "Z",
"enochian": "Z",
"title": "Ceph",
"english": "Z",
"pronounciation": "zod, zee",
"planet/element": "leo",
"tarot": "strength",
"gematria": 9
}
}

View File

@@ -1,376 +0,0 @@
{
"earth": {
"id": "earth",
"grid": [
[
"b",
"O",
"a",
"Z",
"a",
"R",
"o",
"P",
"h",
"a",
"R",
"a"
],
[
"v",
"N",
"n",
"a",
"x",
"o",
"P",
"S",
"o",
"n",
"d",
"n"
],
[
"a",
"i",
"g",
"r",
"a",
"n",
"o",
"o",
"m",
"a",
"g",
"g"
],
[
"o",
"r",
"P",
"m",
"n",
"i",
"n",
"g",
"b",
"e",
"a",
"l"
],
[
"r",
"s",
"O",
"n",
"i",
"z",
"i",
"r",
"l",
"e",
"m",
"v"
],
[
"i",
"z",
"i",
"n",
"r",
"C",
"z",
"i",
"a",
"M",
"h",
"l"
],
[
"M",
"O",
"r",
"d",
"i",
"a",
"l",
"h",
"C",
"t",
"G",
"a"
],
[
"O",
"C",
"a",
"n",
"c",
"h",
"i",
"a",
"s",
"o",
"m",
"t"
],
[
"A",
"r",
"b",
"i",
"z",
"m",
"i",
"i",
"l",
"P",
"i",
"z"
],
[
"O",
"P",
"a",
"n",
"a",
"L",
"a",
"m",
"S",
"m",
"a",
"P"
],
[
"d",
"O",
"l",
"o",
"P",
"i",
"n",
"i",
"a",
"n",
"b",
"a"
],
[
"r",
"x",
"P",
"a",
"o",
"c",
"s",
"i",
"z",
"i",
"x",
"P"
],
[
"a",
"x",
"t",
"i",
"r",
"V",
"a",
"s",
"t",
"r",
"i",
"m"
]
]
},
"air": {
"id": "air",
"grid": [
[
"r",
"Z",
"i",
"l",
"a",
"f",
"A",
"Y",
"t",
"l",
"P",
"a"
],
[
"a",
"r",
"d",
"Z",
"a",
"i",
"d",
"P",
"a",
"L",
"a",
"m"
],
[
"c",
"z",
"o",
"n",
"s",
"a",
"r",
"o",
"Y",
"a",
"v",
"b"
],
[
"T",
"o",
"i",
"T",
"t",
"z",
"o",
"P",
"a",
"c",
"o",
"C"
],
[
"S",
"i",
"g",
"a",
"s",
"o",
"m",
"r",
"b",
"z",
"n",
"h"
],
[
"f",
"m",
"o",
"n",
"d",
"a",
"T",
"d",
"i",
"a",
"r",
"i"
],
[
"o",
"r",
"o",
"i",
"b",
"A",
"h",
"a",
"o",
"z",
"P",
"i"
],
[
"t",
"N",
"a",
"b",
"r",
"V",
"i",
"x",
"g",
"a",
"s",
"d"
],
[
"O",
"i",
"i",
"i",
"t",
"T",
"P",
"a",
"l",
"O",
"a",
"i"
],
[
"A",
"b",
"a",
"m",
"o",
"o",
"o",
"a",
"C",
"v",
"c",
"a"
],
[
"N",
"a",
"o",
"c",
"O",
"T",
"t",
"n",
"P",
"r",
"n",
"T"
],
[
"o",
"c",
"a",
"n",
"m",
"a",
"g",
"o",
"t",
"r",
"o",
"i"
],
[
"S",
"h",
"i",
"a",
"l",
"r",
"a",
"P",
"m",
"z",
"o",
"x"
]
]
}
}

View File

@@ -1,14 +0,0 @@
{
"1st": {
"id": "1st",
"pillarId": "severity"
},
"2nd": {
"id": "2nd",
"pillarId": "mercy"
},
"3rd": {
"id": "3rd",
"pillarId": "middle"
}
}

View File

@@ -1,115 +0,0 @@
{
"0=0": {
"id": "0=0",
"name": "Neophyte",
"orderId": "1st",
"degreeId": "1st",
"next": "1=10"
},
"1=10": {
"id": "1=10",
"name": "Zelator",
"elementId": "earth",
"planetId": "earth",
"orderId": "1st",
"degreeId": "1st",
"sephirahId": "malchut",
"prev": "0=0",
"next": "2=9"
},
"2=9": {
"id": "2=9",
"name": "Theoricus",
"elementId": "air",
"planetId": "luna",
"orderId": "1st",
"degreeId": "1st",
"sephirahId": "yesod",
"prev": "1=10",
"next": "3=8"
},
"3=8": {
"id": "3=8",
"name": "Practicus",
"elementId": "water",
"planetId": "mercury",
"orderId": "1st",
"degreeId": "1st",
"sephirahId": "hod",
"prev": "2=9",
"next": "4=7"
},
"4=7": {
"id": "4=7",
"name": "Philosophus",
"elementId": "fire",
"planetId": "venus",
"orderId": "1st",
"degreeId": "1st",
"sephirahId": "netzach",
"prev": "3=8",
"next": "portal"
},
"portal": {
"id": "portal",
"name": "Portal",
"elementId": "spirit",
"degreeId": "2nd",
"prev": "4=7",
"next": "5=6"
},
"5=6": {
"id": "5=6",
"name": "Adeptus Minor",
"planetId": "sol",
"orderId": "2nd",
"degreeId": "3rd",
"sephirahId": "tiferet",
"prev": "portal",
"next": "6=5"
},
"6=5": {
"id": "6=5",
"name": "Adeptus Major",
"planetId": "mars",
"orderId": "2nd",
"degreeId": "3rd",
"sephirahId": "gevurah",
"prev": "5=6",
"next": "7=4"
},
"7=4": {
"id": "7=4",
"name": "Adeptus Exemptus",
"planetId": "jupiter",
"orderId": "2nd",
"degreeId": "3rd",
"sephirahId": "hesed",
"prev": "6=5",
"next": "8=3"
},
"8=3": {
"id": "8=3",
"name": "Magister Templi",
"planetId": "saturn",
"orderId": "3rd",
"sephirahId": "binah",
"prev": "7=4",
"next": "9=2"
},
"9=2": {
"id": "9=2",
"name": "Magus",
"orderId": "3rd",
"sephirahId": "chochmah",
"prev": "8=3",
"next": "10=1"
},
"10=1": {
"id": "10=1",
"name": "Ipsissimus",
"orderId": "3rd",
"sephirahId": "keter",
"prev": "9=2"
}
}

View File

@@ -1,33 +0,0 @@
{
"meta": {
"description": "Positional gematria ciphers based on a single universal alphabet.",
"notes": "All ciphers map A-Z positions (1-26) to numeric values."
},
"baseAlphabet": "abcdefghijklmnopqrstuvwxyz",
"ciphers": [
{
"id": "simple-ordinal",
"name": "Simple Ordinal",
"description": "A=1 ... Z=26",
"values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
},
{
"id": "full-reduction",
"name": "Full Reduction",
"description": "A=1 ... I=9, J=1 ... Z=8",
"values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8]
},
{
"id": "reverse-ordinal",
"name": "Reverse Ordinal",
"description": "A=26 ... Z=1",
"values": [26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
},
{
"id": "ordinal-plus-9",
"name": "Ordinal +9",
"description": "A=10 ... Z=35 (e.g. 11th position = 20)",
"values": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
}
]
}

View File

@@ -1,75 +0,0 @@
[
{},
{
"id": 1,
"meaning": {
"en": "Personality of the Querent, his life, health, habits, behavior and other personal characteristics."
}
},
{
"id": 2,
"meaning": {
"en": "Money, property, finances, possible theft through negligence or loss."
}
},
{
"id": 3,
"meaning": {
"en": "Communication, relatives by blood, letters, news, short journeys, writing, other pursuits associated with Mercury."
}
},
{
"id": 4,
"meaning": {
"en": "Home, inheritance, possessions, hidden treasure, environment, retirement, the conclusion of any matter. Information about theft or thieves."
}
},
{
"id": 5,
"meaning": {
"en": "Women, luxury, drinking, procreation, creation, artistic work. Gambling and speculation."
}
},
{
"id": 6,
"meaning": {
"en": "Employees, sickness, which body parts are most likely to suffer illness or injury. Domestic animals and close relatives other than immediate family."
}
},
{
"id": 7,
"meaning": {
"en": "Love, marriage, prostitution, partnerships. Public enemies, lawsuits, war opponents, thieves and dishonor."
}
},
{
"id": 8,
"meaning": {
"en": "Death, Wills, legacies. Poverty."
}
},
{
"id": 9,
"meaning": {
"en": "Long journeys, relationships with foreigners, science, the church, art, religion dreams and divinations."
}
},
{
"id": 10,
"meaning": {
"en": "Fame, reputation, honor, mother, trade authority."
}
},
{
"id": 11,
"meaning": {
"en": "Friends, social contacts, altruistic organizations."
}
},
{
"id": 12,
"meaning": {
"en": "Sorrow, hospitals, intrigue, prisons, restrictions, unseen dangers, fears."
}
}
]

View File

@@ -1,990 +0,0 @@
{
"acquisitio": {
"id": "acquisitio",
"rows": [
2,
1,
2,
1
],
"title": {
"en": "Acquisitio"
},
"translation": {
"en": "gain"
},
"meaning": {
"en": "Generally good for profit and gain."
},
"meanings": [
{},
{
"en": "Happy, success in all things."
},
{
"en": "Very prosperous."
},
{
"en": "Favor and riches."
},
{
"en": "Good fortune and success."
},
{
"en": "Good success."
},
{
"en": "Good - especially if it agrees with the 5th."
},
{
"en": "Reasonably good."
},
{
"en": "Rather good, but not very. The sick shall die."
},
{
"en": "Good in all demands."
},
{
"en": "Good in suits."
},
{
"en": "Good in all."
},
{
"en": "Unfavourable, pain and loss."
}
],
"zodiacId": "sagittarius",
"elementId": "fire",
"planetId": "jupiter",
"rulerId": "hismael"
},
"albus": {
"id": "albus",
"rows": [
2,
2,
1,
2
],
"title": {
"en": "Albus"
},
"translation": {
"en": "white"
},
"meaning": {
"en": "Good for profit and for entering into a place or undertaking."
},
"meanings": [
{},
{
"en": "Good for marriage. Mercurial. Peace."
},
{
"en": "Good in all."
},
{
"en": "Very good."
},
{
"en": "Very good except in War."
},
{
"en": "Good."
},
{
"en": "Good in all things."
},
{
"en": "Good except in all things."
},
{
"en": "Good."
},
{
"en": "A messenger brings a letter."
},
{
"en": "Excellent in all."
},
{
"en": "Very good."
},
{
"en": "Marvelously good."
}
],
"zodiacId": "gemini",
"elementId": "air",
"planetId": "mercury",
"rulerId": "taphtatharath"
},
"amissio": {
"id": "amissio",
"title": {
"en": "Amissio"
},
"rows": [
1,
2,
1,
2
],
"translation": {
"en": "loss"
},
"meaning": {
"en": "Good for loss of substance and sometimes for love; but very bad for gain."
},
"meanings": [
{},
{
"en": "Ill in all things but for prisoners."
},
{
"en": "Very Ill for money, but good for love."
},
{
"en": "Ill end-except for quarrels."
},
{
"en": "Ill in all."
},
{
"en": "Unfavourable except for agriculture."
},
{
"en": "Rather unfavourable for love."
},
{
"en": "Very good for love, otherwise unfavourable."
},
{
"en": "Excellent in all questions."
},
{
"en": "Unfavourable in all things."
},
{
"en": "Unfavourable except for favor with women."
},
{
"en": "Good for love, otherwise bad."
},
{
"en": "Unfavourable in all things."
}
],
"zodiacId": "taurus",
"elementId": "earth",
"planetId": "venus",
"rulerId": "kedemel"
},
"caput_draconis": {
"id": "caput_draconis",
"rows": [
2,
1,
1,
1
],
"title": {
"en": "Caput Draconis"
},
"translation": {
"en": "dragon's head"
},
"meaning": {
"en": "Good with good; evil with evil. Gives good issue for gain."
},
"meanings": [
{},
{
"en": "Good in all things."
},
{
"en": "Good."
},
{
"en": "Very good."
},
{
"en": "Good save in war."
},
{
"en": "Very good."
},
{
"en": "Good for immorality only."
},
{
"en": "Good especially for peace."
},
{
"en": "Good."
},
{
"en": "Very good."
},
{
"en": "Good in all."
},
{
"en": "Good for the church and ecclesiastical gain."
},
{
"en": "Not very good."
}
],
"zodiacId": null,
"elementId": "earth",
"planetId": [
"venus",
"jupiter"
],
"rulerId": [
"kedemel",
"hismael"
]
},
"carcer": {
"id": "carcer",
"rows": [
1,
2,
2,
1
],
"title": {
"en": "Carcer"
},
"translation": {
"en": "prison"
},
"meaning": {
"en": "Generally unfavourable. Delay, binding, bar, restriction."
},
"meanings": [
{},
{
"en": "Unfavourable except to fortify a place."
},
{
"en": "Good in Saturnine questions; else unfavourable."
},
{
"en": "Unfavourable."
},
{
"en": "Good only for melancholy."
},
{
"en": "Receive a letter within three days. Unfavourable."
},
{
"en": "Very unfavourable."
},
{
"en": "Unfavourable."
},
{
"en": "Very unfavourable."
},
{
"en": "Unfavourable in all."
},
{
"en": "Unfavourable save in hldden treasure."
},
{
"en": "Much anxiety."
},
{
"en": "Rather good."
}
],
"zodiacId": "capricorn",
"elementId": "earth",
"planetId": "saturn",
"rulerId": "zazel"
},
"cauda_draconis": {
"id": "cauda_draconis",
"title": {
"en": "Cauda Draconis"
},
"rows": [
1,
1,
1,
2
],
"translation": {
"en": "dragon's tail"
},
"meaning": {
"en": "Good with evil, and evil with good. Good for loss, and for passing out of an affair."
},
"meanings": [
{},
{
"en": "Destroy figure if it falls here! Makes judgment worthless."
},
{
"en": "Very unfavourable."
},
{
"en": "Unfavourable in all."
},
{
"en": "Good especially for conclusion of the matter."
},
{
"en": "Very unfavourable."
},
{
"en": "Rather good."
},
{
"en": "Unfavourable, war, and fire."
},
{
"en": "No good, except for magic."
},
{
"en": "Good for science only. Bad for journeys. Robbery."
},
{
"en": "Unfavourable save in works of fire."
},
{
"en": "Unfavourable save for favors."
},
{
"en": "Rather good."
}
],
"zodiacId": null,
"elementId": "fire",
"planetId": [
"saturn",
"mars"
],
"rulerId": [
"zazel",
"bartzabel"
]
},
"conjunctio": {
"id": "conjunctio",
"rows": [
2,
1,
1,
2
],
"title": {
"en": "Conjunctio"
},
"translation": {
"en": "conjunction"
},
"meaning": {
"en": "Good with good, or evil with evil. Recovery from things lost."
},
"meanings": [
{},
{
"en": "Good with good, evil with evil."
},
{
"en": "Commonly good."
},
{
"en": "Good fortune."
},
{
"en": "Good save for health; see the eighth."
},
{
"en": "Medium."
},
{
"en": "Good for immorality only."
},
{
"en": "Rather good."
},
{
"en": "Unfavourable, death."
},
{
"en": "Medium good."
},
{
"en": "For love, good. For sickness, unfavourable."
},
{
"en": "Good in all."
},
{
"en": "Medium. Bad for prisoners"
}
],
"zodiacId": "virgo",
"elementId": "earth",
"planetId": "mercury",
"rulerId": "taphthartharath"
},
"fortuna_major": {
"id": "fortuna_major",
"rows": [
2,
2,
1,
1
],
"title": {
"en": "Fortuna Major"
},
"translation": {
"en": "greater fortune"
},
"meaning": {
"en": "Good for gain in all things where a person has hopes to win."
},
"meanings": [
{},
{
"en": "Good save in secrecy."
},
{
"en": "Good except in sad things."
},
{
"en": "Good in all."
},
{
"en": "Good in all, but melancholy."
},
{
"en": "Very good in all things."
},
{
"en": "Very good except for debauchery."
},
{
"en": "Good in all."
},
{
"en": "Moderately good."
},
{
"en": "Very good."
},
{
"en": "Exceedingly good. Go to superiors."
},
{
"en": "Very good."
},
{
"en": "Good in all."
}
],
"zodiacId": "leo",
"elementId": "fire",
"planetId": "sol",
"rulerId": "sorath"
},
"fortuna_minor": {
"id": "fortuna_minor",
"rows": [
1,
1,
2,
2
],
"title": {
"en": "Fortuna Minor"
},
"translation": {
"en": "lesser fortune"
},
"meaning": {
"en": "Good in any manner in which a person wishes to proceed quickly."
},
"meanings": [
{},
{
"en": "Speed in victory and in love, but choleric."
},
{
"en": "Very good."
},
{
"en": "Good - but wrathful."
},
{
"en": "Haste; rather unfavourable except for peace."
},
{
"en": "Good in all things."
},
{
"en": "Medium in all."
},
{
"en": "Unfavourable except for war or love."
},
{
"en": "Unfavourable generally."
},
{
"en": "Good, but choleric."
},
{
"en": "Good, except for peace."
},
{
"en": "Good, especially for love."
},
{
"en": "Good, except for alternation, or for serving another."
}
],
"zodiacId": "leo",
"elementId": "fire",
"planetId": "sol",
"rulerId": "sorath"
},
"laetitia": {
"id": "laetitia",
"rows": [
1,
2,
2,
2
],
"title": {
"en": "Laetitia"
},
"translation": {
"en": "joy"
},
"meaning": {
"en": "Good for joy, present or to come."
},
"meanings": [
{},
{
"en": "Good, except in war."
},
{
"en": "Sickly."
},
{
"en": "Ill."
},
{
"en": "Mainly good."
},
{
"en": "Excellently good."
},
{
"en": "Unfavourable generally."
},
{
"en": "Indifferent."
},
{
"en": "Unfavourable generally."
},
{
"en": "Very good."
},
{
"en": "Good, rather in war than in peace."
},
{
"en": "Good in all."
},
{
"en": "Unfavourable generally."
}
],
"zodiacId": "pisces",
"elementId": "water",
"planetId": "jupiter",
"rulerId": "hismael"
},
"populus": {
"id": "populus",
"rows": [
2,
2,
2,
2
],
"title": {
"en": "Populus"
},
"translation": {
"en": "people"
},
"meaning": {
"en": "Sometimes good and sometimes bad; good with good, and evil with evil."
},
"meanings": [
{},
{
"en": "Good in marriages."
},
{
"en": "Medium good."
},
{
"en": "Rather good than bad."
},
{
"en": "Good in all but love."
},
{
"en": "Good in most things."
},
{
"en": "Good."
},
{
"en": "In war good; else medium."
},
{
"en": "Unfavourable."
},
{
"en": "Look for letters."
},
{
"en": "Good."
},
{
"en": "Good in all."
},
{
"en": "Very unfavourable."
}
],
"zodiacId": "cancer",
"elementId": "water",
"rulerId": "chasmodai",
"planetId": "luna"
},
"puella": {
"id": "puella",
"rows": [
1,
2,
1,
1
],
"title": {
"en": "Puella"
},
"translation": {
"en": "girl"
},
"meaning": {
"en": "Good in all demands, especially in those relating to women."
},
"meanings": [
{},
{
"en": "Good except in war."
},
{
"en": "Very good."
},
{
"en": "Good."
},
{
"en": "Indifferent."
},
{
"en": "Very good, but notice the aspects."
},
{
"en": "Good, but especially for debauchery."
},
{
"en": "Good except for war."
},
{
"en": "Good."
},
{
"en": "Good for music. Otherwise only medium."
},
{
"en": "Good for peace."
},
{
"en": "Good, and love ofladies."
},
{
"en": "Good in all."
}
],
"zodiacId": "libra",
"elementId": "air",
"planetId": "venus",
"rulerId": "kedemel"
},
"puer": {
"id": "puer",
"rows": [
1,
1,
2,
1
],
"title": {
"en": "Puer"
},
"translation": {
"en": "boy"
},
"meaning": {
"en": "Unfavourable in most demands, except in those relating to War or Love."
},
"meanings": [
{},
{
"en": "Indifferent. Best in War."
},
{
"en": "Good, but with trouble"
},
{
"en": "Good fortune."
},
{
"en": "Unfavourable, except in war and love."
},
{
"en": "Medium good."
},
{
"en": "Medium."
},
{
"en": "Unfavourable, save in War."
},
{
"en": "Unfavourable, save for love."
},
{
"en": "Unfavourable except for War."
},
{
"en": "Rather unfavourable. But good for love and War. Most other things medium."
},
{
"en": "Medium; good favor."
},
{
"en": "Very good in all."
}
],
"elementId": "fire",
"zodiacId": "aries",
"planetId": "mars",
"rulerId": "bartzabel"
},
"rubeus": {
"id": "rubeus",
"rows": [
2,
1,
2,
2
],
"title": {
"en": "Rubeus"
},
"translation": {
"en": "red"
},
"meaning": {
"en": "Unfavourable in all that is good and Good in all that is Unfavourable."
},
"meanings": [
{},
{
"en": "Destroy the figure if it falls here! It makes the judgment worthless."
},
{
"en": "Unfavourable in all demands."
},
{
"en": "Unfavourable except to let blood."
},
{
"en": "Unfavourable except in War and Fire."
},
{
"en": "Unfavourable save for love, and sowing seed."
},
{
"en": "Unfavourable except for bloodletting."
},
{
"en": "Unfavourable except for war and fire."
},
{
"en": "Unfavourable."
},
{
"en": "Very Unfavourable."
},
{
"en": "Dissolute. Love, fire."
},
{
"en": "Unfavourable, except to let blood."
},
{
"en": "Unfavourable in all things."
}
],
"zodiacId": "scorpio",
"elementId": "water",
"planetId": "mars",
"rulerId": "bartzabel"
},
"tristitia": {
"id": "tristitia",
"rows": [
2,
2,
2,
1
],
"title": {
"en": "Tristitia"
},
"translation": {
"en": "sorrow"
},
"meaning": {
"en": "Unfavourable in almost all things."
},
"meanings": [
{},
{
"en": "Medium, but good for treasure and fortifying."
},
{
"en": "Medium, but good to fortify."
},
{
"en": "Unfavourable in all."
},
{
"en": "Unfavourable in all."
},
{
"en": "Very Unfavourable."
},
{
"en": "Unfavourable, except for debauchery."
},
{
"en": "Unfavourable for inheritance and magic only."
},
{
"en": "Unfavourable, but in secrecy good."
},
{
"en": "Unfavourable except for magic."
},
{
"en": "Unfavourable except for fortifications."
},
{
"en": "Unfavourable in all."
},
{
"en": "Unfavourable. But good for magic and treasure."
}
],
"zodiacId": "aquarius",
"elementId": "air",
"planetId": "saturn",
"rulerId": "zazel"
},
"via": {
"id": "via",
"rows": [
1,
1,
1,
1
],
"title": {
"en": "Via"
},
"translation": {
"en": "way"
},
"meaning": {
"en": "Injurious to the goodness of other figures generally, but good for journeys and voyages."
},
"meanings": [
{},
{
"en": "Unfavourable except for prison."
},
{
"en": "Indifferent."
},
{
"en": "Very good in all."
},
{
"en": "Good in all save love."
},
{
"en": "Voyages good."
},
{
"en": "Unfavourable."
},
{
"en": "Rather good, especially for voyages."
},
{
"en": "Unfavourable."
},
{
"en": "Indifferent. good for journeys."
},
{
"en": "Good."
},
{
"en": "Very good."
},
{
"en": "Excellent."
}
],
"zodiacId": "cancer",
"elementId": "water",
"planetId": "luna",
"rulerId": "chasmodai"
}
}

View File

@@ -1,578 +0,0 @@
{
"source": "Liber 777 by Aleister Crowley / adamblvck/open_777 dataset",
"description": "Divine correspondences mapped to the 32 paths of the Kabbalistic Tree of Life. Rows 110 are the ten Sephiroth; rows 1132 are the 22 Hebrew letter paths. Row 0 is Ain Soph Aur (the limitless light beyond the Tree).",
"pantheons": [
{ "id": "greek", "label": "Greek Gods", "emoji": "🏛️", "source": "Liber 777, Col. XXXIV" },
{ "id": "roman", "label": "Roman Gods", "emoji": "🦅", "source": "Liber 777, Col. XXXV" },
{ "id": "egyptian", "label": "Egyptian Gods", "emoji": "𓂀", "source": "Liber 777, Cols. XIX (Selection) & XX (Practical)" },
{ "id": "elohim", "label": "God Names", "emoji": "✡️", "source": "Liber 777, Col. V — God Names in Assiah (Sephiroth)" },
{ "id": "archangels", "label": "Archangels", "emoji": "☀️", "source": "Liber 777, Col. XCIX — Archangels of Assiah (Sephiroth)" },
{ "id": "angelicOrders", "label": "Angelic Orders", "emoji": "✨", "source": "Liber 777, Col. C — Angels of Assiah (Sephiroth)" }
],
"byPath": {
"0": {
"type": "special",
"label": "Ain Soph Aur",
"description": "The Limitless Light — three veils of negative existence beyond the Tree of Life",
"greek": "Pan",
"roman": null,
"egyptian": "Harpocrates, Amoun, Nuith",
"egyptianPractical": "Heru-pa-Kraath",
"hindu": "AUM",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"1": {
"type": "sephirah",
"no": 1,
"name": "Kether",
"meaning": "The Crown",
"greek": "Zeus, Ikarus",
"roman": "Jupiter",
"egyptian": "Ptah, Asar un Nefer, Hadith",
"egyptianPractical": "Ptah",
"scandinavian": "Wotan",
"hindu": "Parabrahm",
"elohim": { "hebrew": "אהיה", "transliteration": "Eheieh", "meaning": "I Am / Being" },
"archangel": { "hebrew": "מטטרון", "transliteration": "Metatron" },
"angelicOrder": { "hebrew": "חיות הקדש", "transliteration": "Chaioth ha-Qodesh", "meaning": "Holy Living Creatures" }
},
"2": {
"type": "sephirah",
"no": 2,
"name": "Chokmah",
"meaning": "Wisdom",
"greek": "Athena, Uranus",
"roman": "Janus",
"egyptian": "Amoun, Thoth, Nuith",
"egyptianPractical": "Isis (as Wisdom)",
"scandinavian": "Odin",
"hindu": "Shiva, Vishnu, Akasa, Lingam",
"elohim": { "hebrew": "יה", "transliteration": "Yah", "meaning": "The Lord" },
"archangel": { "hebrew": "רציאל", "transliteration": "Ratziel" },
"angelicOrder": { "hebrew": "אופנים", "transliteration": "Auphanim", "meaning": "Wheels" }
},
"3": {
"type": "sephirah",
"no": 3,
"name": "Binah",
"meaning": "Understanding",
"greek": "Cybele, Demeter, Rhea, Heré, Kronos, Psyché",
"roman": "Juno, Cybele, Hecate",
"egyptian": "Maut, Isis, Nephthys",
"egyptianPractical": "Nephthys",
"scandinavian": "Frigga",
"hindu": "Bhavani, Prana, Yoni",
"elohim": { "hebrew": "יהוה אלהים", "transliteration": "YHVH Elohim", "meaning": "The Lord God" },
"archangel": { "hebrew": "צאפקיאל", "transliteration": "Tzaphkiel" },
"angelicOrder": { "hebrew": "אראלים", "transliteration": "Aralim", "meaning": "Strong and Mighty Ones / Thrones" }
},
"4": {
"type": "sephirah",
"no": 4,
"name": "Chesed",
"meaning": "Mercy",
"greek": "Poseidon, Zeus",
"roman": "Jupiter",
"egyptian": "Amoun, Isis",
"egyptianPractical": "Amoun",
"scandinavian": "Wotan",
"hindu": "Indra, Brahma",
"elohim": { "hebrew": "אל", "transliteration": "El", "meaning": "God (the Strong)" },
"archangel": { "hebrew": "צדקיאל", "transliteration": "Tzadkiel" },
"angelicOrder": { "hebrew": "חשמלים", "transliteration": "Chashmalim", "meaning": "Brilliant / Shining Ones" }
},
"5": {
"type": "sephirah",
"no": 5,
"name": "Geburah",
"meaning": "Strength / Severity",
"greek": "Ares, Hades",
"roman": "Mars",
"egyptian": "Horus, Nephthys",
"egyptianPractical": "Horus",
"scandinavian": "Thor",
"hindu": "Vishnu, Varruna-Avatar",
"elohim": { "hebrew": "אלהים גבור", "transliteration": "Elohim Gibor", "meaning": "Almighty God" },
"archangel": { "hebrew": "כמאל", "transliteration": "Kamael" },
"angelicOrder": { "hebrew": "שרפים", "transliteration": "Seraphim", "meaning": "Fiery Serpents" }
},
"6": {
"type": "sephirah",
"no": 6,
"name": "Tiphareth",
"meaning": "Beauty",
"greek": "Ikarus, Apollo, Adonis, Dionysis, Bacchus",
"roman": "Apollo, Bacchus, Aurora",
"egyptian": "Asar, Ra",
"egyptianPractical": "Ra",
"scandinavian": null,
"hindu": "Vishnu-Hari-Krishna-Rama",
"elohim": { "hebrew": "יהוה אלוה ודעת", "transliteration": "YHVH Eloah ve-Daath", "meaning": "God manifest in the Sphere of the Mind" },
"archangel": { "hebrew": "רפאל", "transliteration": "Raphael" },
"angelicOrder": { "hebrew": "מלכים", "transliteration": "Malakim", "meaning": "Kings" }
},
"7": {
"type": "sephirah",
"no": 7,
"name": "Netzach",
"meaning": "Victory",
"greek": "Aphrodite, Nike",
"roman": "Venus",
"egyptian": "Hathoor",
"egyptianPractical": "Hathoor",
"scandinavian": "Freya",
"hindu": "Bhavani (etc.)",
"elohim": { "hebrew": "יהוה צבאות", "transliteration": "YHVH Tzabaoth", "meaning": "The Lord of Hosts" },
"archangel": { "hebrew": "חאניאל", "transliteration": "Haniel" },
"angelicOrder": { "hebrew": "אלהים", "transliteration": "Elohim", "meaning": "Gods" }
},
"8": {
"type": "sephirah",
"no": 8,
"name": "Hod",
"meaning": "Splendour",
"greek": "Hermes",
"roman": "Mercury",
"egyptian": "Anubis",
"egyptianPractical": "Thoth",
"scandinavian": "Odin, Loki",
"hindu": "Hanuman",
"elohim": { "hebrew": "אלהים צבאות", "transliteration": "Elohim Tzabaoth", "meaning": "God of Hosts" },
"archangel": { "hebrew": "מיכאל", "transliteration": "Michael" },
"angelicOrder": { "hebrew": "בני אלהים", "transliteration": "Beni Elohim", "meaning": "Sons of God" }
},
"9": {
"type": "sephirah",
"no": 9,
"name": "Yesod",
"meaning": "Foundation",
"greek": "Zeus (as Air), Diana of Ephesus, Eros",
"roman": "Diana (as Water), Terminus, Jupiter",
"egyptian": "Shu, Hermanubis",
"egyptianPractical": "Shu",
"scandinavian": null,
"hindu": "Ganesha, Vishnu (Kurm Avatar)",
"elohim": { "hebrew": "שדי אל חי", "transliteration": "Shaddai El Chai", "meaning": "Almighty Living God" },
"archangel": { "hebrew": "גבריאל", "transliteration": "Gabriel" },
"angelicOrder": { "hebrew": "כרובים", "transliteration": "Kerubim", "meaning": "Angels of the Elements" }
},
"10": {
"type": "sephirah",
"no": 10,
"name": "Malkuth",
"meaning": "The Kingdom",
"greek": "Persephone, Adonis, Psyche",
"roman": "Ceres",
"egyptian": "Seb, Isis and Nephthys",
"egyptianPractical": "Osiris",
"scandinavian": null,
"hindu": "Lakshmi",
"elohim": { "hebrew": "אדני מלך", "transliteration": "Adonai Melek", "meaning": "Lord and King" },
"archangel": { "hebrew": "סנדלפון", "transliteration": "Sandalphon" },
"angelicOrder": { "hebrew": "אשים", "transliteration": "Ashim", "meaning": "Flames / Souls of Fire" }
},
"11": {
"type": "path",
"no": 11,
"hebrewLetter": "Aleph",
"hebrewChar": "א",
"tarot": "The Fool",
"attribute": "Air",
"greek": "Zeus",
"roman": "Jupiter, Juno, Æolus",
"egyptian": "Nu, Hoor-pa-kraat",
"egyptianPractical": "Mout",
"elohim": { "hebrew": "יהוה", "transliteration": "YHVH" },
"archangel": null,
"angelicOrder": null
},
"12": {
"type": "path",
"no": 12,
"hebrewLetter": "Beth",
"hebrewChar": "ב",
"tarot": "The Magician",
"attribute": "Mercury",
"greek": "Hermes",
"roman": "Mercury",
"egyptian": "Thoth and Cynocephalus",
"egyptianPractical": "Thoth",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"13": {
"type": "path",
"no": 13,
"hebrewLetter": "Gimel",
"hebrewChar": "ג",
"tarot": "The High Priestess",
"attribute": "Luna",
"greek": "Artemis, Hekate",
"roman": "Diana (as Water), Terminus, Jupiter",
"egyptian": "Chomse",
"egyptianPractical": "Chomse",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"14": {
"type": "path",
"no": 14,
"hebrewLetter": "Daleth",
"hebrewChar": "ד",
"tarot": "The Empress",
"attribute": "Venus",
"greek": "Aphrodite",
"roman": "Venus",
"egyptian": "Hathor",
"egyptianPractical": "Hathoor",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"15": {
"type": "path",
"no": 15,
"hebrewLetter": "Heh",
"hebrewChar": "ה",
"tarot": "The Emperor",
"attribute": "Aries",
"greek": "Athena",
"roman": "Mars, Minerva",
"egyptian": "Men Thu",
"egyptianPractical": "Isis",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"16": {
"type": "path",
"no": 16,
"hebrewLetter": "Vav",
"hebrewChar": "ו",
"tarot": "The Hierophant",
"attribute": "Taurus",
"greek": "Heré",
"roman": "Venus, Hymen",
"egyptian": "Asar, Ameshet, Apis",
"egyptianPractical": "Osiris",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"17": {
"type": "path",
"no": 17,
"hebrewLetter": "Zayin",
"hebrewChar": "ז",
"tarot": "The Lovers",
"attribute": "Gemini",
"greek": "Castor and Pollux, Apollo the Diviner, Eros",
"roman": "Castor and Pollux, Janus, Hymen",
"egyptian": "Twin Deities, Rekht, Merti",
"egyptianPractical": "The Twin Merti",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"18": {
"type": "path",
"no": 18,
"hebrewLetter": "Cheth",
"hebrewChar": "ח",
"tarot": "The Chariot",
"attribute": "Cancer",
"greek": "Apollo The Charioteer",
"roman": "Mercury, Lares and Penates",
"egyptian": "Khephra",
"egyptianPractical": "Hormakhu",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"19": {
"type": "path",
"no": 19,
"hebrewLetter": "Teth",
"hebrewChar": "ט",
"tarot": "Strength",
"attribute": "Leo",
"greek": "Demeter",
"roman": "Venus (Repressing Fire of Vulcan)",
"egyptian": "Ra-Hoor-Khuit, Pasht, Sekhet, Mau",
"egyptianPractical": "Horus",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"20": {
"type": "path",
"no": 20,
"hebrewLetter": "Yod",
"hebrewChar": "י",
"tarot": "The Hermit",
"attribute": "Virgo",
"greek": "Attis",
"roman": "Attis, Ceres, Adonis, Vesta, Flora",
"egyptian": "Isis (as Virgin)",
"egyptianPractical": "Heru-pa-Kraath",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"21": {
"type": "path",
"no": 21,
"hebrewLetter": "Kaph",
"hebrewChar": "כ",
"tarot": "Wheel of Fortune",
"attribute": "Jupiter",
"greek": "Zeus",
"roman": "Jupiter, Pluto",
"egyptian": "Amoun-Ra",
"egyptianPractical": "Amoun-Ra",
"elohim": { "hebrew": "אבא, אל אב", "transliteration": "Abba, El Ab", "meaning": "Father, God the Father" },
"archangel": null,
"angelicOrder": null
},
"22": {
"type": "path",
"no": 22,
"hebrewLetter": "Lamed",
"hebrewChar": "ל",
"tarot": "Justice",
"attribute": "Libra",
"greek": "Themis, Minos, Aecus and Rhadamanthus",
"roman": "Vulcan, Venus, Nemesis",
"egyptian": "Ma (Maat)",
"egyptianPractical": "Maat",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"23": {
"type": "path",
"no": 23,
"hebrewLetter": "Mem",
"hebrewChar": "מ",
"tarot": "The Hanged Man",
"attribute": "Water",
"greek": "Poseidon",
"roman": "Neptune, Rhea",
"egyptian": "Tum, Ptah, Auramoth, Asar, Hekar, Isis",
"egyptianPractical": null,
"elohim": { "hebrew": "אל", "transliteration": "El", "meaning": "God (the Strong)" },
"archangel": null,
"angelicOrder": null
},
"24": {
"type": "path",
"no": 24,
"hebrewLetter": "Nun",
"hebrewChar": "נ",
"tarot": "Death",
"attribute": "Scorpio",
"greek": "Ares, Apollo the Pythean, Thanatos",
"roman": "Mars, Mors",
"egyptian": "Merti Goddesses, Typhon, Apep, Khephra",
"egyptianPractical": "Hammemit",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"25": {
"type": "path",
"no": 25,
"hebrewLetter": "Samekh",
"hebrewChar": "ס",
"tarot": "Temperance",
"attribute": "Sagittarius",
"greek": "Apollo, Artemis (hunters)",
"roman": "Diana (Archer), Iris",
"egyptian": "Nephthys",
"egyptianPractical": null,
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"26": {
"type": "path",
"no": 26,
"hebrewLetter": "Ayin",
"hebrewChar": "ע",
"tarot": "The Devil",
"attribute": "Capricorn",
"greek": "Pan, Priapus",
"roman": "Pan, Vesta, Bacchus",
"egyptian": "Khem, Set",
"egyptianPractical": "Set",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"27": {
"type": "path",
"no": 27,
"hebrewLetter": "Pe",
"hebrewChar": "פ",
"tarot": "The Tower",
"attribute": "Mars",
"greek": "Ares, Athena",
"roman": "Mars",
"egyptian": "Horus",
"egyptianPractical": "Mentu",
"elohim": { "hebrew": "אדני", "transliteration": "Adonai", "meaning": "My Lord" },
"archangel": null,
"angelicOrder": null
},
"28": {
"type": "path",
"no": 28,
"hebrewLetter": "Tzaddi",
"hebrewChar": "צ",
"tarot": "The Star",
"attribute": "Aquarius",
"greek": "Athena, Ganymede",
"roman": "Juno, Æolus",
"egyptian": "Ahepi, Aroueris",
"egyptianPractical": "Nuit",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"29": {
"type": "path",
"no": 29,
"hebrewLetter": "Qoph",
"hebrewChar": "ק",
"tarot": "The Moon",
"attribute": "Pisces",
"greek": "Poseidon, Hermes Psychopompus",
"roman": "Neptune",
"egyptian": "Khephra (as Scarab)",
"egyptianPractical": "Anubi",
"elohim": null,
"archangel": null,
"angelicOrder": null
},
"30": {
"type": "path",
"no": 30,
"hebrewLetter": "Resh",
"hebrewChar": "ר",
"tarot": "The Sun",
"attribute": "Sol",
"greek": "Helios, Apollo",
"roman": "Apollo, Ops",
"egyptian": "Ra",
"egyptianPractical": "Ra",
"elohim": { "hebrew": "אלה", "transliteration": "Elah", "meaning": "God" },
"archangel": null,
"angelicOrder": null
},
"31": {
"type": "path",
"no": 31,
"hebrewLetter": "Shin",
"hebrewChar": "ש",
"tarot": "The Aeon / Judgement",
"attribute": "Fire",
"greek": "Hades",
"roman": "Vulcan, Pluto",
"egyptian": "Thoum-Aesh-Neith, Mau, Kabeshunt, Horus, Tarpesheth",
"egyptianPractical": "Mau",
"elohim": { "hebrew": "אלהים", "transliteration": "Elohim", "meaning": "Gods (plural)" },
"archangel": null,
"angelicOrder": null
},
"32": {
"type": "path",
"no": 32,
"hebrewLetter": "Tav",
"hebrewChar": "ת",
"tarot": "The Universe",
"attribute": "Saturn",
"greek": "Athena",
"roman": "Saturn, Terminus, Astræa",
"egyptian": "Sebek, Mako",
"egyptianPractical": null,
"elohim": { "hebrew": "אב יה", "transliteration": "Ab Yah", "meaning": "Father, The Lord" },
"archangel": null,
"angelicOrder": null
}
},
"gods": [
{"id":"zeus","name":"Zeus","pantheon":"greek","epithet":"King of the Gods · Cloud-Gatherer · Father of Men","role":"King of the Olympian Gods; ruler of sky, thunder, and divine law","domains":["sky","thunder","lightning","law","justice","kingship","hospitality"],"parents":["Kronos (Titan)","Rhea (Titaness)"],"siblings":["Hestia","Demeter","Hera","Hades","Poseidon"],"consorts":["Hera","Metis","Themis","Mnemosyne","Demeter","Leto","many others"],"children":["Athena","Apollo","Artemis","Hermes","Ares","Hephaestus","Dionysus","Persephone","Perseus","Heracles","Minos"],"symbols":["thunderbolt","eagle","oak tree","scales","sceptre"],"sacredAnimals":["eagle","bull","swan","cuckoo"],"sacredPlaces":["Mount Olympus","Dodona","Olympia"],"equivalents":["Jupiter (Roman)"],"kabbalahPaths":[1,4,9,11,21],"description":"Zeus was the youngest son of Kronos and Rhea, hidden from his father's devouring hunger and raised in secret on Crete. After overthrowing the Titans he drew lots with his brothers: the sky fell to Zeus, the sea to Poseidon, and the underworld to Hades. His rule is based on cosmic law (themis) rather than brute force, though both are available to him.","myth":"","poem":""},
{"id":"hera","name":"Hera","pantheon":"greek","epithet":"Queen of the Gods · Queen of Heaven · Lady of Olympus","role":"Queen of the Olympians; goddess of marriage, women, childbirth, and the loyalty of oaths","domains":["marriage","women","childbirth","royalty","sky","oaths"],"parents":["Kronos","Rhea"],"siblings":["Zeus","Poseidon","Demeter","Hestia","Hades"],"consorts":["Zeus"],"children":["Ares","Hephaestus","Hebe","Eileithyia","Enyo"],"symbols":["peacock","lily","diadem","sceptre","pomegranate","cuckoo"],"sacredAnimals":["peacock","cow","cuckoo"],"equivalents":["Juno (Roman)"],"kabbalahPaths":[3,16],"description":"Hera was swallowed at birth by Kronos like her siblings, and liberated when Zeus forced him to disgorge them. She is the eternal principle of sacred marriage and the dignity of wifely commitment. Her jealous pursuit of Zeus's lovers and illegitimate children reflects the cosmic tension between order and creative excess.","myth":"","poem":""},
{"id":"poseidon","name":"Poseidon","pantheon":"greek","epithet":"Earth-Shaker · Lord of the Deep · Brother of Zeus","role":"God of the sea, earthquakes, storms, and horses","domains":["sea","earthquakes","storms","horses","fresh water"],"parents":["Kronos","Rhea"],"siblings":["Zeus","Hera","Demeter","Hestia","Hades"],"consorts":["Amphitrite","Demeter","Medusa","many others"],"children":["Triton","Theseus","Polyphemus","Pegasus","Chrysaor"],"symbols":["trident","horse","dolphin","bull","fish"],"sacredAnimals":["horse","dolphin","bull"],"sacredPlaces":["Corinth","Cape Sounion","Aegean Sea"],"equivalents":["Neptune (Roman)"],"kabbalahPaths":[4,23,29],"description":"Poseidon drew the sea when the universe was divided by lot. He is the great mover — earthquakes are his footsteps, storms his breath. He created the horse by striking the earth with his trident during the contest for Athens. Though he lost that contest to Athena, he remained a god respected and feared by all seafarers.","myth":"","poem":""},
{"id":"demeter","name":"Demeter","pantheon":"greek","epithet":"Great Mother · Goddess of the Grain · Giver of Laws","role":"Goddess of the harvest, agriculture, fertility of the earth, and the sacred mysteries","domains":["harvest","grain","agriculture","fertility","seasons","sacred law","the mysteries"],"parents":["Kronos","Rhea"],"siblings":["Zeus","Hera","Poseidon","Hestia","Hades"],"consorts":["Zeus","Poseidon","Iasion"],"children":["Persephone","Arion","Plutos","Despoina"],"symbols":["sheaf of wheat","torch","cornucopia","poppy","serpent"],"sacredAnimals":["snake","pig","gecko"],"sacredPlaces":["Eleusis"],"equivalents":["Ceres (Roman)"],"kabbalahPaths":[3,10,19],"description":"Demeter governed the cycle of life and death through her daughter Persephone's abduction. When Hades took Persephone, Demeter wandered the earth in grief and nothing grew. The Eleusinian Mysteries — the most sacred rites of the ancient world — reenacted her search and reunification with Persephone, promising initiates a blessed afterlife.","myth":"","poem":""},
{"id":"athena","name":"Athena","pantheon":"greek","epithet":"Grey-Eyed Goddess · Lady of Athens · Pallas Athena","role":"Goddess of wisdom, craft, and strategic warfare; patron of Athens and civilised life","domains":["wisdom","warfare (strategic)","crafts","weaving","justice","civilization","arts"],"parents":["Zeus","Metis (swallowed by Zeus before birth)"],"siblings":["Apollo","Artemis","Ares","Hermes","Hephaestus","Dionysus"],"consorts":[],"children":["Erichthonius (adoptive)"],"symbols":["owl","olive tree","aegis","spear","helmet","shield (Gorgoneion)"],"sacredAnimals":["owl","serpent","rooster"],"sacredPlaces":["Athens (Parthenon)","Troy","Pergamon"],"equivalents":["Minerva (Roman)"],"kabbalahPaths":[2,15,27,28,32],"description":"Born fully armoured from Zeus's forehead after he swallowed her pregnant mother Metis, Athena represents the intellect's victory over instinct. She guided heroes like Odysseus and Perseus with divine cunning rather than brute force. Her rival Poseidon struck the Acropolis to produce a salt spring; she struck it to grow an olive tree — and Athens chose her gift.","myth":"","poem":""},
{"id":"apollo","name":"Apollo","pantheon":"greek","epithet":"Phoebus · The Far-Shooter · God of Light","role":"God of the sun, music, poetry, prophecy, healing, archery, and truth","domains":["sun","light","music","poetry","prophecy","healing","archery","truth","plague"],"parents":["Zeus","Leto (Titaness)"],"siblings":["Artemis (twin)"],"consorts":["Coronis","Cassandra (unrequited)","Hyacinthus","many others"],"children":["Asclepius","Orpheus","Ion","Aristaeus"],"symbols":["lyre","silver bow and arrows","laurel wreath","raven","python","sun disk"],"sacredAnimals":["raven","swan","dolphin","mouse","wolf"],"sacredPlaces":["Delphi","Delos"],"equivalents":["Apollo (Roman, same name)","Helios (solar aspect)"],"kabbalahPaths":[6,18,24,25,30],"description":"Apollo is the ideal of the kouros — the perfect, radiant male youth. As god of Delphi he delivered the most famous oracle in the ancient world: 'Know thyself.' His twin Artemis governs the moon while Apollo governs the sun. He also brought plague — his arrows, like the rays of the sun, could kill at a distance.","myth":"","poem":""},
{"id":"artemis","name":"Artemis","pantheon":"greek","epithet":"Lady of the Hunt · Mistress of Animals · Phoebe","role":"Goddess of the hunt, wilderness, the moon, chastity, and the protection of young women","domains":["hunt","wilderness","moon","chastity","childbirth","protection of youth","wild nature"],"parents":["Zeus","Leto"],"siblings":["Apollo (twin)"],"consorts":[],"children":[],"symbols":["silver bow","quiver of arrows","crescent moon","torch","deer"],"sacredAnimals":["deer","bear","dogs","boar","guinea fowl"],"sacredPlaces":["Ephesus (great temple)","Brauron","Delos"],"equivalents":["Diana (Roman)"],"kabbalahPaths":[9,13,25],"description":"Artemis was the first-born twin, immediately helping her mother deliver Apollo. She demanded absolute chastity from herself and her nymphs, punishing any violation with fierce transformation — Actaeon was turned into a stag for seeing her bathing. Her great temple at Ephesus was one of the Seven Wonders of the ancient world.","myth":"","poem":""},
{"id":"ares","name":"Ares","pantheon":"greek","epithet":"The Bloodied · Bane of Mortals · Unsated in War","role":"God of war, violence, bloodshed, and the raw courage of battle","domains":["war","violence","bloodshed","courage","civil order (through fear)"],"parents":["Zeus","Hera"],"siblings":["Hephaestus","Hebe","Eileithyia"],"consorts":["Aphrodite"],"children":["Phobos (Fear)","Deimos (Terror)","Harmonia","Anteros","Eros (some traditions)"],"symbols":["spear","shield","helmet","sword","boar","vulture"],"sacredAnimals":["dog","vulture","boar","snake","woodpecker"],"sacredPlaces":["Thrace"],"equivalents":["Mars (Roman)"],"kabbalahPaths":[5,24,27],"description":"Unlike Athena who represents strategic wisdom in war, Ares is the raw, unthinking force of conflict — violent, passionate, and bloodthirsty. He was despised by both his father Zeus and nearly all the gods for cruelty. Yet the Romans, as a martial people, honoured his equivalent Mars as one of their greatest gods and as the divine father of Romulus.","myth":"","poem":""},
{"id":"aphrodite","name":"Aphrodite","pantheon":"greek","epithet":"Foam-Born · Golden Aphrodite · Lady of Cyprus","role":"Goddess of love, beauty, pleasure, desire, and procreation","domains":["love","beauty","desire","pleasure","fertility","procreation","the sea (born from it)"],"parents":["Born from sea-foam where Uranos's severed genitals fell, or Zeus and Dione"],"siblings":[],"consorts":["Hephaestus (husband)","Ares (lover)","Anchises","Adonis"],"children":["Eros","Anteros","Phobos","Deimos","Harmonia","Aeneas"],"symbols":["dove","sparrow","rose","myrtle","girdle","apple","mirror"],"sacredAnimals":["dove","sparrow","swan","goose","bee"],"sacredPlaces":["Cyprus (Paphos)","Cythera","Corinth"],"equivalents":["Venus (Roman)"],"kabbalahPaths":[7,14],"description":"Rising from the sea near Cyprus, Aphrodite embodies eros as a cosmic force older than the Olympians — desire that moves all creation. Her girdle could inspire desire in any being, mortal or immortal. The Trojan War began with her promise to Paris: in exchange for the golden apple of discord, she gave him the love of the most beautiful mortal woman, Helen.","myth":"","poem":""},
{"id":"hermes","name":"Hermes","pantheon":"greek","epithet":"Psychopomp · Divine Messenger · Master Thief · Trickster","role":"Messenger of the gods; guide of souls to Hades; god of commerce, language, and boundaries","domains":["communication","travel","trade","thieves","language","boundaries","sleep","guide of souls"],"parents":["Zeus","Maia (Pleiad nymph)"],"siblings":["Apollo","Artemis","Ares","Athena","Hephaestus","Dionysus"],"consorts":["Aphrodite","Dryope","many others"],"children":["Pan","Hermaphroditus","Autolycus"],"symbols":["caduceus","winged sandals","traveller's hat (petasos)","tortoise-shell lyre","purse"],"sacredAnimals":["tortoise","rooster","ram","hawk"],"sacredPlaces":["Mount Cyllene (birthplace)"],"equivalents":["Mercury (Roman)","Thoth (Egyptian)"],"kabbalahPaths":[8,12,29],"description":"The only Olympian who moves freely between the worlds of gods, mortals, and the dead. On his first day of life he invented the lyre, stole Apollo's cattle, and negotiated his way to a position of honour among the gods. As psychopomp he guides souls to Hades. He was the patron of Hermeticism, whose practice of inner alchemy traces back to his identification with the Egyptian Thoth.","myth":"","poem":""},
{"id":"dionysus","name":"Dionysus","pantheon":"greek","epithet":"Twice-Born · The Liberator · Bringer of Joy","role":"God of wine, ecstasy, ritual madness, theatre, and the mystery of rebirth","domains":["wine","ecstasy","theatre","ritual madness","fertility","rebirth","vegetation","mystery"],"parents":["Zeus","Semele (mortal princess of Thebes)"],"siblings":["Apollo","Hermes","Ares","Athena"],"consorts":["Ariadne"],"children":["Thoas","Staphylus","Oenopion","Phthonus"],"symbols":["thyrsos (fennel staff topped with pinecone)","grapevine","ivy","leopard skin","cup","mask"],"sacredAnimals":["bull","panther","leopard","goat","serpent","donkey"],"sacredPlaces":["Delphi (shared with Apollo)","Thebes","Naxos"],"equivalents":["Bacchus (Roman)","Osiris (Egyptian mystery parallel)"],"kabbalahPaths":[6],"description":"Born twice — first from Semele who was incinerated by Zeus's divine glory, then stitched into Zeus's thigh to gestate — Dionysus embodies the paradox of life through death and the dissolution of individual self in collective ecstasy. His journey to retrieve his mother from the underworld mirrors the initiatory death-and-rebirth pattern central to all mystery cults.","myth":"","poem":""},
{"id":"persephone","name":"Persephone","pantheon":"greek","epithet":"Queen of the Underworld · Kore (The Maiden) · The Dread Goddess","role":"Queen of the Underworld; goddess of spring growth and the mysteries of death and rebirth","domains":["underworld","spring","vegetation","grain","death","mysteries","pomegranates"],"parents":["Zeus","Demeter"],"siblings":[],"consorts":["Hades"],"children":["Zagreus (by Zeus, in Orphic tradition)","Melinoe","Plutus (some traditions)"],"symbols":["pomegranate","narcissus","wheat","torch","flowers","bat"],"sacredAnimals":["bat","ram","parrot"],"sacredPlaces":["Eleusis (mysteries)","The Underworld itself"],"equivalents":["Proserpina (Roman)"],"kabbalahPaths":[9,10],"description":"Abducted to the Underworld by Hades while picking flowers in the meadow, Persephone ate six pomegranate seeds, binding her to spend half the year below. Her annual descent brings winter; her return brings spring. The Eleusinian Mysteries dramatised her story as a metaphor for the soul's descent, death, and triumphant ascent.","myth":"","poem":""},
{"id":"hades","name":"Hades","pantheon":"greek","epithet":"The Unseen One · Lord of the Dead · Wealthy One","role":"God of the underworld and its mineral riches; impartial ruler of all the dead","domains":["underworld","death","wealth (metals in the earth)","the dead","invisibility"],"parents":["Kronos","Rhea"],"siblings":["Zeus","Poseidon","Hera","Demeter","Hestia"],"consorts":["Persephone"],"children":["Macaria","Melinoe","Zagreus (some traditions)"],"symbols":["Cerberus","key","bident","helmet of invisibility","narcissus","cypress","black poplar"],"sacredAnimals":["Cerberus (three-headed dog)","screech owl","serpent"],"sacredPlaces":["The Underworld","Alcyonian Lake","mouth of Avernus"],"equivalents":["Pluto (Roman)"],"kabbalahPaths":[5,31],"description":"Hades drew the underworld when he and his brothers divided creation by lot. Unlike Thanatos (death personified), Hades administers the realm of the dead — neutral and inevitable, rarely actively malevolent. The Greeks avoided speaking his name, preferring euphemisms like Plouton (Wealth-Giver) for the mineral riches that rise from the earth's depths.","myth":"","poem":""},
{"id":"hecate","name":"Hecate","pantheon":"greek","epithet":"Triple Goddess · Mistress of Witchcraft · Queen of the Night","role":"Goddess of magic, witchcraft, crossroads, necromancy, and the liminal spaces between worlds","domains":["magic","witchcraft","crossroads","necromancy","ghosts","moon","herbs","night","liminal spaces"],"parents":["Perses (Titan)","Asteria (Titaness of Falling Stars)"],"siblings":[],"consorts":[],"children":["Scylla (some traditions)"],"symbols":["twin torches","key","dagger","rope","serpents","polecat","dogs"],"sacredAnimals":["dog","polecat","red mullet","serpent","owl"],"sacredPlaces":["crossroads (trivia)","Samothrace","Eleusis"],"equivalents":["Diana Trivia (Roman)","partial: Isis (Egyptian)"],"kabbalahPaths":[9,13],"description":"A triple goddess spanning heaven (moon), earth (nature magic), and the underworld (necromancy). She stands at crossroads — liminal spaces where worlds meet — and was propitiated at midnight with offerings left at three-way intersections. She alone heard Persephone's cries as Hades took her, and carried torches to light Demeter's search.","myth":"","poem":""},
{"id":"pan","name":"Pan","pantheon":"greek","epithet":"All · Lord of the Wild · Panic-Bringer","role":"God of the wild, shepherds, flocks, rustic music, and natural fertility","domains":["wilderness","shepherds","flocks","nature","rustic music","fertility","hunting"],"parents":["Hermes (most common tradition)","Zeus","Kronos (various traditions)"],"siblings":[],"consorts":["many nymphs (Syrinx, Echo, Luna, Pitys)"],"children":["Silenus (some traditions)"],"symbols":["pan pipes (syrinx)","goat legs and horns","pine wreath","shepherd's staff"],"sacredAnimals":["goat","tortoise"],"sacredPlaces":["Arcadia","cave of Mount Parthenion"],"equivalents":["Faunus (Roman)"],"kabbalahPaths":[0,9,26],"description":"Pan's name means 'All' — he represents the totality of wild nature, simultaneously animalistic and divine. His sudden appearance causes 'panic' (from his name). In Liber 777 he corresponds to Ain Soph Aur — the Limitless All beyond the Tree — because he encompasses everything. In later tradition he became the horned archetype of the Devil.","myth":"","poem":""},
{"id":"eros","name":"Eros","pantheon":"greek","epithet":"Primordial Love · The Wing'd One · Desire Before Form","role":"God of love, attraction, desire, and the generative force binding all creation","domains":["love","desire","attraction","procreation","beauty","the bonds between things"],"parents":["Chaos (primordial), or Aphrodite and Ares, or Nyx and Erebus (various traditions)"],"siblings":["Anteros","Phobos","Deimos","Harmonia"],"consorts":["Psyche"],"children":["Hedone (Pleasure)"],"symbols":["bow and golden/leaden arrows","wings","torch","lyre","roses"],"sacredAnimals":["hare","rooster"],"equivalents":["Cupid / Amor (Roman)"],"kabbalahPaths":[7,17],"description":"In the oldest cosmogonies, Eros is primordial — one of the first forces to emerge from Chaos, the attractive power that draws matter together into form. In later mythology he became the son of Aphrodite and Ares, the mischievous archer who ignites love without regard for consequence. His marriage to Psyche is one of the greatest love stories of antiquity.","myth":"","poem":""},
{"id":"helios","name":"Helios","pantheon":"greek","epithet":"The Sun · Lord of the Light · The Seeing God","role":"Titan god of the sun; personification of the solar orb; all-seeing witness of oaths","domains":["sun","sight","light","oaths","time (as measured by solar movement)","cattle"],"parents":["Hyperion (Titan of Light)","Theia (Titaness of Sight)"],"siblings":["Selene (Moon)","Eos (Dawn)"],"consorts":["Rhode","Perse","Clymene"],"children":["Aeetes","Circe","Phaethon","Pasiphae","the Heliades (transformed into amber-weeping poplars)"],"symbols":["golden chariot of four fire-breathing horses","crown of solar rays","globe of light"],"equivalents":["Apollo (later absorbed solar functions)","Ra (Egyptian)","Sol (Roman)"],"kabbalahPaths":[30],"description":"Helios drives his golden chariot of four fire-breathing horses across the sky each day from east to west, descending into the Ocean at night and sailing beneath the earth to rise again in the east. As the all-seeing eye of heaven, he witnessed Hades' abduction of Persephone and told Demeter. His son Phaethon's disastrous attempt to drive the solar chariot scorched the earth and was struck down by Zeus.","myth":"","poem":""},
{"id":"ikarus","name":"Ikarus","pantheon":"greek","epithet":"Winged Youth · The Overreacher · Son of Daidalos","role":"Mythic youth whose flight toward the sun became the archetype of ambition, ecstasy, and tragic excess","domains":["flight","ambition","initiation through risk","hubris","ecstatic ascent","tragic fall"],"parents":["Daidalos (Daedalus)","Naukrate (in some traditions)"],"siblings":[],"consorts":[],"children":[],"symbols":["wax wings","feathers","sun","sea"],"sacredAnimals":["gull"],"sacredPlaces":["Crete","Ikarian Sea","Sicily"],"equivalents":["Phaethon (mythic parallel of overreaching ascent)"],"kabbalahPaths":[1,6],"description":"Ikarus escaped imprisonment with his father Daidalos by means of crafted wings of feathers and wax. Ignoring the middle path between sea-damp and sun-heat, he flew too high; the wax melted and he fell into the sea that now bears his name. In esoteric interpretation he signifies the danger and necessity of aspiration: ascent is required, but unbalanced ecstasy without measure becomes ruin.","myth":"","poem":""},
{"id":"kronos","name":"Kronos","pantheon":"greek","epithet":"Lord of Time · Harvest Titan · The Reaper","role":"Titan king; god of time, the harvest, and agricultural abundance; ruler of the Golden Age","domains":["time","harvest","agriculture","fate","the Golden Age","history"],"parents":["Uranus (Sky)","Gaia (Earth)"],"siblings":["Rhea (wife)","Oceanus","Tethys","Hyperion","Theia","Mnemosyne","Themis","others"],"consorts":["Rhea"],"children":["Zeus","Hera","Poseidon","Demeter","Hestia","Hades"],"symbols":["scythe / sickle / harpe","grain","serpent eating its tail (ouroboros)"],"equivalents":["Saturn (Roman)"],"kabbalahPaths":[3,32],"description":"Kronos castrated his father Uranus with an adamantine sickle to free his siblings from Uranus's oppression, then ruled the Golden Age of ease and plenty. But fearing a prophecy that his own children would overthrow him, he swallowed each at birth. Overthrown by Zeus after Rhea tricked him with a stone bundled as a baby, he was imprisoned in Tartarus — or in other traditions, exiled to the Isles of the Blessed to rule a realm of the heroic dead.","myth":"","poem":""},
{"id":"uranus","name":"Uranus","pantheon":"greek","epithet":"Father Sky · The Heavens · First King","role":"Primordial god of the sky; first ruler of the cosmos; father of the Titans","domains":["sky","heaven","stars","cosmos","fate (through stars)"],"parents":["Gaia (self-born, or emerged from Chaos)"],"siblings":[],"consorts":["Gaia"],"children":["Titans (12)","Cyclopes (3: Brontes, Steropes, Arges)","Hecatoncheires (3: hundred-handed giants)","Aphrodite (born from his severed genitals)"],"symbols":["vault of the sky","stars","night sky"],"equivalents":["Caelus (Roman)"],"kabbalahPaths":[2],"description":"Uranus covered Gaia (Earth) as a lid covers a pot, and their union produced the Titans. He was so horrified by the monstrous Cyclopes and Hecatoncheires that he thrust them back into Gaia's womb, causing her tremendous suffering. Gaia persuaded her son Kronos to castrate Uranus with an adamantine sickle — from his blood the Erinyes and Giants were born, from his severed genitals thrown into the sea, Aphrodite arose.","myth":"","poem":""},
{"id":"rhea","name":"Rhea","pantheon":"greek","epithet":"Mother of the Gods · Lady of the Wild Beasts · Great Mother","role":"Titaness of motherhood, fertility, the passage of generations, and mountain wilds","domains":["motherhood","fertility","generations","mountains","wild animals","protection of children"],"parents":["Uranus","Gaia"],"siblings":["Kronos (husband)","Oceanus","Themis","Mnemosyne","other Titans"],"consorts":["Kronos"],"children":["Zeus","Hera","Poseidon","Demeter","Hestia","Hades"],"symbols":["lions","turreted crown","drum (tympanum)","key"],"sacredAnimals":["lion","eagle"],"equivalents":["Cybele (Phrygian Great Mother)","Ops (Roman)"],"kabbalahPaths":[3,10,23],"description":"When Kronos swallowed her children one by one, Rhea hid the infant Zeus in a cave on Crete, guarded by the Curetes whose loud bronze clashing masked the child's cries. She gave Kronos a stone wrapped in swaddling cloths, which he swallowed. She represents the eternal mother who preserves life through cunning when brute power fails.","myth":"","poem":""},
{"id":"themis","name":"Themis","pantheon":"greek","epithet":"Lady of Good Counsel · Divine Law · She Who Brought the Gods Together","role":"Titaness of divine law, order, natural law, and the oracular voice","domains":["divine law","order","custom","the oracle","justice","seasons (via her daughters)","fate (via Moirai)"],"parents":["Uranus","Gaia"],"siblings":["Kronos","Rhea","other Titans"],"consorts":["Zeus (second wife, before Hera)"],"children":["The Horae (Seasons: Eunomia, Dike, Eirene)","The Moirai (Fates: Clotho, Lachesis, Atropos)","Nemesis (some traditions)"],"symbols":["scales of justice","sword","blindfold (later addition)","cornucopia"],"equivalents":["Iustitia (Roman)"],"kabbalahPaths":[22],"description":"Themis was the second consort of Zeus after Metis. She convened the gods to assembly and maintained the cosmic order through law rather than through force. Her daughters the Moirai spun the thread of fate for every mortal, measuring and cutting it — even Zeus could not override their decree.","myth":"","poem":""},
{"id":"nike","name":"Nike","pantheon":"greek","epithet":"Winged Victory · Daughter of the River Styx","role":"Goddess of victory, speed, and the glory that comes from achievement","domains":["victory","speed","strength","fame","success"],"parents":["Pallas (Titan)","Styx (river of the underworld)"],"siblings":["Kratos (Strength)","Bia (Force)","Zelus (Rivalry)"],"consorts":[],"children":[],"symbols":["wings","laurel wreath","palm branch","victory trophy"],"equivalents":["Victoria (Roman)"],"kabbalahPaths":[7],"description":"Nike sided with Zeus in the Titan War as her family all did, because Styx (their mother) swore her children's loyalty. Nike became the constant companion of Zeus and Athena, and was often depicted hovering over victorious athletes and armies. The winged logo of the athletic brand bears her name.","myth":"","poem":""},
{"id":"jupiter","name":"Jupiter","pantheon":"roman","epithet":"Optimus Maximus · Best and Greatest · Father of the State","role":"King of the Roman gods; god of sky, thunder, lightning, law, and the Roman state itself","domains":["sky","thunder","lightning","justice","law","the Roman state","oaths"],"parents":["Saturn","Ops"],"siblings":["Juno","Neptune","Ceres","Pluto","Vesta"],"consorts":["Juno"],"children":["Minerva","Mars","Vulcan","Mercury","Bacchus","Diana"],"symbols":["eagle","thunderbolt","oak tree","sceptre","white bulls (his sacrifices)"],"sacredAnimals":["eagle","bull"],"sacredPlaces":["Capitoline Hill (Rome)","Mons Albanus"],"equivalents":["Zeus (Greek)"],"kabbalahPaths":[1,4,11,21],"description":"Jupiter was the supreme deity of Rome, his great temple on the Capitoline Hill the centre of Roman religion and statecraft. Generals who celebrated a triumph wore his purple robes and rode in his chariot. He protected the state through his thunderbolts and preserved the sanctity of oaths — perjury was punished directly by him.","myth":"","poem":""},
{"id":"juno","name":"Juno","pantheon":"roman","epithet":"Regina · Queen of the Gods · Protectress of Rome","role":"Queen of the gods; goddess of marriage, women, childbirth, and the genius of the Roman state","domains":["marriage","women","the Roman state","childbirth","sky","the civic community"],"parents":["Saturn","Ops"],"siblings":["Jupiter","Neptune","Ceres","Pluto","Vesta"],"consorts":["Jupiter"],"children":["Mars","Vulcan","Juventas"],"symbols":["peacock","diadem","sceptre","pomegranate"],"sacredAnimals":["peacock","cow","cuckoo"],"equivalents":["Hera (Greek)"],"kabbalahPaths":[3,11,28],"description":"Juno Regina (Queen Juno) was the special protectress of Rome. The month of June is named for her. The sacred geese in her temple on the Capitoline Hill warned Rome of the Gallic attack in 390 BCE, saving the city. She represented the foundational importance of the institution of marriage and civic community in Roman life.","myth":"","poem":""},
{"id":"mars","name":"Mars","pantheon":"roman","epithet":"Gradivus · Pater Martius · Divine Father of Rome","role":"God of war and agriculture; divine father of Romulus, legendary founder of Rome","domains":["war","military power","agriculture (original domain)","spring","youth","the Roman legion"],"parents":["Jupiter","Juno"],"siblings":["Vulcan","Juventas"],"consorts":["Rhea Silvia (Vestal Virgin he visited in the sacred grove)"],"children":["Romulus","Remus"],"symbols":["spear","shield (Ancile)","wolf","woodpecker","armor","oak"],"sacredAnimals":["wolf","woodpecker","horse"],"equivalents":["Ares (Greek)"],"kabbalahPaths":[5,24,27],"description":"Unlike the despised Ares, Mars was Rome's second-most-important god. As father of Romulus, he was the divine ancestor of the Roman people. The month of March (Martius) is named for him, as is Tuesday (from the Germanic Tiw, identified with Mars: Old French Mardi). Originally an agricultural deity who protected crops and cattle from blight, he became primarily martial as Rome expanded.","myth":"","poem":""},
{"id":"venus","name":"Venus","pantheon":"roman","epithet":"Genetrix · Mother of the Roman People · Golden One","role":"Goddess of love, beauty, sex, fertility, prosperity, and the divine ancestor of Rome","domains":["love","beauty","fertility","prosperity","desire","victory","grace","+the sea (born from it)"],"parents":["born from sea-foam (as Aphrodite)"],"siblings":[],"consorts":["Vulcan (husband)","Mars (lover)","Anchises"],"children":["Cupid","Aeneas (by Anchises, Trojan hero and ancestor of Romans)"],"symbols":["dove","rose","myrtle","mirror","apple","shell"],"sacredAnimals":["dove","sparrow","swan","goose"],"sacredPlaces":["Cyprus","Eryx (Sicily)","Forum of Caesar (Rome)"],"equivalents":["Aphrodite (Greek)"],"kabbalahPaths":[7,14,16,22],"description":"Through Aeneas (son of Venus and the Trojan prince Anchises) the Romans traced their divine lineage to the gods. Julius Caesar and Augustus claimed descent from Venus. The planet Venus bears her name; the day Vendredi/Friday honours her. She was at once the universal generative force and the ancestor of the Roman imperial family.","myth":"","poem":""},
{"id":"mercury","name":"Mercury","pantheon":"roman","epithet":"Messenger of the Gods · Lord of Commerce · Guide of Souls","role":"God of commerce, communication, thieves, travellers, eloquence, and the guide of souls to the underworld","domains":["commerce","communication","travel","thieves","messages","eloquence","psychopomp (guide of souls)"],"parents":["Jupiter","Maia"],"siblings":["Minerva","Mars","Vulcan"],"consorts":[],"children":["Cupid (some traditions)"],"symbols":["caduceus (two serpents on a staff)","winged hat (petasus)","winged sandals (talaria)","purse"],"equivalents":["Hermes (Greek)","Thoth (Egyptian parallel)"],"kabbalahPaths":[8,12],"description":"The fleet-footed messenger of the gods who escorted souls to the underworld. The Romans particularly stressed his role as god of merchants and commercial success. The planet Mercury, the metal mercury (quicksilver), and Wednesday (Mercredi in French, Mercury's day) bear his name. The caduceus — his staff of intertwined serpents — became the symbol of medicine (through confusion with Asclepius's rod).","myth":"","poem":""},
{"id":"saturn","name":"Saturn","pantheon":"roman","epithet":"Lord of Time · God of the Golden Age · Father of Jupiter","role":"God of time, generation, wealth, dissolution, agriculture, and the memory of the Golden Age","domains":["time","generation","dissolution","wealth","agriculture","the Golden Age","the depths of earth"],"parents":["Caelus (Uranus/Sky)","Terra (Gaia/Earth)"],"siblings":["Ops (wife)","Titan equivalents"],"consorts":["Ops"],"children":["Jupiter","Juno","Neptune","Ceres","Pluto","Vesta"],"symbols":["scythe","sickle","harpe","grain","serpent eating its tail","hourglass"],"equivalents":["Kronos (Greek)"],"kabbalahPaths":[3,32],"description":"Saturn ruled the Golden Age of abundance and equality before Jupiter overthrew him. The Saturnalia festivals (December 1723) — Rome's greatest holiday — honoured this primordial age by temporarily reversing social hierarchies: masters served slaves, gambling was legal, and gifts were exchanged. The planet Saturn, Saturday, and the metal lead bear his name.","myth":"","poem":""},
{"id":"neptune","name":"Neptune","pantheon":"roman","epithet":"Earth-Shaker · Lord of the Seas · God of Freshwater","role":"God of the sea, storms, earthquakes, horses, and all waters","domains":["sea","freshwater","storms","earthquakes","horses"],"parents":["Saturn","Ops"],"siblings":["Jupiter","Juno","Ceres","Pluto","Vesta"],"consorts":["Amphitrite","Salacia"],"children":["Triton","Polyphemus","Proteus"],"symbols":["trident","dolphin","horse","bull","sea-green robes"],"equivalents":["Poseidon (Greek)"],"kabbalahPaths":[23,29],"description":"Neptune was originally a god of freshwater before absorbing Poseidon's marine domain. His Neptunalia festival was held in late July, when water was scarce — water was drunk from springs and arbors were built in the open air. The planet Neptune bears his name.","myth":"","poem":""},
{"id":"diana","name":"Diana","pantheon":"roman","epithet":"Lady of Three Forms · Diana Trivia · Goddess of the Hunt","role":"Goddess of the hunt, the moon, childbirth, wilderness, and the crossroads","domains":["hunt","moon","childbirth","wilderness","chastity","crossroads","the night"],"parents":["Jupiter","Latona (Leto)"],"siblings":["Apollo (twin)"],"consorts":[],"children":[],"symbols":["crescent moon","quiver and bow","hunting dogs","torch","deer"],"equivalents":["Artemis (Greek)","triple goddess fusion with Luna and Hecate"],"kabbalahPaths":[9,13,25],"description":"Diana was a triple goddess: Diana (huntress on earth), Luna (moon in heaven), and Hecate/Trivia (crossroads/underworld). Her most ancient sanctuary was the grove at Aricia in the Alban Hills, where her priest-king won his position by killing his predecessor in single combat — a rite that fascinated the anthropologist Frazer in The Golden Bough and shaped modern comparative mythology.","myth":"","poem":""},
{"id":"vulcan","name":"Vulcan","pantheon":"roman","epithet":"Lord of Fire · Divine Smith · God Below","role":"God of fire, metalworking, volcanoes, craft, and the power of transformation through heat","domains":["fire","forge","metalworking","volcanoes","destruction (purifying)","craft"],"parents":["Jupiter","Juno"],"siblings":["Mars","Juventas"],"consorts":["Venus"],"children":["Caeculus (some traditions)","the Cyclopes (his workers)"],"symbols":["hammer","anvil","tongs","forge","pileus (felt workman's cap)"],"equivalents":["Hephaestus (Greek)"],"kabbalahPaths":[22,31],"description":"Vulcan's forge is located beneath Mount Etna (or on the Aeolian Islands). He crafted Jupiter's thunderbolts, Achilles's divine armour, the unbreakable chains that held Prometheus, and the net in which he entrapped his adulterous wife Venus with Mars. Volcanoes bear his name. His Vulcanalia festival was held in August when fires most threatened granaries.","myth":"","poem":""},
{"id":"janus","name":"Janus","pantheon":"roman","epithet":"God of Beginnings · Doorkeeper of Heaven · Two-Faced One","role":"God of beginnings, passages, doorways, time, duality, and all transitions","domains":["beginnings","endings","doorways","passages","time","duality","transitions","gates","bridges"],"parents":["uniquely Roman: often listed as son of Caelus or self-born from Chaos"],"siblings":[],"consorts":["Juturna (water nymph)"],"children":["Tiberinus (river god of the Tiber)","Canens","Fontus"],"symbols":["two faces (one looking forward, one back)","key","sceptre","door","staff"],"equivalents":["No Greek equivalent — uniquely Roman"],"kabbalahPaths":[2],"description":"Janus has no Greek equivalent, making him one of the most distinctively Roman gods. He looks to past and future simultaneously because he stands at every threshold. The month of January (Ianuarius) bears his name as the gateway of the year. His temple in the Roman Forum had two gates: both gates open signified Rome was at war; both closed (a rare occurrence) that peace reigned throughout the empire.","myth":"","poem":""},
{"id":"pluto","name":"Pluto","pantheon":"roman","epithet":"The Wealthy · Rich One · God Below","role":"God of the underworld, wealth from the earth, and the dead; ruler of the realm below","domains":["underworld","wealth (minerals from earth)","the dead","dark places","seeds buried in earth"],"parents":["Saturn","Ops"],"siblings":["Jupiter","Juno","Neptune","Ceres","Vesta"],"consorts":["Proserpina"],"children":[],"symbols":["bident","helmet of darkness","Cerberus","cornucopia (from below)","keys"],"equivalents":["Hades (Greek)"],"kabbalahPaths":[21,31],"description":"Pluto (Plouton, 'the Wealthy') is the Latin name for the underworld god, emphasising the riches that come from below — metals, gems, and the fertility that seeds develop when buried. Unlike the feared Hades of the Greeks, Pluto was seen in a slightly more benign light, associated with the abundant treasure hidden underground.","myth":"","poem":""},
{"id":"ceres","name":"Ceres","pantheon":"roman","epithet":"Mother of Crops · The Nourisher · Grain Mother","role":"Goddess of grain, agriculture, fertility, and the laws governing human civilization","domains":["grain","agriculture","fertility","the harvest","civilization","laws","motherhood"],"parents":["Saturn","Ops"],"siblings":["Jupiter","Juno","Neptune","Pluto","Vesta"],"consorts":["Jupiter"],"children":["Proserpina"],"symbols":["sheaf of grain","torch","poppy","sow (pig)","serpent","cornucopia"],"sacredAnimals":["pig","snake"],"equivalents":["Demeter (Greek)"],"kabbalahPaths":[10,20],"description":"Ceres was worshipped on the Aventine Hill in Rome alongside Liber (Dionysus) and Libera (Persephone). The Latin word 'cereal' derives from her name. The Cerealia festival each April celebrated the return of grain. Her daughter Proserpina's abduction by Pluto mirrored Demeter's search for Persephone in the Eleusinian mysteries.","myth":"","poem":""},
{"id":"ra","name":"Ra","pantheon":"egyptian","epithet":"Lord of All · He Who Made Himself · The Great Cat · Lord of Maat","role":"Solar god and creator deity; king of the gods; the power of the sun that sustains all life","domains":["sun","creation","kingship","light","warmth","growth","the solar barque","ordering chaos"],"parents":["self-created (in most traditions)","or born from the primordial Nun (waters of chaos)"],"siblings":[],"consorts":["Hathor","Mut (in some forms)"],"children":["Shu (air) and Tefnut (moisture) in some traditions","Thoth","Hathor","Maat"],"symbols":["solar disk","sun barque","falcon head","uraeus serpent","ankh","was sceptre"],"sacredAnimals":["scarab (as Khepri at dawn)","falcon (as Ra-Horakhty at noon)","cat (battles Apophis)","Bennu bird (phoenix)"],"sacredPlaces":["Heliopolis (On)","Karnak (merged with Amun)"],"equivalents":["Apollo/Helios (Greek-Roman)"],"kabbalahPaths":[6,30],"description":"Ra traverses the sky in his solar barque by day — accompanied by his divine crew including Thoth, Maat, and Horus — and through the Duat (underworld) by night, battling the chaos-serpent Apophis to rise again each dawn. His union with Osiris in the Underworld (Ra-Osiris) represents the joining of the living sun with the regenerating power of death.","myth":"","poem":""},
{"id":"osiris","name":"Osiris","pantheon":"egyptian","epithet":"Foremost of the Westerners · Lord of the Afterlife · The Green God","role":"God of the afterlife, resurrection, judgment, agriculture, and the cyclical renewal of life","domains":["afterlife","resurrection","judgment of souls","agriculture","fertility","vegetation","the Nile inundation"],"parents":["Geb (earth god)","Nut (sky goddess)"],"siblings":["Isis (wife)","Set (brother who killed him)","Nephthys","Horus the Elder"],"consorts":["Isis"],"children":["Horus the Younger"],"symbols":["crook and flail","white Atef crown","djed pillar","green or black skin","mummy wrappings","red throne"],"sacredAnimals":["bull (Apis)","ram","Bennu bird","Djed fish"],"sacredPlaces":["Abydos","Busiris","Philae"],"equivalents":["Dionysus (Greek mystery parallel)","Christ (resurrection parallel noted by Church Fathers)"],"kabbalahPaths":[6,10,16,23],"description":"Osiris was the first king of Egypt, the giver of agriculture and civilisation. His brother Set murdered and dismembered him out of jealousy, scattering the pieces across Egypt. Isis reassembled his body and Thoth restored it; Anubis performed the first embalming rites. Osiris was resurrected to become ruler of the dead, while his posthumously conceived son Horus inherited the throne. Every pharaoh was Horus in life and Osiris in death.","myth":"","poem":""},
{"id":"isis","name":"Isis","pantheon":"egyptian","epithet":"Great of Magic · Lady of Ten Thousand Names · Seat of the Pharaoh","role":"Goddess of magic, healing, motherhood, fertility, the throne, and the binding force of all life","domains":["magic","healing","motherhood","fertility","the throne","wind","resurrection","nature","knowledge"],"parents":["Geb","Nut"],"siblings":["Osiris (husband)","Set","Nephthys","Horus the Elder"],"consorts":["Osiris"],"children":["Horus the Younger"],"symbols":["throne headdress","wings","ankh","sistrum","knot of Isis (tyet)","star Sirius (heralds Nile flood)"],"sacredAnimals":["cow","swallow","scorpion","kite","cobra"],"sacredPlaces":["Philae","Dendera","Behbeit el-Hagar"],"equivalents":["Demeter (maternal grief myth)","Aphrodite (love and beauty)","Athena (wisdom and magic)","later Virgin Mary (mother/son imagery)"],"kabbalahPaths":[2,3,10,15,20,23],"description":"Isis is the greatest magician in the Egyptian pantheon. She collected the scattered pieces of Osiris's body, restored him with her magic, and conceived Horus posthumously. Her cult spread throughout the Roman Empire and profoundly influenced early Christianity — the madonna-and-child iconography of Isis nursing the infant Horus shaped Christian depictions of Mary and Jesus. She was worshipped in Rome, Greece, and as far north as Britain.","myth":"","poem":""},
{"id":"horus","name":"Horus","pantheon":"egyptian","epithet":"He Who Is Above · Falcon Lord of the Sky · Eye of Light","role":"Sky god; god of kingship and the living pharaoh; avenger of his father Osiris","domains":["sky","kingship","the pharaoh","war","protection","sun (right eye) and moon (left eye)","the horizon"],"parents":["Osiris","Isis"],"siblings":[],"consorts":["Hathor"],"children":["The Four Sons of Horus (Imsety, Hapy, Duamutef, Qebehsenuef)"],"symbols":["falcon","Eye of Horus (Wedjat/Udjat)","double crown (Pschent)","ankh","solar disk on falcon head"],"sacredAnimals":["falcon"],"sacredPlaces":["Edfu","Kom Ombo","Behdet","Hierakonpolis"],"equivalents":["Apollo (solar youth aspect)","the Christ (the son who conquers death)"],"kabbalahPaths":[5,19,27,31],"description":"Horus fought the chaos-god Set for 80 years in a series of contests to avenge his father Osiris and reclaim the throne of Egypt. In some battles his eye was torn out by Set and ground into pieces; Thoth (or Hathor) restored it — making the Eye of Horus the most potent protective symbol in all Egyptian magic. The living pharaoh was Horus incarnate; at death he became Osiris.","myth":"","poem":""},
{"id":"set","name":"Set","pantheon":"egyptian","epithet":"Lord of Chaos · Red One · Great of Strength · The Outcast","role":"God of chaos, storms, war, deserts, foreigners, and the creative/destructive force; guardian of Ra's solar barque","domains":["chaos","storms","deserts","war","foreigners","strength","darkness","creative destruction"],"parents":["Geb","Nut"],"siblings":["Osiris (who he killed)","Isis","Nephthys (wife)","Horus the Elder"],"consorts":["Nephthys","Anat","Astarte"],"children":["Anubis (by Nephthys, in some traditions)","Upuaut (some traditions)"],"symbols":["Set-animal (a fictional creature — pointed snout, square-tipped tail, ears like a donkey)","was sceptre","red crown","red animals"],"sacredAnimals":["Set animal","ass/donkey","hippopotamus","crocodile","red animals generally","pigs","scorpions"],"sacredPlaces":["Ombos","Sepermeru","Avaris (capital of Hyksos who honored him)","the Red Land (desert)"],"equivalents":["Ares (Greek, in violence aspect)","Typhon (Greek chaos-monster)"],"kabbalahPaths":[26],"description":"Set murdered and dismembered Osiris out of jealousy for his brother's popularity and kingship. Yet Set also stood at the prow of Ra's solar barque each night, using his great strength to hold off the chaos-serpent Apophis and ensure the sun could rise. He embodies necessary creative/destructive chaos — without the desert, the fertile Nile valley could not be defined.","myth":"","poem":""},
{"id":"nephthys","name":"Nephthys","pantheon":"egyptian","epithet":"Mistress of the House · Lady of Death · Friend of the Dead","role":"Goddess of death, mourning, night, transitions, and the service of the dead","domains":["death","mourning","night","service of the dead","protection of the dead","transitions","the horizon"],"parents":["Geb","Nut"],"siblings":["Osiris","Isis","Set","Horus the Elder"],"consorts":["Set"],"children":["Anubis (by Osiris, in some traditions)"],"symbols":["house + basket glyph on head","wings","kite (funeral bird)"],"sacredAnimals":["kite","crow","phoenix (in her mourning role)"],"equivalents":["Hecate (Greek liminal aspect)"],"kabbalahPaths":[3,5,10,25],"description":"Though married to Set, Nephthys mourned Osiris and helped Isis collect and reassemble his body. She and Isis were depicted as paired mourning birds (kites) on coffins, their outstretched wings protecting the dead. She guards the Abydos mystery plays that reenacted Osiris's death and resurrection. Her name means 'Lady of the House' — the House being the metaphorical temple-mansion of the gods.","myth":"","poem":""},
{"id":"thoth","name":"Thoth","pantheon":"egyptian","epithet":"Ibis-Headed · Lord of Moon, Magic, and Writing · Thrice-Great","role":"God of the moon, wisdom, writing, magic, judgment, mediation, and the measurement of time","domains":["moon","wisdom","writing","magic","science","judgment of souls","mediation","time measurement","language"],"parents":["Ra (in most traditions)","self-created (in Hermopolitan tradition)"],"siblings":[],"consorts":["Ma'at","Seshat (scribal goddess)"],"children":["Seshat"],"symbols":["ibis head","crescent moon","papyrus scroll and writing palette","ankh","caduceus (as Hermes)"],"sacredAnimals":["ibis","baboon"],"sacredPlaces":["Hermopolis (Khemenu)","Tell el-Amarna"],"equivalents":["Hermes (Greek)","Mercury (Roman)","the synthesis creating Hermes Trismegistus, 'Thrice-Great', patron of Hermeticism and Western alchemy"],"kabbalahPaths":[2,8,12],"description":"Thoth invented writing, language, mathematics, astronomy, and magic. He recorded the weighing of the heart against Ma'at's feather in the Hall of Two Truths. Greek philosophy identified him with Hermes, producing Hermes Trismegistus — the legendary author of the Hermetic texts, the Corpus Hermeticum, which shaped Neoplatonism, alchemy, Kabbalah, and the Western magical tradition.","myth":"","poem":""},
{"id":"hathor","name":"Hathor","pantheon":"egyptian","epithet":"House of Horus · Golden One · Mistress of Love · Eye of Ra","role":"Goddess of love, beauty, music, dance, fertility, the sky, and the joyful aspect of feminine divinity","domains":["love","beauty","music","dance","fertility","sky","women","the dead","drunkenness","foreign lands","gold","turquoise"],"parents":["Ra"],"siblings":[],"consorts":["Horus"],"children":["Ihy (god of music and sistrum)"],"symbols":["cow horns encircling solar disk","sistrum (rattle)","mirror","menat necklace","turquoise"],"sacredAnimals":["cow","falcon","lioness (when she becomes the Eye of Ra in her wrathful aspect, Sekhmet)"],"sacredPlaces":["Dendera","Deir el-Bahari","Serabit el-Khadim (Sinai)"],"equivalents":["Aphrodite/Venus","Isis (overlapping functions)"],"kabbalahPaths":[7,14],"description":"Hathor embodies the feminine principle in its most joyous aspect — music, dance, love, fragrance, and beauty. She also received the dead in the west and offered them bread and beer. At Dendera her cult provided medical therapies alongside ritual. When Ra sent her as Sekhmet to destroy humanity, she was stopped by being given red-dyed beer to drink, which she mistook for blood.","myth":"","poem":""},
{"id":"anubis","name":"Anubis","pantheon":"egyptian","epithet":"Lord of the Sacred Land · He Upon His Mountain · Guardian of the Scales","role":"God of embalming, mummification, cemeteries, and the weighing of souls at judgment","domains":["embalming","mummification","the dead","cemeteries","judgment of souls","protection of graves","the Western horizon"],"parents":["Nephthys and Osiris (most common)","Set and Nephthys","Ra and Nephthys"],"siblings":["Wepwawet (Wolf-path opener)"],"consorts":["Anput"],"children":["Kebechet (purification)"],"symbols":["jackal or dog head","flail","scales (for weighing hearts)","mummy wrappings","embalming tools"],"sacredAnimals":["jackal","dog"],"sacredPlaces":["Cynopolis","the embalming tents of all Egypt"],"equivalents":["Hermes Psychopomp (Greek — the later Greeks called him Hermanubis, fusing both guides of souls)"],"kabbalahPaths":[8,29],"description":"Anubis guided souls through the Duat (underworld) and oversaw the most critical rite of Egyptian religion: the weighing of the heart against the feather of Ma'at. If the heart was heavier than the feather, the demon Ammit devoured it; if balanced, the soul entered paradise. He invented embalming when he cared for Osiris's murdered body. His sharp jackal senses could detect spiritual impurity.","myth":"","poem":""},
{"id":"maat","name":"Ma'at","pantheon":"egyptian","epithet":"Lady of Truth · The Feather · Daughter of Ra","role":"Goddess and personification of cosmic truth, justice, balance, order, and the harmony on which all existence depends","domains":["truth","justice","balance","cosmic order","law","morality","the weighing of souls","the seasons","stars in their courses"],"parents":["Ra"],"siblings":["Thoth (consort)"],"consorts":["Thoth"],"children":[],"symbols":["ostrich feather","scales","ankh","sceptre","outstretched wings"],"equivalents":["Themis (Greek)","Astraea (Roman)","Iustitia (Roman)"],"kabbalahPaths":[22],"description":"Ma'at's single feather was the counterweight against which the heart of every deceased person was weighed. The heart (containing all one's deeds and character) had to balance precisely with the feather of truth to enter paradise. All pharaohs ruled 'in ma'at' — in truth and cosmic order. The opposite of ma'at was isfet: chaos, injustice, disorder. The entire project of Egyptian civilization was to maintain ma'at against the encroachment of isfet.","myth":"","poem":""},
{"id":"ptah","name":"Ptah","pantheon":"egyptian","epithet":"The Beautiful Face · Lord of Truth · Father of Beginnings","role":"Creator god of Memphis; patron of craftsmen, architects, and the arts; creator through thought and logos","domains":["creation","craftsmanship","architecture","thought","speech (logos)","the arts","the Underworld's stability (as Sokar-Osiris-Ptah)"],"parents":["self-created (no parents in Memphite theology)"],"siblings":[],"consorts":["Sekhmet (lioness goddess)","Bast (cat goddess, some traditions)"],"children":["Nefertum (lotus god)","Imhotep (deified as his son)"],"symbols":["mummy wrappings (but standing upright)","was sceptre","djed pillar","straight false beard"],"sacredAnimals":["Apis bull (lived in his Memphis temple)"],"sacredPlaces":["Memphis (Hikuptah, 'temple of the ka of Ptah' — giving Egypt its name in Greek)"],"equivalents":["Hephaestus/Vulcan (craft)","the Logos principle (philosophical creation through speech)"],"kabbalahPaths":[1,23],"description":"The Memphite theology of Ptah is perhaps the most philosophically sophisticated of all ancient religious texts: Ptah created the world through his heart (thought) and tongue (speech) — a doctrine of creation by logos that anticipates both the Greek Logos concept of Plato and the opening of the Gospel of John. The name Egypt derives from the Greek corruption of 'Hikuptah' — the temple of Ptah's ka in Memphis.","myth":"","poem":""},
{"id":"amoun","name":"Amoun (Amun)","pantheon":"egyptian","epithet":"The Hidden One · King of the Gods · Lord of the Thrones of the Two Lands","role":"King of the gods and the national deity of Egypt; god of the hidden creative force, wind, and fertility","domains":["hidden things","wind","fertility","kingship","the sun (as Amun-Ra the composite deity)","air","creation"],"parents":["self-created (primordial god of the Ogdoad of Hermopolis)"],"siblings":["Amunet (his female counterpart)"],"consorts":["Mut"],"children":["Khonsu (moon god)"],"symbols":["double plumed crown","ram horns","blue skin (the colour of invisibility)","ankh and sceptre"],"sacredAnimals":["ram","goose"],"sacredPlaces":["Karnak (Thebes) — the largest temple complex ever built","Siwa Oasis (Oracle of Amun, consulted by Alexander the Great)"],"equivalents":["Zeus/Jupiter (king of gods aspect)","identification with Ramesses II who called himself 'son of Amun'"],"kabbalahPaths":[0,2,4,21],"description":"Amun means 'the hidden one' — the creative breath behind all manifestation that cannot be seen or named directly. As Amun-Ra he united primordial hiddenness with solar radiance, becoming the most powerful god of the New Kingdom. The Oracle of Amun at Siwa was the most famous oracle in the ancient world: Alexander the Great made a legendary journey through the desert to hear it, and was told he was the son of Amun.","myth":"","poem":""},
{"id":"khephra","name":"Khephra","pantheon":"egyptian","epithet":"The Becoming · He Who Transforms · Dawn Scarab","role":"God of the sunrise, self-transformation, self-creation, and the daily resurrection of the sun","domains":["sunrise","transformation","self-creation","resurrection","dawn","the becoming","potential"],"parents":["Ra (as dawn-aspect of the same solar deity)"],"siblings":["Ra (noon)","Atum (sunset/evening)"],"consorts":[],"children":[],"symbols":["scarab beetle rolling a ball of dung (= the sun)","solar disk above scarab","ouroboros"],"sacredAnimals":["scarab beetle (Scarabaeus sacer)"],"equivalents":["Helios (Greek dawn aspect)"],"kabbalahPaths":[18,24,29],"description":"Khephra is Ra at the moment of dawn — the scarab beetle who rolls the solar disc over the horizon just as dung beetles roll their balls of dung. The Egyptian word for 'scarab' (kheper) means 'to come into being, to become' — making Khephra the god of perpetual becoming and transformation rather than static being. Scarab amulets were the most common protective charm in ancient Egypt, placed over the heart in mummies.","myth":"","poem":""},
{"id":"nuit","name":"Nuit","pantheon":"egyptian","epithet":"Lady of the Stars · She Who Holds a Thousand Souls · Infinite Space","role":"Goddess of the sky, night, stars, and the cosmic vault of heaven who swallows and rebirths the sun","domains":["sky","stars","night","the cosmos","afterlife (she swallows and rebirths the sun)","infinity","space"],"parents":["Shu (god of air)","Tefnut (goddess of moisture)"],"siblings":["Geb (earth god, her husband)"],"consorts":["Geb","Ra"],"children":["Osiris","Isis","Set","Nephthys","Horus the Elder"],"symbols":["star-covered body arching over the earth","blue or black skin covered with stars","pot (meaning 'sky')","coffin lids"],"equivalents":["Ouranos/Caelus (sky)","in Thelema: infinite space and the body of the goddess"],"kabbalahPaths":[0,2,28],"description":"Nuit arches her body over the earth (Geb), and the stars adorn her skin. She swallows the sun each evening and gives birth to it each morning. In the Thelemic system of Aleister Crowley (whose work inspired Liber 777), Nuit became a central cosmic deity representing infinite space, the totality of all possibilities, the night sky as the body of the goddess. Her first words in the Book of the Law: 'Every man and every woman is a star.'","myth":"","poem":""},
{"id":"eheieh","name":"Eheieh","pantheon":"hebrew","epithet":"I Am · Pure Being · That Which Was, Is, and Will Be · Ain Soph Aur made manifest","role":"Divine Name of Kether; the first and purest emanation of existence itself; pure being without attributes","domains":["pure being","the Crown","the source","the unmoved mover","unity","the point before creation"],"hebrew":"אהיה","meaning":"I Am / I Will Be (from the root HYH, 'to be')","sephirah":1,"kabbalahPaths":[1],"description":"Eheieh (אהיה) is the divine name given to Moses at the Burning Bush — 'Eheieh asher Eheieh' (I am that I am / I will be what I will be). In Kabbalah it is the name of pure undifferentiated existence at the Crown of the Tree. It has no attributes or qualities — only the simple, inexhaustible fact of being. To vibrate this name in meditation is to touch the ground of existence itself.","myth":"","poem":""},
{"id":"yah","name":"Yah","pantheon":"hebrew","epithet":"The Contracted Name · The Father · The Primordial Wisdom","role":"Divine Name of Chokmah; the first two letters of the Tetragrammaton; pure creative wisdom","domains":["wisdom","the Father principle","the creative impulse","the word before manifestation","the starry cosmos"],"hebrew":"יה","meaning":"The Lord (contracted form of YHVH, the first two letters Yod-Heh)","sephirah":2,"kabbalahPaths":[2],"description":"Yah is the most contracted form of the ineffable name. As the divine name of Chokmah (Wisdom), it represents the point of pure wisdom before it unfolds into understanding. Yah appears repeatedly in Psalms ('Hallelujah' = 'Praise Yah'). In Kabbalistic meditation, Yah is the name associated with the primordial Father and the cosmic seed of all creation.","myth":"","poem":""},
{"id":"yhvh-elohim","name":"YHVH Elohim","pantheon":"hebrew","epithet":"The Lord God · Father-Mother · The Understanding","role":"Divine Name of Binah; the Lord God of Understanding; the union of the masculine name with the feminine plural","domains":["understanding","the Great Sea","the womb of creation","time","structure","the cosmic mother","sorrow and joy"],"hebrew":"יהוה אלהים","meaning":"The Lord God (masculine singular name + feminine plural noun with singular verb = grammatical paradox of divine unity in duality)","sephirah":3,"kabbalahPaths":[3],"description":"The combination of the Tetragrammaton (YHVH) with Elohim (a grammatically feminine plural used with masculine singular verbs) represents the paradoxical union of masculine and feminine in Binah, the Great Sea of Understanding. Binah is the dark womb that gives all forms to the pure wisdom of Chokmah — the primal matter that receives and shapes the divine seed.","myth":"","poem":""},
{"id":"el","name":"El","pantheon":"hebrew","epithet":"God the Strong · The Mighty One · Ancient of Days","role":"Divine Name of Chesed; the all-powerful, all-merciful expression of divine strength turned toward blessing","domains":["mercy","strength","benevolence","grace","abundance","divine power (turned to healing not destruction)"],"hebrew":"אל","meaning":"God / The Strong One (identical root with Arabic 'Allah' and Akkadian 'Ilu')","sephirah":4,"kabbalahPaths":[4,23],"description":"El is the most ancient Semitic word for God, with cognates in every Semitic language including Arabic 'Allah.' In Kabbalah, El governs Chesed — divine mercy, boundless abundance, and the benevolent expression of power. The divine name El is the root of many angelic names: Micha-El, Gabri-El, Rapha-El, all meaning '[attribute] of God.'","myth":"","poem":""},
{"id":"elohim-gibor","name":"Elohim Gibor","pantheon":"hebrew","epithet":"Almighty God · God of Armies · The Severe One","role":"Divine Name of Geburah; the all-powerful God who executes justice, removes what is corrupt, and tests with fire","domains":["strength","severity","justice","war","divine wrath","purification","the surgeon's knife"],"hebrew":"אלהים גבור","meaning":"Almighty God / The Mighty Gods (Elohim = plural of majesty; Gibor = mighty, hero)","sephirah":5,"kabbalahPaths":[5],"description":"Elohim Gibor represents the severe and just dimension of God — not cruelty, but the absolute necessity of cutting away what does not serve divine purpose. Geburah is the sphere of Mars, of divine warriors, of judgment that cannot be swayed by sentiment. In traditional Kabbalah, an unbalanced Geburah (too much severity) descends into cruelty; an unbalanced Chesed (too much mercy) descends into weakness.","myth":"","poem":""},
{"id":"yhvh-eloah","name":"YHVH Eloah ve-Daath","pantheon":"hebrew","epithet":"God Manifest in Knowledge · Lord of Beauty · The Solar Heart","role":"Divine Name of Tiphareth; God made knowable; the heart of the Tree; the solar-sacrifice principle","domains":["beauty","the heart","solar consciousness","sacrifice","the son/sun","healing","harmony","the redeemed self"],"hebrew":"יהוה אלוה ודעת","meaning":"God (YHVH) manifest as Eloah (singular) in/through Da'ath (Knowledge)","sephirah":6,"kabbalahPaths":[6],"description":"This divine name speaks of God becoming personally knowable — the abstract descending into a form that conscious beings can encounter directly. Tiphareth is the solar heart of the Tree, associated with all the solar-sacrifice figures across traditions: Osiris, Dionysus, Adonis, and the Christ. At Tiphareth the initiate experiences the Knowledge and Conversation of the Holy Guardian Angel — the higher self.","myth":"","poem":""},
{"id":"yhvh-tzabaoth","name":"YHVH Tzabaoth","pantheon":"hebrew","epithet":"Lord of Hosts · Lord of Armies · Victorious God","role":"Divine Name of Netzach; God as commander of the armies of nature, of passion, and of creative force","domains":["victory","natural forces","the passions","emotion","creativity","instinct","the armies of the divine"],"hebrew":"יהוה צבאות","meaning":"The Lord of Hosts / Armies (Tzabaoth = multitudes, hosts, armies)","sephirah":7,"kabbalahPaths":[7],"description":"Netzach represents the natural, instinctual energies — the force of desire, creativity, and natural beauty. YHVH Tzabaoth is God as the commander of all these forces. In magical work, Netzach corresponds to nature spirits, the elemental powers of creativity, and the raw material that intellect (Hod) works upon. The tension between nature (Netzach) and mind (Hod) is one of the fundamental polarities of psychological and magical work.","myth":"","poem":""},
{"id":"elohim-tzabaoth","name":"Elohim Tzabaoth","pantheon":"hebrew","epithet":"God of Hosts · God of Splendour · Lord of the Divine Mind","role":"Divine Name of Hod; God as the source of intellect, language, magical symbolism, and divine splendour","domains":["splendour","intellect","communication","magic","the divine mind","language","symbolic thought"],"hebrew":"אלהים צבאות","meaning":"God of Hosts / God of Armies (with Elohim's grammatical feminine-plural paradox)","sephirah":8,"kabbalahPaths":[8],"description":"Hod (Splendour) governs the abstract mind, language, and magic — Hermes, Mercury, Thoth are its planetary rulers. Elohim Tzabaoth reflects Hod's diversity: the plural Elohim represents the many forms through which divine mind manifests in language, mathematics, and magical correspondence. The Hermetic arts — astrology, alchemy, ritual magic — all operate within the sphere of Hod.","myth":"","poem":""},
{"id":"shaddai-el-chai","name":"Shaddai El Chai","pantheon":"hebrew","epithet":"Almighty Living God · The Eternal Life · Foundation of All","role":"Divine Name of Yesod; the living generative force of creation; the etheric current beneath the physical world","domains":["the living force","the etheric substratum","sexuality","the Foundation","the moon","dreams","the astral plane","fertility"],"hebrew":"שדי אל חי","meaning":"Almighty Living God (Shaddai = the Almighty, from 'breast/nourisher'; El = God; Chai = Living/Life)","sephirah":9,"kabbalahPaths":[9],"description":"Yesod is the Foundation — the invisible etheric substratum that underlies and supports material existence. Shaddai El Chai is the Living God as the perpetual creative life-force flowing through all matter. The moon governs Yesod; dreams, visions, and the astral plane are its territory. The divine name Shaddai is found on mezuzot and amulets as a protective word at every threshold.","myth":"","poem":""},
{"id":"adonai-melek","name":"Adonai Melek","pantheon":"hebrew","epithet":"Lord and King · God of Earth · The Immanent One","role":"Divine Name of Malkuth; God as present, immanent, and incarnate in the material world itself","domains":["the Kingdom","earth","the physical world","nature","the body","the Shekinah (divine presence in the world)"],"hebrew":"אדני מלך","meaning":"Lord and King (Adonai = My Lord, used in place of YHVH in prayer; Melek = King)","sephirah":10,"kabbalahPaths":[10],"description":"Malkuth is the culmination of all the higher sephiroth made physical in matter. Adonai Melek is God present and immanent — the divine spark within physical matter, the Shekinah (the indwelling female presence of God in the world). The mystical tradition holds that the goal of the Kabbalistic path is not to escape the material world but to raise Malkuth — to reveal the Kingdom in all its divine splendour.","myth":"","poem":""},
{"id":"metatron","name":"Metatron","pantheon":"archangel","epithet":"Chancellor of Heaven · Prince of the Divine Countenance · The Recording Angel","role":"Highest archangel; scribe of God; guardian of Kether; sometimes identified as the transformed prophet Enoch","domains":["the Crown","the divine throne","heavenly scribe who records all deeds","the angelic hierarchy","divine mysteries","transmutation of human to angelic"],"hebrew":"מטטרון","sephirah":1,"kabbalahPaths":[1],"description":"Metatron holds a unique position among angels — he was once the prophet Enoch ('he walked with God and was not, for God took him,' Genesis 5:24), transformed into the highest archangel. He is the celestial scribe who records all human deeds in the Book of Life, and is the being closest to the divine throne. Some texts describe him as so exalted that another angel mistook him for God and was corrected.","myth":"","poem":""},
{"id":"ratziel","name":"Ratziel","pantheon":"archangel","epithet":"Herald of God · Angel of Mysteries · Keeper of Divine Secrets","role":"Archangel of Chokmah; keeper of the mysteries of divine wisdom and cosmic law","domains":["divine mysteries","cosmic law","wisdom","heavenly secrets","the stars","astrology","the primordial Torah"],"hebrew":"רציאל","sephirah":2,"kabbalahPaths":[2],"description":"Ratziel (Raziel, 'Secret of God') is said to have written the Sefer Raziel — a compendium of divine secrets overheard standing beside the throne of God. He reportedly gave this book to Adam after the Fall, warning him of the consequences of sin. Later Noah received it before the flood. The Sefer Raziel ha-Malakh is an actual medieval Kabbalistic text of angelic magic attributed to him.","myth":"","poem":""},
{"id":"tzaphkiel","name":"Tzaphkiel","pantheon":"archangel","epithet":"Contemplation of God · The Watcher · Angel of the Abyss","role":"Archangel of Binah; the divine contemplator; angel of grief, time, structure, and profound understanding","domains":["understanding","contemplation","sorrow","time","structure","the Abyss","the nature of limitation"],"hebrew":"צאפקיאל","sephirah":3,"kabbalahPaths":[3],"description":"Tzaphkiel (Zaphkiel/Jophiel in some traditions) governs Binah — the Great Sea of Understanding, the sphere of Saturn and the divine mother. Binah is associated with sorrow not because it is negative, but because Understanding necessarily involves limitation: to understand something is to give it form and boundary, which means accepting what it is not. Tzaphkiel embodies the contemplative stillness required for this deepest kind of knowing.","myth":"","poem":""},
{"id":"tzadkiel","name":"Tzadkiel","pantheon":"archangel","epithet":"Righteousness of God · Angel of Mercy · Interceding Angel","role":"Archangel of Chesed; divine mercy and benevolence; the angel who stayed Abraham's hand at Mount Moriah","domains":["mercy","benevolence","abundance","grace","justice turned to compassion","the virtue of charity","the planet Jupiter"],"hebrew":"צדקיאל","sephirah":4,"kabbalahPaths":[4],"description":"Tzadkiel (Zadkiel, 'Righteousness of God') governs Chesed — mercy, abundance, and expansion. He is the angel who stayed Abraham's hand before the sacrifice of Isaac, replacing the boy with a ram. He is invoked for mercy, forgiveness, and for dissolving rigid patterns with the warmth of divine love. In magical tradition he is the angel of Jupiter, associated with all forms of increase and blessing.","myth":"","poem":""},
{"id":"kamael","name":"Kamael","pantheon":"archangel","epithet":"Strength of God · The Burning One · Angel of Divine Wrath","role":"Archangel of Geburah; the divine warrior; angel of strength, courage, justice, and the purifying fire","domains":["strength","courage","severity","divine justice","war","the removal of impurity","the planet Mars","the Seraphim"],"hebrew":"כמאל","sephirah":5,"kabbalahPaths":[5],"description":"Kamael (Camael, Chamuel — 'Strength of God') is the archangel of Geburah — divine severity and martial power. He is the warrior who executes divine justice, cuts away spiritual corruption, and governs the Seraphim (the Fiery Serpents). In some traditions he is the angel who wrestled with Jacob at the ford of Jabbok. His fire purifies what cannot be healed any other way.","myth":"","poem":""},
{"id":"raphael","name":"Raphael","pantheon":"archangel","epithet":"God Has Healed · The Divine Physician · Angel of Healing and Travel","role":"Archangel of Tiphareth; healer of God; guide of travellers; regent of the solar heart","domains":["healing","the sun","beauty","travel","sight","the planet Mercury (in some attributions)","Tiphareth's solar warmth"],"hebrew":"רפאל","sephirah":6,"kabbalahPaths":[6],"description":"Raphael ('God Heals') is named explicitly in the Book of Tobit, where he accompanies the young Tobias disguised as a human companion, heals Tobias's blind father with fish gall, and defeats the demon Asmodeus. In the Book of Enoch he is set over all diseases and wounds. His name teaches that genuine healing is a divine act, a restoration of wholeness in alignment with the divine image.","myth":"","poem":""},
{"id":"haniel","name":"Haniel","pantheon":"archangel","epithet":"Grace of God · Glory of God · Angel of Love and Beauty","role":"Archangel of Netzach; angel of love, beauty, the arts, natural instinct, and the planet Venus","domains":["love","beauty","joy","natural forces","the arts","desire","the planet Venus","the emotions"],"hebrew":"חאניאל","sephirah":7,"kabbalahPaths":[7],"description":"Haniel ('Grace of God') governs Netzach — the sphere of natural beauty, desire, and creative instinct. He is invoked in magical work related to love, art, and the healing of emotional wounds. In some traditions he escorted Enoch to heaven. His domain is the gap between natural desire (Netzach) and its refining by the mind (Hod) — the raw material of all art and spiritual longing.","myth":"","poem":""},
{"id":"michael","name":"Michael","pantheon":"archangel","epithet":"Who Is Like God? · Prince of Light · Champion of Heaven","role":"Archangel of Hod; greatest of archangels; divine champion who cast Lucifer from heaven; protector against evil","domains":["protection","justice","war against evil","the angelic armies","communication","the planet Mercury","spiritual warfare","the weighing of souls (with Gabriel)"],"hebrew":"מיכאל","sephirah":8,"kabbalahPaths":[8],"description":"Michael ('Who is like God?' — the question implies: no one) is the greatest archangel in Jewish, Christian, and Islamic traditions (as Mika'il). He cast Lucifer from heaven, guarded the gate of Eden, fought with the archangel for Moses's body, and will lead the heavenly armies at the Last Battle. In Christianity he is the patron of knights, police, and the military; in Islam he brings rain and thunder. He will weigh souls at the Last Judgment.","myth":"","poem":""},
{"id":"gabriel","name":"Gabriel","pantheon":"archangel","epithet":"God Is My Strength · The Divine Herald · Angel of Revelation","role":"Archangel of Yesod; divine messenger par excellence; angel of annunciation, prophecy, and the moon's etheric current","domains":["messages","revelation","prophecy","dreams","the moon","water","the etheric body","the Foundation","the unconscious"],"hebrew":"גבריאל","sephirah":9,"kabbalahPaths":[9],"description":"Gabriel ('God is my Strength') announced the birth of Christ to Mary (the Annunciation), revealed the Quran to Muhammad over 23 years, and explained Daniel's apocalyptic visions. He governs Yesod — the etheric substratum where dreams, visions, and psychic current flow. In the Talmud he is the angel who turned Sodom to ash. He stands at the West in elemental magic, governing Water and the psychic unconscious.","myth":"","poem":""},
{"id":"sandalphon","name":"Sandalphon","pantheon":"archangel","epithet":"The Twin Brother · Guardian of Earth · Weaver of Prayers","role":"Archangel of Malkuth; guardian of the material earth and physical world; twin of Metatron; weaver of human prayers into garlands before the divine throne","domains":["earth","the Kingdom","physical manifestation","prayers ascending to God","the material world's sanctity","the body as temple"],"hebrew":"סנדלפון","sephirah":10,"kabbalahPaths":[10],"description":"Sandalphon corresponds to Malkuth — the physical earth — and stands as the twin polarity of Metatron at Kether. One governs the Crown, the other the Kingdom; between them stretches the entire Tree. Ancient texts describe Sandalphon as so immeasurably tall that his feet touch the earth while his head reaches into heaven — a perfect symbol of Malkuth as both the lowest and the most fully present sphere. He is said to gather all human prayers and weave them into garlands for God's crown.","myth":"","poem":""}
]
}

View File

@@ -1,239 +0,0 @@
{
"meta": {
"version": 1,
"notes": "Hebrew (Jewish) lunisolar calendar months with traditional associations. Holiday records are centralized in calendar-holidays.json."
},
"calendar": {
"id": "hebrew",
"label": "Hebrew Calendar",
"type": "lunisolar",
"script": "Hebrew",
"description": "The Hebrew calendar is a lunisolar calendar used for Jewish religious observances. The religious year begins with Nisan (month of Passover); the civil year begins with Tishrei. A leap year adds a second Adar (Adar II), making 13 months."
},
"months": [
{
"id": "nisan",
"order": 1,
"name": "Nisan",
"nativeName": "נִיסָן",
"days": 30,
"season": "Spring",
"zodiacSign": "aries",
"tribe": "Judah",
"sense": "Speech",
"hebrewLetter": "He (ה)",
"associations": {
"zodiacSignId": "aries",
"hebrewLetterId": "he"
},
"description": "The first month of the religious year. Called the 'month of redemption.' Passover (Pesach) commemorates the Exodus from Egypt."
},
{
"id": "iyar",
"order": 2,
"name": "Iyar",
"nativeName": "אִיָּר",
"days": 29,
"season": "Spring",
"zodiacSign": "taurus",
"tribe": "Issachar",
"sense": "Thought",
"hebrewLetter": "Vav (ו)",
"associations": {
"zodiacSignId": "taurus",
"hebrewLetterId": "vav"
},
"description": "A month of counting and transition between Passover and Shavuot. Yom HaShoah and Yom Ha'atzmaut fall here."
},
{
"id": "sivan",
"order": 3,
"name": "Sivan",
"nativeName": "סִיוָן",
"days": 30,
"season": "Late Spring",
"zodiacSign": "gemini",
"tribe": "Zebulun",
"sense": "Walking",
"hebrewLetter": "Zayin (ז)",
"associations": {
"zodiacSignId": "gemini",
"hebrewLetterId": "zayin"
},
"description": "Month of the giving of the Torah at Sinai. Shavuot (Festival of Weeks) falls on the 6th."
},
{
"id": "tammuz",
"order": 4,
"name": "Tammuz",
"nativeName": "תַּמּוּז",
"days": 29,
"season": "Summer",
"zodiacSign": "cancer",
"tribe": "Reuben",
"sense": "Sight",
"hebrewLetter": "Het (ח)",
"associations": {
"zodiacSignId": "cancer",
"hebrewLetterId": "het"
},
"description": "A month associated with mourning. The Golden Calf was made and the Tablets were broken on the 17th."
},
{
"id": "av",
"order": 5,
"name": "Av",
"nativeName": "אָב",
"days": 30,
"season": "Summer",
"zodiacSign": "leo",
"tribe": "Simeon",
"sense": "Hearing",
"hebrewLetter": "Tet (ט)",
"associations": {
"zodiacSignId": "leo",
"hebrewLetterId": "tet"
},
"description": "A month of mourning that ends with celebration. Tisha B'Av commemorates the destruction of both Temples."
},
{
"id": "elul",
"order": 6,
"name": "Elul",
"nativeName": "אֱלוּל",
"days": 29,
"season": "Late Summer",
"zodiacSign": "virgo",
"tribe": "Gad",
"sense": "Action",
"hebrewLetter": "Yod (י)",
"associations": {
"zodiacSignId": "virgo",
"hebrewLetterId": "yod"
},
"description": "A month of preparation and teshuva (repentance) before the High Holy Days. The shofar is blown daily."
},
{
"id": "tishrei",
"order": 7,
"name": "Tishrei",
"nativeName": "תִּשְׁרֵי",
"days": 30,
"season": "Autumn",
"zodiacSign": "libra",
"tribe": "Ephraim",
"sense": "Coition",
"hebrewLetter": "Lamed (ל)",
"associations": {
"zodiacSignId": "libra",
"hebrewLetterId": "lamed"
},
"description": "The holiest month of the year. Contains Rosh Hashanah (New Year), Yom Kippur (Day of Atonement), and Sukkot."
},
{
"id": "cheshvan",
"order": 8,
"name": "Cheshvan",
"nativeName": "חֶשְׁוָן",
"days": 29,
"daysVariant": 30,
"season": "Autumn",
"zodiacSign": "scorpio",
"tribe": "Manasseh",
"sense": "Smell",
"hebrewLetter": "Nun (נ)",
"associations": {
"zodiacSignId": "scorpio",
"hebrewLetterId": "nun"
},
"description": "Also called Marcheshvan. The only month with no Jewish holidays. Day count varies between 2930 in different years."
},
{
"id": "kislev",
"order": 9,
"name": "Kislev",
"nativeName": "כִּסְלֵו",
"days": 30,
"daysVariant": 29,
"season": "Early Winter",
"zodiacSign": "sagittarius",
"tribe": "Benjamin",
"sense": "Sleep",
"hebrewLetter": "Samekh (ס)",
"associations": {
"zodiacSignId": "sagittarius",
"hebrewLetterId": "samekh"
},
"description": "Month of Hanukkah (Festival of Lights), which begins on the 25th. Day count varies 2930."
},
{
"id": "tevet",
"order": 10,
"name": "Tevet",
"nativeName": "טֵבֵת",
"days": 29,
"season": "Winter",
"zodiacSign": "capricorn",
"tribe": "Dan",
"sense": "Anger",
"hebrewLetter": "Ayin (ע)",
"associations": {
"zodiacSignId": "capricorn",
"hebrewLetterId": "ayin"
},
"description": "Hanukkah continues into the early days of Tevet. The 10th is a fast day marking the siege of Jerusalem."
},
{
"id": "shvat",
"order": 11,
"name": "Shvat",
"nativeName": "שְׁבָט",
"days": 30,
"season": "Late Winter",
"zodiacSign": "aquarius",
"tribe": "Asher",
"sense": "Taste",
"hebrewLetter": "Tzaddi (צ)",
"associations": {
"zodiacSignId": "aquarius",
"hebrewLetterId": "tsadi"
},
"description": "The month of Tu B'Shvat, the 'New Year for Trees.' Trees begin to wake in the Land of Israel."
},
{
"id": "adar",
"order": 12,
"name": "Adar (Adar I)",
"nativeName": "אֲדָר",
"days": 29,
"season": "Late Winter / Early Spring",
"zodiacSign": "pisces",
"tribe": "Naphtali",
"sense": "Laughter",
"hebrewLetter": "Qof (ק)",
"associations": {
"zodiacSignId": "pisces",
"hebrewLetterId": "qof"
},
"description": "A month of joy. Purim falls on the 14th. In a leap year this becomes Adar I and Purim is celebrated in Adar II."
},
{
"id": "adar-ii",
"order": 13,
"name": "Adar II",
"nativeName": "אֲדָר ב",
"days": 29,
"leapYearOnly": true,
"season": "Early Spring",
"zodiacSign": "pisces",
"tribe": "Naphtali",
"sense": "Laughter",
"hebrewLetter": "Qof (ק)",
"associations": {
"zodiacSignId": "pisces",
"hebrewLetterId": "qof"
},
"description": "Added in a Hebrew leap year (7 times in every 19-year Metonic cycle). Purim is celebrated in Adar II in leap years."
}
]
}

View File

@@ -1,353 +0,0 @@
{
"alef": {
"id": "alef",
"letter": {
"he": "א",
"name": "Aleph",
"latin": "A"
},
"index": 1,
"value": 1,
"meaning": {
"en": "ox"
}
},
"bet": {
"id": "bet",
"letter": {
"he": "ב",
"name": "Bet",
"latin": "B"
},
"index": 2,
"value": 2,
"meaning": {
"en": "house"
}
},
"gimel": {
"id": "gimel",
"letter": {
"he": "ג",
"name": "Gimel",
"latin": "G"
},
"index": 3,
"value": 3,
"meaning": {
"en": "camel"
}
},
"dalet": {
"id": "dalet",
"letter": {
"he": "ד",
"name": "Dalet",
"latin": "D"
},
"index": 4,
"value": 4,
"meaning": {
"en": "door"
}
},
"he": {
"id": "he",
"letter": {
"he": "ה",
"name": "He",
"latin": "H"
},
"index": 5,
"value": 5,
"meaning": {
"en": "window"
}
},
"vav": {
"id": "vav",
"letter": {
"he": "ו",
"name": "Vav",
"latin": "V"
},
"index": 6,
"value": 6,
"meaning": {
"en": "peg, nail, pin, hook"
}
},
"zayin": {
"id": "zayin",
"letter": {
"he": "ז",
"name": "Zayin",
"latin": "Z"
},
"index": 7,
"value": 7,
"meaning": {
"en": "sword, armor, weapon"
}
},
"het": {
"id": "het",
"letter": {
"he": "ח",
"name": "Het",
"latin": "Ch"
},
"index": 8,
"value": 8,
"meaning": {
"en": "enclosure, fence"
}
},
"tet": {
"id": "tet",
"letter": {
"he": "ט",
"name": "Tet",
"latin": "T"
},
"index": 9,
"value": 9,
"meaning": {
"en": "serpent"
}
},
"yod": {
"id": "yod",
"letter": {
"he": "י",
"name": "Yod",
"latin": "I"
},
"index": 10,
"value": 10,
"meaning": {
"en": "hand"
}
},
"kaf": {
"id": "kaf",
"letter": {
"he": "כ",
"name": "Kaf",
"latin": "K"
},
"index": 11,
"value": 20,
"meaning": {
"en": "palm of hand"
}
},
"kaf-sofit": {
"id": "kaf-sofit",
"letter": {
"he": "ך",
"name": "Kaf-Sofit",
"latin": "K(f)"
},
"index": 11,
"value": 500,
"meaning": {
"en": "palm of hand"
}
},
"lamed": {
"id": "lamed",
"letter": {
"he": "ל",
"name": "Lamed",
"latin": "L"
},
"index": 12,
"value": 30,
"meaning": {
"en": "ox-goad"
}
},
"mem": {
"id": "mem",
"letter": {
"he": "מ",
"name": "Mem",
"latin": "M"
},
"index": 13,
"value": 40,
"meaning": {
"en": "water"
}
},
"mem-sofit": {
"id": "mem-sofit",
"letter": {
"he": "ם",
"name": "Mem-Sofit",
"latin": "M(f)"
},
"index": 13,
"value": 600,
"meaning": {
"en": "water"
}
},
"nun": {
"id": "nun",
"letter": {
"he": "נ",
"name": "Nun",
"latin": "N"
},
"index": 14,
"value": 50,
"meaning": {
"en": "fish"
}
},
"nun-sofit": {
"id": "nun-sofit",
"letter": {
"he": "ן",
"name": "Nun-Sofit",
"latin": "N(f)"
},
"index": 14,
"value": 700,
"meaning": {
"en": "fish"
}
},
"samekh": {
"id": "samekh",
"letter": {
"he": "ס",
"name": "Samekh",
"latin": "S"
},
"index": 15,
"value": 60,
"meaning": {
"en": "prop, support"
}
},
"ayin": {
"id": "ayin",
"letter": {
"he": "ע",
"name": "Ayin",
"latin": "O"
},
"index": 16,
"value": 70,
"meaning": {
"en": "eye"
}
},
"pe": {
"id": "pe",
"letter": {
"he": "פ",
"name": "Pe",
"latin": "P"
},
"index": 17,
"value": 80,
"meaning": {
"en": "mouth"
}
},
"pe-sofit": {
"id": "pe-sofit",
"letter": {
"he": "ף",
"name": "Pe-Sofit",
"latin": "P(f)"
},
"index": 17,
"value": 800,
"meaning": {
"en": "mouth"
}
},
"tsadi": {
"id": "tsadi",
"letter": {
"he": "צ",
"name": "Tsadi",
"latin": "Tz"
},
"index": 18,
"value": 90,
"meaning": {
"en": "fishhook"
}
},
"tsadi-sofit": {
"id": "tsadi-sofit",
"letter": {
"he": "ץ",
"name": "Tsadi-Sofit",
"latin": "Tz(f)"
},
"index": 18,
"value": 900,
"meaning": {
"en": "fishhook"
}
},
"qof": {
"id": "qof",
"letter": {
"he": "ק",
"name": "Qof",
"latin": "Q"
},
"index": 19,
"value": 100,
"meaning": {
"en": "back of the head, ear"
}
},
"resh": {
"id": "resh",
"letter": {
"he": "ר",
"name": "Resh",
"latin": "R"
},
"index": 20,
"value": 200,
"meaning": {
"en": "head"
}
},
"shin": {
"id": "shin",
"letter": {
"he": "ש",
"name": "Shin",
"latin": "Sh"
},
"index": 21,
"value": 300,
"meaning": {
"en": "tooth"
}
},
"tav": {
"id": "tav",
"letter": {
"he": "ת",
"name": "Tav",
"latin": "Th"
},
"index": 22,
"value": 400,
"meaning": {
"en": "cross"
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,136 +0,0 @@
{
"meta": {
"version": 1,
"notes": "Islamic (Hijri) lunar calendar months with traditional associations and major observances. Holiday records are centralized in calendar-holidays.json."
},
"calendar": {
"id": "islamic",
"label": "Islamic Calendar",
"type": "lunar",
"script": "Arabic",
"description": "The Islamic calendar (Hijri/AH) is a purely lunar calendar of 12 months in a year of 354 or 355 days. It began with the Prophet Muhammad's migration (Hijra) from Mecca to Medina in 622 CE. Four months are considered sacred (Al-Ashhur Al-Hurum): Muharram, Rajab, Dhu al-Qada, and Dhu al-Hijja."
},
"months": [
{
"id": "muharram",
"order": 1,
"name": "Muharram",
"nativeName": "مُحَرَّم",
"meaning": "Forbidden / Sacred",
"days": 30,
"sacred": true,
"description": "The first month of the Islamic year and one of the four sacred months in which warfare is prohibited. Islamic New Year (Hijri New Year) begins on the 1st. Ashura falls on the 10th."
},
{
"id": "safar",
"order": 2,
"name": "Safar",
"nativeName": "صَفَر",
"meaning": "Empty / Yellow",
"days": 29,
"sacred": false,
"description": "Traditionally a month associated with misfortune in pre-Islamic Arab belief; Islam discouraged such superstition. No major holidays."
},
{
"id": "rabi-al-awwal",
"order": 3,
"name": "Rabi' al-Awwal",
"nativeName": "رَبِيع الأَوَّل",
"meaning": "First Spring",
"days": 30,
"sacred": false,
"description": "The month of the Prophet Muhammad's birth (Mawlid al-Nabi) and his migration to Medina. A month of celebration in many Muslim communities."
},
{
"id": "rabi-al-akhir",
"order": 4,
"name": "Rabi' al-Akhir",
"nativeName": "رَبِيع الآخِر",
"meaning": "Second Spring / Last Spring",
"days": 29,
"sacred": false,
"description": "Also called Rabi' al-Thani (Second Spring). No major holidays."
},
{
"id": "jumada-al-awwal",
"order": 5,
"name": "Jumada al-Awwal",
"nativeName": "جُمَادَى الأُولَى",
"meaning": "First of Parched Land",
"days": 30,
"sacred": false,
"description": "The fifth month. No major holidays. The name reflects an ancient season of early drought."
},
{
"id": "jumada-al-akhir",
"order": 6,
"name": "Jumada al-Akhir",
"nativeName": "جُمَادَى الآخِرَة",
"meaning": "Last of Parched Land",
"days": 29,
"sacred": false,
"description": "Also called Jumada al-Thani. Concludes the first half of the Islamic year."
},
{
"id": "rajab",
"order": 7,
"name": "Rajab",
"nativeName": "رَجَب",
"meaning": "To Respect",
"days": 30,
"sacred": true,
"description": "One of the four sacred months. Warfare was forbidden. Contains Laylat al-Mi'raj (Night of Ascension)."
},
{
"id": "shaban",
"order": 8,
"name": "Sha'ban",
"nativeName": "شَعْبَان",
"meaning": "To be Scattered / Dispersed",
"days": 29,
"sacred": false,
"description": "The month between Rajab and Ramadan. A time of spiritual preparation for fasting. Contains the Night of Records (Laylat al-Bara'at)."
},
{
"id": "ramadan",
"order": 9,
"name": "Ramadan",
"nativeName": "رَمَضَان",
"meaning": "Scorching Heat",
"days": 30,
"sacred": false,
"description": "The holiest month of the Islamic year. Fasting (Sawm) from dawn to sunset is obligatory for adult Muslims — one of the Five Pillars of Islam. The Quran was revealed in this month. Ends with Eid al-Fitr."
},
{
"id": "shawwal",
"order": 10,
"name": "Shawwal",
"nativeName": "شَوَّال",
"meaning": "Raised / Lifted",
"days": 29,
"sacred": false,
"description": "The month following Ramadan. Begins with Eid al-Fitr. Voluntary six-day fast (Shawwal fast) is recommended."
},
{
"id": "dhu-al-qada",
"order": 11,
"name": "Dhu al-Qada",
"nativeName": "ذُو الْقَعْدَة",
"meaning": "Possessor of Truce / Sitting",
"days": 30,
"sacred": true,
"description": "One of the four sacred months. Pilgrims begin gathering for Hajj. Warfare was traditionally prohibited."
},
{
"id": "dhu-al-hijja",
"order": 12,
"name": "Dhu al-Hijja",
"nativeName": "ذُو الْحِجَّة",
"meaning": "Possessor of the Pilgrimage",
"days": 29,
"daysVariant": 30,
"sacred": true,
"description": "The month of Hajj pilgrimage — the fifth Pillar of Islam. Contains Eid al-Adha, one of the two major Islamic festivals. The first ten days are especially sacred."
}
]
}

View File

@@ -1,79 +0,0 @@
{
"chayot-hakodesh": {
"name": {
"he": "חיות הקודש",
"en": "Holy Living Creatures",
"roman": "Chayot Hakodesh"
}
},
"auphanim": {
"name": {
"he": "אופנים",
"en": "Wheels",
"roman": "Auphaneem"
}
},
"aralim": {
"name": {
"he": "אראלים",
"en": "Thrones",
"roman": "Ar'aleem"
}
},
"chashmalim": {
"name": {
"he": "חשמלים",
"en": "Shining Ones",
"roman": "Chashmaleem"
}
},
"seraphim": {
"name": {
"he": "שרפים",
"en": "Flaming Ones",
"roman": "Seraphim"
}
},
"malachim": {
"name": {
"he": "מלאכים",
"en": "Messengers",
"roman": "Malecheem"
}
},
"elohim": {
"name": {
"he": "אלוהים",
"en": "Gods & Goddesses",
"roman": "Eloheem"
}
},
"bnei-elohim": {
"name": {
"he": "בני אלוהים",
"en": "Children of the Gods",
"roman": "Bnei Eloheem"
}
},
"kerubim": {
"name": {
"he": "כרובים",
"en": "Strong Ones",
"roman": "Kerubeem"
}
},
"ishim": {
"name": {
"he": "אישים",
"en": "Souls of Fire",
"roman": "Isheem"
}
},
"": {
"name": {
"he": "",
"en": "",
"roman": ""
}
}
}

View File

@@ -1,101 +0,0 @@
{
"cassiel": {
"id": "cassiel",
"name": {
"he": "כסיאל",
"roman": "Kassiel"
},
"planetId": "saturn"
},
"sachiel": {
"id": "sachiel",
"name": {
"he": "סחיאל",
"roman": "Sachiel"
},
"planetId": "jupiter"
},
"zamael": {
"id": "zamael",
"name": {
"he": "זמאל",
"roman": "Zamael"
},
"planetId": "mars"
},
"michael": {
"id": "michael",
"name": {
"he": "מיכאל",
"roman": "Michael"
},
"planetId": "sol",
"sephirahId": "hod"
},
"anael": {
"id": "anael",
"name": {
"he": "אנאל",
"roman": "Anael"
},
"planetId": "venus"
},
"raphael": {
"id": "raphael",
"name": {
"he": "רפאל",
"roman": "Raphael"
},
"planetId": "mercury",
"sephirahId": "raphael"
},
"gabriel": {
"id": "gabriel",
"name": {
"he": "גבריאל",
"roman": "Gavriel",
"en": "Gabriel"
},
"planetId": "luna",
"sephirahId": "yesod"
},
"uriel": {
"id": "uriel",
"name": {
"he": "אוריאל",
"roman": "Uriel"
}
},
"tzaphkiel": {
"id": "tzaphkiel",
"name": {
"he": "צַפְקִיאֵל",
"roman": "Tzaphkiel"
},
"sephirahId": "binah"
},
"khamael": {
"id": "khamael",
"name": {
"he": "חמאל",
"roman": "Khamael"
},
"sephirahId": "gevurah"
},
"tzadkiel": {
"id": "tzadkiel",
"name": {
"he": "צדקיאל",
"roman": "Tzadkiel"
},
"sephirahId": "chesed"
},
"haniel": {
"id": "haniel",
"name": {
"he": "הניאל",
"roman": "Haniel"
}
},
"sephirahId": "netzach"
}

View File

@@ -1,230 +0,0 @@
{
"meta": {
"description": "Cube of Space wall and edge correspondences adapted from the cube Python module.",
"sources": [
"cube/attributes.py",
"Hermetic Qabalah"
],
"notes": "The twelve simple letters map to the 12 edges of the Cube of Space. Walls retain elemental and planetary correspondences."
},
"center": {
"name": "Primal Point",
"letter": "Tav",
"hebrewLetterId": "tav",
"element": "Spirit",
"keywords": [
"Unity",
"Source",
"All"
],
"description": "Primal point at the center of the Cube of Space - synthesis of all forces",
"associations": {
"hebrewLetterId": "tav",
"kabbalahPathNumber": 32,
"tarotCard": "The World",
"tarotTrumpNumber": 21
}
},
"edges": [
{
"id": "north-east",
"name": "North East",
"walls": ["north", "east"],
"hebrewLetterId": "he"
},
{
"id": "south-east",
"name": "South East",
"walls": ["south", "east"],
"hebrewLetterId": "vav"
},
{
"id": "east-above",
"name": "East Above",
"walls": ["east", "above"],
"hebrewLetterId": "zayin"
},
{
"id": "east-below",
"name": "East Below",
"walls": ["east", "below"],
"hebrewLetterId": "het"
},
{
"id": "north-above",
"name": "North Above",
"walls": ["north", "above"],
"hebrewLetterId": "tet"
},
{
"id": "north-below",
"name": "North Below",
"walls": ["north", "below"],
"hebrewLetterId": "yod"
},
{
"id": "north-west",
"name": "North West",
"walls": ["north", "west"],
"hebrewLetterId": "lamed"
},
{
"id": "south-west",
"name": "South West",
"walls": ["south", "west"],
"hebrewLetterId": "nun"
},
{
"id": "west-above",
"name": "West Above",
"walls": ["west", "above"],
"hebrewLetterId": "samekh"
},
{
"id": "west-below",
"name": "West Below",
"walls": ["west", "below"],
"hebrewLetterId": "ayin"
},
{
"id": "south-above",
"name": "South Above",
"walls": ["south", "above"],
"hebrewLetterId": "tsadi"
},
{
"id": "south-below",
"name": "South Below",
"walls": ["south", "below"],
"hebrewLetterId": "qof"
}
],
"walls": [
{
"id": "north",
"name": "North",
"hebrewLetterId": "pe",
"side": "north",
"opposite": "South",
"oppositeWallId": "south",
"element": "Air",
"planet": "Mars",
"archangel": "Samael",
"keywords": ["Thought", "Communication", "Intellect"],
"description": "Northern Wall - Air element, Mars correspondence",
"associations": {
"planetId": "mars",
"godName": "Samael",
"hebrewLetterId": "pe",
"kabbalahPathNumber": 27,
"tarotCard": "The Tower",
"tarotTrumpNumber": 16
}
},
{
"id": "south",
"name": "South",
"hebrewLetterId": "resh",
"side": "south",
"opposite": "North",
"oppositeWallId": "north",
"element": "Fire",
"planet": "Sun",
"archangel": "Michael",
"keywords": ["Will", "Action", "Passion"],
"description": "Southern Wall - Fire element, Sun correspondence",
"associations": {
"planetId": "sol",
"godName": "Michael",
"hebrewLetterId": "resh",
"kabbalahPathNumber": 30,
"tarotCard": "The Sun",
"tarotTrumpNumber": 19
}
},
{
"id": "east",
"name": "East",
"hebrewLetterId": "dalet",
"side": "east",
"opposite": "West",
"oppositeWallId": "west",
"element": "Air",
"planet": "Venus",
"archangel": "Haniel",
"keywords": ["Dawn", "Beginning", "Ascent"],
"description": "Eastern Wall - Air element, new beginnings",
"associations": {
"planetId": "venus",
"godName": "Haniel",
"hebrewLetterId": "dalet",
"kabbalahPathNumber": 14,
"tarotCard": "The Empress",
"tarotTrumpNumber": 3
}
},
{
"id": "west",
"name": "West",
"hebrewLetterId": "kaf",
"side": "west",
"opposite": "East",
"oppositeWallId": "east",
"element": "Water",
"planet": "Jupiter",
"archangel": "Tzadkiel",
"keywords": ["Emotion", "Decline", "Closure"],
"description": "Western Wall - Water element, Jupiter correspondence",
"associations": {
"planetId": "jupiter",
"godName": "Tzadkiel",
"hebrewLetterId": "kaf",
"kabbalahPathNumber": 21,
"tarotCard": "Wheel of Fortune",
"tarotTrumpNumber": 10
}
},
{
"id": "above",
"name": "Above",
"hebrewLetterId": "bet",
"side": "above",
"opposite": "Below",
"oppositeWallId": "below",
"element": "Fire",
"planet": "Mercury",
"archangel": "Raphael",
"keywords": ["Heaven", "Spirit", "Light"],
"description": "Upper Wall - Fire element, Mercury correspondence",
"associations": {
"planetId": "mercury",
"godName": "Raphael",
"hebrewLetterId": "bet",
"kabbalahPathNumber": 12,
"tarotCard": "The Magician",
"tarotTrumpNumber": 1
}
},
{
"id": "below",
"name": "Below",
"hebrewLetterId": "gimel",
"side": "below",
"opposite": "Above",
"oppositeWallId": "above",
"element": "Earth",
"planet": "Luna",
"archangel": "Gabriel",
"keywords": ["Matter", "Foundation", "Manifestation"],
"description": "Lower Wall - Earth element, Luna correspondence",
"associations": {
"planetId": "luna",
"godName": "Gabriel",
"hebrewLetterId": "gimel",
"kabbalahPathNumber": 13,
"tarotCard": "The High Priestess",
"tarotTrumpNumber": 2
}
}
]
}

View File

@@ -1,112 +0,0 @@
{
"atzilut": {
"id": "atzilut",
"name": {
"en": "Nobility",
"roman": "Atziluth",
"he": "אצילות"
},
"desc": {
"en": "Archetypal"
},
"residentsTitle": {
"en": "Pure Deity"
},
"tetragrammaton": {
"slot": "Yod",
"letterChar": "י",
"hebrewLetterId": "yod",
"position": 1
},
"worldLayer": {
"en": "Archetypal World (God's Will)"
},
"worldDescription": {
"en": "World of gods or specific facets or divine qualities."
},
"soulId": "chaya"
},
"briah": {
"id": "briah",
"name": {
"en": "Creation",
"roman": "Briah",
"he": "בריאה"
},
"desc": {
"en": "Creative"
},
"residentsTitle": {
"en": "Archangelic"
},
"tetragrammaton": {
"slot": "Heh",
"letterChar": "ה",
"hebrewLetterId": "he",
"position": 2,
"isFinal": false
},
"worldLayer": {
"en": "Creative World (God's Love)"
},
"worldDescription": {
"en": "World of archangels, executors of divine qualities."
},
"soulId": "neshama"
},
"yetzirah": {
"id": "yetzirah",
"name": {
"en": "Formation",
"roman": "Yetzirah",
"he": "יצירה"
},
"desc": {
"en": "Formative"
},
"residentsTitle": {
"en": "Angelic"
},
"tetragrammaton": {
"slot": "Vav",
"letterChar": "ו",
"hebrewLetterId": "vav",
"position": 3
},
"worldLayer": {
"en": "Formative World (God's Mind)"
},
"worldDescription": {
"en": "World of angels, who work under the direction of archangels."
},
"soulId": "ruach"
},
"assiah": {
"id": "assiah",
"name": {
"en": "Doing",
"roman": "Assiah",
"he": "עשייה"
},
"desc": {
"en": "Action"
},
"residentsTitle": {
"en": "Man, Matter, Shells, Demons"
},
"tetragrammaton": {
"slot": "Heh",
"letterChar": "ה",
"hebrewLetterId": "he",
"position": 4,
"isFinal": true
},
"worldLayer": {
"en": "Material World (God's Creation)"
},
"worldDescription": {
"en": "World of spirits, who focus the specialized duties of their ruling angel to infuse matter and energy."
},
"soulId": "nephesh"
}
}

View File

@@ -1,72 +0,0 @@
{
"ehiyeh": {
"name": {
"he": "אהיה",
"roman": "Ehiyeh",
"en": "I am"
}
},
"yah": {
"name": {
"he": "יה",
"roman": "Yah",
"en": "Lord"
}
},
"yhvh-elohim": {
"name": {
"he": "יהוה אלוהים",
"roman": "YHVH Elohim",
"en": "The Lord God"
}
},
"el": {
"name": {
"he": "אל",
"roman": "El",
"en": "God"
}
},
"elohim-gibor": {
"name": {
"he": "אלוהים גיבור",
"roman": "Elohim Gibor",
"en": "God of Power"
}
},
"yhvh-eloha-vedaat": {
"name": {
"he": "יהוה אלוה ודעת",
"roman": "YHVH Eloah Ve-da'at",
"en": "Lord God of Knowledge"
}
},
"yhvh-tzvaot": {
"name": {
"he": "יהוה צבעות",
"roman": "YHVH Tzva-oht",
"en": "Lord of Armies"
}
},
"elohim-tzvaot": {
"name": {
"he": "אלוהים צבעות",
"roman": "Elohim Tzvaot",
"en": "God of Armies"
}
},
"shadai-el-chai": {
"name": {
"he": "שדאי אל חי",
"roman": "Shaddai El Chai",
"en": "Almighty Living God"
}
},
"adonai-haaretz": {
"name": {
"he": "אדוני הארץ",
"roman": "Adonai Ha'aretz",
"en": "Lord of Earth"
}
}
}

View File

@@ -1,500 +0,0 @@
{
"meta": {
"description": "Kabbalah Tree of Life — unified 32-path dataset. Paths 110 are the Sephiroth; paths 1132 are the 22 Hebrew letter paths. Foreign keys reference sephirot.json (sephiraId) and hebrewLetters.json (letterTransliteration). Tarot and astrological correspondences follow the Hermetic / Golden Dawn tradition (Liber 777).",
"sources": [
"Sefer Yetzirah",
"Liber 777 — Aleister Crowley",
"open_777 paths dataset — adamblvck (github.com/adamblvck/open_777)"
],
"tradition": "Hermetic Qabalah / Golden Dawn",
"notes": "The 22 letter paths use the Hermetic GD attribution (Tzaddi = Aquarius / The Star, He = Aries / The Emperor)."
},
"sephiroth": [
{
"number": 1,
"sephiraId": "keter",
"name": "Kether",
"nameHebrew": "כתר",
"translation": "Crown",
"planet": "Primum Mobile",
"intelligence": "The Admirable or Hidden Intelligence",
"tarot": "The 4 Aces",
"description": "The first path is called the Great or Hidden Intelligence (Supreme Crown). It is the light that expresses the first principle without a source, and is the primordial glory, that nothing created can attain its essence."
},
{
"number": 2,
"sephiraId": "chochmah",
"name": "Chokmah",
"nameHebrew": "חכמה",
"translation": "Wisdom",
"planet": "Zodiac",
"intelligence": "The Illuminating Intelligence",
"tarot": "The 4 Twos — Kings / Knights",
"description": "The second path is the path of the enlightened intellect, the crown of creation, the light of its equal unity, exalted above all like the head, which the Kabbalists call the Second Glory."
},
{
"number": 3,
"sephiraId": "binah",
"name": "Binah",
"nameHebrew": "בינה",
"translation": "Understanding",
"planet": "Saturn",
"intelligence": "The Sanctifying Intelligence",
"tarot": "The 4 Threes — Queens",
"description": "The third way is the sanctifying intelligence, the foundation of primordial wisdom, which is called the giver of faith and its root. It is the parent of faith, from which faith comes."
},
{
"number": 4,
"sephiraId": "hesed",
"name": "Chesed",
"nameHebrew": "חסד",
"translation": "Mercy",
"planet": "Jupiter",
"intelligence": "The Measuring, Cohesive, or Receptacular Intelligence",
"tarot": "The 4 Fours",
"description": "The fourth path is called Measure, or Cohesion, or Container, so called because it contains all the divine powers, and from it all the spiritual virtues of the highest beings emerge. The virtues are radiated from each other by the primordial radiant force."
},
{
"number": 5,
"sephiraId": "gevurah",
"name": "Geburah",
"nameHebrew": "גבורה",
"translation": "Strength",
"planet": "Mars",
"intelligence": "The Radical Intelligence",
"tarot": "The 4 Fives",
"description": "The Fifth Path is called the Radical Intelligence, which itself is the Equal Essence of the Oneness, and considers itself Wisdom, or Binah, or Intelligence, radiating from the primordial depths of Hochmah."
},
{
"number": 6,
"sephiraId": "tiferet",
"name": "Tiphareth",
"nameHebrew": "תפארת",
"translation": "Beauty",
"planet": "Sol",
"intelligence": "The Intelligence of the Mediating Influence",
"tarot": "The 4 Sixes — Princes",
"description": "The Sixth Path is called the Intelligence of Mediating Influence, for within it the influx of Emitters increases. For it causes an influx that flows into all the reservoirs of blessing, which become one with them."
},
{
"number": 7,
"sephiraId": "netzach",
"name": "Netzach",
"nameHebrew": "נצח",
"translation": "Victory",
"planet": "Venus",
"intelligence": "The Occult or Hidden Intelligence",
"tarot": "The 4 Sevens",
"description": "The Seventh Path is the Hidden Intelligence, which is the radiance of all the intellectual virtues recognized by the eyes of the intellect and the contemplation of faith."
},
{
"number": 8,
"sephiraId": "hod",
"name": "Hod",
"nameHebrew": "הוד",
"translation": "Splendour",
"planet": "Mercury",
"intelligence": "The Absolute or Perfect Intelligence",
"tarot": "The 4 Eights",
"description": "The Eighth Path is called the Absolute Path, or the Perfect Path, because it is the means of the First. The first has no root to cling to or depend on but the Gedulah from its own nature, the hidden places of its majesty."
},
{
"number": 9,
"sephiraId": "yesod",
"name": "Yesod",
"nameHebrew": "יסוד",
"translation": "Foundation",
"planet": "Luna",
"intelligence": "The Pure or Clear Intelligence",
"tarot": "The 4 Nines",
"description": "The Ninth Path is pure intelligence, so called because it purifies the counting laws, substantiates and corrects the conception of their explanations, and apportions their unity. They are united to that unity without diminution or division."
},
{
"number": 10,
"sephiraId": "malchut",
"name": "Malkuth",
"nameHebrew": "מלכות",
"translation": "Kingdom",
"planet": "Earth / Sphere of Elements",
"intelligence": "The Resplendent Intelligence",
"tarot": "The 4 Tens — Princesses",
"description": "The tenth path is the brilliant intelligence, for it is exalted above all heads and sits on the throne of Binah (the intelligence spoken of in the third path). It illuminates the radiance of all light, and causes the supply of influence to radiate from the King of Faces."
}
],
"paths": [
{
"pathNumber": 11,
"connectKey": "1_2",
"connects": { "from": 1, "to": 2 },
"connectIds": { "from": "keter", "to": "chochmah" },
"pillar": "horizontal-supernal",
"hebrewLetter": {
"char": "א",
"transliteration": "Aleph",
"letterType": "mother",
"meaning": "Ox"
},
"astrology": { "type": "element", "name": "Air" },
"tarot": { "card": "The Fool", "trumpNumber": 0, "tarotId": "0" },
"intelligence": "Scintillating Intelligence",
"description": "The Eleventh Path is the sparkling intelligence, for it is the nature of the veil placed close to the order of arrangement, and it is the special dignity given to it that it may stand before the face of the cause of causes.\n\nThis path is the essence of the 'veil' (ordained by this system). Path number 11 represents the relationship between paths, and it is here that we stand in the face of the 'Cause of Causes'."
},
{
"pathNumber": 12,
"connectKey": "1_3",
"connects": { "from": 1, "to": 3 },
"connectIds": { "from": "keter", "to": "binah" },
"pillar": "left-supernal",
"hebrewLetter": {
"char": "ב",
"transliteration": "Beth",
"letterType": "double",
"meaning": "House"
},
"astrology": { "type": "planet", "name": "Mercury" },
"tarot": { "card": "The Magician", "trumpNumber": 1, "tarotId": "1" },
"intelligence": "Intelligence of Transparency",
"description": "The Twelfth Path is the intellect of invisibility, for it is a kind of magnificence called Chazchazit. Khazkhajit is called the place from which visions of those who see in visions (i.e. prophecies received by prophets in visions) come from.\n\nThis path is the essence of the 'Ophan-wheel' of 'Greatness'. This is called 'the one who realizes in front of his eyes (Visualizer)', and 'Those who can see (Seers)' see what is realized here as 'vision'."
},
{
"pathNumber": 13,
"connectKey": "1_6",
"connects": { "from": 1, "to": 6 },
"connectIds": { "from": "keter", "to": "tiferet" },
"pillar": "middle",
"hebrewLetter": {
"char": "ג",
"transliteration": "Gimel",
"letterType": "double",
"meaning": "Camel"
},
"astrology": { "type": "planet", "name": "Luna" },
"tarot": { "card": "The High Priestess", "trumpNumber": 2, "tarotId": "2" },
"intelligence": "Uniting Intelligence",
"description": "The thirteenth path is the unifying intelligence, so called because it is itself the essence of glory. It is the perfection of the truth of individual spiritual beings.\n\nThis path is the essence of 'Glory'. It represents the achievement of true essence by united spirit beings.\n\nThe Thirteenth Path, as Gimel, has been called 'the dark night of the soul'. This thirteenth path crosses the abyss leading directly to Kether. The letter Gimel means 'camel' — a medium that crosses the seemingly infinite abyss desert alone. Gimel is the ultimate source of water and expresses the primordial essence of consciousness.\n\nTogether with Temperance (Samekh) and the Universe (Tav), these paths constitute the middle pillar in the tree of life. Walking the thirteenth path unites the human incarnation with the eternal self, and when safely crossing the abyss, the greatest initiation is bestowed. This path connects Tiphareth (the divine incarnation) with Kether, the highest source."
},
{
"pathNumber": 14,
"connectKey": "2_3",
"connects": { "from": 2, "to": 3 },
"connectIds": { "from": "chochmah", "to": "binah" },
"pillar": "horizontal-supernal",
"hebrewLetter": {
"char": "ד",
"transliteration": "Daleth",
"letterType": "double",
"meaning": "Door"
},
"astrology": { "type": "planet", "name": "Venus" },
"tarot": { "card": "The Empress", "trumpNumber": 3, "tarotId": "3" },
"intelligence": "Illuminating Intelligence",
"description": "The fourteenth path is the enlightening intelligence, so called because it is itself that Chashmal. Kashmal is the founder of the hidden fundamental concept of holiness and its preparatory stages.\n\nThis path is the essence of 'Speaking of Silence'. On this path one obtains esoteric teachings about the sacred secrets and their structures."
},
{
"pathNumber": 15,
"connectKey": "2_6",
"connects": { "from": 2, "to": 6 },
"connectIds": { "from": "chochmah", "to": "tiferet" },
"pillar": "right",
"hebrewLetter": {
"char": "ה",
"transliteration": "Heh",
"letterType": "simple",
"meaning": "Window"
},
"astrology": { "type": "zodiac", "name": "Aries" },
"tarot": { "card": "The Emperor", "trumpNumber": 4, "tarotId": "4" },
"intelligence": "Constituting Intelligence",
"description": "The fifteenth path is the constructive intelligence, so called because it constitutes the reality of creation in pure darkness. People have spoken of these meditations as 'the darkness that the Bible speaks of as the thick darkness that is the belt around it' (Job 38:9).\n\nThis path is a state of consolidation of the essence of creation in the 'Glooms of Purity'."
},
{
"pathNumber": 16,
"connectKey": "2_4",
"connects": { "from": 2, "to": 4 },
"connectIds": { "from": "chochmah", "to": "hesed" },
"pillar": "right",
"hebrewLetter": {
"char": "ו",
"transliteration": "Vav",
"letterType": "simple",
"meaning": "Nail"
},
"astrology": { "type": "zodiac", "name": "Taurus" },
"tarot": { "card": "The Hierophant", "trumpNumber": 5, "tarotId": "5" },
"intelligence": "Eternal Intelligence",
"description": "The sixteenth path is the victorious or eternal intelligence, so called because it is the joy of glory. Beyond it there is no other glory like it. It is also called the paradise prepared for the righteous.\n\nThis path is 'the Delight of the Glory'. Therefore, it is the lowest state of 'glory'. This is called the Garden of Eden, and it is a place prepared (as a reward) for the saint."
},
{
"pathNumber": 17,
"connectKey": "3_6",
"connects": { "from": 3, "to": 6 },
"connectIds": { "from": "binah", "to": "tiferet" },
"pillar": "left",
"hebrewLetter": {
"char": "ז",
"transliteration": "Zayin",
"letterType": "simple",
"meaning": "Sword"
},
"astrology": { "type": "zodiac", "name": "Gemini" },
"tarot": { "card": "The Lovers", "trumpNumber": 6, "tarotId": "6" },
"intelligence": "Disposing Intelligence",
"description": "The seventeenth path is the disposing intelligence, which gives faith to the righteous, by which they are clothed with the Holy Spirit, and which is called the fountain of virtue in the state of higher beings.\n\nThis path is reserved for faithful saints, and saints are sanctified here. It belongs to the supernal Entities, and it is called 'the foundation of beauty'."
},
{
"pathNumber": 18,
"connectKey": "3_5",
"connects": { "from": 3, "to": 5 },
"connectIds": { "from": "binah", "to": "gevurah" },
"pillar": "left",
"hebrewLetter": {
"char": "ח",
"transliteration": "Cheth",
"letterType": "simple",
"meaning": "Fence"
},
"astrology": { "type": "zodiac", "name": "Cancer" },
"tarot": { "card": "The Chariot", "trumpNumber": 7, "tarotId": "7" },
"intelligence": "House of Influence",
"description": "The Eighteenth Path is called the House of Influence (the flow of good things to created beings is increased by the greatness of its abundance), and from the midst of the search are drawn secrets and hidden meanings, which are the cause of all causes. It comes from the cause, dwells in its shadow, and clings to it.\n\nIn exploring this path, those who dwell in the shadow of the 'cause of causes' are handed over hidden mysteries and hints, and vow to thoroughly dig out the material that has flowed in from 'the cause of causes'."
},
{
"pathNumber": 19,
"connectKey": "4_5",
"connects": { "from": 4, "to": 5 },
"connectIds": { "from": "hesed", "to": "gevurah" },
"pillar": "horizontal-middle",
"hebrewLetter": {
"char": "ט",
"transliteration": "Teth",
"letterType": "simple",
"meaning": "Serpent"
},
"astrology": { "type": "zodiac", "name": "Leo" },
"tarot": { "card": "Strength", "trumpNumber": 8, "tarotId": "8" },
"intelligence": "Intelligence of the Secret of Spiritual Activities",
"description": "The Nineteenth Path is the intelligence of all the deeds of spiritual beings, so called because of the abundance spread by it from the highest blessings and the most exalted and sublime glory.\n\nThis path points to an influx from the 'Supreme Blessing' and the 'Glory of the Most High'."
},
{
"pathNumber": 20,
"connectKey": "4_6",
"connects": { "from": 4, "to": 6 },
"connectIds": { "from": "hesed", "to": "tiferet" },
"pillar": "right",
"hebrewLetter": {
"char": "י",
"transliteration": "Yod",
"letterType": "simple",
"meaning": "Hand"
},
"astrology": { "type": "zodiac", "name": "Virgo" },
"tarot": { "card": "The Hermit", "trumpNumber": 9, "tarotId": "9" },
"intelligence": "Intelligence of the Will",
"description": "The Twentieth Path is the intelligence of the will, so called because it is the means of preparing all and each of created beings. By this intellect the existence of primordial wisdom becomes known.\n\nThis path is the structure of all that is formed. Through this state of consciousness, we can know the nature of 'Original Wisdom'."
},
{
"pathNumber": 21,
"connectKey": "4_7",
"connects": { "from": 4, "to": 7 },
"connectIds": { "from": "hesed", "to": "netzach" },
"pillar": "right",
"hebrewLetter": {
"char": "כ",
"transliteration": "Kaph",
"letterType": "double",
"meaning": "Palm"
},
"astrology": { "type": "planet", "name": "Jupiter" },
"tarot": { "card": "Wheel of Fortune", "trumpNumber": 10, "tarotId": "10" },
"intelligence": "Intelligence of Conciliation",
"description": "The Twenty-first Path is the Intelligence of Reconciliation, so called because it receives the influence of God flowing into it from the blessings bestowed on all beings and each being.\n\nThis path is the state of receiving the influx of divinity, through which all beings receive the blessings of the gods.\n\nThe 21st path connects Netzach and Chesed, and directly reflects the power of Jupiter — benevolent king. The alphabetic attribute is the letter Kaph, which in its general form represents a cupped hand for receptivity. The letter Kaph means 'palm' as well as 'closed and clenched hands' and has the numeric value 100. Kaph is layered with mystical meanings closely linked to prophecy and vision.\n\nFundamental to the mysticism of this key is the cyclical nature of life — the regularity of the seasons, the repetitive actions of mankind and astronomical movements in the sky. Kabbalah teaches that the secret to mastering the environment is to be found through enlightenment, and that the center of the wheel is the only resting place."
},
{
"pathNumber": 22,
"connectKey": "5_6",
"connects": { "from": 5, "to": 6 },
"connectIds": { "from": "gevurah", "to": "tiferet" },
"pillar": "left",
"hebrewLetter": {
"char": "ל",
"transliteration": "Lamed",
"letterType": "simple",
"meaning": "Ox Goad"
},
"astrology": { "type": "zodiac", "name": "Libra" },
"tarot": { "card": "Justice", "trumpNumber": 11, "tarotId": "11" },
"intelligence": "Faithful Intelligence",
"description": "The Twenty-Second Path is the Faithful Intelligence, so called because by it spiritual virtues are increased and almost all the inhabitants of the earth are under its shadow.\n\nA state of enhanced spiritual power, through which all beings 'dwelling in the shadows' can be approached."
},
{
"pathNumber": 23,
"connectKey": "5_8",
"connects": { "from": 5, "to": 8 },
"connectIds": { "from": "gevurah", "to": "hod" },
"pillar": "horizontal-middle",
"hebrewLetter": {
"char": "מ",
"transliteration": "Mem",
"letterType": "mother",
"meaning": "Water"
},
"astrology": { "type": "element", "name": "Water" },
"tarot": { "card": "The Hanged Man", "trumpNumber": 12, "tarotId": "12" },
"intelligence": "Stable Intelligence",
"description": "The Twenty-Third Path is the Stable Intelligence, so called because it possesses the virtue of unity in all ranks.\n\nThis path is the power that sustains all Sephiroth. The 23rd Path runs between Hod and Geburah and is governed by the water element. The Hebrew letter Mem means 'waters' or sea. Water is considered the first principle in alchemy, the most stable and fundamental of the elements.\n\nThe Hanged Man depicts this stable intelligence because he cannot separate it from the Unity that water expresses. The most implicit symbolic system is the symbolic system of reversal or suspension of general consciousness, symbolizing immersion in superconsciousness and the absolute surrender of the individual will. The mythological concept of sacrifice — the dying god — is cosmic and cross-cultural: Odin hung on the world tree, Osiris in Egypt, Dionysus in Greece. The main image of a dying god is that of complete liberation, restoring the Creator back to the throne."
},
{
"pathNumber": 24,
"connectKey": "6_7",
"connects": { "from": 6, "to": 7 },
"connectIds": { "from": "tiferet", "to": "netzach" },
"pillar": "right",
"hebrewLetter": {
"char": "נ",
"transliteration": "Nun",
"letterType": "simple",
"meaning": "Fish"
},
"astrology": { "type": "zodiac", "name": "Scorpio" },
"tarot": { "card": "Death", "trumpNumber": 13, "tarotId": "13" },
"intelligence": "Imaginative Intelligence",
"description": "The twenty-fourth path is the intellect of the imagination, so called because it gives its harmonious elegance and likeness to all likenesses created in like ways.\n\nIn this path, all the illusions created appear in a form appropriate to their status."
},
{
"pathNumber": 25,
"connectKey": "6_9",
"connects": { "from": 6, "to": 9 },
"connectIds": { "from": "tiferet", "to": "yesod" },
"pillar": "middle",
"hebrewLetter": {
"char": "ס",
"transliteration": "Samekh",
"letterType": "simple",
"meaning": "Prop"
},
"astrology": { "type": "zodiac", "name": "Sagittarius" },
"tarot": { "card": "Temperance", "trumpNumber": 14, "tarotId": "14" },
"intelligence": "Intelligence of Temptation and Trial",
"description": "The twenty-fifth path is the intelligence of testing or trial, so called because it is the first temptation by which the Creator tests all righteous men.\n\nGod causes the called ones to undergo a fundamental test here. Together with the High Priestess (Gimel) and the Universe (Tav), Samekh (Temperance) constitutes the middle pillar in the tree of life. Both Samekh and Gimel have been called 'the dark night of the soul', because both cross an abyss — Samekh crosses the lesser abyss on its journey to Tiphareth."
},
{
"pathNumber": 26,
"connectKey": "6_8",
"connects": { "from": 6, "to": 8 },
"connectIds": { "from": "tiferet", "to": "hod" },
"pillar": "left",
"hebrewLetter": {
"char": "ע",
"transliteration": "Ayin",
"letterType": "simple",
"meaning": "Eye"
},
"astrology": { "type": "zodiac", "name": "Capricorn" },
"tarot": { "card": "The Devil", "trumpNumber": 15, "tarotId": "15" },
"intelligence": "Renovating Intelligence",
"description": "The twenty-sixth path is called the Renovating Intelligence, because the Holy God by it renews all the changing things that are renewed by the creation of the world.\n\nThe 26th Path is called the 'Resurrecting Intelligence'. Ayin is said to harbor many mysteries; Gematria equates Ayin to 70 and also the word for 'secret' (SVD). The Ayin, or eye, is the organ of vision — it sees the exterior and appearance of things. In Qabalah, the world of appearances is an illusion arising from our own perception. At Ayin, we learn to use the intelligent eyes of Hod to see anew in the light of beauty illuminated by Tiphareth. Ascension on this path is the process of transferring consciousness from the concrete mind (ego) to the abstract mind (Higher Self)."
},
{
"pathNumber": 27,
"connectKey": "7_8",
"connects": { "from": 7, "to": 8 },
"connectIds": { "from": "netzach", "to": "hod" },
"pillar": "horizontal-lower",
"hebrewLetter": {
"char": "פ",
"transliteration": "Pe",
"letterType": "double",
"meaning": "Mouth"
},
"astrology": { "type": "planet", "name": "Mars" },
"tarot": { "card": "The Tower", "trumpNumber": 16, "tarotId": "16" },
"intelligence": "Exciting Intelligence",
"description": "The Twenty-seventh Path is the Exciting Intelligence, so called because by it the intelligence of all created beings and their stimuli or motions under the highest heavens was created.\n\nAll creatures created in the higher dimensions — including their sentience — were created through this path."
},
{
"pathNumber": 28,
"connectKey": "7_9",
"connects": { "from": 7, "to": 9 },
"connectIds": { "from": "netzach", "to": "yesod" },
"pillar": "right",
"hebrewLetter": {
"char": "צ",
"transliteration": "Tzaddi",
"letterType": "simple",
"meaning": "Fish-hook"
},
"astrology": { "type": "zodiac", "name": "Aquarius" },
"tarot": { "card": "The Star", "trumpNumber": 17, "tarotId": "17" },
"intelligence": "Natural Intelligence",
"description": "The twenty-eighth path is the natural intelligence, so called because the characteristics of all beings under the solar sphere are perfected and established through it.\n\nThe nature of everything that exists under the sun (belonging to the realm of the sun) is established through this consciousness."
},
{
"pathNumber": 29,
"connectKey": "7_10",
"connects": { "from": 7, "to": 10 },
"connectIds": { "from": "netzach", "to": "malchut" },
"pillar": "right",
"hebrewLetter": {
"char": "ק",
"transliteration": "Qoph",
"letterType": "simple",
"meaning": "Back of Head"
},
"astrology": { "type": "zodiac", "name": "Pisces" },
"tarot": { "card": "The Moon", "trumpNumber": 18, "tarotId": "18" },
"intelligence": "Corporeal Intelligence",
"description": "The twenty-ninth path is the bodily intelligence, so called because it gives form to all the worlds and all bodies formed under their multiplication.\n\nThis path describes the development of the materialized according to the systems of each domain.\n\nThe 29th route is another route that threatens the traveler with the risk of disintegration. Since this path leads to Netzach it can cause mental disruption — what is indicated is the renunciation of individuality. The journey from Malkuth to Netzach is a confluence of physical and emotional natures. All paths leading towards Netzach are Orphic paths, similar to Orpheus who enchanted nature with the gift of song.\n\nThe letter Qoph has a value of 100 and also translates as 'awakening'. Called physical intelligence, this is truly the pathway to body consciousness. One of the most important lessons of this path is that it is not to our advantage to try to separate the 'higher state of mind' from the 'lower coarse' form of the body."
},
{
"pathNumber": 30,
"connectKey": "8_9",
"connects": { "from": 8, "to": 9 },
"connectIds": { "from": "hod", "to": "yesod" },
"pillar": "horizontal-lower",
"hebrewLetter": {
"char": "ר",
"transliteration": "Resh",
"letterType": "double",
"meaning": "Head"
},
"astrology": { "type": "planet", "name": "Sol" },
"tarot": { "card": "The Sun", "trumpNumber": 19, "tarotId": "19" },
"intelligence": "Collecting Intelligence",
"description": "The Thirtieth Path is the Gathering Intelligence, so called because the astrologers infer from it the judgments of the stars and celestial signs, and the perfection of their learning, according to the laws of their revolutions.\n\nThrough this path, 'the one who spreads the heavens' increases control over the stars and constellations while establishing the knowledge of the chariot wheels in each realm.\n\nThis 30th route runs between Yesod and Hod. This path leads from the realm of the moon to the realm of reason, and although it is gloomy and cold, it is the coolness of the creative imagination by the power of the intellect. However, the full power of the sun shines there. The Hebrew letter Resh means 'head', and its spelling equals 510 or 15 — the same numeric value as Hod (HVD = 15). This path is a balance between mind and body, standing at the heart of the relationship between intellect and intuition. It is often described as a point of profound encounter with the inner master."
},
{
"pathNumber": 31,
"connectKey": "8_10",
"connects": { "from": 8, "to": 10 },
"connectIds": { "from": "hod", "to": "malchut" },
"pillar": "left",
"hebrewLetter": {
"char": "ש",
"transliteration": "Shin",
"letterType": "mother",
"meaning": "Tooth"
},
"astrology": { "type": "element", "name": "Fire" },
"tarot": { "card": "Judgement", "trumpNumber": 20, "tarotId": "20" },
"intelligence": "Perpetual Intelligence",
"description": "The Thirty-First Path is the Enduring Intelligence, so why is it called that? For it regulates the motions of the sun and moon in their own order, each in its own proper orbit.\n\nThis path manages the path of the sun and moon so that they maintain their respective optimal orbits according to the laws of nature."
},
{
"pathNumber": 32,
"connectKey": "9_10",
"connects": { "from": 9, "to": 10 },
"connectIds": { "from": "yesod", "to": "malchut" },
"pillar": "middle",
"hebrewLetter": {
"char": "ת",
"transliteration": "Tav",
"letterType": "double",
"meaning": "Cross (Tau)"
},
"astrology": { "type": "planet", "name": "Saturn" },
"tarot": { "card": "The Universe", "trumpNumber": 21, "tarotId": "21" },
"intelligence": "Administrative Intelligence",
"description": "The Thirty-Second Path is the Administrative Intelligence, so called because it directs and unites the seven planets in all their operations and even all of them in their proper course.\n\nThis path is given this name because it is the path that governs the passage between the formative world and the material world. The Universe card on this path is called 'The Door to the Inner Plane'."
}
]
}

View File

@@ -1,54 +0,0 @@
{
"earth": {
"id": "earth",
"title": {
"en": "Kerub of Earth"
},
"face": {
"en": "Bull",
"he": "שור",
"roman": "Shor"
},
"zodiacId": "taurus",
"elementId": "earth"
},
"air": {
"id": "air",
"title": {
"en": "Kerub of Air"
},
"face": {
"en": "Man",
"he": "אדם",
"roman": "Adam"
},
"zodiacId": "aquarius",
"elementId": "air"
},
"water": {
"id": "water",
"title": {
"en": "Kerub of Water"
},
"face": {
"en": "Eagle",
"he": "נשר",
"roman": "Nesher"
},
"zodiacId": "scorpio",
"elementId": "water"
},
"fire": {
"id": "fire",
"title": {
"en": "Kerub of Fire"
},
"face": {
"en": "Lion",
"he": "אריה",
"roman": "Aryeh"
},
"zodiacId": "leo",
"elementId": "fire"
}
}

View File

@@ -1,250 +0,0 @@
{
"1_2": {
"id": "1_2",
"hermetic": {
"hebrewLetterId": "alef",
"pathNo": 11,
"tarotId": "0"
},
"hebrew": {
"hebrewLetterId": "he"
}
},
"1_3": {
"id": "1_3",
"hermetic": {
"hebrewLetterId": "bet",
"pathNo": 12,
"tarotId": "1"
},
"hebrew": {
"hebrewLetterId": "vav"
}
},
"1_6": {
"id": "1_6",
"hermetic": {
"hebrewLetterId": "gimel",
"pathNo": 13,
"tarotId": "2"
},
"hebrew": {
"hebrewLetterId": "dalet"
}
},
"2_3": {
"id": "2_3",
"hermetic": {
"hebrewLetterId": "dalet",
"pathNo": 14,
"tarotId": "3"
},
"hebrew": {
"hebrewLetterId": "shin"
}
},
"2_4": {
"id": "2_4",
"hermetic": {
"hebrewLetterId": "vav",
"pathNo": 16,
"tarotId": "5"
},
"hebrew": {
"hebrewLetterId": "bet"
}
},
"2_5": {
"id": "2_5",
"hebrew": {
"hebrewLetterId": "zayin"
}
},
"2_6": {
"id": "2_6",
"hermetic": {
"hebrewLetterId": "he",
"pathNo": 15,
"tarotId": "4"
},
"hebrew": {
"hebrewLetterId": "tet"
}
},
"3_4": {
"id": "3_4",
"hebrew": {
"hebrewLetterId": "qof"
}
},
"3_5": {
"id": "3_5",
"hermetic": {
"hebrewLetterId": "het",
"pathNo": 18,
"tarotId": "7"
},
"hebrew": {
"hebrewLetterId": "gimel"
}
},
"3_6": {
"id": "3_6",
"hermetic": {
"hebrewLetterId": "zayin",
"pathNo": 17,
"tarotId": "6"
},
"hebrew": {
"hebrewLetterId": "ayin"
}
},
"4_5": {
"id": "4_5",
"hermetic": {
"hebrewLetterId": "tet",
"pathNo": 19,
"tarotId": "8"
},
"hebrew": {
"hebrewLetterId": "alef"
}
},
"4_6": {
"id": "4_6",
"hermetic": {
"hebrewLetterId": "yod",
"pathNo": 20,
"tarotId": "9"
},
"hebrew": {
"hebrewLetterId": "het"
}
},
"4_7": {
"id": "4_7",
"hermetic": {
"hebrewLetterId": "kaf",
"pathNo": 21,
"tarotId": "10"
},
"hebrew": {
"hebrewLetterId": "kaf"
}
},
"5_6": {
"id": "5_6",
"hermetic": {
"hebrewLetterId": "lamed",
"pathNo": 22,
"tarotId": "11"
},
"hebrew": {
"hebrewLetterId": "tsadi"
}
},
"5_8": {
"id": "5_8",
"hermetic": {
"hebrewLetterId": "mem",
"pathNo": 23,
"tarotId": "12"
},
"hebrew": {
"hebrewLetterId": "pe"
}
},
"6_7": {
"id": "6_7",
"hermetic": {
"hebrewLetterId": "nun",
"pathNo": 24,
"tarotId": "13"
},
"hebrew": {
"hebrewLetterId": "yod"
}
},
"6_8": {
"id": "6_8",
"hermetic": {
"hebrewLetterId": "ayin",
"pathNo": 26,
"tarotId": "15"
},
"hebrew": {
"hebrewLetterId": "samekh"
}
},
"6_9": {
"id": "6_9",
"hermetic": {
"hebrewLetterId": "samekh",
"pathNo": 25,
"tarotId": "14"
},
"hebrew": {
"hebrewLetterId": "resh"
}
},
"7_8": {
"id": "7_8",
"hermetic": {
"hebrewLetterId": "pe",
"pathNo": 27,
"tarotId": "16"
},
"hebrew": {
"hebrewLetterId": "mem"
}
},
"7_9": {
"id": "7_9",
"hermetic": {
"hebrewLetterId": "tsadi",
"pathNo": 28,
"tarotId": "17"
},
"hebrew": {
"hebrewLetterId": "nun"
}
},
"7_10": {
"id": "7_10",
"hermetic": {
"hebrewLetterId": "qof",
"pathNo": 29,
"tarotId": "18"
}
},
"8_9": {
"id": "8_9",
"hermetic": {
"hebrewLetterId": "resh",
"pathNo": 30,
"tarotId": "19"
},
"hebrew": {
"hebrewLetterId": "lamed"
}
},
"8_10": {
"id": "8_10",
"hermetic": {
"hebrewLetterId": "shin",
"pathNo": 31,
"tarotId": "20"
}
},
"9_10": {
"id": "9_10",
"hermetic": {
"hebrewLetterId": "tav",
"pathNo": 32,
"tarotId": "21"
},
"hebrew": {
"hebrewLetterId": "tav"
}
}
}

View File

@@ -1,324 +0,0 @@
{
"keter": {
"index": 1,
"id": "keter",
"name": {
"he": "כתר",
"roman": "Keter",
"en": "Crown"
},
"color": {
"king": "brillliance",
"kingWeb": "white",
"queen": "white",
"queenWeb": "white"
},
"chakraId": "crown",
"godNameId": "ehiyeh",
"scent": "ambergris",
"body": "cranium",
"bodyPos": "above-head",
"planetId": "primum-mobile",
"tenHeavens": {
"en": "1st Swirlings / Primum Mobile",
"he": "ראשית הגלגולים",
"roman": "Roshit haGilgulim"
},
"stone": "diamond",
"archangelIdId": "metatron",
"soulId": "yechidah",
"angelicOrderId": "chayot-hakodesh",
"gdGradeId": "10=1",
"next": "chochmah"
},
"chochmah": {
"index": 2,
"id": "chochmah",
"name": {
"he": "חכמה",
"en": "Wisdom",
"roman": "Chochmah"
},
"color": {
"king": "soft-blue",
"kingWeb": "SkyBlue",
"queen": "gray",
"queenWeb": "gray"
},
"scent": "musk",
"chakraId": "third-eye",
"godNameId": "yah",
"body": "left-face",
"bodyPos": "left-temple",
"planetId": "zodiac",
"tenHeavens": {
"en": "The Zodiac",
"roman": "Mazalot",
"he": "מזלות"
},
"stone": "Star Ruby; Turquoise",
"archangelId": "raziel",
"soulId": "chaya",
"angelicOrderId": "auphanim",
"gdGradeId": "9=2",
"prev": "keter",
"next": "binah"
},
"binah": {
"index": 3,
"id": "binah",
"name": {
"he": "בינה",
"en": "Understanding",
"roman": "Binah"
},
"color": {
"king": "deep-red-violet",
"kingWeb": "#c0448f",
"queen": "black",
"queenWeb": "#222",
"queenWebText": "#ccc"
},
"chakraId": "third-eye",
"godNameId": "yhvh-elohim",
"scent": "myrrh; civet",
"body": "right-face",
"bodyPos": "right-temple",
"planetId": "saturn",
"stone": "pearl; star sapphire",
"archangelId": "tzaphkiel",
"soulId": "neshama",
"angelicOrderId": "aralim",
"gdGradeId": "8=3",
"prev": "chochmah",
"next": "hesed"
},
"hesed": {
"index": 4,
"id": "hesed",
"name": {
"he": "חסד",
"en": "Mercy",
"roman": "Chesed"
},
"color": {
"king": "deep-violet",
"kingWeb": "#330066",
"kingWebText": "#ccc",
"queen": "blue",
"queenWeb": "#0066ff"
},
"chakraId": "throat",
"godNameId": "el",
"scent": "cedar",
"body": "left-arm",
"bodyPos": "left-shoulder",
"planetId": "jupiter",
"stone": "saphire; amethyst",
"archangelId": "tzadkiel",
"soulId": null,
"angelicOrderId": "chashmalim",
"gdGradeId": "7=4",
"prev": "binah",
"next": "gevurah"
},
"gevurah": {
"index": 5,
"id": "gevurah",
"name": {
"he": "גבורה",
"en": "Strength",
"roman": "Gevurah"
},
"color": {
"king": "orange",
"kingWeb": "orange",
"queen": "scarlet",
"queenWeb": "#ff2400"
},
"chakraId": "throat",
"godNameId": "elohim-gibor",
"scent": "tobacco",
"body": "right-arm",
"bodyPos": "right-shoulder",
"planetId": "mars",
"stone": "ruby",
"archangelId": "khamael",
"soulId": null,
"angelicOrderId": "seraphim",
"gdGradeId": "6=5",
"prev": "hesed",
"next": "tiferet"
},
"tiferet": {
"index": 6,
"id": "tiferet",
"name": {
"he": "תפארת",
"en": "Beauty",
"roman": "Tiferet"
},
"color": {
"king": "rose-pink",
"kingWeb": "#f7cac1",
"queen": "gold",
"queenWeb": "gold"
},
"chakraId": "heart",
"godNameId": "yhvh-eloha-vedaat",
"scent": "olibanum",
"body": "breast",
"bodyPos": "heart",
"planetId": "sol",
"stone": "topaz",
"archangelId": "raphael",
"soulId": "ruach",
"angelicOrderId": "malachim",
"gdGradeId": "5=6",
"prev": "gevurah",
"next": "netzach"
},
"netzach": {
"index": 7,
"id": "netzach",
"name": {
"he": "נצח",
"en": "Victory",
"roman": "Netzach"
},
"color": {
"king": "yellow-orange",
"kingWeb": "#ffae42",
"queen": "emerald",
"queenWeb": "#50C878"
},
"chakraId": "solar-plexus",
"godNameId": "yhvh-tzvaot",
"scent": "rose, red sandal",
"body": "loins; hips",
"bodyPos": "left-hip",
"planetId": "venus",
"stone": "emerald",
"archangelId": "haniel",
"soulId": null,
"angelicOrderId": "elohim",
"gdGradeId": "4=7",
"prev": "tiferet",
"next": "hod"
},
"hod": {
"index": 8,
"id": "hod",
"name": {
"he": "הוד",
"en": "Splendor",
"roman": "Hod"
},
"color": {
"king": "violet",
"kingWeb": "#ee82ee",
"queen": "orange",
"queenWeb": "orange"
},
"chakraId": "solar-plexus",
"godNameId": "elohim-tzvaot",
"scent": "storax",
"body": "loins; legs",
"bodyPos": "right-hip",
"planetId": "mercury",
"stone": "quartz",
"archangelId": "michael",
"soulId": null,
"angelicOrderId": "bnei-elohim",
"gdGradeId": "3=8",
"prev": "netzach",
"next": "yesod"
},
"yesod": {
"index": 9,
"id": "yesod",
"name": {
"he": "יסוד",
"en": "Foundation",
"roman": "Yesod"
},
"color": {
"king": "blue-violet",
"kingWeb": "#2014d4",
"kingWebText": "#aaa",
"queen": "violet",
"queenWeb": "violet"
},
"chakraId": "sacral",
"godNameId": "shadai-el-chai",
"scent": "jasmine",
"body": "genitals",
"bodyPos": "genitals",
"planetId": "luna",
"stone": "quartz",
"archangelId": "gabriel",
"soulId": "nephesh",
"angelicOrderId": "kerubim",
"gdGradeId": "2=9",
"prev": "hod",
"next": "malchut"
},
"malchut": {
"index": 10,
"id": "malchut",
"name": {
"he": "מלכות",
"en": "Kingdom",
"roman": "Malchut"
},
"color": {
"king": "yellow",
"kingWeb": "yellow",
"queen": "russet,citrine,olive,black",
"queenWeb": "#80461B,#ba0,#880,#000000",
"queenWebText": "#eee"
},
"chakraId": "root",
"godNameId": "adonai-haaretz",
"scent": "",
"body": "feet",
"bodyPos": "feet",
"planetId": "olam-yesodot",
"tenHeavens": {
"en": "Sphere of the Elements",
"he": "עולם יסודות",
"roman": "Olam Yesodoth"
},
"stone": "rock crystal",
"archangelId": "sandalphon",
"soulId": "guph",
"angelicOrderId": "ishim",
"gdGradeId": "1=10",
"prev": "yesod"
},
"daat": {
"index": 11,
"id": "daat",
"name": {
"he": "דעת",
"en": "Knowledge",
"roman": "Da'at"
},
"color": {
"queen": "lavendar",
"queenWeb": "#E6E6FAEE",
"queenWebText": "#000",
"strokeDasharray": 2,
"strokeColor": "#000000AA"
},
"chakraId": "",
"godNameId": "yhvh-elohim",
"scent": "",
"body": "throat",
"bodyPos": "throat",
"stone": "",
"archangelId": "",
"soulId": "",
"angelicOrderId": ""
}
}

View File

@@ -1,107 +0,0 @@
[
{
"name": {
"he": "והויה",
"en": "Vehuiah"
},
"attribute": {
"en": "God is High and Exalted above all things."
},
"godName": "Jehovah",
"angelicOrderId": "seraphim",
"presidesOver": [
[
3,
20
],
[
4,
30
],
[
8,
11
],
[
10,
22
],
[
1,
2
]
],
"text": {
"en": "I'r, genius, Vehuiah והויה. Its attribute is interpreted (God high and “exalted above all things). He does-mine on the Hebrews. The name of God, according to this language, is named Jehovah. He governs the first ray of the East in the spring season, that is to say the five first degrees of, the sphere which begin on March 20 at midnight until the 24th, inclusive, corresponding to the first decade of the sacred calendar, and at the first genius, named Chontaré, under the influence of Mars: this genius, and those which follow, up to the 8th, belong to the first order of angels that the Orthodox call the choir of seraphim. He lives in the region of fire; his sign is the ram, and he presides over the following five days: March 20, April 31, August II, October 22 and January 2; the invocation is made towards the Orient, from precisely midnight until 20 minutes past midnight, to get lights. It is by virtue of these names divine that one becomes illuminated with the spirit of God; we must pronounce them at midnight precisely until midnight 20 mid-nut:s, reciting 16 third verse of the 3rd psalm. (And you Domine susceplor meus et gloria mea 61 exallans caput meum). You must have your talisman prepared according to the principles principles of cabalistic art. (See chapter 8 on this subject.) The person who is born under the influence of this genius has the took subtle; she is gifted with great sagacity, passion- born for the sciences and the arts, capable of undertaking and to perform the most difficult things; she will love the state military, because of the influence of Mars; she will have burst of energy being damaged by fire. The evil genius influences turbulent men; he quickness and anger dominate.\n(1) See the book entitled Tbrezcze, or the only Way of Divine and human sciences, edition of year 7, page 226."
}
},
{
"name": {
"he": "יליאל",
"en": "Jeliel"
},
"attribute": {
"en": "Helpful God"
},
"godName": "Aydy",
"presidesOver": [
[
3,
21
],
[
6,
1
],
[
8,
12
],
[
10,
23
],
[
1,
3
]
],
"text": {
"en": "2° Jeliel יליאל. His attribute (helpful God). 11 do- sure mine Turkey (these people give God the name Aydy). Its radius starts from 16 6* degree up to . 10%, inclusive, corresponding to the influence of genius . named Asican (see the sacred calendar), and at the first first decade. He presides over the following 165 days: March 21, June 1, August 12, October 23, January 3*. \nThis genius is invoked to appease popular seditions. laries, and to obtain victory against those who attack you attack unfairly. The request must be pronounced with the name of the genius, and recite 16 20° verse of Psalm 21. (Tu autem Domine ne eldngaveris auxillum tuum a me ad defenseem meam conspice). The favorable hour includes starts from midnight 20 minutes until midnight 40. \nThis genius dominates over kings and princes; he maintains their subjects in obedience; it influences the generation of all 165 beings that exist in 16 animal kingdoms; he restores peace among spouses and marital fidelity. Those who are born under this influence have a cheerful spirit, ma- pleasant and gallant manners; they will be passionate about it sex.\nThe contrary genius dominates everything that is harmful to animated beings; he likes to separate spouses by pushing them aside . 06 their duties; he inspires a taste for celibacy and the bad good morals."
}
},
{
"name": {
"en": "Sitael",
"he": "סיטאל"
},
"attribute": {
"en": "God, the hope of all creatures."
},
"presidesOver": [
[
3,
22
],
[
6,
2
],
[
8,
13
],
[
10,
24
],
[
1,
4
]
],
"text": {
"en": "Sitael סיטאל. His attribute (God, the hope all creatures.) Its radius starts from 16 5 degree of .1 500616 up to 15°., inclusively corres- laying in the second decade and the genius named Chon- stained, under the influence of the sun; he presides over the following days: March 22, June 2, August 13, October 24, January 4. We invoke this genius against 165 adversities; we pronounce the request with the divine names and the 2nd verse of the psalm 90. (Dicet Domino: suceblor meus es tu et refugium meum: Deus meus, sperabo in eum.) The favorable hour starts from midnight 40 minutes until one o'clock. He dominates over nobility, magnanimity and great em- plows; it protects against weapons and ferocious beasts. There no one born under this influence loves the truth; she will keep her word, and she will be happy to oblige those who will need its services. The contrary genius dominates hypocrisy, ingratitude and perjury."
}
}
]

View File

@@ -1,88 +0,0 @@
{
"yechidah": {
"id": "yechidah",
"name": {
"en": "unity",
"he": "יחידה",
"roman": "yechida"
},
"title": {
"en": "Unity"
}
},
"chaya": {
"id": "chaya",
"aliases": [
"chiah"
],
"name": {
"en": "life force",
"he": "חיה",
"roman": "chiah",
"altRoman": "chaya"
},
"title": {
"en": "Life Force"
},
"desc": {
"en": "The Chiah is the Life Force itself. It is our true identity, ultimately a pure reflection of the Supreme Consciousness of deity."
}
},
"neshama": {
"id": "neshama",
"aliases": [
"neshamah"
],
"name": {
"en": "soul-intuition",
"he": "נשמה",
"roman": "neshamah",
"altRoman": "neshama"
},
"title": {
"en": "Soul-Intuition"
},
"desc": {
"en": "The Neshamah is the part of our soul that transcends our thinking processes."
}
},
"ruach": {
"id": "ruach",
"name": {
"en": "intellect",
"he": "רוח",
"roman": "ruach"
},
"title": {
"en": "Intellect"
},
"desc": {
"en": "The Ruach is the part of our soul that monopolizes attention to such a degree that we identify with the thinking process."
}
},
"nephesh": {
"id": "nephesh",
"name": {
"en": "animal soul",
"he": "נפש",
"roman": "nephesh"
},
"title": {
"en": "Animal Soul"
},
"desc": {
"en": "The Nephesh is primitive consciousness shared with animal, plant, and mineral kingdoms, expressed through instincts, appetite, emotion, sex drive, and survival mechanisms."
}
},
"guph": {
"id": "guph",
"name": {
"en": "body",
"he": "גוף",
"roman": "guph"
},
"title": {
"en": "Body"
}
}
}

View File

@@ -1,100 +0,0 @@
{
"reuben": {
"id": "reuben",
"name": {
"en": "Reuben",
"he": "ראובן"
}
},
"simeon": {
"id": "simeon",
"name": {
"en": "Simeon",
"he": "שמעון"
}
},
"levi": {
"id": "levi",
"name": {
"en": "Levi",
"he": "לוי"
}
},
"judah": {
"id": "judah",
"name": {
"en": "Judah",
"he": "יהודה"
}
},
"dan": {
"id": "dan",
"name": {
"en": "Dan",
"he": "דן"
}
},
"naphtali": {
"id": "naphtali",
"name": {
"en": "Naphtali",
"he": "נפתלי"
}
},
"gad": {
"id": "gad",
"name": {
"en": "Gad",
"he": "גד"
}
},
"asher": {
"id": "asher",
"name": {
"en": "Asher",
"he": "אשר"
}
},
"issachar": {
"id": "issachar",
"name": {
"en": "Issachar",
"he": "יששכר"
}
},
"zebulun": {
"id": "zebulun",
"name": {
"en": "Zebulun",
"he": "זבולון"
}
},
"joseph": {
"id": "joseph",
"name": {
"en": "Joseph",
"he": "יוסף"
}
},
"benjamin": {
"id": "benjamin",
"name": {
"en": "Benjamin",
"he": "בנימין"
}
},
"ephraim": {
"id": "ephraim",
"name": {
"en": "Ephraim",
"he": "אפרים"
}
},
"manasseh": {
"id": "manasseh",
"name": {
"en": "Menasseh",
"he": "בנימין"
}
}
}

View File

@@ -1,120 +0,0 @@
{
"meta": {
"description": "Digital root number correspondences for values 0 through 9, including arithmetic opposites that sum to 9.",
"notes": "Use this dataset to attach future number meanings, keywords, tarot links, and kabbalah links without changing UI code.",
"version": 1
},
"entries": [
{
"value": 0,
"label": "Zero",
"opposite": 9,
"digitalRoot": 0,
"summary": "Potential, void, and the unmanifest source before form.",
"keywords": [],
"associations": {
"kabbalahNode": 10,
"tarotTrumpNumbers": [0]
}
},
{
"value": 1,
"label": "One",
"opposite": 8,
"digitalRoot": 1,
"summary": "Initiation, identity, and singular will.",
"keywords": [],
"associations": {
"kabbalahNode": 1
}
},
{
"value": 2,
"label": "Two",
"opposite": 7,
"digitalRoot": 2,
"summary": "Polarity, reflection, and relationship.",
"keywords": [],
"associations": {
"kabbalahNode": 2
}
},
{
"value": 3,
"label": "Three",
"opposite": 6,
"digitalRoot": 3,
"summary": "Formation, synthesis, and creative expression.",
"keywords": [],
"associations": {
"kabbalahNode": 3
}
},
{
"value": 4,
"label": "Four",
"opposite": 5,
"digitalRoot": 4,
"summary": "Order, structure, and stable foundation.",
"keywords": [],
"associations": {
"kabbalahNode": 4
}
},
{
"value": 5,
"label": "Five",
"opposite": 4,
"digitalRoot": 5,
"summary": "Motion, adaptation, and dynamic change.",
"keywords": [],
"associations": {
"kabbalahNode": 5
}
},
{
"value": 6,
"label": "Six",
"opposite": 3,
"digitalRoot": 6,
"summary": "Balance, harmony, and reciprocal flow.",
"keywords": [],
"associations": {
"kabbalahNode": 6
}
},
{
"value": 7,
"label": "Seven",
"opposite": 2,
"digitalRoot": 7,
"summary": "Insight, analysis, and inner seeking.",
"keywords": [],
"associations": {
"kabbalahNode": 7
}
},
{
"value": 8,
"label": "Eight",
"opposite": 1,
"digitalRoot": 8,
"summary": "Power, momentum, and cyclical force.",
"keywords": [],
"associations": {
"kabbalahNode": 8
}
},
{
"value": 9,
"label": "Nine",
"opposite": 0,
"digitalRoot": 9,
"summary": "Completion, integration, and return.",
"keywords": [],
"associations": {
"kabbalahNode": 9
}
}
]
}

View File

@@ -1,155 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="pentagram.svg"
id="svg8"
version="1.1"
viewBox="0 0 210 297"
height="297mm"
width="210mm">
<defs
id="defs2">
<filter
id="filter1536"
style="color-interpolation-filters:sRGB;"
x="-0.5"
width="2"
y="-0.5"
height="2"
inkscape:menu-tooltip="Gel Ridge metallized at its top"
inkscape:menu="Ridges"
inkscape:label="Metallized Ridge">
<feGaussianBlur
id="feGaussianBlur1512"
result="result1"
stdDeviation="1" />
<feGaussianBlur
id="feGaussianBlur1514"
in="result1"
result="result6"
stdDeviation="8" />
<feComposite
id="feComposite1516"
result="result8"
in2="result1"
in="result6"
operator="atop" />
<feComposite
id="feComposite1518"
in2="result8"
in="result6"
result="fbSourceGraphic"
operator="xor" />
<feColorMatrix
id="feColorMatrix1520"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 2 0 "
in="fbSourceGraphic"
result="fbSourceGraphicAlpha" />
<feGaussianBlur
id="feGaussianBlur1522"
stdDeviation="2.5"
in="fbSourceGraphicAlpha"
result="result0" />
<feSpecularLighting
id="feSpecularLighting1526"
in="result0"
result="result1"
lighting-color="rgb(255,255,255)"
surfaceScale="4"
specularConstant="1"
specularExponent="35">
<fePointLight
id="fePointLight1524"
x="-5000"
y="-10000"
z="20000" />
</feSpecularLighting>
<feComposite
id="feComposite1528"
in2="fbSourceGraphicAlpha"
in="result1"
result="result2"
operator="in" />
<feComposite
id="feComposite1530"
in2="result2"
in="fbSourceGraphic"
result="result4"
operator="arithmetic"
k2="1"
k3="1" />
<feComposite
id="feComposite1532"
result="result91"
in2="result4"
in="result9"
operator="atop" />
<feBlend
id="feBlend1534"
in2="result91"
mode="multiply" />
</filter>
</defs>
<sodipodi:namedview
inkscape:window-maximized="1"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:window-height="1013"
inkscape:window-width="1920"
showgrid="false"
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="mm"
inkscape:cy="496.57452"
inkscape:cx="442.01907"
inkscape:zoom="0.7"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<g
inkscape:export-ydpi="86.660004"
inkscape:export-xdpi="86.660004"
inkscape:export-filename="/home/dragon/pentagram.png"
style="filter:url(#filter1536)"
id="g1456">
<circle
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:0.572165;fill-rule:nonzero;stroke:#000080;stroke-width:3.315;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal;enable-background:accumulate"
id="path833"
cx="105.227"
cy="96.346657"
r="51.29203" />
<path
id="path838"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:0.572165;fill-rule:nonzero;stroke:#000080;stroke-width:3.31511;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal;enable-background:accumulate"
inkscape:transform-center-x="-0.065531874"
inkscape:transform-center-y="-4.6880333"
d="M 75.639665,136.13259 105.26351,46.265158 134.12007,136.3819 57.805333,80.437381 152.42861,80.84077 Z"
sodipodi:nodetypes="cccccc" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -1,269 +0,0 @@
{
"meta": {
"source": "NASA Planetary Fact Sheet (selected values, rounded)",
"notes": "Core physical/orbital values are approximate and intended for educational UI display."
},
"planets": [
{
"id": "mercury",
"name": "Mercury",
"symbol": "☿︎",
"classification": "Terrestrial planet",
"summary": "The smallest planet and closest to the Sun, with extreme day/night temperature swings.",
"meanDistanceFromSun": {
"kmMillions": 57.9,
"au": 0.387
},
"orbitalPeriod": {
"days": 87.969,
"years": 0.241
},
"rotationPeriodHours": 1407.6,
"radiusKm": 2439.7,
"diameterKm": 4879.4,
"massKg": 3.3011e23,
"gravityMs2": 3.7,
"escapeVelocityKms": 4.25,
"axialTiltDeg": 0.03,
"averageTempC": 167,
"moons": 0,
"atmosphere": "Extremely thin exosphere (oxygen, sodium, hydrogen, helium, potassium).",
"notableFacts": [
"A solar day lasts about 176 Earth days.",
"Its surface is heavily cratered like Earths Moon."
]
},
{
"id": "venus",
"name": "Venus",
"symbol": "♀︎",
"classification": "Terrestrial planet",
"summary": "Earth-sized but shrouded in dense clouds, with a runaway greenhouse effect.",
"meanDistanceFromSun": {
"kmMillions": 108.2,
"au": 0.723
},
"orbitalPeriod": {
"days": 224.701,
"years": 0.615
},
"rotationPeriodHours": -5832.5,
"radiusKm": 6051.8,
"diameterKm": 12103.6,
"massKg": 4.8675e24,
"gravityMs2": 8.87,
"escapeVelocityKms": 10.36,
"axialTiltDeg": 177.36,
"averageTempC": 464,
"moons": 0,
"atmosphere": "Very dense carbon dioxide with sulfuric acid clouds.",
"notableFacts": [
"Hottest planetary surface in the Solar System.",
"Rotates retrograde (east-to-west)."
]
},
{
"id": "earth",
"name": "Earth",
"symbol": "⊕",
"classification": "Terrestrial planet",
"summary": "The only known world with stable liquid water oceans and life.",
"meanDistanceFromSun": {
"kmMillions": 149.6,
"au": 1.0
},
"orbitalPeriod": {
"days": 365.256,
"years": 1.0
},
"rotationPeriodHours": 23.934,
"radiusKm": 6371,
"diameterKm": 12742,
"massKg": 5.97237e24,
"gravityMs2": 9.807,
"escapeVelocityKms": 11.186,
"axialTiltDeg": 23.44,
"averageTempC": 15,
"moons": 1,
"atmosphere": "Mostly nitrogen and oxygen.",
"notableFacts": [
"About 71% of the surface is covered by water.",
"Plate tectonics helps regulate long-term climate."
]
},
{
"id": "mars",
"name": "Mars",
"symbol": "♂︎",
"classification": "Terrestrial planet",
"summary": "A cold desert planet with the largest volcano and canyon in the Solar System.",
"meanDistanceFromSun": {
"kmMillions": 227.9,
"au": 1.524
},
"orbitalPeriod": {
"days": 686.98,
"years": 1.881
},
"rotationPeriodHours": 24.623,
"radiusKm": 3389.5,
"diameterKm": 6779,
"massKg": 6.4171e23,
"gravityMs2": 3.721,
"escapeVelocityKms": 5.03,
"axialTiltDeg": 25.19,
"averageTempC": -63,
"moons": 2,
"atmosphere": "Thin carbon dioxide atmosphere.",
"notableFacts": [
"Home to Olympus Mons and Valles Marineris.",
"Evidence suggests ancient liquid water on its surface."
]
},
{
"id": "jupiter",
"name": "Jupiter",
"symbol": "♃︎",
"classification": "Gas giant",
"summary": "The largest planet, with powerful storms and a deep atmosphere of hydrogen and helium.",
"meanDistanceFromSun": {
"kmMillions": 778.6,
"au": 5.203
},
"orbitalPeriod": {
"days": 4332.59,
"years": 11.86
},
"rotationPeriodHours": 9.925,
"radiusKm": 69911,
"diameterKm": 139822,
"massKg": 1.8982e27,
"gravityMs2": 24.79,
"escapeVelocityKms": 59.5,
"axialTiltDeg": 3.13,
"averageTempC": -110,
"moons": 95,
"atmosphere": "Mostly hydrogen and helium.",
"notableFacts": [
"The Great Red Spot is a centuries-old storm.",
"Its magnetic field is the strongest of any planet."
]
},
{
"id": "saturn",
"name": "Saturn",
"symbol": "♄︎",
"classification": "Gas giant",
"summary": "Known for its bright ring system made largely of ice particles.",
"meanDistanceFromSun": {
"kmMillions": 1433.5,
"au": 9.537
},
"orbitalPeriod": {
"days": 10759.22,
"years": 29.45
},
"rotationPeriodHours": 10.656,
"radiusKm": 58232,
"diameterKm": 116464,
"massKg": 5.6834e26,
"gravityMs2": 10.44,
"escapeVelocityKms": 35.5,
"axialTiltDeg": 26.73,
"averageTempC": -140,
"moons": 146,
"atmosphere": "Mostly hydrogen and helium.",
"notableFacts": [
"Its average density is lower than water.",
"Rings are broad but extremely thin."
]
},
{
"id": "uranus",
"name": "Uranus",
"symbol": "♅︎",
"classification": "Ice giant",
"summary": "An ice giant that rotates on its side relative to its orbital plane.",
"meanDistanceFromSun": {
"kmMillions": 2872.5,
"au": 19.191
},
"orbitalPeriod": {
"days": 30688.5,
"years": 84.02
},
"rotationPeriodHours": -17.24,
"radiusKm": 25362,
"diameterKm": 50724,
"massKg": 8.681e25,
"gravityMs2": 8.69,
"escapeVelocityKms": 21.3,
"axialTiltDeg": 97.77,
"averageTempC": -195,
"moons": 28,
"atmosphere": "Hydrogen, helium, methane.",
"notableFacts": [
"Its sideways tilt likely comes from an ancient giant impact.",
"Methane in the atmosphere gives it a blue-green color."
]
},
{
"id": "neptune",
"name": "Neptune",
"symbol": "♆︎",
"classification": "Ice giant",
"summary": "A distant, dynamic world with supersonic winds and dark storm systems.",
"meanDistanceFromSun": {
"kmMillions": 4495.1,
"au": 30.07
},
"orbitalPeriod": {
"days": 60182,
"years": 164.8
},
"rotationPeriodHours": 16.11,
"radiusKm": 24622,
"diameterKm": 49244,
"massKg": 1.02413e26,
"gravityMs2": 11.15,
"escapeVelocityKms": 23.5,
"axialTiltDeg": 28.32,
"averageTempC": -200,
"moons": 16,
"atmosphere": "Hydrogen, helium, methane.",
"notableFacts": [
"Fastest sustained winds measured on any planet.",
"Triton, its largest moon, orbits in retrograde."
]
},
{
"id": "pluto",
"name": "Pluto",
"symbol": "♇︎",
"classification": "Dwarf planet",
"summary": "A Kuiper Belt dwarf planet with nitrogen ice plains and a complex seasonal cycle.",
"meanDistanceFromSun": {
"kmMillions": 5906.4,
"au": 39.48
},
"orbitalPeriod": {
"days": 90560,
"years": 248.0
},
"rotationPeriodHours": -153.3,
"radiusKm": 1188.3,
"diameterKm": 2376.6,
"massKg": 1.303e22,
"gravityMs2": 0.62,
"escapeVelocityKms": 1.21,
"axialTiltDeg": 122.53,
"averageTempC": -225,
"moons": 5,
"atmosphere": "Thin, variable nitrogen atmosphere with methane and carbon monoxide.",
"notableFacts": [
"Charon is large enough that Pluto-Charon is often described as a binary system.",
"First close-up images were captured by New Horizons in 2015."
]
}
]
}

View File

@@ -1,86 +0,0 @@
{
"meta": {
"source": "https://github.com/gadicc/magick.ly/tree/master/data",
"derivedFrom": "data/astrology/planets.json5",
"notes": "Planet names/symbols/magick types are adapted from magick.ly; tarot correspondences are Golden Dawn style defaults."
},
"planets": {
"saturn": {
"id": "saturn",
"name": "Saturn",
"symbol": "♄︎",
"weekday": "Saturday",
"tarot": {
"majorArcana": "The World",
"number": 21
},
"magickTypes": "Performing duty, establishing balance and equilibrium, dispelling illusions, protecting the home, legal matters, developing patience and self-discipline"
},
"jupiter": {
"id": "jupiter",
"name": "Jupiter",
"symbol": "♃︎",
"weekday": "Thursday",
"tarot": {
"majorArcana": "Wheel of Fortune",
"number": 10
},
"magickTypes": "Career success, developing ambition and enthusiasm, improving fortune and luck, general health, acquiring honour, improving sense of humour, legal matters and dealing with the establishment, developing leadership skills"
},
"mars": {
"id": "mars",
"name": "Mars",
"symbol": "♂︎",
"weekday": "Tuesday",
"tarot": {
"majorArcana": "The Tower",
"number": 16
},
"magickTypes": "Controlling anger, increasing courage, enhancing energy and passion, increasing vigour and sex drive"
},
"sol": {
"id": "sol",
"name": "Sol",
"symbol": "☉︎",
"weekday": "Sunday",
"tarot": {
"majorArcana": "The Sun",
"number": 19
},
"magickTypes": "Career success and progression, establishing harmony, healing and improving health, leadership skills, acquiring money and resources, promotion, strengthening willpower"
},
"venus": {
"id": "venus",
"name": "Venus",
"symbol": "♀︎",
"weekday": "Friday",
"tarot": {
"majorArcana": "The Empress",
"number": 3
},
"magickTypes": "Increasing attractiveness and self-confidence, beauty and passion, enhancing creativity, improving fertility, developing friendships, obtaining love"
},
"mercury": {
"id": "mercury",
"name": "Mercury",
"symbol": "☿︎",
"weekday": "Wednesday",
"tarot": {
"majorArcana": "The Magician",
"number": 1
},
"magickTypes": "Business success, improving communication skills, developing knowledge and memory, diplomacy, exam success, divination, developing influence, protection when traveling by air and land, learning music"
},
"luna": {
"id": "luna",
"name": "Luna",
"symbol": "☾︎",
"weekday": "Monday",
"tarot": {
"majorArcana": "The High Priestess",
"number": 2
},
"magickTypes": "Developing clairvoyance and other psychic skills, ensuring safe childbirth, divination, glamour and illusions, lucid dreaming, protection when traveling by sea"
}
}
}

View File

@@ -1,65 +0,0 @@
{
"meta": {
"description": "Standard 52-card playing deck mapped to tarot suits and minor tarot card names.",
"notes": "Suit mapping: Hearts→Cups, Diamonds→Pentacles, Clubs→Wands, Spades→Swords. Ace→Ace, King→Knight, Queen→Queen, Jack→Prince, 10→Princess.",
"version": 1,
"count": 52
},
"entries": [
{ "id": "AH", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "A", "rankLabel": "Ace", "rankValue": 1, "digitalRoot": 1, "tarotSuit": "Cups", "tarotCard": "Ace of Cups" },
{ "id": "2H", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "2", "rankLabel": "Two", "rankValue": 2, "digitalRoot": 2, "tarotSuit": "Cups", "tarotCard": "Two of Cups" },
{ "id": "3H", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "3", "rankLabel": "Three", "rankValue": 3, "digitalRoot": 3, "tarotSuit": "Cups", "tarotCard": "Three of Cups" },
{ "id": "4H", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "4", "rankLabel": "Four", "rankValue": 4, "digitalRoot": 4, "tarotSuit": "Cups", "tarotCard": "Four of Cups" },
{ "id": "5H", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "5", "rankLabel": "Five", "rankValue": 5, "digitalRoot": 5, "tarotSuit": "Cups", "tarotCard": "Five of Cups" },
{ "id": "6H", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "6", "rankLabel": "Six", "rankValue": 6, "digitalRoot": 6, "tarotSuit": "Cups", "tarotCard": "Six of Cups" },
{ "id": "7H", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "7", "rankLabel": "Seven", "rankValue": 7, "digitalRoot": 7, "tarotSuit": "Cups", "tarotCard": "Seven of Cups" },
{ "id": "8H", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "8", "rankLabel": "Eight", "rankValue": 8, "digitalRoot": 8, "tarotSuit": "Cups", "tarotCard": "Eight of Cups" },
{ "id": "9H", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "9", "rankLabel": "Nine", "rankValue": 9, "digitalRoot": 9, "tarotSuit": "Cups", "tarotCard": "Nine of Cups" },
{ "id": "10H", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "10", "rankLabel": "Ten", "rankValue": 10, "digitalRoot": 1, "tarotSuit": "Cups", "tarotCard": "Princess of Cups" },
{ "id": "JH", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "J", "rankLabel": "Jack", "rankValue": null, "digitalRoot": null, "tarotSuit": "Cups", "tarotCard": "Prince of Cups" },
{ "id": "QH", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "Q", "rankLabel": "Queen", "rankValue": null, "digitalRoot": null, "tarotSuit": "Cups", "tarotCard": "Queen of Cups" },
{ "id": "KH", "suit": "hearts", "suitLabel": "Hearts", "suitSymbol": "♥", "rank": "K", "rankLabel": "King", "rankValue": null, "digitalRoot": null, "tarotSuit": "Cups", "tarotCard": "Knight of Cups" },
{ "id": "AD", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "A", "rankLabel": "Ace", "rankValue": 1, "digitalRoot": 1, "tarotSuit": "Pentacles", "tarotCard": "Ace of Pentacles" },
{ "id": "2D", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "2", "rankLabel": "Two", "rankValue": 2, "digitalRoot": 2, "tarotSuit": "Pentacles", "tarotCard": "Two of Pentacles" },
{ "id": "3D", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "3", "rankLabel": "Three", "rankValue": 3, "digitalRoot": 3, "tarotSuit": "Pentacles", "tarotCard": "Three of Pentacles" },
{ "id": "4D", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "4", "rankLabel": "Four", "rankValue": 4, "digitalRoot": 4, "tarotSuit": "Pentacles", "tarotCard": "Four of Pentacles" },
{ "id": "5D", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "5", "rankLabel": "Five", "rankValue": 5, "digitalRoot": 5, "tarotSuit": "Pentacles", "tarotCard": "Five of Pentacles" },
{ "id": "6D", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "6", "rankLabel": "Six", "rankValue": 6, "digitalRoot": 6, "tarotSuit": "Pentacles", "tarotCard": "Six of Pentacles" },
{ "id": "7D", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "7", "rankLabel": "Seven", "rankValue": 7, "digitalRoot": 7, "tarotSuit": "Pentacles", "tarotCard": "Seven of Pentacles" },
{ "id": "8D", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "8", "rankLabel": "Eight", "rankValue": 8, "digitalRoot": 8, "tarotSuit": "Pentacles", "tarotCard": "Eight of Pentacles" },
{ "id": "9D", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "9", "rankLabel": "Nine", "rankValue": 9, "digitalRoot": 9, "tarotSuit": "Pentacles", "tarotCard": "Nine of Pentacles" },
{ "id": "10D", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "10", "rankLabel": "Ten", "rankValue": 10, "digitalRoot": 1, "tarotSuit": "Pentacles", "tarotCard": "Princess of Pentacles" },
{ "id": "JD", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "J", "rankLabel": "Jack", "rankValue": null, "digitalRoot": null, "tarotSuit": "Pentacles", "tarotCard": "Prince of Pentacles" },
{ "id": "QD", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "Q", "rankLabel": "Queen", "rankValue": null, "digitalRoot": null, "tarotSuit": "Pentacles", "tarotCard": "Queen of Pentacles" },
{ "id": "KD", "suit": "diamonds", "suitLabel": "Diamonds", "suitSymbol": "♦", "rank": "K", "rankLabel": "King", "rankValue": null, "digitalRoot": null, "tarotSuit": "Pentacles", "tarotCard": "Knight of Pentacles" },
{ "id": "AC", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "A", "rankLabel": "Ace", "rankValue": 1, "digitalRoot": 1, "tarotSuit": "Wands", "tarotCard": "Ace of Wands" },
{ "id": "2C", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "2", "rankLabel": "Two", "rankValue": 2, "digitalRoot": 2, "tarotSuit": "Wands", "tarotCard": "Two of Wands" },
{ "id": "3C", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "3", "rankLabel": "Three", "rankValue": 3, "digitalRoot": 3, "tarotSuit": "Wands", "tarotCard": "Three of Wands" },
{ "id": "4C", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "4", "rankLabel": "Four", "rankValue": 4, "digitalRoot": 4, "tarotSuit": "Wands", "tarotCard": "Four of Wands" },
{ "id": "5C", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "5", "rankLabel": "Five", "rankValue": 5, "digitalRoot": 5, "tarotSuit": "Wands", "tarotCard": "Five of Wands" },
{ "id": "6C", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "6", "rankLabel": "Six", "rankValue": 6, "digitalRoot": 6, "tarotSuit": "Wands", "tarotCard": "Six of Wands" },
{ "id": "7C", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "7", "rankLabel": "Seven", "rankValue": 7, "digitalRoot": 7, "tarotSuit": "Wands", "tarotCard": "Seven of Wands" },
{ "id": "8C", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "8", "rankLabel": "Eight", "rankValue": 8, "digitalRoot": 8, "tarotSuit": "Wands", "tarotCard": "Eight of Wands" },
{ "id": "9C", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "9", "rankLabel": "Nine", "rankValue": 9, "digitalRoot": 9, "tarotSuit": "Wands", "tarotCard": "Nine of Wands" },
{ "id": "10C", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "10", "rankLabel": "Ten", "rankValue": 10, "digitalRoot": 1, "tarotSuit": "Wands", "tarotCard": "Princess of Wands" },
{ "id": "JC", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "J", "rankLabel": "Jack", "rankValue": null, "digitalRoot": null, "tarotSuit": "Wands", "tarotCard": "Prince of Wands" },
{ "id": "QC", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "Q", "rankLabel": "Queen", "rankValue": null, "digitalRoot": null, "tarotSuit": "Wands", "tarotCard": "Queen of Wands" },
{ "id": "KC", "suit": "clubs", "suitLabel": "Clubs", "suitSymbol": "♣", "rank": "K", "rankLabel": "King", "rankValue": null, "digitalRoot": null, "tarotSuit": "Wands", "tarotCard": "Knight of Wands" },
{ "id": "AS", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "A", "rankLabel": "Ace", "rankValue": 1, "digitalRoot": 1, "tarotSuit": "Swords", "tarotCard": "Ace of Swords" },
{ "id": "2S", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "2", "rankLabel": "Two", "rankValue": 2, "digitalRoot": 2, "tarotSuit": "Swords", "tarotCard": "Two of Swords" },
{ "id": "3S", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "3", "rankLabel": "Three", "rankValue": 3, "digitalRoot": 3, "tarotSuit": "Swords", "tarotCard": "Three of Swords" },
{ "id": "4S", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "4", "rankLabel": "Four", "rankValue": 4, "digitalRoot": 4, "tarotSuit": "Swords", "tarotCard": "Four of Swords" },
{ "id": "5S", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "5", "rankLabel": "Five", "rankValue": 5, "digitalRoot": 5, "tarotSuit": "Swords", "tarotCard": "Five of Swords" },
{ "id": "6S", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "6", "rankLabel": "Six", "rankValue": 6, "digitalRoot": 6, "tarotSuit": "Swords", "tarotCard": "Six of Swords" },
{ "id": "7S", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "7", "rankLabel": "Seven", "rankValue": 7, "digitalRoot": 7, "tarotSuit": "Swords", "tarotCard": "Seven of Swords" },
{ "id": "8S", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "8", "rankLabel": "Eight", "rankValue": 8, "digitalRoot": 8, "tarotSuit": "Swords", "tarotCard": "Eight of Swords" },
{ "id": "9S", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "9", "rankLabel": "Nine", "rankValue": 9, "digitalRoot": 9, "tarotSuit": "Swords", "tarotCard": "Nine of Swords" },
{ "id": "10S", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "10", "rankLabel": "Ten", "rankValue": 10, "digitalRoot": 1, "tarotSuit": "Swords", "tarotCard": "Princess of Swords" },
{ "id": "JS", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "J", "rankLabel": "Jack", "rankValue": null, "digitalRoot": null, "tarotSuit": "Swords", "tarotCard": "Prince of Swords" },
{ "id": "QS", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "Q", "rankLabel": "Queen", "rankValue": null, "digitalRoot": null, "tarotSuit": "Swords", "tarotCard": "Queen of Swords" },
{ "id": "KS", "suit": "spades", "suitLabel": "Spades", "suitSymbol": "♠", "rank": "K", "rankLabel": "King", "rankValue": null, "digitalRoot": null, "tarotSuit": "Swords", "tarotCard": "Knight of Swords" }
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,164 +0,0 @@
{
"meta": {
"source": "https://github.com/gadicc/magick.ly/blob/master/data/astrology/zodiac.json5",
"notes": "Sign timing/ordering/elements/modality are adapted from magick.ly; tarot major arcana correspondences are organized here to avoid UI hardcoding."
},
"signs": [
{
"id": "aries",
"order": 1,
"name": "Aries",
"symbol": "♈︎",
"start": "03-21",
"end": "04-19",
"element": "fire",
"modality": "cardinal",
"sourceQuadruplicity": "cardinal",
"rulingPlanetId": "mars",
"tarot": { "majorArcana": "The Emperor", "number": 4 }
},
{
"id": "taurus",
"order": 2,
"name": "Taurus",
"symbol": "♉︎",
"start": "04-20",
"end": "05-20",
"element": "earth",
"modality": "fixed",
"sourceQuadruplicity": "kerubic",
"rulingPlanetId": "venus",
"tarot": { "majorArcana": "The Hierophant", "number": 5 }
},
{
"id": "gemini",
"order": 3,
"name": "Gemini",
"symbol": "♊︎",
"start": "05-21",
"end": "06-20",
"element": "air",
"modality": "mutable",
"sourceQuadruplicity": "mutable",
"rulingPlanetId": "mercury",
"tarot": { "majorArcana": "The Lovers", "number": 6 }
},
{
"id": "cancer",
"order": 4,
"name": "Cancer",
"symbol": "♋︎",
"start": "06-21",
"end": "07-22",
"element": "water",
"modality": "cardinal",
"sourceQuadruplicity": "cardinal",
"rulingPlanetId": "sol",
"tarot": { "majorArcana": "The Chariot", "number": 7 }
},
{
"id": "leo",
"order": 5,
"name": "Leo",
"symbol": "♌︎",
"start": "07-23",
"end": "08-22",
"element": "fire",
"modality": "fixed",
"sourceQuadruplicity": "kerubic",
"rulingPlanetId": "sol",
"tarot": { "majorArcana": "Strength", "number": 8 }
},
{
"id": "virgo",
"order": 6,
"name": "Virgo",
"symbol": "♍︎",
"start": "08-23",
"end": "09-22",
"element": "earth",
"modality": "mutable",
"sourceQuadruplicity": "mutable",
"rulingPlanetId": "mercury",
"tarot": { "majorArcana": "The Hermit", "number": 9 }
},
{
"id": "libra",
"order": 7,
"name": "Libra",
"symbol": "♎︎",
"start": "09-23",
"end": "10-22",
"element": "air",
"modality": "cardinal",
"sourceQuadruplicity": "cardinal",
"rulingPlanetId": "venus",
"tarot": { "majorArcana": "Justice", "number": 11 }
},
{
"id": "scorpio",
"order": 8,
"name": "Scorpio",
"symbol": "♏︎",
"start": "10-23",
"end": "11-21",
"element": "water",
"modality": "fixed",
"sourceQuadruplicity": "kerubic",
"rulingPlanetId": "jupiter",
"tarot": { "majorArcana": "Death", "number": 13 }
},
{
"id": "sagittarius",
"order": 9,
"name": "Sagittarius",
"symbol": "♐︎",
"start": "11-22",
"end": "12-21",
"element": "fire",
"modality": "mutable",
"sourceQuadruplicity": "mutable",
"rulingPlanetId": "jupiter",
"tarot": { "majorArcana": "Temperance", "number": 14 }
},
{
"id": "capricorn",
"order": 10,
"name": "Capricorn",
"symbol": "♑︎",
"start": "12-22",
"end": "01-19",
"element": "earth",
"modality": "cardinal",
"sourceQuadruplicity": "cardinal",
"rulingPlanetId": "saturn",
"tarot": { "majorArcana": "The Devil", "number": 15 }
},
{
"id": "aquarius",
"order": 11,
"name": "Aquarius",
"symbol": "♒︎",
"start": "01-20",
"end": "02-18",
"element": "air",
"modality": "fixed",
"sourceQuadruplicity": "kerubic",
"rulingPlanetId": "saturn",
"tarot": { "majorArcana": "The Star", "number": 17 }
},
{
"id": "pisces",
"order": 12,
"name": "Pisces",
"symbol": "♓︎",
"start": "02-19",
"end": "03-20",
"element": "water",
"modality": "mutable",
"sourceQuadruplicity": "mutable",
"rulingPlanetId": "jupiter",
"tarot": { "majorArcana": "The Moon", "number": 18 }
}
]
}

View File

@@ -1,756 +0,0 @@
{
"majorCards": [
{
"number": 0,
"name": "The Fool",
"summary": "Open-hearted beginnings, leap of faith, and the sacred unknown.",
"upright": "Fresh starts, trust in the path, and inspired spontaneity.",
"reversed": "Recklessness, fear of risk, or resistance to a needed new beginning.",
"keywords": [
"beginnings",
"faith",
"innocence",
"freedom",
"journey"
],
"relations": [
"Element: Air",
"Hebrew Letter: Aleph"
]
},
{
"number": 1,
"name": "The Magus",
"summary": "Focused will and conscious manifestation through aligned tools.",
"upright": "Skill, initiative, concentration, and transforming intent into action.",
"reversed": "Scattered power, manipulation, or blocked self-belief.",
"keywords": [
"will",
"manifestation",
"focus",
"skill",
"agency"
],
"relations": [
"Planet: Mercury",
"Hebrew Letter: Beth"
]
},
{
"number": 2,
"name": "The High Priestess",
"summary": "Inner knowing, sacred silence, and intuitive perception.",
"upright": "Intuition, subtle insight, patience, and hidden wisdom.",
"reversed": "Disconnection from inner voice or confusion around truth.",
"keywords": [
"intuition",
"mystery",
"stillness",
"inner-voice",
"receptivity"
],
"relations": [
"Planet: Luna",
"Hebrew Letter: Gimel"
]
},
{
"number": 3,
"name": "The Empress",
"summary": "Creative abundance, nurture, and embodied growth.",
"upright": "Fertility, care, beauty, comfort, and creative flourishing.",
"reversed": "Creative drought, overgiving, or neglecting self-nourishment.",
"keywords": [
"abundance",
"creation",
"nurture",
"beauty",
"growth"
],
"relations": [
"Planet: Venus",
"Hebrew Letter: Daleth"
]
},
{
"number": 4,
"name": "The Emperor",
"summary": "Structure, authority, and stable leadership.",
"upright": "Order, discipline, protection, and strategic direction.",
"reversed": "Rigidity, domination, or weak boundaries.",
"keywords": [
"structure",
"authority",
"stability",
"leadership",
"boundaries"
],
"relations": [
"Zodiac: Aries",
"Hebrew Letter: He"
]
},
{
"number": 5,
"name": "The Hierophant",
"summary": "Tradition, spiritual instruction, and shared values.",
"upright": "Learning from lineage, ritual, ethics, and mentorship.",
"reversed": "Dogma, rebellion without grounding, or spiritual stagnation.",
"keywords": [
"tradition",
"teaching",
"ritual",
"ethics",
"lineage"
],
"relations": [
"Zodiac: Taurus",
"Hebrew Letter: Vav"
]
},
{
"number": 6,
"name": "The Lovers",
"summary": "Union, alignment, and value-centered choices.",
"upright": "Harmony, connection, and conscious commitment.",
"reversed": "Misalignment, indecision, or disconnection in relationship.",
"keywords": [
"union",
"choice",
"alignment",
"connection",
"values"
],
"relations": [
"Zodiac: Gemini",
"Hebrew Letter: Zayin"
]
},
{
"number": 7,
"name": "The Chariot",
"summary": "Directed momentum and mastery through discipline.",
"upright": "Determination, movement, and victory through control.",
"reversed": "Loss of direction, conflict of will, or stalled progress.",
"keywords": [
"drive",
"control",
"momentum",
"victory",
"direction"
],
"relations": [
"Zodiac: Cancer",
"Hebrew Letter: Cheth"
]
},
{
"number": 8,
"name": "Lust",
"summary": "Courageous life-force, passionate integrity, and heart-led power.",
"upright": "Vitality, confidence, and wholehearted creative expression.",
"reversed": "Self-doubt, depletion, or misdirected desire.",
"keywords": [
"vitality",
"passion",
"courage",
"magnetism",
"heart-power"
],
"relations": [
"Zodiac: Leo",
"Hebrew Letter: Teth"
]
},
{
"number": 9,
"name": "The Hermit",
"summary": "Inner pilgrimage, discernment, and sacred solitude.",
"upright": "Reflection, guidance, and deepening wisdom.",
"reversed": "Isolation, avoidance, or overanalysis.",
"keywords": [
"solitude",
"wisdom",
"search",
"reflection",
"discernment"
],
"relations": [
"Zodiac: Virgo",
"Hebrew Letter: Yod"
]
},
{
"number": 10,
"name": "Fortune",
"summary": "Cycles, timing, and turning points guided by greater rhythms.",
"upright": "Opportunity, momentum, and fated change.",
"reversed": "Resistance to cycles, delay, or repeating old patterns.",
"keywords": [
"cycles",
"timing",
"change",
"destiny",
"turning-point"
],
"relations": [
"Planet: Jupiter",
"Hebrew Letter: Kaph"
]
},
{
"number": 11,
"name": "Justice",
"summary": "Balance, accountability, and clear consequence.",
"upright": "Fairness, truth, and ethical alignment.",
"reversed": "Bias, denial, or avoidance of responsibility.",
"keywords": [
"balance",
"truth",
"accountability",
"law",
"clarity"
],
"relations": [
"Zodiac: Libra",
"Hebrew Letter: Lamed"
]
},
{
"number": 12,
"name": "The Hanged Man",
"summary": "Sacred pause, surrender, and transformed perspective.",
"upright": "Release, contemplation, and spiritual reframing.",
"reversed": "Stagnation, martyrdom, or refusing to let go.",
"keywords": [
"surrender",
"pause",
"perspective",
"suspension",
"release"
],
"relations": [
"Element: Water",
"Hebrew Letter: Mem"
]
},
{
"number": 13,
"name": "Death",
"summary": "Endings that clear space for rebirth and renewal.",
"upright": "Transformation, completion, and deep release.",
"reversed": "Clinging, fear of change, or prolonged transition.",
"keywords": [
"transformation",
"ending",
"renewal",
"release",
"rebirth"
],
"relations": [
"Zodiac: Scorpio",
"Hebrew Letter: Nun"
]
},
{
"number": 14,
"name": "Art",
"summary": "Alchemy, integration, and harmonizing opposites.",
"upright": "Balance through blending, refinement, and patience.",
"reversed": "Imbalance, excess, or fragmented energies.",
"keywords": [
"alchemy",
"integration",
"balance",
"blending",
"refinement"
],
"relations": [
"Zodiac: Sagittarius",
"Hebrew Letter: Samekh"
]
},
{
"number": 15,
"name": "The Devil",
"summary": "Attachment, shadow desire, and material entanglement.",
"upright": "Confronting bondage, ambition, and raw instinct.",
"reversed": "Liberation, breaking chains, or denial of shadow.",
"keywords": [
"attachment",
"shadow",
"instinct",
"temptation",
"bondage"
],
"relations": [
"Zodiac: Capricorn",
"Hebrew Letter: Ayin"
]
},
{
"number": 16,
"name": "The Tower",
"summary": "Sudden revelation that dismantles false structures.",
"upright": "Shock, breakthrough, and necessary collapse.",
"reversed": "Delayed upheaval, denial, or internal crisis.",
"keywords": [
"upheaval",
"revelation",
"breakthrough",
"collapse",
"truth"
],
"relations": [
"Planet: Mars",
"Hebrew Letter: Pe"
]
},
{
"number": 17,
"name": "The Star",
"summary": "Healing hope, guidance, and spiritual renewal.",
"upright": "Inspiration, serenity, and trust in the future.",
"reversed": "Discouragement, doubt, or loss of faith.",
"keywords": [
"hope",
"healing",
"guidance",
"renewal",
"faith"
],
"relations": [
"Zodiac: Aquarius",
"Hebrew Letter: Tzaddi"
]
},
{
"number": 18,
"name": "The Moon",
"summary": "Dream, uncertainty, and passage through the subconscious.",
"upright": "Intuition, mystery, and emotional depth.",
"reversed": "Confusion clearing, projection, or fear illusions.",
"keywords": [
"dream",
"mystery",
"intuition",
"subconscious",
"illusion"
],
"relations": [
"Zodiac: Pisces",
"Hebrew Letter: Qoph"
]
},
{
"number": 19,
"name": "The Sun",
"summary": "Radiance, confidence, and vital life affirmation.",
"upright": "Joy, clarity, success, and openness.",
"reversed": "Temporary clouding, ego glare, or delayed confidence.",
"keywords": [
"joy",
"clarity",
"vitality",
"success",
"radiance"
],
"relations": [
"Planet: Sol",
"Hebrew Letter: Resh"
]
},
{
"number": 20,
"name": "Aeon",
"summary": "Awakening call, reckoning, and soul-level renewal.",
"upright": "Judgment, liberation, and answering purpose.",
"reversed": "Self-judgment, hesitation, or resistance to calling.",
"keywords": [
"awakening",
"reckoning",
"calling",
"renewal",
"release"
],
"relations": [
"Element: Fire",
"Hebrew Letter: Shin"
]
},
{
"number": 21,
"name": "Universe",
"summary": "Completion, integration, and embodied wholeness.",
"upright": "Fulfillment, mastery, and successful closure.",
"reversed": "Incomplete cycle, loose ends, or delayed completion.",
"keywords": [
"completion",
"wholeness",
"integration",
"mastery",
"closure"
],
"relations": [
"Planet: Saturn",
"Hebrew Letter: Tav"
]
}
],
"suits": [
"Cups",
"Wands",
"Swords",
"Disks"
],
"numberRanks": [
"Ace",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten"
],
"courtRanks": [
"Knight",
"Queen",
"Prince",
"Princess"
],
"suitInfo": {
"cups": {
"element": "Water",
"domain": "emotion, intuition, relationship",
"keywords": [
"emotion",
"intuition",
"connection"
]
},
"wands": {
"element": "Fire",
"domain": "will, creativity, drive",
"keywords": [
"will",
"drive",
"inspiration"
]
},
"swords": {
"element": "Air",
"domain": "mind, truth, communication",
"keywords": [
"mind",
"truth",
"clarity"
]
},
"disks": {
"element": "Earth",
"domain": "body, craft, material life",
"keywords": [
"resources",
"craft",
"stability"
]
}
},
"rankInfo": {
"ace": {
"number": 1,
"upright": "Seed-force, pure potential, and concentrated essence.",
"reversed": "Blocked potential, delay, or difficulty beginning.",
"keywords": [
"seed",
"potential",
"spark"
]
},
"two": {
"number": 2,
"upright": "Polarity seeking balance, exchange, and response.",
"reversed": "Imbalance, friction, or uncertain choices.",
"keywords": [
"duality",
"balance",
"exchange"
]
},
"three": {
"number": 3,
"upright": "Initial growth, expansion, and expression.",
"reversed": "Scattered growth or stalled development.",
"keywords": [
"growth",
"expansion",
"expression"
]
},
"four": {
"number": 4,
"upright": "Structure, boundaries, and stabilizing form.",
"reversed": "Rigidity, inertia, or unstable foundations.",
"keywords": [
"structure",
"stability",
"foundation"
]
},
"five": {
"number": 5,
"upright": "Challenge, disruption, and catalytic conflict.",
"reversed": "Lingering tension or fear of needed change.",
"keywords": [
"challenge",
"conflict",
"change"
]
},
"six": {
"number": 6,
"upright": "Rebalancing, harmony, and restorative flow.",
"reversed": "Partial recovery or unresolved imbalance.",
"keywords": [
"harmony",
"repair",
"flow"
]
},
"seven": {
"number": 7,
"upright": "Testing, strategy, and spiritual/mental refinement.",
"reversed": "Doubt, overdefense, or poor strategy.",
"keywords": [
"test",
"strategy",
"refinement"
]
},
"eight": {
"number": 8,
"upright": "Adjustment, movement, and disciplined power.",
"reversed": "Restriction, frustration, or scattered effort.",
"keywords": [
"movement",
"discipline",
"adjustment"
]
},
"nine": {
"number": 9,
"upright": "Intensity, culmination, and mature force.",
"reversed": "Excess, overload, or unresolved pressure.",
"keywords": [
"culmination",
"intensity",
"maturity"
]
},
"ten": {
"number": 10,
"upright": "Completion, overflow, and transition into a new cycle.",
"reversed": "Overextension, depletion, or difficulty releasing.",
"keywords": [
"completion",
"threshold",
"transition"
]
}
},
"courtInfo": {
"knight": {
"role": "active catalyst and questing force",
"elementalFace": "Fire of",
"upright": "Bold pursuit, direct action, and forward momentum.",
"reversed": "Impulsiveness, burnout, or unfocused drive.",
"keywords": [
"action",
"drive",
"initiative"
]
},
"queen": {
"role": "magnetic vessel and emotional intelligence",
"elementalFace": "Water of",
"upright": "Receptive mastery, mature feeling, and embodied wisdom.",
"reversed": "Withholding, moodiness, or passive control.",
"keywords": [
"receptivity",
"maturity",
"depth"
]
},
"prince": {
"role": "strategic mediator and organizing mind",
"elementalFace": "Air of",
"upright": "Insight, communication, and adaptive coordination.",
"reversed": "Overthinking, detachment, or mixed signals.",
"keywords": [
"strategy",
"communication",
"adaptability"
]
},
"princess": {
"role": "manifesting ground and practical seed-force",
"elementalFace": "Earth of",
"upright": "Practical growth, devotion, and tangible follow-through.",
"reversed": "Stagnation, timidity, or blocked growth.",
"keywords": [
"manifestation",
"grounding",
"devotion"
]
}
},
"courtDecanWindows": {
"Knight of Wands": [
"scorpio-3",
"sagittarius-1",
"sagittarius-2"
],
"Queen of Disks": [
"sagittarius-3",
"capricorn-1",
"capricorn-2"
],
"Prince of Swords": [
"capricorn-3",
"aquarius-1",
"aquarius-2"
],
"Knight of Cups": [
"aquarius-3",
"pisces-1",
"pisces-2"
],
"Queen of Wands": [
"pisces-3",
"aries-1",
"aries-2"
],
"Prince of Disks": [
"aries-3",
"taurus-1",
"taurus-2"
],
"Knight of Swords": [
"taurus-3",
"gemini-1",
"gemini-2"
],
"Queen of Cups": [
"gemini-3",
"cancer-1",
"cancer-2"
],
"Prince of Wands": [
"cancer-3",
"leo-1",
"leo-2"
],
"Knight of Disks": [
"leo-3",
"virgo-1",
"virgo-2"
],
"Queen of Swords": [
"virgo-3",
"libra-1",
"libra-2"
],
"Prince of Cups": [
"libra-3",
"scorpio-1",
"scorpio-2"
]
},
"meanings": {
"majorByTrumpNumber": {
"0": "Beginning of the Great Work, innocence; a fool for love; divine madness. Reason is transcended. Take the leap. Gain or loss through foolish actions.",
"1": "Communication; Conscious Will; the process of continuous creation; ambiguity; deception. Things may not be as they appear. Concentration; meditation; mind used to direct the Will. Manipulation; crafty maneuverings.",
"2": "Symbol of highest initiation; link between the Archetypal and Formative Worlds. An initiatrix. Wooing by enchantment. Possibility. The Idea behind the Form. Fluctuation. Time may not be right for a decision concerning mundane matters.",
"3": "The Holy Grail. Love unites the Will. Love; beauty; friendship; success; passive balance. The feminine point of view. The door is open. Disregard the details and concentrate on the big picture.",
"4": "Creative wisdom radiating upon the organized man and woman. Domination after conquest; quarrelsomeness; paternal love; ambition. Thought ruled by creative, masculine, fiery energy. Stubbornness; war; authority; energy in its most temporal form. Swift impermanent action over confidence.",
"5": "The Holy Guardian Angel. The uniting of that which is above with that which is below. Love is indicated, but the nature of that love is not yet to be revealed. Inspiration; teaching; organization; discipline; strength; endurance; toil; help from superiors.",
"6": "Intuition. Be open to your own inner voice. A well-intended, arranged marriage. An artificial union; analysis followed by synthesis; indecision; instability; superficiality.",
"7": "Light in the darkness. The burden you carry may be the Holy Grail. Faithfulness; hope; obedience; a protective relationship; firm, even violent adherence to dogma or tradition. Glory; riches; enlightened civilization; victory; triumph; chain of command.",
"8": "Equilibrium; karmic law; the dance of life; all possibilities. The woman satisfied. Balance; weigh each thought against its opposite. Lawsuits; treaties. Pause and look before you leap.",
"9": "Divine seed of all things. By silence comes inspiration and wisdom. Wandering alone; temporary solitude; creative contemplation; a virgin. Retirement from involvement in current events.",
"10": "Continual change. In the midst of revolving phenomena, reach joyously the motionless center. Carefree love; wanton pleasure; amusement; fun; change of fortune, usually good.",
"11": "Understanding; the Will of the New Aeon; passion; sense smitten with ecstasy. Let love devour all. Energy independent of reason. Strength; courage; utilization of magical power.",
"12": "Redemption, sacrifice, annihilation in the beloved; martyrdom; loss; torment; suspension; death; suffering.",
"13": "End of a cycle; transformation; raw sexuality. Sex is death. Stress becomes intolerable. Any change is welcome. Time; age; unexpected change; death.",
"14": "Transmutation through union of opposites. A perfect marriage exalts and transforms each partner. The scientific method. Success follows complex maneuvers.",
"15": "“Thou hast no right but to do thy will.” Obsession; temptation; ecstasy found in every phenomenon; creative action, yet sublimely careless of result; unscrupulous ambition; strength.",
"16": "Escape from the prison of organized life; renunciation of love; quarreling. Plans are destroyed. War; danger; sudden death.",
"17": "Clairvoyance; visions; dreams; hope; love; yearning; realization of inexhaustible possibilities; dreaminess; unexpected help; renewal.",
"18": "The Dark Night of the Soul; deception; falsehood; illusion; madness; the threshold of significant change.",
"19": "Lord of the New Aeon. Spiritual emancipation. Pleasure; shamelessness; vanity; frankness. Freedom brings sanity. Glory; riches; enlightened civilization.",
"20": "Let every act be an act of Worship; let every act be an act of Love. Final decision; judgement. Learn from the past. Prepare for the future.",
"21": "Completion of the Great Work; patience; perseverance; stubbornness; serious meditation. Work accomplished."
},
"byCardName": {
"ace of wands": "Primordial energy as yet unmanifest. Seed of the Will. Masculine archetype. Natural force.",
"knight of wands": "He is active, generous, fierce, sudden, impetuous. If ill-dignified, he is evil-minded, cruel, bigoted, brutal.",
"queen of wands": "Adaptability, steady force applied to an object, steady rule, great attractive power, power of command, yet liked. Kind and generous when not opposed. If ill-dignified, obstinate, revengeful, domineering, tyrannical, and apt to turn against another without a cause.",
"prince of wands": "Swift, strong, hasty; rather violent, yet just and generous; noble and scorning meanness. If ill-dignified, cruel, intolerant, prejudiced, and ill-natured.",
"princess of wands": "Brilliance, courage, beauty, force, sudden in anger or love, desire of power, enthusiasm, revenge. If ill dignified, she is superficial, theatrical, cruel, unstable, domineering.",
"two of wands": "Dominion. First manifestation of Fire. Ideal will, independent and creative. Control over circumstances.",
"three of wands": "Pride, arrogance, self-assertion. Established force, strength, realization of hope. Completion of labor. Success after struggle. Pride, nobility, wealth, power, conceit. Rude self-assumption and insolence. Generosity, obstinacy, etc.",
"four of wands": "Settlement, arrangement, completion. Perfection or completion of a thing built up with trouble and labor. Rest after labor, subtlety, cleverness, beauty, mirth, success in completion. Reasoning faculty, conclusions drawnfrom previous knowledge. Unreadiness, unreliable and unsteady through overanxiety and hurriedness of action. Graceful in manner, at times insincere, etc.",
"five of wands": "Quarreling and fighting. Violent strife and boldness, rashness, cruelty, violence, lust, desire, prodigality and generosity, depending on whether the card is well- or ill-dignified.",
"six of wands": "Gain. Victory after strife. Love; pleasure gained by labor; carefulness, sociability and avoiding of strife, yet victory therein; also insolence and pride of riches and success, etc. The whole is dependent on the dignity.",
"seven of wands": "Opposition, yet courage. Possible victory, depending on the energy and courage exercised; valor; opposition, obstacles and difficulties, yet courage to meet them; quarreling, ignorance, pretense, wrangling, and threatening; also victory in small and unimportant things and influence upon subordinates.",
"eight of wands": "Hasty communications and messages; swiftness. Too much force applied too suddenly. Very rapid rush, but quickly passed and expended. Violent, but not lasting. Swiftness, rapidity, courage, boldness, confidence, freedom, warfare, violence; love of open air, field sports, gardens, and meadows. Generous, subtle, eloquent, yet somewhat untrustworthy; rapacious, insolent, oppressive. Theft and robbery. According to dignity.",
"nine of wands": "Strength, power, health, recovery from sickness. Tremendous and steady force that cannot be shaken. Herculean strength, yet sometimes scientifically applied. Great success, but with strife and energy. Victory, preceded by apprehension and fear. Health good, and recovery not in doubt. Generous, questioning and curious; fond of external appearances; intractable, obstinate.",
"ten of wands": "Cruelty, malice, revenge, injustice. Cruel and overbearing force and energy, but applied only to material and selfish ends. Sometimes shows failure in a matter and the opposition too strong to be controlled, arising from the persons too great selfishness at the beginning. Ill will, levity, lying, malice, slander, envy, obstinacy; swiftness in evil and deceit, if ill-dignified. Also generosity, disinterestedness, and self-sacrifice, when well dignified. CUPS",
"ace of cups": "It symbolizes fertility—productiveness, beauty, pleasure, happiness, etc.",
"knight of cups": "Graceful, poetic, Venusian, indolent, but enthusiastic if roused. Ill-dignified, he is sensual, idle, and untruthful.",
"queen of cups": "She is imaginative, poetic, kind, yet not willing to take much trouble for another. Coquettish, good-natured, and underneath a dreamy appearance. Imagination stronger than feeling. Very much affected by other influences, and therefore more dependent upon dignity than most symbols.",
"prince of cups": "He is subtle, violent, crafty and artistic; a fierce nature with calm exterior. Powerful for good or evil but more attracted by the evil if allied with apparent Power or Wisdom. If ill-dignified, he is intensely evil and merciless.",
"princess of cups": "Sweetness, poetry, gentleness, and kindness. Imaginative, dreamy, at times indolent, yet courageous if roused. When ill-dignified, she is selfish and luxurious.",
"two of cups": "Marriage, love, pleasure. Harmony of masculine and feminine united. Harmony, pleasure, mirth, subtlety; but if",
"three of cups": "Plenty, hospitality, eating and drinking, pleasure, dancing, new clothes, merriment. Abundance, plenty, success, pleasure, sensuality, passive success, good luck and fortune; love, gladness, kindness, liberality.",
"four of cups": "Receiving pleasure or kindness from others, but some discomfort therewith. Success or pleasure approaching their end. A stationary period in happiness, which may, or may not, continue. It does not mean love and marriage so much as the previous symbol. It is too passive a symbol to represent perfectly completehappiness. Swiftness, hunting and pursuing. Acquisition by contention; injustice sometimes; some drawbacks to pleasure implied.",
"five of cups": "Disappointment in love, marriage broken off, unkindness of a friend; loss of friendship. Death, or end of pleasure; disappointment, sorrow, and loss in those things from which pleasure is expected. Sadness, treachery, deceit; ill will, detraction; charity and kindness ill-requited; all kinds of anxieties and troubles from unsuspected and unexpected sources.",
"six of cups": "Beginning of wish, happiness, success, or enjoyment. Commencement of steady increase, gain and pleasure; but commencement only. Also affront, detection, knowledge, and in some instances contention and strife arising from unwarranted self-assertion and vanity. Sometimes thankless and presumptuous; sometimes amiable and patient. According to dignity as usual.",
"seven of cups": "Lying, promises unfulfilled; illusion, deception, error; slight success at outset, not retained. Possible victory, but neutralized by the supineness of the person: illusionary success, deception in the moment of apparent victory. Lying, error, promises unfulfilled. Drunkenness, wrath, vanity. Lust, fornication, violence against women, selfish dissipation, deception in love and friendship. Often success gained, but not followed up. Modified as usual by dignity.",
"eight of cups": "Success abandoned; decline of interest. Temporary success, but without further results. Thing thrown aside as soon as gained. Not lasting, even in the matter in hand. Indolence in success. Journeying from place to place. Misery and repining without cause. Seeking after riches. Instability.",
"nine of cups": "Complete success, pleasure and happiness, wishes fulfilled. Complete and perfect realization of pleasure and happiness, almost perfect; self-praise, vanity, conceit, much talking of self, yet kind and lovable, and may be self-denying therewith. High-minded, not easily satisfied with small and limited ideas. Apt to be maligned through too much self-assumption. A good and generous, but sometimes foolish nature.",
"ten of cups": "Matter settled; complete good fortune. Permanent and lasting success and happiness, because inspired from above. Not so sensual as “Lord of Material Happiness,” yet almost more truly happy. Pleasure, dissipation,debauchery, quietness, peacemaking. Kindness, pity, generosity, wantonness, waste, etc., according to dignity.",
"ace of swords": "It symbolizes “invoked,” as contrasted with natural force: for it is the Invocation of the Sword. Raised upward, it invokes the divine crown of spiritual brightness, but reversed it is the invocation of demonic force and becomes a fearfully evil symbol. It represents, therefore, very great power for good or evil, but invoked; and it also represents whirling force and strength through trouble. It is the affirmation of Justice upholding divine authority; and it may become the Sword of Wrath, Punishment, and Affliction.",
"knight of swords": "He is active, clever, subtle, fierce, delicate, courageous, skillful, but inclined to domineer. Also to overvalue small things, unless well-dignified. If ill-dignified, deceitful, tyrannical, and crafty.",
"queen of swords": "Intensely perceptive, keen observation, subtle, quick and confident; often persevering, accurate in superficial things, graceful, fond of dancing and balancing. If ill-dignified, cruel, sly, deceitful, unreliable, though with a good exterior.",
"prince of swords": "Full of ideas and thoughts and designs, distrustful, suspicious, firm in friendship and enmity; careful, observant, slow, overcautious. Symbolizes Alpha and Omega; he slays as fast as he creates. If ill-dignified: harsh, malicious, plotting; obstinate, yet hesitating; unreliable.",
"princess of swords": "Wisdom, strength, acuteness; subtlety in material things; grace and dexterity. If ill-dignified, she is frivolous and cunning.",
"two of swords": "Quarrel made up, yet still some tension in relations: actions sometimes selfish, sometimes unselfish. Contradictory characters in the same nature; strength through suffering, pleasure after pain. Sacrifice and trouble, yet strength arising therefrom, symbolized by the position of the rose, as though the pain itself had brought forth beauty. Arrangement, peace restored; truce; truth and untruth; sorrow and sympathy. Aid to the weak; justice; unselfishness; also a tendency to repetition of affronts on being pardoned; injury when meaning well; given to petitions; also a want of tact and asking questions of little moment; talkative.",
"three of swords": "Unhappiness, sorrow, and tears. Disruption, interruption, separation, quarreling; sowing of discord and strife, mischief-making, sorrow and tears; yet mirth in platonic pleasures; singing, faithfulness in promises, honesty in money transactions, selfish and dissipated, yet sometimes generous; deceitful in words and repetitions; the whole according to dignity.",
"four of swords": "Convalescence, recovery from sickness; change for the better. Rest from sorrow, yet after and through it. Peace from and after war. Relaxation of anxiety. Quietness, rest, ease and plenty, yet after struggle. Goods of this life; abundance; modified by dignity as usual.",
"five of swords": "Defeat, loss, malice, spite, slander, evil-speaking. Contest finished and decided against the person; failure, defeat, anxiety, trouble, poverty, avarice, grieving after gain; laborious, unresting; loss and vileness of nature; malicious, slanderous, lying, spiteful and tale-bearing. A busybody and separator of friends, hating to see peace and love between others. Cruel, yet cowardly, thankless and unreliable. Clever and quick in thought and speech. Feelings of pity easily roused, but unenduring.",
"six of swords": "Labor, work, journey by water. Success after anxiety and trouble; self-esteem, beauty, conceit, but sometimes modesty therewith; dominance, patience, labor, etc.",
"seven of swords": "Journey by land; in character untrustworthy. Partial success. Yielding when victory is within grasp, as if the last reserves of strength were used up. Inclination to lose when on the point of gaining through not continuing the effort. Love of abundance; fascinated by display; given to compliments, affronts, and insolences and to spy upon others. Inclined to betray confidences, not always intentionally. Rather vacillatory and unreliable.",
"eight of swords": "Narrow, restricted, petty, a prison. Too much force applied to small things; too much attention to detail at the expense of the principal and more important points. When ill-dignified, these qualities produce malice, pettiness, and domineering characteristics. Patience in detail of study; great care in some things, counterbalanced by equal disorder in others. Impulsive; equally fond of giving or receiving money or presents; generous, clever, acute, selfish and without strong feeling of affection. Admires wisdom, yet applies it to small and unworthy objects.",
"nine of swords": "Illness, suffering, malice, cruelty, pain. Despair, cruelty, pitilessness, malice, suffering, want, loss, misery. Burden, oppression, labor; subtlety and craft, dishonesty, lying and slander. Yet also obedience, faithfulness, patience, unselfishness, etc., according to dignity.",
"ten of swords": "Ruin, death, defeat, disruption. Almost a worse symbol than the Nine of Swords. Undisciplined, warring force, complete disruption and failure. Ruin of all plans and projects. Disdain, insolence, and impertinence, yet mirth and jollity therewith. A marplot, loving to overthrow the happiness of others; a repeater of things; given to much unprofitable speech, and of many words. Yet clever, eloquent, etc., according to dignity.",
"ace of disks": "It represents materiality in all senses, good and evil, and is, therefore, in a sense, illusionary. It shows material gain, labor, power, wealth, etc.",
"knight of disks": "Unless very well-dignified he is heavy, dull, and material. Laborious, clever, and patient in material matters. If",
"queen of disks": "She is impetuous, kind, timid, rather charming, greathearted, intelligent, melancholy, truthful, yet of many moods. If ill-dignified, she is undecided, capricious, changeable, foolish.",
"prince of disks": "Increase of matter. Increases good or evil, solidifies; practically applies things. Steady, reliable. If ill-dignified, he is selfish, animal and material, stupid. In either case slow to anger, but furious if roused.",
"princess of disks": "She is generous, kind, diligent, benevolent, careful, courageous, persevering, pitiful. If ill-dignified, she is wasteful and prodigal.",
"two of disks": "Pleasant change; visit to friends. The harmony of change; alternation of gain and loss, weakness and strength; ever-changing occupation; wandering, discontented with any fixed condition of things; now elated, then melancholy; industrious, yet unreliable; fortunate through prudence of management, yet sometimes unaccountably foolish; alternatively talkative and suspicious. Kind, yet wavering and inconsistent. Fortunate in journeying. Argumentative.",
"three of disks": "Business, paid employment, commercial transaction. Working and constructive force, building up, creation, erection; realization and increase of material things; gain in commercial transactions, rank; increase of substance, influence, cleverness in business, selfishness. Commencement of matters to be established later. Narrow and prejudiced. Keen in matters of gain; sometimes given to seeking after impossibilities.",
"four of disks": "Gain of money or influence; a present. Assured material gain: success, rank, dominion, earthy power, completed but leading to nothing beyond. Prejudicial, covetous, suspicious, careful and orderly, but discontented. Little enterprise or originality. According to dignity as usual.",
"five of disks": "Loss of profession; loss of money; monetary anxiety. Loss of money or position. Trouble about material things. Labor, toil, land cultivation; building, knowledge and acuteness of earthly things; poverty; carefulness, kindness; sometimes money regained after severe toil and labor. Unimaginative, harsh, stern, determined, obstinate.",
"six of disks": "Success in material things, prosperity in business. Success and gain in material undertakings. Power, influence, rank, nobility, rule over the people. Fortunate, successful, liberal, and just. If ill-dignified, may be purse-proud, insolent from excess, or prodigal.",
"seven of disks": "Unprofitable speculations and employments; little gain for much labor. Promises of success unfulfilled (shown, as it were, by the fact that the rosebuds do not come to anything). Loss of apparently promising fortune. Hopes deceived and crushed. Disappointment, misery, slavery, necessity, and baseness. A cultivator of land, yet a loser thereby. Sometimes it denotes slight and isolated gains with no fruits resulting therefrom, and of no further account, though seeming to promise well.",
"eight of disks": "Skill; prudence; cunning. Overcareful in small things at the expense of great. Penny wise and pound foolish. Gain of ready money in small sums; mean, avaricious; industrious; cultivation of land; hoarding; lacking in enterprise.",
"nine of disks": "Inheritance; much increase of goods. Complete realization of material gain, good, riches; inheritance; covetous, treasuring of goods, and sometimes theft and knavery. The whole according to dignity.",
"ten of disks": "Riches and wealth. Completion of material gain and fortune; but nothing beyond; as it were, at the very pinnacle of success. Old age, slothfulness; great wealth, yet sometimes loss in part; heaviness; dullness of mind, yet clever and prosperous in money transactions."
}
}
}

View File

@@ -1,338 +0,0 @@
{
"meta": {
"version": 1,
"notes": "Celtic / Pagan Wheel of the Year — eight seasonal festivals (Sabbats) with astronomical and agricultural associations. Holiday records are centralized in calendar-holidays.json."
},
"calendar": {
"id": "wheel-of-year",
"label": "Wheel of the Year",
"type": "solar-cycle",
"script": "Latin",
"description": "The Wheel of the Year is an annual cycle of eight seasonal festivals (Sabbats) observed in Wicca, Druidry, and many modern Pagan traditions. Four are 'cross-quarter' fire festivals tied to agricultural seasons; four are solar festivals at the solstices and equinoxes."
},
"months": [
{
"id": "samhain",
"order": 1,
"name": "Samhain",
"nativeName": "Samhain",
"pronounce": "SOW-in",
"date": "October 31 / November 1",
"type": "cross-quarter",
"season": "Autumn cross-quarter",
"element": "Earth",
"description": "The Celtic New Year and the beginning of the dark half of the year. The boundary between the living and the dead is thinnest. Ancestors are honored; divination is practiced.",
"associations": {
"direction": "North / Northwest",
"themes": [
"death and rebirth",
"ancestors",
"the veil",
"divination",
"endings"
],
"deities": [
"The Crone",
"Hecate",
"The Morrigan",
"Hades",
"Osiris"
],
"colors": [
"black",
"orange",
"deep red",
"purple"
],
"herbs": [
"mugwort",
"wormwood",
"dittany of Crete",
"nightshade"
]
}
},
{
"id": "yule",
"order": 2,
"name": "Yule (Winter Solstice)",
"nativeName": "Yule / Alban Arthan",
"date": "~December 21",
"type": "solar",
"season": "Winter solstice",
"element": "Earth",
"description": "The longest night and the rebirth of the Sun. The Oak King defeats the Holly King to begin the light's return. Log-burning, evergreen decoration, and candlelight vigils mark this Solar festival.",
"associations": {
"direction": "North",
"themes": [
"rebirth of the sun",
"hope",
"inner light",
"return of warmth",
"solstice"
],
"deities": [
"The Oak King",
"Sol Invictus",
"Mithras",
"Odin / Father Christmas"
],
"colors": [
"red",
"green",
"gold",
"white"
],
"herbs": [
"holly",
"ivy",
"mistletoe",
"pine",
"frankincense"
]
}
},
{
"id": "imbolc",
"order": 3,
"name": "Imbolc",
"nativeName": "Imbolc / Oimelc",
"date": "February 12",
"type": "cross-quarter",
"season": "Late winter cross-quarter",
"element": "Fire / Earth",
"description": "The first stirrings of spring. A festival of the returning light, purification, and the goddess Brigid. Corresponds to Candlemas in Christian tradition.",
"associations": {
"direction": "Northeast",
"themes": [
"new beginnings",
"purification",
"inspiration",
"hearth",
"healing"
],
"deities": [
"Brigid / Bride",
"St. Brigid",
"The Maiden"
],
"colors": [
"white",
"silver",
"pale yellow",
"pink"
],
"herbs": [
"snowdrop",
"rosemary",
"angelica",
"basil"
]
}
},
{
"id": "ostara",
"order": 4,
"name": "Ostara (Spring Equinox)",
"nativeName": "Ostara / Alban Eilir",
"date": "~March 2021",
"type": "solar",
"season": "Spring equinox",
"element": "Air",
"description": "The Spring Equinox; equal day and night, balance of light and dark. Seeds of spring are planted, hares and eggs symbolize fertility. Named for the Germanic dawn goddess Ēostre.",
"associations": {
"direction": "East",
"themes": [
"balance",
"rebirth",
"fertility",
"dawn",
"new beginnings"
],
"deities": [
"Ēostre",
"Persephone",
"The Maiden",
"Green Man"
],
"colors": [
"pale green",
"yellow",
"lilac",
"pastel"
],
"herbs": [
"violet",
"jasmine",
"daffodil",
"lavender"
]
}
},
{
"id": "beltane",
"order": 5,
"name": "Beltane",
"nativeName": "Beltane / Bealtainn",
"date": "May 1",
"type": "cross-quarter",
"season": "Spring cross-quarter",
"element": "Fire",
"description": "The great Celtic fire festival celebrating the peak of spring and the beginning of summer. Union of the God and Goddess. Maypole dancing, bonfires, and the gathering of hawthorn (may) blossom.",
"associations": {
"direction": "Southeast",
"themes": [
"fertility",
"passion",
"union",
"abundance",
"sexuality",
"vitality"
],
"deities": [
"The Green Man",
"Flora",
"Cernunnos",
"Aphrodite",
"Beltane Fire"
],
"colors": [
"red",
"white",
"green",
"gold"
],
"herbs": [
"hawthorn",
"rose",
"rowan",
"meadowsweet",
"woodruff"
]
}
},
{
"id": "litha",
"order": 6,
"name": "Litha (Summer Solstice)",
"nativeName": "Litha / Alban Hefin / Midsummer",
"date": "~June 21",
"type": "solar",
"season": "Summer solstice",
"element": "Fire",
"description": "The longest day; the sun is at its zenith. The Holly King begins to reclaim power from the Oak King. A time of peak solar energy, magic, and celebration. Corresponds to Midsummer (Shakespeare's A Midsummer Night's Dream).",
"associations": {
"direction": "South",
"themes": [
"peak power",
"fullness",
"solar magic",
"fae",
"courage",
"strength"
],
"deities": [
"Sol / Sun God",
"Lugh (early)",
"Ra",
"Apollo"
],
"colors": [
"gold",
"yellow",
"orange",
"blue"
],
"herbs": [
"St. John's Wort",
"lavender",
"chamomile",
"elderflower",
"fern seed"
]
}
},
{
"id": "lughnasadh",
"order": 7,
"name": "Lughnasadh",
"nativeName": "Lughnasadh / Lammas",
"date": "August 1",
"type": "cross-quarter",
"season": "Autumn cross-quarter (first harvest)",
"element": "Earth / Fire",
"description": "The first harvest festival, celebrating grain and abundance. Named for the Celtic sun god Lugh, who ordained funeral games for his foster-mother Tailtiu. The first loaf of bread is baked from the new grain.",
"associations": {
"direction": "West / Southwest",
"themes": [
"first harvest",
"grain",
"sacrifice",
"abundance",
"skill",
"games"
],
"deities": [
"Lugh",
"The Corn King",
"John Barleycorn",
"Demeter"
],
"colors": [
"gold",
"orange",
"brown",
"yellow"
],
"herbs": [
"wheat",
"sunflower",
"corn",
"calendula",
"nasturtium"
]
}
},
{
"id": "mabon",
"order": 8,
"name": "Mabon (Autumn Equinox)",
"nativeName": "Mabon / Alban Elfed",
"date": "~September 2223",
"type": "solar",
"season": "Autumn equinox",
"element": "Earth / Water",
"description": "The Autumn Equinox and second harvest. A time of balance and thanksgiving; day and night are equal. The God begins his descent into the Underworld. Grapes, corn, and root vegetables are harvested.",
"associations": {
"direction": "West",
"themes": [
"harvest",
"balance",
"gratitude",
"preparation for darkness",
"completion"
],
"deities": [
"Mabon ap Modron",
"Persephone descending",
"The Morrigan",
"Dionysus"
],
"colors": [
"deep red",
"brown",
"russet",
"purple",
"gold"
],
"herbs": [
"ivy",
"oak",
"blackberry",
"rosehip",
"sage"
]
}
}
]
}

View File

@@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tarot Time!</title> <title>Tarot Time!</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<link rel="stylesheet" href="node_modules/@toast-ui/calendar/dist/toastui-calendar.min.css">
<link rel="stylesheet" href="node_modules/@fontsource/noto-sans-hebrew/hebrew-400.css"> <link rel="stylesheet" href="node_modules/@fontsource/noto-sans-hebrew/hebrew-400.css">
<link rel="stylesheet" href="node_modules/@fontsource/noto-sans-hebrew/hebrew-700.css"> <link rel="stylesheet" href="node_modules/@fontsource/noto-sans-hebrew/hebrew-700.css">
<link rel="stylesheet" href="node_modules/@fontsource/noto-serif/greek-400.css"> <link rel="stylesheet" href="node_modules/@fontsource/noto-serif/greek-400.css">
@@ -62,6 +61,25 @@
<button id="open-settings" class="settings-trigger" type="button" aria-haspopup="dialog" aria-expanded="false">Settings</button> <button id="open-settings" class="settings-trigger" type="button" aria-haspopup="dialog" aria-expanded="false">Settings</button>
</div> </div>
</div> </div>
<div id="connection-gate" class="connection-gate" hidden>
<div class="connection-gate-card" role="dialog" aria-modal="true" aria-labelledby="connection-gate-title">
<div class="connection-gate-eyebrow">API Connection Required</div>
<h1 id="connection-gate-title" class="connection-gate-title">Connect TaroTime to its API</h1>
<p class="connection-gate-copy">This client stays in shell mode until it has a reachable API URL and, if required by the server, a valid API key.</p>
<div class="connection-gate-fields">
<label class="settings-field settings-field-full" for="connection-gate-base-url">API Base URL
<input id="connection-gate-base-url" type="url" inputmode="url" placeholder="http://localhost:3100">
</label>
<label class="settings-field settings-field-full" for="connection-gate-api-key">API Key
<input id="connection-gate-api-key" type="password" autocomplete="off" placeholder="Leave blank only if your API does not require a key">
</label>
</div>
<div id="connection-gate-status" class="connection-gate-status" aria-live="polite">Enter your API details to continue.</div>
<div class="connection-gate-actions">
<button id="connection-gate-connect" type="button">Save And Connect</button>
</div>
</div>
</div>
<div id="settings-popup" class="settings-popup" hidden> <div id="settings-popup" class="settings-popup" hidden>
<div id="settings-popup-card" class="settings-popup-card" role="dialog" aria-modal="false" aria-label="Calendar Settings"> <div id="settings-popup-card" class="settings-popup-card" role="dialog" aria-modal="false" aria-label="Calendar Settings">
<div class="settings-popup-header"> <div class="settings-popup-header">
@@ -90,6 +108,12 @@
<option value="ceremonial-magick" selected>Loading deck manifests...</option> <option value="ceremonial-magick" selected>Loading deck manifests...</option>
</select> </select>
</label> </label>
<label class="settings-field settings-field-full">API Base URL
<input id="api-base-url" type="url" inputmode="url" placeholder="http://localhost:3100">
</label>
<label class="settings-field settings-field-full">API Key
<input id="api-key" type="password" autocomplete="off" placeholder="Optional unless the API requires one">
</label>
</div> </div>
<div class="settings-actions"> <div class="settings-actions">
<button id="use-location" type="button">Use My Location</button> <button id="use-location" type="button">Use My Location</button>
@@ -832,9 +856,10 @@
<script src="node_modules/suncalc/suncalc.js"></script> <script src="node_modules/suncalc/suncalc.js"></script>
<script src="node_modules/astronomy-engine/astronomy.browser.min.js"></script> <script src="node_modules/astronomy-engine/astronomy.browser.min.js"></script>
<script src="app/astro-calcs.js"></script> <script src="app/astro-calcs.js"></script>
<script src="app/data-service.js"></script> <script src="app/app-config.js?v=20260309-gate"></script>
<script src="app/data-service.js?v=20260309-gate"></script>
<script src="app/calendar-events.js"></script> <script src="app/calendar-events.js"></script>
<script src="app/card-images.js?v=20260307b"></script> <script src="app/card-images.js?v=20260309-gate"></script>
<script src="app/ui-tarot-lightbox.js?v=20260307b"></script> <script src="app/ui-tarot-lightbox.js?v=20260307b"></script>
<script src="app/ui-tarot-house.js?v=20260307b"></script> <script src="app/ui-tarot-house.js?v=20260307b"></script>
<script src="app/ui-tarot-relations.js"></script> <script src="app/ui-tarot-relations.js"></script>
@@ -871,12 +896,12 @@
<script src="app/ui-cube-math.js"></script> <script src="app/ui-cube-math.js"></script>
<script src="app/ui-cube-selection.js"></script> <script src="app/ui-cube-selection.js"></script>
<script src="app/ui-cube.js"></script> <script src="app/ui-cube.js"></script>
<script src="app/ui-alphabet-gematria.js"></script> <script src="app/ui-alphabet-gematria.js?v=20260308b"></script>
<script src="app/ui-alphabet-browser.js"></script> <script src="app/ui-alphabet-browser.js?v=20260309-enochian-api"></script>
<script src="app/ui-alphabet-references.js"></script> <script src="app/ui-alphabet-references.js"></script>
<script src="app/ui-alphabet-detail.js"></script> <script src="app/ui-alphabet-detail.js?v=20260309-enochian-api"></script>
<script src="app/ui-alphabet-kabbalah.js"></script> <script src="app/ui-alphabet-kabbalah.js"></script>
<script src="app/ui-alphabet.js"></script> <script src="app/ui-alphabet.js?v=20260308b"></script>
<script src="app/ui-zodiac-references.js"></script> <script src="app/ui-zodiac-references.js"></script>
<script src="app/ui-zodiac.js"></script> <script src="app/ui-zodiac.js"></script>
<script src="app/ui-quiz-bank-builtins-domains.js"></script> <script src="app/ui-quiz-bank-builtins-domains.js"></script>
@@ -892,14 +917,14 @@
<script src="app/ui-numbers-detail.js"></script> <script src="app/ui-numbers-detail.js"></script>
<script src="app/ui-numbers.js"></script> <script src="app/ui-numbers.js"></script>
<script src="app/ui-tarot-spread.js"></script> <script src="app/ui-tarot-spread.js"></script>
<script src="app/ui-settings.js"></script> <script src="app/ui-settings.js?v=20260309-gate"></script>
<script src="app/ui-chrome.js"></script> <script src="app/ui-chrome.js"></script>
<script src="app/ui-navigation.js"></script> <script src="app/ui-navigation.js"></script>
<script src="app/ui-calendar-formatting.js?v=20260307b"></script> <script src="app/ui-calendar-formatting.js?v=20260307b"></script>
<script src="app/ui-calendar-visuals.js?v=20260307b"></script> <script src="app/ui-calendar-visuals.js?v=20260307b"></script>
<script src="app/ui-home-calendar.js"></script> <script src="app/ui-home-calendar.js"></script>
<script src="app/ui-section-state.js"></script> <script src="app/ui-section-state.js"></script>
<script src="app/app-runtime.js"></script> <script src="app/app-runtime.js?v=20260309-gate"></script>
<script src="app.js"></script> <script src="app.js?v=20260309-gate"></script>
</body> </body>
</html> </html>

1253
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -5,20 +5,13 @@
"@fontsource/noto-sans-hebrew": "^5.2.8", "@fontsource/noto-sans-hebrew": "^5.2.8",
"@fontsource/noto-sans-phoenician": "^5.2.6", "@fontsource/noto-sans-phoenician": "^5.2.6",
"@fontsource/noto-serif": "^5.2.9", "@fontsource/noto-serif": "^5.2.9",
"@toast-ui/calendar": "^2.1.3",
"astronomy-engine": "^2.1.19", "astronomy-engine": "^2.1.19",
"suncalc": "^1.9.0" "suncalc": "^1.9.0"
}, },
"devDependencies": { "devDependencies": {
"http-server": "^14.1.1", "http-server": "^14.1.1"
"sharp": "^0.34.5"
}, },
"scripts": { "scripts": {
"generate:decks": "node scripts/generate-decks-registry.cjs",
"generate:deck-thumbs": "node scripts/generate-deck-thumbnails.cjs",
"validate:decks": "node scripts/generate-decks-registry.cjs --validate-only --strict",
"postinstall": "npm run generate:decks && npm run generate:deck-thumbs",
"prestart": "npm run generate:decks && npm run generate:deck-thumbs",
"start": "npx http-server . -o index.html", "start": "npx http-server . -o index.html",
"dev": "npm run start" "dev": "npm run start"
} }

View File

@@ -1,206 +0,0 @@
const fs = require("fs");
const path = require("path");
const sharp = require("sharp");
const projectRoot = path.resolve(__dirname, "..");
const decksRoot = path.join(projectRoot, "asset", "tarot deck");
const ignoredFolderNames = new Set(["template", "templates", "example", "examples"]);
const supportedImageExtensions = new Set([".png", ".jpg", ".jpeg", ".webp", ".avif", ".gif"]);
const defaultThumbnailConfig = {
root: "thumbs",
width: 240,
height: 360,
fit: "inside",
quality: 82
};
function isPlainObject(value) {
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
}
function asNonEmptyString(value) {
const normalized = String(value || "").trim();
return normalized || null;
}
function shouldIgnoreDeckFolder(folderName) {
const normalized = String(folderName || "").trim().toLowerCase();
if (!normalized) {
return true;
}
return normalized.startsWith("_") || normalized.startsWith(".") || ignoredFolderNames.has(normalized);
}
function readManifestJson(manifestPath) {
try {
const text = fs.readFileSync(manifestPath, "utf8");
const parsed = JSON.parse(text);
return parsed && typeof parsed === "object" ? parsed : null;
} catch {
return null;
}
}
function normalizeThumbnailConfig(rawConfig) {
if (rawConfig === false) {
return false;
}
if (!isPlainObject(rawConfig)) {
return null;
}
return {
root: asNonEmptyString(rawConfig.root) || defaultThumbnailConfig.root,
width: Number.isInteger(Number(rawConfig.width)) && Number(rawConfig.width) > 0
? Number(rawConfig.width)
: defaultThumbnailConfig.width,
height: Number.isInteger(Number(rawConfig.height)) && Number(rawConfig.height) > 0
? Number(rawConfig.height)
: defaultThumbnailConfig.height,
fit: asNonEmptyString(rawConfig.fit) || defaultThumbnailConfig.fit,
quality: Number.isInteger(Number(rawConfig.quality)) && Number(rawConfig.quality) >= 1 && Number(rawConfig.quality) <= 100
? Number(rawConfig.quality)
: defaultThumbnailConfig.quality
};
}
function ensureDirectory(dirPath) {
fs.mkdirSync(dirPath, { recursive: true });
}
function listSourceImages(deckFolderPath, thumbnailRoot) {
const results = [];
function walk(currentPath) {
const entries = fs.readdirSync(currentPath, { withFileTypes: true });
entries.forEach((entry) => {
const entryPath = path.join(currentPath, entry.name);
const relativePath = path.relative(deckFolderPath, entryPath).replace(/\\/g, "/");
if (!relativePath) {
return;
}
if (entry.isDirectory()) {
if (relativePath === thumbnailRoot || relativePath.startsWith(`${thumbnailRoot}/`)) {
return;
}
walk(entryPath);
return;
}
if (!entry.isFile()) {
return;
}
if (!supportedImageExtensions.has(path.extname(entry.name).toLowerCase())) {
return;
}
results.push(relativePath);
});
}
walk(deckFolderPath);
return results;
}
function shouldRegenerateThumbnail(sourcePath, outputPath) {
if (!fs.existsSync(outputPath)) {
return true;
}
const sourceStat = fs.statSync(sourcePath);
const outputStat = fs.statSync(outputPath);
return sourceStat.mtimeMs > outputStat.mtimeMs;
}
function buildSharpPipeline(sourcePath, extension, config) {
let pipeline = sharp(sourcePath, { animated: extension === ".gif" }).rotate().resize({
width: config.width,
height: config.height,
fit: config.fit,
withoutEnlargement: true
});
if (extension === ".jpg" || extension === ".jpeg") {
pipeline = pipeline.jpeg({ quality: config.quality, mozjpeg: true });
} else if (extension === ".png") {
pipeline = pipeline.png({ quality: config.quality, compressionLevel: 9 });
} else if (extension === ".webp") {
pipeline = pipeline.webp({ quality: config.quality });
} else if (extension === ".avif") {
pipeline = pipeline.avif({ quality: config.quality, effort: 4 });
}
return pipeline;
}
async function generateDeckThumbnails() {
const entries = fs.readdirSync(decksRoot, { withFileTypes: true });
let generatedCount = 0;
const warnings = [];
for (const entry of entries) {
if (!entry.isDirectory() || shouldIgnoreDeckFolder(entry.name)) {
continue;
}
const deckFolderPath = path.join(decksRoot, entry.name);
const manifestPath = path.join(deckFolderPath, "deck.json");
if (!fs.existsSync(manifestPath)) {
warnings.push(`Skipped '${entry.name}': missing deck.json`);
continue;
}
const manifest = readManifestJson(manifestPath);
if (!manifest) {
warnings.push(`Skipped '${entry.name}': deck.json is invalid JSON`);
continue;
}
const thumbnailConfig = normalizeThumbnailConfig(manifest.thumbnails);
if (!thumbnailConfig) {
continue;
}
const thumbnailRoot = thumbnailConfig.root.replace(/^\.\//, "").replace(/\/$/, "");
ensureDirectory(path.join(deckFolderPath, thumbnailRoot));
const sourceImages = listSourceImages(deckFolderPath, thumbnailRoot);
for (const relativePath of sourceImages) {
const sourcePath = path.join(deckFolderPath, relativePath);
const outputPath = path.join(deckFolderPath, thumbnailRoot, relativePath);
ensureDirectory(path.dirname(outputPath));
if (!shouldRegenerateThumbnail(sourcePath, outputPath)) {
continue;
}
const extension = path.extname(sourcePath).toLowerCase();
try {
await buildSharpPipeline(sourcePath, extension, thumbnailConfig).toFile(outputPath);
generatedCount += 1;
} catch (error) {
warnings.push(`Failed '${entry.name}/${relativePath}': ${error instanceof Error ? error.message : "unknown error"}`);
}
}
}
return { generatedCount, warnings };
}
async function main() {
const { generatedCount, warnings } = await generateDeckThumbnails();
console.log(`[deck-thumbs] Generated ${generatedCount} thumbnail${generatedCount === 1 ? "" : "s"}`);
warnings.forEach((warning) => {
console.warn(`[deck-thumbs] ${warning}`);
});
}
main().catch((error) => {
console.error(`[deck-thumbs] ${error instanceof Error ? error.message : "Unknown error"}`);
process.exitCode = 1;
});

View File

@@ -1,721 +0,0 @@
const fs = require("fs");
const path = require("path");
const projectRoot = path.resolve(__dirname, "..");
const decksRoot = path.join(projectRoot, "asset", "tarot deck");
const registryPath = path.join(decksRoot, "decks.json");
const ignoredFolderNames = new Set(["template", "templates", "example", "examples"]);
const tarotSuits = ["wands", "cups", "swords", "disks"];
const majorTrumpNumbers = Array.from({ length: 22 }, (_, index) => index);
const expectedMinorCardCount = 56;
const defaultPipRankOrder = ["Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten"];
const defaultThumbnailConfig = {
root: "thumbs",
width: 240,
height: 360,
fit: "inside",
quality: 82
};
const supportedThumbnailFits = new Set(["contain", "cover", "fill", "inside", "outside"]);
const cardBackCandidateExtensions = ["webp", "png", "jpg", "jpeg", "avif", "gif"];
function isPlainObject(value) {
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
}
function slugifyId(input) {
return String(input || "")
.trim()
.toLowerCase()
.replace(/&/g, " and ")
.replace(/['\"`]/g, "")
.replace(/[^a-z0-9]+/g, "-")
.replace(/^-+|-+$/g, "")
.replace(/-{2,}/g, "-");
}
function asNonEmptyString(value) {
const normalized = String(value || "").trim();
return normalized || null;
}
function isRemoteAssetPath(value) {
return /^(https?:)?\/\//i.test(String(value || "").trim());
}
function toTitleCase(value) {
const normalized = String(value || "").trim().toLowerCase();
if (!normalized) {
return "";
}
return normalized.charAt(0).toUpperCase() + normalized.slice(1);
}
function applyTemplate(template, variables) {
return String(template || "")
.replace(/\{([a-zA-Z0-9_]+)\}/g, (_, token) => {
const value = variables[token];
return value == null ? "" : String(value);
});
}
function readManifestJson(manifestPath) {
try {
const text = fs.readFileSync(manifestPath, "utf8");
const parsed = JSON.parse(text);
return parsed && typeof parsed === "object" ? parsed : null;
} catch {
return null;
}
}
function normalizeThumbnailConfig(thumbnails) {
if (thumbnails == null) {
return null;
}
if (thumbnails === false) {
return false;
}
if (!isPlainObject(thumbnails)) {
return null;
}
return {
root: asNonEmptyString(thumbnails.root) || defaultThumbnailConfig.root,
width: Number.isInteger(Number(thumbnails.width)) && Number(thumbnails.width) > 0
? Number(thumbnails.width)
: defaultThumbnailConfig.width,
height: Number.isInteger(Number(thumbnails.height)) && Number(thumbnails.height) > 0
? Number(thumbnails.height)
: defaultThumbnailConfig.height,
fit: asNonEmptyString(thumbnails.fit) || defaultThumbnailConfig.fit,
quality: Number.isInteger(Number(thumbnails.quality)) && Number(thumbnails.quality) >= 1 && Number(thumbnails.quality) <= 100
? Number(thumbnails.quality)
: defaultThumbnailConfig.quality
};
}
function validateThumbnailConfig(thumbnails) {
if (thumbnails == null || thumbnails === false) {
return null;
}
if (!isPlainObject(thumbnails)) {
return "thumbnails must be an object or false when provided";
}
const root = asNonEmptyString(thumbnails.root) || defaultThumbnailConfig.root;
if (!root || root.startsWith("/") || isRemoteAssetPath(root)) {
return "thumbnails.root must be a relative folder name";
}
if (thumbnails.width != null && (!Number.isInteger(Number(thumbnails.width)) || Number(thumbnails.width) <= 0)) {
return "thumbnails.width must be a positive integer when provided";
}
if (thumbnails.height != null && (!Number.isInteger(Number(thumbnails.height)) || Number(thumbnails.height) <= 0)) {
return "thumbnails.height must be a positive integer when provided";
}
if (thumbnails.quality != null) {
const quality = Number(thumbnails.quality);
if (!Number.isInteger(quality) || quality < 1 || quality > 100) {
return "thumbnails.quality must be an integer between 1 and 100 when provided";
}
}
const fit = asNonEmptyString(thumbnails.fit) || defaultThumbnailConfig.fit;
if (!supportedThumbnailFits.has(fit)) {
return `thumbnails.fit must be one of ${Array.from(supportedThumbnailFits).join(", ")}`;
}
return null;
}
function hasNonEmptyStringMapEntries(value) {
if (!isPlainObject(value)) {
return false;
}
return Object.values(value).some((entryValue) => String(entryValue || "").trim());
}
function getNormalizedRankOrder(rankSource, fallbackRankOrder = []) {
const explicitRankOrder = Array.isArray(rankSource?.rankOrder) ? rankSource.rankOrder : [];
const rankOrderSource = explicitRankOrder.length ? explicitRankOrder : fallbackRankOrder;
return rankOrderSource
.map((entry) => String(entry || "").trim())
.filter(Boolean);
}
function hasRankResolver(minorRule, fallbackRankOrder = []) {
if (!isPlainObject(minorRule)) {
return false;
}
const rankOrder = getNormalizedRankOrder(minorRule, fallbackRankOrder);
if (rankOrder.length) {
return true;
}
return hasNonEmptyStringMapEntries(minorRule.rankIndexByKey);
}
function hasSuitNumberMap(value) {
if (!isPlainObject(value)) {
return false;
}
return tarotSuits.every((suitId) => Number.isFinite(Number(value[suitId])));
}
function hasSuitStringMap(value) {
if (!isPlainObject(value)) {
return false;
}
return tarotSuits.every((suitId) => String(value[suitId] || "").trim());
}
function isValidMinorOverrideKey(value) {
return /^(ace|two|three|four|five|six|seven|eight|nine|ten|knight|queen|prince|princess|king|page|[2-9]|10)\s+of\s+(cups|wands|swords|pentacles|disks)$/i.test(String(value || "").trim());
}
function getDefinedMajorCount(majors) {
const mode = asNonEmptyString(majors?.mode);
if (mode === "trump-template") {
return majorTrumpNumbers.length;
}
if (mode === "canonical-map" || mode === "trump-map") {
return Object.values(majors?.cards || {})
.map((value) => String(value || "").trim())
.filter(Boolean)
.length;
}
return 0;
}
function validateMajorsRule(majors) {
if (!isPlainObject(majors)) {
return "majors must be an object";
}
const mode = asNonEmptyString(majors.mode);
if (!mode) {
return "majors.mode is required";
}
if (mode === "canonical-map" || mode === "trump-map") {
if (!hasNonEmptyStringMapEntries(majors.cards)) {
return `majors.cards must be a non-empty object for mode '${mode}'`;
}
if (getDefinedMajorCount(majors) < majorTrumpNumbers.length) {
return `majors.cards must define all ${majorTrumpNumbers.length} major trumps for mode '${mode}'`;
}
return null;
}
if (mode === "trump-template") {
const template = asNonEmptyString(majors.template);
if (!template) {
return "majors.template is required for mode 'trump-template'";
}
if (majors.numberPad != null && !Number.isInteger(Number(majors.numberPad))) {
return "majors.numberPad must be an integer when provided";
}
return null;
}
return `unsupported majors.mode '${mode}'`;
}
function validateMinorsRule(minors) {
if (!isPlainObject(minors)) {
return "minors must be an object";
}
const mode = asNonEmptyString(minors.mode);
if (!mode) {
return "minors.mode is required";
}
if (mode === "split-number-template") {
const courtsError = validateMinorNumberTemplateGroup(minors.courts, {
label: "minors.courts",
expectedRankCount: 4
});
if (courtsError) {
return courtsError;
}
const smallsError = validateMinorNumberTemplateGroup(minors.smalls, {
label: "minors.smalls",
expectedRankCount: defaultPipRankOrder.length,
fallbackRankOrder: defaultPipRankOrder
});
if (smallsError) {
return smallsError;
}
return null;
}
if (!hasRankResolver(minors)) {
return "minors must define rankOrder or rankIndexByKey";
}
if (getRankEntries(minors).length !== 14) {
return `minors must define exactly 14 ranks to cover ${expectedMinorCardCount} cards`;
}
if (mode === "suit-prefix-and-rank-order") {
if (!hasSuitStringMap(minors.suitPrefix)) {
return "minors.suitPrefix must define wands, cups, swords, and disks";
}
if (minors.indexStart != null && !Number.isInteger(Number(minors.indexStart))) {
return "minors.indexStart must be an integer when provided";
}
if (minors.indexPad != null && !Number.isInteger(Number(minors.indexPad))) {
return "minors.indexPad must be an integer when provided";
}
return null;
}
if (mode === "suit-base-and-rank-order" || mode === "suit-base-number-template") {
if (!hasSuitNumberMap(minors.suitBase)) {
return "minors.suitBase must define numeric bases for wands, cups, swords, and disks";
}
if (minors.numberPad != null && !Number.isInteger(Number(minors.numberPad))) {
return "minors.numberPad must be an integer when provided";
}
return null;
}
return `unsupported minors.mode '${mode}'`;
}
function validateMinorNumberTemplateGroup(groupRule, options = {}) {
const label = String(options.label || "minor group");
const expectedRankCount = Number(options.expectedRankCount);
const fallbackRankOrder = Array.isArray(options.fallbackRankOrder) ? options.fallbackRankOrder : [];
if (!isPlainObject(groupRule)) {
return `${label} must be an object`;
}
if (!hasRankResolver(groupRule, fallbackRankOrder)) {
return `${label} must define rankOrder or rankIndexByKey`;
}
if (getRankEntries(groupRule, fallbackRankOrder).length !== expectedRankCount) {
return `${label} must define exactly ${expectedRankCount} ranks`;
}
if (!hasSuitNumberMap(groupRule.suitBase)) {
return `${label}.suitBase must define numeric bases for wands, cups, swords, and disks`;
}
if (!asNonEmptyString(groupRule.template)) {
return `${label}.template is required`;
}
if (groupRule.numberPad != null && !Number.isInteger(Number(groupRule.numberPad))) {
return `${label}.numberPad must be an integer when provided`;
}
return null;
}
function validateDeckManifest(manifest) {
const errors = [];
if (!isPlainObject(manifest)) {
return ["deck.json must contain an object"];
}
const majorsError = validateMajorsRule(manifest.majors);
if (majorsError) {
errors.push(majorsError);
}
const minorsError = validateMinorsRule(manifest.minors);
if (minorsError) {
errors.push(minorsError);
}
if (manifest.nameOverrides != null && !isPlainObject(manifest.nameOverrides)) {
errors.push("nameOverrides must be an object when provided");
}
if (manifest.minorNameOverrides != null && !isPlainObject(manifest.minorNameOverrides)) {
errors.push("minorNameOverrides must be an object when provided");
}
if (isPlainObject(manifest.minorNameOverrides)) {
Object.entries(manifest.minorNameOverrides).forEach(([rawKey, rawValue]) => {
if (!isValidMinorOverrideKey(rawKey)) {
errors.push(`minorNameOverrides contains unsupported card key '${rawKey}'`);
}
if (!asNonEmptyString(rawValue)) {
errors.push(`minorNameOverrides '${rawKey}' must map to a non-empty string`);
}
});
}
if (manifest.majorNameOverridesByTrump != null && !isPlainObject(manifest.majorNameOverridesByTrump)) {
errors.push("majorNameOverridesByTrump must be an object when provided");
}
if (manifest.cardBack != null && !asNonEmptyString(manifest.cardBack)) {
errors.push("cardBack must be a non-empty string when provided");
}
const thumbnailsError = validateThumbnailConfig(manifest.thumbnails);
if (thumbnailsError) {
errors.push(thumbnailsError);
}
return errors;
}
function getRankEntries(minors, fallbackRankOrder = []) {
const rankOrder = getNormalizedRankOrder(minors, fallbackRankOrder);
if (rankOrder.length) {
return rankOrder.map((rankWord, rankIndex) => ({
rankWord,
rankKey: rankWord.toLowerCase(),
rankIndex
}));
}
const rankIndexByKey = isPlainObject(minors?.rankIndexByKey) ? minors.rankIndexByKey : {};
return Object.entries(rankIndexByKey)
.map(([rankKey, rankIndex]) => ({
rankWord: toTitleCase(rankKey),
rankKey: String(rankKey || "").trim().toLowerCase(),
rankIndex: Number(rankIndex)
}))
.filter((entry) => entry.rankKey && Number.isInteger(entry.rankIndex) && entry.rankIndex >= 0)
.sort((left, right) => left.rankIndex - right.rankIndex);
}
function getReferencedMajorFiles(manifest) {
const majors = manifest?.majors;
const mode = asNonEmptyString(majors?.mode);
if (!mode) {
return [];
}
if (mode === "canonical-map" || mode === "trump-map") {
return Object.values(majors.cards || {})
.map((value) => String(value || "").trim())
.filter(Boolean);
}
if (mode === "trump-template") {
const template = String(majors.template || "{number}.png");
const numberPad = Number.isInteger(Number(majors.numberPad)) ? Number(majors.numberPad) : 2;
return majorTrumpNumbers.map((trump) => applyTemplate(template, {
trump,
number: String(trump).padStart(numberPad, "0")
}));
}
return [];
}
function getReferencedMinorFiles(manifest) {
const minors = manifest?.minors;
const mode = asNonEmptyString(minors?.mode);
if (!mode) {
return [];
}
if (mode === "split-number-template") {
return [
...getReferencedSplitMinorGroupFiles(minors.courts),
...getReferencedSplitMinorGroupFiles(minors.smalls, defaultPipRankOrder)
];
}
const rankEntries = getRankEntries(minors);
if (!rankEntries.length) {
return [];
}
if (mode === "suit-prefix-and-rank-order") {
const template = String(minors.template || "{suit}{index}.png");
const indexStart = Number.isInteger(Number(minors.indexStart)) ? Number(minors.indexStart) : 1;
const indexPad = Number.isInteger(Number(minors.indexPad)) ? Number(minors.indexPad) : 2;
return tarotSuits.flatMap((suitId) => {
const suitPrefix = String(minors?.suitPrefix?.[suitId] || "").trim();
return rankEntries.map((entry) => applyTemplate(template, {
suit: suitPrefix,
suitId,
index: String(indexStart + entry.rankIndex).padStart(indexPad, "0"),
rank: entry.rankWord,
rankKey: entry.rankKey
}));
});
}
if (mode === "suit-base-and-rank-order") {
const template = String(minors.template || "{number}_{rank} {suit}.webp");
const numberPad = Number.isInteger(Number(minors.numberPad)) ? Number(minors.numberPad) : 2;
return tarotSuits.flatMap((suitId) => {
const suitBase = Number(minors?.suitBase?.[suitId]);
const suitWord = String(minors?.suitLabel?.[suitId] || toTitleCase(suitId));
return rankEntries.map((entry) => applyTemplate(template, {
number: String(suitBase + entry.rankIndex).padStart(numberPad, "0"),
rank: entry.rankWord,
rankKey: entry.rankKey,
suit: suitWord,
suitId,
index: entry.rankIndex + 1
}));
});
}
if (mode === "suit-base-number-template") {
const template = String(minors.template || "{number}.png");
const numberPad = Number.isInteger(Number(minors.numberPad)) ? Number(minors.numberPad) : 2;
return tarotSuits.flatMap((suitId) => {
const suitBase = Number(minors?.suitBase?.[suitId]);
return rankEntries.map((entry) => applyTemplate(template, {
number: String(suitBase + entry.rankIndex).padStart(numberPad, "0"),
rank: entry.rankWord,
rankKey: entry.rankKey,
suitId,
index: entry.rankIndex
}));
});
}
return [];
}
function getReferencedSplitMinorGroupFiles(groupRule, fallbackRankOrder = []) {
const rankEntries = getRankEntries(groupRule, fallbackRankOrder);
if (!rankEntries.length) {
return [];
}
const template = String(groupRule?.template || "{number}.png");
const numberPad = Number.isInteger(Number(groupRule?.numberPad)) ? Number(groupRule.numberPad) : 2;
return tarotSuits.flatMap((suitId) => {
const suitBase = Number(groupRule?.suitBase?.[suitId]);
return rankEntries.map((entry) => applyTemplate(template, {
number: String(suitBase + entry.rankIndex).padStart(numberPad, "0"),
rank: entry.rankWord,
rankKey: entry.rankKey,
suitId,
index: entry.rankIndex
}));
});
}
function getReferencedCardBackFiles(manifest) {
const cardBack = asNonEmptyString(manifest?.cardBack);
if (!cardBack || isRemoteAssetPath(cardBack)) {
return [];
}
return [cardBack];
}
function summarizeMissingFiles(fileList) {
const maxPreview = 8;
const preview = fileList.slice(0, maxPreview).join(", ");
if (fileList.length <= maxPreview) {
return preview;
}
return `${preview}, ... (+${fileList.length - maxPreview} more)`;
}
function detectDeckCardBackRelativePath(folderName, manifest) {
const explicitCardBack = asNonEmptyString(manifest?.cardBack);
if (explicitCardBack) {
return explicitCardBack;
}
const deckFolderPath = path.join(decksRoot, folderName);
for (let index = 0; index < cardBackCandidateExtensions.length; index += 1) {
const extension = cardBackCandidateExtensions[index];
const candidateName = `back.${extension}`;
if (fs.existsSync(path.join(deckFolderPath, candidateName))) {
return candidateName;
}
}
return null;
}
function auditDeckFiles(folderName, manifest) {
const deckFolderPath = path.join(decksRoot, folderName);
const referencedFiles = [
...getReferencedMajorFiles(manifest),
...getReferencedMinorFiles(manifest),
...getReferencedCardBackFiles(manifest)
]
.map((relativePath) => String(relativePath || "").trim())
.filter(Boolean);
const uniqueReferencedFiles = Array.from(new Set(referencedFiles));
const missingFiles = uniqueReferencedFiles.filter((relativePath) => !fs.existsSync(path.join(deckFolderPath, relativePath)));
if (!missingFiles.length) {
return null;
}
return `missing ${missingFiles.length} referenced image file${missingFiles.length === 1 ? "" : "s"}: ${summarizeMissingFiles(missingFiles)}`;
}
function shouldIgnoreDeckFolder(folderName) {
const normalized = String(folderName || "").trim().toLowerCase();
if (!normalized) {
return true;
}
return normalized.startsWith("_") || normalized.startsWith(".") || ignoredFolderNames.has(normalized);
}
function compileDeckRegistry() {
if (!fs.existsSync(decksRoot)) {
throw new Error(`Deck root not found: ${decksRoot}`);
}
const entries = fs.readdirSync(decksRoot, { withFileTypes: true });
const deckRows = [];
const warnings = [];
const seenIds = new Set();
entries.forEach((entry) => {
if (!entry.isDirectory()) {
return;
}
const folderName = entry.name;
if (shouldIgnoreDeckFolder(folderName)) {
return;
}
const manifestFsPath = path.join(decksRoot, folderName, "deck.json");
if (!fs.existsSync(manifestFsPath)) {
warnings.push(`Skipped '${folderName}': missing deck.json`);
return;
}
const manifest = readManifestJson(manifestFsPath);
if (!manifest) {
warnings.push(`Skipped '${folderName}': deck.json is invalid JSON`);
return;
}
const validationErrors = validateDeckManifest(manifest);
if (validationErrors.length) {
warnings.push(`Skipped '${folderName}': ${validationErrors.join("; ")}`);
return;
}
const auditError = auditDeckFiles(folderName, manifest);
if (auditError) {
warnings.push(`Skipped '${folderName}': ${auditError}`);
return;
}
const idFromManifest = asNonEmptyString(manifest.id);
const labelFromManifest = asNonEmptyString(manifest.label);
const fallbackId = slugifyId(folderName);
if (!fallbackId && !idFromManifest) {
warnings.push(`Skipped '${folderName}': unable to infer deck id`);
return;
}
const id = (idFromManifest || fallbackId).toLowerCase();
const label = labelFromManifest || folderName;
const basePath = `asset/tarot deck/${folderName}`;
const cardBackPath = detectDeckCardBackRelativePath(folderName, manifest);
const thumbnailConfig = normalizeThumbnailConfig(manifest.thumbnails);
if (seenIds.has(id)) {
warnings.push(`Skipped '${folderName}': duplicate deck id '${id}'`);
return;
}
seenIds.add(id);
deckRows.push({
id,
label,
basePath,
manifestPath: `${basePath}/deck.json`,
...(thumbnailConfig && thumbnailConfig !== false ? { thumbnailRoot: thumbnailConfig.root } : {}),
...(cardBackPath ? { cardBackPath } : {})
});
});
// Keep output deterministic for stable diffs.
deckRows.sort((a, b) => a.label.localeCompare(b.label, "en", { sensitivity: "base" }));
return {
registry: { decks: deckRows },
warnings
};
}
function writeDeckRegistry(registry) {
fs.writeFileSync(registryPath, `${JSON.stringify(registry, null, 2)}\n`, "utf8");
}
function parseCliOptions(argv) {
const args = new Set(Array.isArray(argv) ? argv : []);
return {
validateOnly: args.has("--validate-only"),
strict: args.has("--strict")
};
}
function main() {
const options = parseCliOptions(process.argv.slice(2));
const { registry, warnings } = compileDeckRegistry();
const count = Array.isArray(registry.decks) ? registry.decks.length : 0;
if (options.validateOnly) {
console.log(`[decks] Validated ${count} deck manifest${count === 1 ? "" : "s"}`);
} else {
writeDeckRegistry(registry);
console.log(`[decks] Wrote ${count} deck entr${count === 1 ? "y" : "ies"} to ${path.relative(projectRoot, registryPath)}`);
}
warnings.forEach((warning) => {
console.warn(`[decks] ${warning}`);
});
if (options.strict && warnings.length) {
process.exitCode = 1;
console.error(`[decks] Validation failed with ${warnings.length} warning${warnings.length === 1 ? "" : "s"}`);
}
}
main();