forked from avi/signalelsewhere
Compare commits
1 Commits
v1.2
...
save-point
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ae5a7cec8 |
45
README.md
Normal file
45
README.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Signal Elsewhere
|
||||||
|
|
||||||
|
An interactive educational experience about money, technology, food, and health — built as a Capacitor Android app.
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
The app is a single-page HTML/JS application. No build step is needed for the web version.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Serve locally for development
|
||||||
|
python3 -m http.server 8080
|
||||||
|
# or
|
||||||
|
npx serve .
|
||||||
|
```
|
||||||
|
|
||||||
|
Open `http://localhost:8080` in your browser.
|
||||||
|
|
||||||
|
## Android Build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install dependencies
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# Copy web assets to Android
|
||||||
|
npx cap copy
|
||||||
|
|
||||||
|
# Sync Capacitor config
|
||||||
|
npx cap sync android
|
||||||
|
|
||||||
|
# Open in Android Studio
|
||||||
|
npx cap open android
|
||||||
|
```
|
||||||
|
|
||||||
|
From Android Studio, build and run on a device or emulator.
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
- `index.html` — main application source
|
||||||
|
- `www/` — production web directory (copied to Android)
|
||||||
|
- `android/` — Android project (Capacitor)
|
||||||
|
- `capacitor.config.json` — Capacitor configuration
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
ISC
|
||||||
26
index.html
26
index.html
@@ -2423,7 +2423,7 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
|||||||
html+='<tr><td>US DEBT</td><td>$11.9T</td><td>$35T+</td></tr>';
|
html+='<tr><td>US DEBT</td><td>$11.9T</td><td>$35T+</td></tr>';
|
||||||
html+='<tr><td>BTC ADOPTION</td><td>NONE</td><td>ETFs, NATIONS, FORTUNE 500</td></tr>';
|
html+='<tr><td>BTC ADOPTION</td><td>NONE</td><td>ETFs, NATIONS, FORTUNE 500</td></tr>';
|
||||||
html+='<tr><td>GOLD CONFISCATION RISK</td><td>LOW</td><td>REAL (CBDCs RISING)</td></tr>';
|
html+='<tr><td>GOLD CONFISCATION RISK</td><td>LOW</td><td>REAL (CBDCs RISING)</td></tr>';
|
||||||
html+='</table><div class="punch-row"><div class="punch-card"><span class="punch-icon">🟠</span><span class="punch-text">BTC $100K+<br>WALL STREET OWNS IT</span></div><div class="punch-card"><span class="punch-icon">🥇</span><span class="punch-text">GOLD $3K+<br>STILL THE SAFE HAVEN</span></div><div class="punch-card"><span class="punch-icon">📉</span><span class="punch-text">DOLLAR DOWN<br>70% SINCE 2000</span></div></div>';
|
html+='</table>';
|
||||||
vis.innerHTML=html;
|
vis.innerHTML=html;
|
||||||
vis.classList.add('visible');
|
vis.classList.add('visible');
|
||||||
showNextBtn('next4f');showNextBtn('sources4f');showNextBtn('back4f');
|
showNextBtn('next4f');showNextBtn('sources4f');showNextBtn('back4f');
|
||||||
@@ -5837,21 +5837,9 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Double-click/tap to skip scene (same as Escape on desktop)
|
// Double-click/tap to skip scene (same as Escape on desktop)
|
||||||
if (isAndroidApp) {
|
document.addEventListener('dblclick', () => {
|
||||||
let lastTapTime = 0;
|
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
|
||||||
document.addEventListener('touchend', (e) => {
|
});
|
||||||
const now = Date.now();
|
|
||||||
if (lastTapTime > 0 && now - lastTapTime < 400) {
|
|
||||||
e.preventDefault();
|
|
||||||
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
|
|
||||||
}
|
|
||||||
lastTapTime = now;
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
document.addEventListener('dblclick', () => {
|
|
||||||
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Keyboard shortcuts for testing
|
// Keyboard shortcuts for testing
|
||||||
document.addEventListener('keydown', (e) => {
|
document.addEventListener('keydown', (e) => {
|
||||||
@@ -5996,11 +5984,7 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
|||||||
+'<tr><td>BTC ADOPTION</td><td>NONE</td><td>ETFs, NATIONS, FORTUNE 500</td></tr>'
|
+'<tr><td>BTC ADOPTION</td><td>NONE</td><td>ETFs, NATIONS, FORTUNE 500</td></tr>'
|
||||||
+'<tr><td>GOLD CONFISCATION RISK</td><td>LOW</td><td>REAL (CBDCs RISING)</td></tr>'
|
+'<tr><td>GOLD CONFISCATION RISK</td><td>LOW</td><td>REAL (CBDCs RISING)</td></tr>'
|
||||||
+'</table>'
|
+'</table>'
|
||||||
+'<div class="punch-row">'
|
+'';
|
||||||
+'<div class="punch-card"><span class="punch-icon">\uD83D\uDFE0</span><span class="punch-text">BTC $100K+<br>WALL STREET OWNS IT</span></div>'
|
|
||||||
+'<div class="punch-card"><span class="punch-icon">\uD83E\uDD47</span><span class="punch-text">GOLD $3K+<br>STILL THE SAFE HAVEN</span></div>'
|
|
||||||
+'<div class="punch-card"><span class="punch-icon">\uD83D\uDCC9</span><span class="punch-text">DOLLAR DOWN<br>70% SINCE 2000</span></div>'
|
|
||||||
+'</div>';
|
|
||||||
s4.querySelector('.s4visual').classList.add('visible');
|
s4.querySelector('.s4visual').classList.add('visible');
|
||||||
document.getElementById('next4f').style.cssText = '';
|
document.getElementById('next4f').style.cssText = '';
|
||||||
showNextBtn('next4f');
|
showNextBtn('next4f');
|
||||||
|
|||||||
@@ -2423,7 +2423,7 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
|||||||
html+='<tr><td>US DEBT</td><td>$11.9T</td><td>$35T+</td></tr>';
|
html+='<tr><td>US DEBT</td><td>$11.9T</td><td>$35T+</td></tr>';
|
||||||
html+='<tr><td>BTC ADOPTION</td><td>NONE</td><td>ETFs, NATIONS, FORTUNE 500</td></tr>';
|
html+='<tr><td>BTC ADOPTION</td><td>NONE</td><td>ETFs, NATIONS, FORTUNE 500</td></tr>';
|
||||||
html+='<tr><td>GOLD CONFISCATION RISK</td><td>LOW</td><td>REAL (CBDCs RISING)</td></tr>';
|
html+='<tr><td>GOLD CONFISCATION RISK</td><td>LOW</td><td>REAL (CBDCs RISING)</td></tr>';
|
||||||
html+='</table><div class="punch-row"><div class="punch-card"><span class="punch-icon">🟠</span><span class="punch-text">BTC $100K+<br>WALL STREET OWNS IT</span></div><div class="punch-card"><span class="punch-icon">🥇</span><span class="punch-text">GOLD $3K+<br>STILL THE SAFE HAVEN</span></div><div class="punch-card"><span class="punch-icon">📉</span><span class="punch-text">DOLLAR DOWN<br>70% SINCE 2000</span></div></div>';
|
html+='</table>';
|
||||||
vis.innerHTML=html;
|
vis.innerHTML=html;
|
||||||
vis.classList.add('visible');
|
vis.classList.add('visible');
|
||||||
showNextBtn('next4f');showNextBtn('sources4f');showNextBtn('back4f');
|
showNextBtn('next4f');showNextBtn('sources4f');showNextBtn('back4f');
|
||||||
@@ -5837,21 +5837,9 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Double-click/tap to skip scene (same as Escape on desktop)
|
// Double-click/tap to skip scene (same as Escape on desktop)
|
||||||
if (isAndroidApp) {
|
document.addEventListener('dblclick', () => {
|
||||||
let lastTapTime = 0;
|
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
|
||||||
document.addEventListener('touchend', (e) => {
|
});
|
||||||
const now = Date.now();
|
|
||||||
if (lastTapTime > 0 && now - lastTapTime < 400) {
|
|
||||||
e.preventDefault();
|
|
||||||
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
|
|
||||||
}
|
|
||||||
lastTapTime = now;
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
document.addEventListener('dblclick', () => {
|
|
||||||
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Keyboard shortcuts for testing
|
// Keyboard shortcuts for testing
|
||||||
document.addEventListener('keydown', (e) => {
|
document.addEventListener('keydown', (e) => {
|
||||||
@@ -5996,11 +5984,7 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
|||||||
+'<tr><td>BTC ADOPTION</td><td>NONE</td><td>ETFs, NATIONS, FORTUNE 500</td></tr>'
|
+'<tr><td>BTC ADOPTION</td><td>NONE</td><td>ETFs, NATIONS, FORTUNE 500</td></tr>'
|
||||||
+'<tr><td>GOLD CONFISCATION RISK</td><td>LOW</td><td>REAL (CBDCs RISING)</td></tr>'
|
+'<tr><td>GOLD CONFISCATION RISK</td><td>LOW</td><td>REAL (CBDCs RISING)</td></tr>'
|
||||||
+'</table>'
|
+'</table>'
|
||||||
+'<div class="punch-row">'
|
+'';
|
||||||
+'<div class="punch-card"><span class="punch-icon">\uD83D\uDFE0</span><span class="punch-text">BTC $100K+<br>WALL STREET OWNS IT</span></div>'
|
|
||||||
+'<div class="punch-card"><span class="punch-icon">\uD83E\uDD47</span><span class="punch-text">GOLD $3K+<br>STILL THE SAFE HAVEN</span></div>'
|
|
||||||
+'<div class="punch-card"><span class="punch-icon">\uD83D\uDCC9</span><span class="punch-text">DOLLAR DOWN<br>70% SINCE 2000</span></div>'
|
|
||||||
+'</div>';
|
|
||||||
s4.querySelector('.s4visual').classList.add('visible');
|
s4.querySelector('.s4visual').classList.add('visible');
|
||||||
document.getElementById('next4f').style.cssText = '';
|
document.getElementById('next4f').style.cssText = '';
|
||||||
showNextBtn('next4f');
|
showNextBtn('next4f');
|
||||||
|
|||||||
Reference in New Issue
Block a user