=============================================================== ARQUITECTURA — OASIS MOBILE (Node.js) =============================================================== ENTRY POINT: nodejs-project/nodejs-project/main.js -> Inicia servidor SSB -> Arranca backend Koa en puerto 3000 -------------------------------------------------------------- BACKEND (Koa.js) -------------------------------------------------------------- ARCHIVO: src/backend/backend.js (3249 lineas, ~500 handlers) - Router con 100+ rutas GET/POST - Carga todos los modelos al inicio - Middleware: validacion host, idioma (cookies), SSB sync status - Patron: ctx.body = await vistaView(datos) RUTAS CLAVE: GET / -> home / feed GET /inhabitants -> lista de usuarios GET /author/:id -> perfil de usuario GET /tribes -> lista de tribes POST /tribes/generate-invite -> genera invite code de tribe (con inviteLog) POST /tribes/join-code -> unirse a tribe con codigo (actualiza inviteLog) GET /invites -> pagina de invites/pubs SSB POST /settings/invite/accept -> acepta pub invite + publica SSB msg GET /wallet -> wallet ECOin GET /wallet/receive -> recibir (tiene QR de direccion) GET /blockchain -> blockchain explorer (SSB log) GET /AI -> integracion IA GET /parliament -> gobernanza GET /market -> mercado GET /courts -> tribunales GET /banking -> banca ECOin -------------------------------------------------------------- MODELOS (src/models/) -------------------------------------------------------------- about_model.js -> perfiles de usuario tribes_model.js -> tribes + inviteLog trazabilidad completa - generateInvite(tribeId) -> registra en inviteLog[] con generatedBy - joinByInvite(code, userId) -> actualiza inviteLog (status, usedBy, usedAt) - getTribeById() / listAll() -> exponen inviteLog main_models.js -> acceptInvite() -> publica SSB msg type:'pub-invite' blockchain_model.js -> listBlockchain() con filtro 'invites' courts_model.js, banking_model.js, parliament_model.js, ... (30+ modelos en total) -------------------------------------------------------------- VISTAS (src/views/) — Hyperaxe SSR — 43 VISTAS TOTALES -------------------------------------------------------------- Patron: const { div, h2, p } = require('../server/node_modules/hyperaxe'); exports.miVista = async (datos) => template('Titulo', section(...)) LISTA COMPLETA DE VISTAS: activity_view.js, agenda_view.js, AI_view.js, audio_view.js, banking_views.js, blockchain_view.js, bookmark_view.js, cipher_view.js, courts_view.js, cv_view.js, document_view.js, event_view.js, favorites_view.js, feed_view.js, forum_view.js, image_view.js, indexing_view.js, inhabitants_view.js, invites_view.js, jobs_view.js, legacy_view.js, main_views.js, markdown.js, market_view.js, modules_view.js, opinions_view.js, parliament_view.js, peers_view.js, pixelia_view.js, pm_view.js, projects_view.js, report_view.js, search_view.js, settings_view.js, stats_view.js, tags_view.js, task_view.js, transfer_view.js, trending_view.js, tribes_view.js, video_view.js, vote_view.js, wallet_view.js VISTAS CON QR (modificadas): inhabitants_view.js -> QR del SSB ID en perfil y lista invites_view.js -> QR del pub invite code tribes_view.js -> QR del tribe invite code wallet_view.js -> (ya tenia QR de direccion ECOin) blockchain_view.js -> renderInviteExtra con detalle de inviteLog -------------------------------------------------------------- BLOCKCHAIN (SSB log como blockchain) -------------------------------------------------------------- blockchain_model.js -> listBlockchain() - Llama createLogStream() en todos los mensajes SSB - Filtra por tipo: 'post', 'about', 'vote', 'tribe', 'pub-invite', 'invites', etc. - Cada mensaje SSB es un "bloque" con hash, key, sequence, content blockchain_view.js -> renderBlockchainView() - Muestra bloques con colores por tipo - Filtros: ALL, POST, VOTE, TRIBE, INVITES, etc. - renderInviteExtra(): tabla de inviteLog (6 columnas) para tribes y tabla de datos pub-invite (pubHost, pubKey, acceptedAt) -------------------------------------------------------------- FRONTEND (CSS/Assets) -------------------------------------------------------------- styles/style.css -> CSS principal (estilos globales) styles/mobile.css -> 480 lineas para movil (safe-area, touch, QR) themes/OasisMobile.css -> tema dark gold (color solo, sin mobile) themes/Dark-SNH.css, Matrix-SNH.css, Purple-SNH.css, Clear-SNH.css translations/ -> i18n (es, en, ...) -------------------------------------------------------------- SSB (Secure Scuttlebutt) -------------------------------------------------------------- Identidad: @.ed25519 Mensajes firmados, append-only, cadena de bloques real Replicacion via pubs (gossip.json en ~/.ssb/) Pub invite format: host:port:@key.ed25519~invite_token -------------------------------------------------------------- COMPARACION CON UPSTREAM PUBLICO (github.com/epsylon/oasis) -------------------------------------------------------------- LOCAL: 43 vistas, AI, blockchain, tribunales, banca, parlamento... UPSTREAM: ~15 vistas basicas (feed, tribes, about, peers basico) CONCLUSION: Local es version MAS AVANZADA. NO actualizar desde upstream.