feat: v1.2.0-alpha — E2E encrypted mesh relay, steganography, relay status polling
Phase 5 mesh networking: - E2E encrypted TX relay (X25519 + ChaCha20-Poly1305) — non-Archy nodes relay encrypted blobs transparently via Meshcore native routing - Steganographic encoding modes (WeatherStation, SensorNetwork) — traffic looks like sensor data on the wire, 0xAA marker, configurable per-node - Pre-flight Bitcoin Core health check on relay node — specific error codes (bitcoin_unreachable, bitcoin_syncing, tx_rejected) instead of generic fails - mesh.relay-status RPC endpoint — frontend polls for relay result every 3s - On-Chain / Lightning tabs in Off-Grid Bitcoin panel - Archy Peers vs Mesh Broadcast relay mode selector - Mesh view fills viewport (no page scroll), internal panel scrolling - Version bump to 1.2.0-alpha Also includes: deploy hardening, container fixes, IndeedHub updates, boot screen, dashboard improvements, MASTER_PLAN task tracking Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
70f1348c15
commit
d37ec1dea5
+13
-6
@@ -158,7 +158,8 @@ function onKeyDown(e: KeyboardEvent) {
|
||||
}
|
||||
|
||||
const route = useRoute()
|
||||
const showSplash = ref(true)
|
||||
// Start with splash hidden — onMounted decides whether to show it
|
||||
const showSplash = ref(false)
|
||||
const isReady = ref(false)
|
||||
|
||||
/**
|
||||
@@ -175,16 +176,22 @@ onMounted(async () => {
|
||||
window.addEventListener('touchstart', onUserActivity)
|
||||
const seenIntro = localStorage.getItem('neode_intro_seen') === '1'
|
||||
const isDirectRoute = route.path !== '/'
|
||||
|
||||
if (seenIntro || isDirectRoute) {
|
||||
const fromBoot = route.query.intro === '1'
|
||||
|
||||
if (fromBoot && !seenIntro) {
|
||||
// Coming from boot screen — show the full splash intro
|
||||
showSplash.value = true
|
||||
// SplashScreen will emit 'complete' → handleSplashComplete
|
||||
} else if (!seenIntro && !isDirectRoute && import.meta.env.VITE_DEV_MODE !== 'boot') {
|
||||
// Normal first visit (not boot mode) — show splash intro
|
||||
showSplash.value = true
|
||||
} else {
|
||||
// Already seen intro, direct route, or boot mode (boot screen handles intro)
|
||||
showSplash.value = false
|
||||
document.body.classList.add('splash-complete')
|
||||
// Wait for router to finish initial navigation before showing content (fixes hard refresh)
|
||||
await router.isReady()
|
||||
isReady.value = true
|
||||
}
|
||||
// If splash should show, wait for it to complete
|
||||
// SplashScreen will emit 'complete' which calls handleSplashComplete
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
|
||||
Reference in New Issue
Block a user