Compare commits
6 Commits
save-point
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 1850666468 | |||
| a56d534964 | |||
| f57caea2fe | |||
| 162ab71fce | |||
| a7981552bc | |||
| 9e86ff94e9 |
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
|
||||
61
index.html
61
index.html
@@ -1029,6 +1029,40 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
||||
html[data-view="mobile"] #whatIsLabBtn { bottom: 8%; font-size: 1.4rem; padding: 1rem 3rem; }
|
||||
html[data-view="mobile"] #s8BtnRow .btnNext { padding: 1rem 2rem; font-size: 1.4rem; }
|
||||
html[data-view="mobile"] #s7BtnRow .btnNext { padding: 1rem 2rem; font-size: 1.4rem; }
|
||||
|
||||
/* Desktop view overrides */
|
||||
html[data-view="desktop"] .scene { font-size: 1.4rem; padding: 3rem; }
|
||||
html[data-view="desktop"] .scene4text,
|
||||
html[data-view="desktop"] .scene5text,
|
||||
html[data-view="desktop"] .scene7text,
|
||||
html[data-view="desktop"] .scene8text,
|
||||
html[data-view="desktop"] .s4visual,
|
||||
html[data-view="desktop"] .s5visual,
|
||||
html[data-view="desktop"] .s4tl { max-width: 60rem; }
|
||||
html[data-view="desktop"] .comp-table { font-size: 1rem; max-width: 60rem; }
|
||||
html[data-view="desktop"] .comp-table th,
|
||||
html[data-view="desktop"] .comp-table td { padding: 0.6rem 1rem; }
|
||||
html[data-view="desktop"] .scene4sub { padding: 3rem 3rem 7rem; }
|
||||
html[data-view="desktop"] #scene3 { padding: 4rem 3rem; }
|
||||
html[data-view="desktop"] #scene3Title { font-size: 3.5rem; top: 2.5rem; left: 2.5rem; }
|
||||
html[data-view="desktop"] #scene3Text,
|
||||
html[data-view="desktop"] #textContainer { max-width: 60rem; }
|
||||
html[data-view="desktop"] #textContainer { font-size: 1.6rem; }
|
||||
html[data-view="desktop"] .hub-title { font-size: 2.5rem; }
|
||||
html[data-view="desktop"] .callout-box { font-size: 1.3rem; padding: 1.5rem 2rem; }
|
||||
html[data-view="desktop"] #scene2Line1,
|
||||
html[data-view="desktop"] #scene2Message2 { font-size: 1.4rem; }
|
||||
html[data-view="desktop"] .scene3ChoiceBtn { font-size: 1.1rem; padding: 1.2rem 2.5rem; }
|
||||
html[data-view="desktop"] #meshCanvas,
|
||||
html[data-view="desktop"] #deskCanvas,
|
||||
html[data-view="desktop"] #phoneCanvas,
|
||||
html[data-view="desktop"] #exfilCanvas,
|
||||
html[data-view="desktop"] #exfilDeskCanvas { max-height: 480px; }
|
||||
html[data-view="desktop"] .punch-card { font-size: 0.95rem; padding: 1.2rem; }
|
||||
html[data-view="desktop"] .punch-card .punch-icon { font-size: 1.8rem; }
|
||||
html[data-view="desktop"] .scene3ChoiceBtn:hover,
|
||||
html[data-view="desktop"] .btnNext:hover,
|
||||
html[data-view="desktop"] .hub-btn:hover { box-shadow: 0 0 12px rgba(0,255,0,0.2); }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -1613,11 +1647,7 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
||||
let introStarted = false;
|
||||
|
||||
function setView(mode) {
|
||||
if (mode === 'mobile') {
|
||||
document.documentElement.setAttribute('data-view', 'mobile');
|
||||
} else {
|
||||
document.documentElement.removeAttribute('data-view');
|
||||
}
|
||||
document.documentElement.setAttribute('data-view', mode);
|
||||
sessionStorage.setItem('signalView', mode);
|
||||
}
|
||||
|
||||
@@ -2423,7 +2453,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>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+='</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.classList.add('visible');
|
||||
showNextBtn('next4f');showNextBtn('sources4f');showNextBtn('back4f');
|
||||
@@ -5837,9 +5867,21 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
||||
});
|
||||
|
||||
// Double-click/tap to skip scene (same as Escape on desktop)
|
||||
if (isAndroidApp) {
|
||||
let lastTapTime = 0;
|
||||
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
|
||||
document.addEventListener('keydown', (e) => {
|
||||
@@ -5983,12 +6025,7 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
||||
+'<tr><td>US DEBT</td><td>$11.9T</td><td>$35T+</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>'
|
||||
+'</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>';
|
||||
+'</table>';
|
||||
s4.querySelector('.s4visual').classList.add('visible');
|
||||
document.getElementById('next4f').style.cssText = '';
|
||||
showNextBtn('next4f');
|
||||
|
||||
BIN
www/SignalElsewhere-v1.0-debug.apk
Normal file
BIN
www/SignalElsewhere-v1.0-debug.apk
Normal file
Binary file not shown.
@@ -1029,6 +1029,40 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
||||
html[data-view="mobile"] #whatIsLabBtn { bottom: 8%; font-size: 1.4rem; padding: 1rem 3rem; }
|
||||
html[data-view="mobile"] #s8BtnRow .btnNext { padding: 1rem 2rem; font-size: 1.4rem; }
|
||||
html[data-view="mobile"] #s7BtnRow .btnNext { padding: 1rem 2rem; font-size: 1.4rem; }
|
||||
|
||||
/* Desktop view overrides */
|
||||
html[data-view="desktop"] .scene { font-size: 1.4rem; padding: 3rem; }
|
||||
html[data-view="desktop"] .scene4text,
|
||||
html[data-view="desktop"] .scene5text,
|
||||
html[data-view="desktop"] .scene7text,
|
||||
html[data-view="desktop"] .scene8text,
|
||||
html[data-view="desktop"] .s4visual,
|
||||
html[data-view="desktop"] .s5visual,
|
||||
html[data-view="desktop"] .s4tl { max-width: 60rem; }
|
||||
html[data-view="desktop"] .comp-table { font-size: 1rem; max-width: 60rem; }
|
||||
html[data-view="desktop"] .comp-table th,
|
||||
html[data-view="desktop"] .comp-table td { padding: 0.6rem 1rem; }
|
||||
html[data-view="desktop"] .scene4sub { padding: 3rem 3rem 7rem; }
|
||||
html[data-view="desktop"] #scene3 { padding: 4rem 3rem; }
|
||||
html[data-view="desktop"] #scene3Title { font-size: 3.5rem; top: 2.5rem; left: 2.5rem; }
|
||||
html[data-view="desktop"] #scene3Text,
|
||||
html[data-view="desktop"] #textContainer { max-width: 60rem; }
|
||||
html[data-view="desktop"] #textContainer { font-size: 1.6rem; }
|
||||
html[data-view="desktop"] .hub-title { font-size: 2.5rem; }
|
||||
html[data-view="desktop"] .callout-box { font-size: 1.3rem; padding: 1.5rem 2rem; }
|
||||
html[data-view="desktop"] #scene2Line1,
|
||||
html[data-view="desktop"] #scene2Message2 { font-size: 1.4rem; }
|
||||
html[data-view="desktop"] .scene3ChoiceBtn { font-size: 1.1rem; padding: 1.2rem 2.5rem; }
|
||||
html[data-view="desktop"] #meshCanvas,
|
||||
html[data-view="desktop"] #deskCanvas,
|
||||
html[data-view="desktop"] #phoneCanvas,
|
||||
html[data-view="desktop"] #exfilCanvas,
|
||||
html[data-view="desktop"] #exfilDeskCanvas { max-height: 480px; }
|
||||
html[data-view="desktop"] .punch-card { font-size: 0.95rem; padding: 1.2rem; }
|
||||
html[data-view="desktop"] .punch-card .punch-icon { font-size: 1.8rem; }
|
||||
html[data-view="desktop"] .scene3ChoiceBtn:hover,
|
||||
html[data-view="desktop"] .btnNext:hover,
|
||||
html[data-view="desktop"] .hub-btn:hover { box-shadow: 0 0 12px rgba(0,255,0,0.2); }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -1613,11 +1647,7 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
||||
let introStarted = false;
|
||||
|
||||
function setView(mode) {
|
||||
if (mode === 'mobile') {
|
||||
document.documentElement.setAttribute('data-view', 'mobile');
|
||||
} else {
|
||||
document.documentElement.removeAttribute('data-view');
|
||||
}
|
||||
document.documentElement.setAttribute('data-view', mode);
|
||||
sessionStorage.setItem('signalView', mode);
|
||||
}
|
||||
|
||||
@@ -2423,7 +2453,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>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+='</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.classList.add('visible');
|
||||
showNextBtn('next4f');showNextBtn('sources4f');showNextBtn('back4f');
|
||||
@@ -5837,9 +5867,21 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
||||
});
|
||||
|
||||
// Double-click/tap to skip scene (same as Escape on desktop)
|
||||
if (isAndroidApp) {
|
||||
let lastTapTime = 0;
|
||||
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
|
||||
document.addEventListener('keydown', (e) => {
|
||||
@@ -5983,12 +6025,7 @@ html[data-view="mobile"] #exfilDeskCanvas { max-height: 500px; }
|
||||
+'<tr><td>US DEBT</td><td>$11.9T</td><td>$35T+</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>'
|
||||
+'</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>';
|
||||
+'</table>';
|
||||
s4.querySelector('.s4visual').classList.add('visible');
|
||||
document.getElementById('next4f').style.cssText = '';
|
||||
showNextBtn('next4f');
|
||||
|
||||
Reference in New Issue
Block a user