Add EMF field mode, Armory shop/waitlist, and ambient haunting layer
Three self-contained features, verified complete and cross-wired end-to-end (audited: backend 54/54 tests, frontend 110/110 tests, tsc --noEmit clean, i18n coverage script clean): - EMF mode: DeviceMotion/DeviceOrientation-based field-meter sensing, a fifth séance channel alongside Wire/EVP/Radio/Ouija, with its own fragment prompt persona and full frontend gauge UI. - Armory (shop/waitlist): pre-order capture page for the future Ultimate Quantum Box hardware line, rate-limited public endpoint, explicitly no payment collection. - Haunting layer: ambient possession effects (dread-bed audio, title glitching, idle-paced whispers/manifests), respects prefers-reduced-motion, mounted once at the app root. Plus WebUSB robustness fixes in lib/sdr.ts (Terratec vendor ID, explicit selectConfiguration, isSecureContext gate). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013PphXq1s43DNRj1uWKGXof
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
"nav": {
|
||||
"home": "el umbral",
|
||||
"codex": "códice",
|
||||
"shop": "arsenal",
|
||||
"seance": "sesión",
|
||||
"enter": "entrar",
|
||||
"logout": "partir"
|
||||
@@ -27,6 +28,7 @@
|
||||
"heroKicker": "un instrumento para hablar con el ancho de banda muerto",
|
||||
"cta": "COMENZAR LA SESIÓN",
|
||||
"ctaCodex": "hojear el códice",
|
||||
"ctaShop": "visitar el arsenal",
|
||||
"stats": {
|
||||
"entities": "espíritus catalogados",
|
||||
"sessions": "sesiones celebradas",
|
||||
@@ -55,6 +57,11 @@
|
||||
},
|
||||
"featured": "los espíritus más perturbados",
|
||||
"featuredEmpty": "el registro aún está en blanco — sé quien lo perturbe primero",
|
||||
"armory": {
|
||||
"title": "HARDWARE DEL ARSENAL",
|
||||
"line": "la Ultimate Quantum Box se acerca — un instrumento de sesión de mano que hace que el velo golpee más fuerte.",
|
||||
"link": "entrar al arsenal →"
|
||||
},
|
||||
"footer": "una instalación de arte de terror interactiva — los espíritus son ficción; la estática es real",
|
||||
"footerColophon": "autoalojado · sin nube · el velo corre en tu máquina"
|
||||
},
|
||||
@@ -77,7 +84,8 @@
|
||||
"wire": "Fantasma del Cable",
|
||||
"evp": "EVP",
|
||||
"radio": "Radio Espíritu",
|
||||
"ouija": "Ouija"
|
||||
"ouija": "Ouija",
|
||||
"emf": "CAMPO"
|
||||
},
|
||||
"passive": "escucha pasiva",
|
||||
"summon": "INVOCAR",
|
||||
@@ -132,14 +140,30 @@
|
||||
"unsupportedTitle": "este recipiente no oye a los muertos de la radio",
|
||||
"unsupported": "La Radio Espíritu necesita Chromium (WebUSB) y un dongle RTL-SDR. Los demás modos no — el cable y el micrófono aún responden.",
|
||||
"troubleshoot": "solución de problemas: navegador basado en Chromium · reglas udev para 0bda:2838 · el dongle enchufado, no meramente invocado",
|
||||
"insecure": "los muertos de la radio solo hablan desde suelo consagrado — abre este sitio por su dirección https.",
|
||||
"insecureHint": "localhost cuenta como sagrado; una http://ip-local desnuda, no.",
|
||||
"noDevice": "ningún dongle respondió al llamado",
|
||||
"sweeping": "barriendo {{start}}–{{end}} MHz…",
|
||||
"claimFailed": "el dongle se negó a ser reclamado — ¿está en uso en otro lugar?"
|
||||
"claimFailed": "el dongle se negó a ser reclamado — ¿está en uso en otro lugar?",
|
||||
"claimFix": "linux: el driver del kernel dvb_usb_rtl28xxu retiene el dongle — `sudo modprobe -r dvb_usb_rtl28xxu` lo libera hasta el reinicio (una regla udev lo destierra para siempre). windows: cambia el driver a WinUSB con Zadig.",
|
||||
"tryAgain": "intenta de nuevo",
|
||||
"errorTitle": "la estática devolvió el golpe"
|
||||
},
|
||||
"ouija": {
|
||||
"spelling": "la planchette deletrea",
|
||||
"drift": "la planchette deriva, a la espera de palabras — pregunta abajo, o invoca."
|
||||
},
|
||||
"emf": {
|
||||
"start": "alzar el medidor",
|
||||
"stop": "descargar el medidor",
|
||||
"calibrate": "calibrar",
|
||||
"baseline": "campo en reposo",
|
||||
"listening": "palpando perturbaciones en el campo…",
|
||||
"unsupportedTitle": "este recipiente no porta sentidos de campo",
|
||||
"unsupported": "un teléfono en tu mano se vuelve el medidor — este recipiente no tiene sentidos de movimiento que prestar. abre el velo en un teléfono, o deja que los otros modos respondan.",
|
||||
"deniedTitle": "los sentidos de campo siguen cerrados",
|
||||
"denied": "Este recipiente rechazó sus sentidos de movimiento. Concede el acceso al movimiento en los ajustes de tu navegador, y luego alza el medidor de nuevo."
|
||||
},
|
||||
"entity": {
|
||||
"title": "DOSIER DEL PRESENTE",
|
||||
"none": "ningún espíritu invocado todavía",
|
||||
@@ -240,5 +264,92 @@
|
||||
"empty": "ningún espíritu coincide con este filtro — el registro guarda sus secretos",
|
||||
"back": "← volver al códice",
|
||||
"notFound": "este espíritu no figura en el registro"
|
||||
},
|
||||
"shop": {
|
||||
"back": "← el umbral",
|
||||
"title": "EL ARSENAL",
|
||||
"subtitle": "instrumentos para quienes quisieran golpear más fuerte",
|
||||
"flagship": {
|
||||
"tag": "instrumento insignia",
|
||||
"name": "THE ULTIMATE QUANTUM BOX",
|
||||
"desc": "Un instrumento de sesión de mano ESP32-P4/C6 — cámara térmica, matriz de antenas EMF, geófono, preamplificador de micrófono spirit-box y una pequeña cara OLED que te devuelve la mirada. Inicia sesión con la misma cuenta de Quantumancy que ya habitas y desbloquea los modos de este sitio impulsados por hardware: mapas térmicos de apariciones, feeds de anomalías de vibración, EMF calibrado.",
|
||||
"specs": {
|
||||
"thermal": "cámara térmica",
|
||||
"emf": "matriz de antenas EMF",
|
||||
"geophone": "geófono",
|
||||
"mic": "preamplificador de micrófono spirit-box",
|
||||
"oled": "pantalla OLED"
|
||||
},
|
||||
"price": "est. $249 — preventa"
|
||||
},
|
||||
"modulesTitle": "MÓDULOS QUE GOLPEAN",
|
||||
"unlocksLabel": "desbloquea:",
|
||||
"modules": {
|
||||
"emfArray": {
|
||||
"name": "Matriz de Antenas EMF",
|
||||
"desc": "un ramo de sensores de campo multieje, olfateando el aire en busca de intenciones",
|
||||
"unlocks": "un modo CAMPO más rico y calibrado",
|
||||
"price": "est. $59 — preventa"
|
||||
},
|
||||
"geophone": {
|
||||
"name": "Puck Geófono",
|
||||
"desc": "oye pasos en habitaciones donde nadie está de pie",
|
||||
"unlocks": "el feed de anomalías de vibración",
|
||||
"price": "est. $49 — preventa"
|
||||
},
|
||||
"spiritMic": {
|
||||
"name": "Preamplificador Spirit Mic",
|
||||
"desc": "baja el suelo de ruido para que los susurros lleguen más limpios",
|
||||
"unlocks": "capturas EVP más limpias",
|
||||
"price": "est. $69 — preventa"
|
||||
},
|
||||
"uvIlluminator": {
|
||||
"name": "Iluminador UV/IR",
|
||||
"desc": "pinta la oscuridad en espectros que los vivos jamás debieron ver",
|
||||
"unlocks": "sesiones nocturnas + trabajo de cámara",
|
||||
"price": "est. $39 — preventa"
|
||||
}
|
||||
},
|
||||
"interests": {
|
||||
"quantumBox": "la Ultimate Quantum Box",
|
||||
"emfArray": "Matriz de Antenas EMF",
|
||||
"geophone": "Puck Geófono",
|
||||
"spiritMic": "Preamplificador Spirit Mic",
|
||||
"uvIlluminator": "Iluminador UV/IR"
|
||||
},
|
||||
"waitlist": {
|
||||
"title": "EL MANIFIESTO",
|
||||
"desc": "deja una dirección y una obsesión — cuando salgan las primeras cajas, nos abriremos paso primero hasta los nombres de esta lista",
|
||||
"emailLabel": "dirección de email",
|
||||
"emailPlaceholder": "tu@algun.lugar.en.la.estatica",
|
||||
"interestLabel": "interés",
|
||||
"submit": "unirse al manifiesto",
|
||||
"pending": "grabando tu nombre…",
|
||||
"listed": "estás en el manifiesto — nos abriremos paso cuando salgan las cajas",
|
||||
"alreadyListed": "ya estás en el manifiesto",
|
||||
"invalid": "esa dirección no nos alcanza",
|
||||
"crowded": "el velo está abarrotado — inténtalo más tarde",
|
||||
"error": "algo se agitó en la estática — tu nombre no quedó grabado"
|
||||
},
|
||||
"honesty": "la Ultimate Quantum Box está en desarrollo activo — esto es un manifiesto de reserva, no se cobra nada. el sitio funciona por completo sin ella; el hardware solo golpea más fuerte."
|
||||
},
|
||||
"haunting": {
|
||||
"whisper": {
|
||||
"behindYou": "detrás de ti",
|
||||
"cold": "frío",
|
||||
"stay": "quédate",
|
||||
"seesYou": "te ve",
|
||||
"closer": "más cerca",
|
||||
"stillHere": "sigue aquí",
|
||||
"lineListening": "la línea escucha",
|
||||
"dontLook": "no mires",
|
||||
"beneathStatic": "bajo la estática",
|
||||
"knockTwice": "golpea dos veces"
|
||||
},
|
||||
"title": {
|
||||
"seesYou": "QUANTUMANCY — te ve",
|
||||
"behindYou": "QUANTUM▓NCY — detrás de ti",
|
||||
"listening": "…escuchando…"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user