# HST - Sistema de Tags Semanticos ## Documento de Reconstruccion Completa **Fecha:** 2026-01-07 **Version:** 2.0 **Servidor:** 72.62.2.84 (HST) **Dominio:** tzrtech.org / hst.etereo.io --- ## 1. ARQUITECTURA GENERAL ### 1.1 Componentes ``` ┌─────────────────────────────────────────────────────────┐ │ NGINX (Host) │ │ - SSL Termination (Let's Encrypt) │ │ - Reverse Proxy │ │ - Static Files │ └───────────────┬─────────────────────────────────────────┘ │ ┌───────────┼───────────┬───────────┬─────────────┐ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ ┌───────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────────┐ │postgrest│ │postgres│ │directus│ │hst-api │ │filebrowser│ │ :3000 │ │ :5432 │ │ :8055 │ │ :5000 │ │ :8080 │ └────┬────┘ └────┬───┘ └────────┘ └────────┘ └──────────┘ │ │ └───────────┘ hst-net ``` ### 1.2 Contenedores Docker | Contenedor | Puerto | Proposito | Red | |------------|--------|-----------|-----| | postgres_hst | 5432 | PostgreSQL 15 | hst-net | | postgrest | 3000 | REST API automatico | hst-net | | directus_hst | 8055 | CMS/Admin | hst-net | | hst-api | 5000 | API legacy Flask | hst-net | | hst-images | - | Servicio imagenes | hst-net | | filebrowser | 8080 | Gestor archivos | hst-net | ### 1.3 Estructura de Directorios ``` /opt/hst/ ├── web/ │ └── index.html # Interfaz web principal ├── assets/ │ ├── hst/ # Imagenes tags HST │ │ └── thumb/ # Thumbnails HST │ ├── flg/ # Imagenes flags │ │ └── thumb/ │ ├── itm/ # Imagenes items │ ├── loc/ # Imagenes locations │ ├── ply/ # Imagenes players │ └── index.html ├── nginx/ │ └── default.conf # Configuracion nginx ├── api/ # API Flask legacy ├── directus/ # Datos Directus └── docker-compose.yml ``` --- ## 2. BASE DE DATOS ### 2.1 Tablas Principales (5) #### hst - Hashtags ```sql CREATE TABLE hst ( num SERIAL PRIMARY KEY, alias VARCHAR(255), ref VARCHAR(50), rootref VARCHAR(100), img_url TEXT, txt TEXT, standard_md TEXT, jsonb_standard JSONB, version VARCHAR(50), mrf VARCHAR(64) UNIQUE NOT NULL, -- SHA-256 hash owner VARCHAR(100), created_at TIMESTAMPTZ DEFAULT NOW(), roothash VARCHAR(64), private_mrf VARCHAR(64), url TEXT, url_json TEXT, date DATE, name_es VARCHAR(255), name_en VARCHAR(255), name_ch VARCHAR(255), img_thumb_url TEXT, set_hst VARCHAR(64), -- FK a grupo/tipo url_atc TEXT ); ``` #### flg - Flags ```sql CREATE TABLE flg ( -- Misma estructura que hst num SERIAL PRIMARY KEY, mrf VARCHAR(64) UNIQUE NOT NULL, ref VARCHAR(50), name_es VARCHAR(255), name_en VARCHAR(255), img_url TEXT, img_thumb_url TEXT, txt TEXT, set_hst VARCHAR(64), created_at TIMESTAMPTZ DEFAULT NOW() ); ``` #### itm, loc, ply - Items, Locations, Players ```sql -- Misma estructura base que flg ``` ### 2.2 Tablas de Relaciones (6) #### tree_hst - Jerarquia ```sql CREATE TABLE tree_hst ( num SERIAL PRIMARY KEY, mrf_parent VARCHAR(64) NOT NULL, mrf_child VARCHAR(64) NOT NULL, created_at TIMESTAMPTZ DEFAULT NOW(), UNIQUE(mrf_parent, mrf_child) ); CREATE INDEX idx_tree_hst_parent ON tree_hst(mrf_parent); CREATE INDEX idx_tree_hst_child ON tree_hst(mrf_child); ``` #### graph_hst - Grafo de Relaciones ```sql CREATE TABLE graph_hst ( num SERIAL PRIMARY KEY, mrf_a VARCHAR(64) NOT NULL, mrf_b VARCHAR(64) NOT NULL, weight DECIMAL(3,2) DEFAULT 0.5, created_at TIMESTAMPTZ DEFAULT NOW(), edge_type VARCHAR(50) DEFAULT 'relation', UNIQUE(mrf_a, mrf_b) ); CREATE INDEX idx_graph_hst_a ON graph_hst(mrf_a); CREATE INDEX idx_graph_hst_b ON graph_hst(mrf_b); CREATE INDEX idx_graph_hst_type ON graph_hst(edge_type); ``` #### library_hst - Bibliotecas ```sql CREATE TABLE library_hst ( num SERIAL PRIMARY KEY, mrf_library VARCHAR(64) NOT NULL, mrf_tag VARCHAR(64) NOT NULL, created_at TIMESTAMPTZ DEFAULT NOW(), UNIQUE(mrf_library, mrf_tag) ); CREATE INDEX idx_library_hst_lib ON library_hst(mrf_library); CREATE INDEX idx_library_hst_tag ON library_hst(mrf_tag); ``` ### 2.3 Vistas SQL (5) #### api_tags - Tags unificados ```sql CREATE OR REPLACE VIEW api_tags AS SELECT mrf, ref, name_es, name_en, name_ch, img_url, img_thumb_url, txt, set_hst, 'hst' as type, created_at FROM hst UNION ALL SELECT mrf, ref, name_es, name_en, name_ch, img_url, img_thumb_url, txt, set_hst, 'flg' as type, created_at FROM flg UNION ALL SELECT mrf, ref, name_es, name_en, name_ch, img_url, img_thumb_url, txt, set_hst, 'itm' as type, created_at FROM itm UNION ALL SELECT mrf, ref, name_es, name_en, name_ch, img_url, img_thumb_url, txt, set_hst, 'loc' as type, created_at FROM loc UNION ALL SELECT mrf, ref, name_es, name_en, name_ch, img_url, img_thumb_url, txt, set_hst, 'ply' as type, created_at FROM ply; ``` #### api_groups - Grupos/Tipos ```sql CREATE OR REPLACE VIEW api_groups AS SELECT h.mrf, h.ref, h.name_es, h.name_en, h.img_thumb_url, (SELECT count(*) FROM hst WHERE set_hst = h.mrf) as count FROM hst h WHERE h.mrf IN (SELECT DISTINCT set_hst FROM hst WHERE set_hst IS NOT NULL); ``` #### api_library_list - Lista de bibliotecas ```sql CREATE OR REPLACE VIEW api_library_list AS SELECT h.mrf, h.ref, h.name_es, h.name_en, h.img_thumb_url, (SELECT count(*) FROM library_hst WHERE mrf_library = h.mrf) as member_count FROM hst h WHERE h.mrf IN (SELECT DISTINCT mrf_library FROM library_hst); ``` #### api_graph_stats - Estadisticas grafo ```sql CREATE OR REPLACE VIEW api_graph_stats AS SELECT (SELECT count(*) FROM hst) as total_tags, (SELECT count(*) FROM graph_hst) as total_edges, (SELECT count(DISTINCT edge_type) FROM graph_hst) as edge_types; ``` #### api_tree_roots - Raices del arbol ```sql CREATE OR REPLACE VIEW api_tree_roots AS SELECT h.mrf, h.ref, h.name_es, h.img_thumb_url FROM hst h WHERE h.mrf IN (SELECT DISTINCT mrf_parent FROM tree_hst) AND h.mrf NOT IN (SELECT mrf_child FROM tree_hst); ``` ### 2.4 Funciones RPC (5) #### api_children - Hijos directos ```sql CREATE OR REPLACE FUNCTION api_children(parent_mrf VARCHAR(64)) RETURNS TABLE(mrf VARCHAR, ref VARCHAR, name_es VARCHAR, name_en VARCHAR, img_thumb_url TEXT) LANGUAGE SQL STABLE AS $$ SELECT h.mrf, h.ref, h.name_es, h.name_en, h.img_thumb_url FROM hst h JOIN tree_hst t ON h.mrf = t.mrf_child WHERE t.mrf_parent = parent_mrf; $$; GRANT EXECUTE ON FUNCTION api_children(VARCHAR) TO anon; ``` #### api_descendants - Descendientes recursivos ```sql CREATE OR REPLACE FUNCTION api_descendants(parent_mrf VARCHAR(64)) RETURNS TABLE(mrf VARCHAR, ref VARCHAR, name_es VARCHAR, name_en VARCHAR, img_thumb_url TEXT, depth INTEGER) LANGUAGE SQL STABLE AS $$ WITH RECURSIVE tree AS ( SELECT h.mrf, h.ref, h.name_es, h.name_en, h.img_thumb_url, 1 as depth FROM hst h JOIN tree_hst t ON h.mrf = t.mrf_child WHERE t.mrf_parent = parent_mrf UNION ALL SELECT h.mrf, h.ref, h.name_es, h.name_en, h.img_thumb_url, tr.depth + 1 FROM hst h JOIN tree_hst t ON h.mrf = t.mrf_child JOIN tree tr ON t.mrf_parent = tr.mrf WHERE tr.depth < 10 ) SELECT * FROM tree; $$; GRANT EXECUTE ON FUNCTION api_descendants(VARCHAR) TO anon; ``` #### api_path - Ruta al root ```sql CREATE OR REPLACE FUNCTION api_path(tag_mrf VARCHAR(64)) RETURNS TABLE(mrf VARCHAR, ref VARCHAR, name_es VARCHAR, img_thumb_url TEXT, depth INTEGER) LANGUAGE SQL STABLE AS $$ WITH RECURSIVE path AS ( SELECT h.mrf, h.ref, h.name_es, h.img_thumb_url, 0 as depth FROM hst h WHERE h.mrf = tag_mrf UNION ALL SELECT h.mrf, h.ref, h.name_es, h.img_thumb_url, p.depth + 1 FROM hst h JOIN tree_hst t ON h.mrf = t.mrf_parent JOIN path p ON t.mrf_child = p.mrf WHERE p.depth < 20 ) SELECT * FROM path ORDER BY depth DESC; $$; GRANT EXECUTE ON FUNCTION api_path(VARCHAR) TO anon; ``` #### api_related - Tags relacionados ```sql CREATE OR REPLACE FUNCTION api_related(tag_mrf VARCHAR(64)) RETURNS TABLE(mrf VARCHAR, ref VARCHAR, name_es VARCHAR, name_en VARCHAR, img_thumb_url TEXT, edge_type VARCHAR, weight DECIMAL) LANGUAGE SQL STABLE AS $$ SELECT h.mrf, h.ref, h.name_es, h.name_en, h.img_thumb_url, g.edge_type, g.weight FROM hst h JOIN graph_hst g ON (h.mrf = g.mrf_b AND g.mrf_a = tag_mrf) OR (h.mrf = g.mrf_a AND g.mrf_b = tag_mrf) WHERE h.mrf != tag_mrf; $$; GRANT EXECUTE ON FUNCTION api_related(VARCHAR) TO anon; ``` #### api_library_tags - Tags de biblioteca ```sql CREATE OR REPLACE FUNCTION api_library_tags(library_mrf VARCHAR(64)) RETURNS TABLE(mrf VARCHAR, ref VARCHAR, name_es VARCHAR, name_en VARCHAR, img_thumb_url TEXT) LANGUAGE SQL STABLE AS $$ SELECT h.mrf, h.ref, h.name_es, h.name_en, h.img_thumb_url FROM hst h JOIN library_hst l ON h.mrf = l.mrf_tag WHERE l.mrf_library = library_mrf; $$; GRANT EXECUTE ON FUNCTION api_library_tags(VARCHAR) TO anon; ``` ### 2.5 Permisos ```sql -- Usuario anon para PostgREST CREATE ROLE anon NOLOGIN; GRANT USAGE ON SCHEMA public TO anon; GRANT SELECT ON ALL TABLES IN SCHEMA public TO anon; GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO anon; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO anon; -- Usuario autenticado CREATE ROLE authenticated NOLOGIN; GRANT anon TO authenticated; GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO authenticated; ``` --- ## 3. API REST (PostgREST) ### 3.1 Endpoints Principales | Metodo | Endpoint | Descripcion | |--------|----------|-------------| | GET | /api/hst | Lista todos los hashtags | | GET | /api/flg | Lista todos los flags | | GET | /api/itm | Lista todos los items | | GET | /api/loc | Lista todas las locations | | GET | /api/ply | Lista todos los players | | GET | /api/api_tags | Vista unificada | | GET | /api/api_groups | Lista grupos | | GET | /api/api_library_list | Lista bibliotecas | | GET | /api/tree_hst | Relaciones jerarquicas | | GET | /api/graph_hst | Relaciones grafo | ### 3.2 Endpoints RPC | Metodo | Endpoint | Body | Descripcion | |--------|----------|------|-------------| | POST | /api/rpc/api_children | {"parent_mrf":"xxx"} | Hijos directos | | POST | /api/rpc/api_descendants | {"parent_mrf":"xxx"} | Descendientes | | POST | /api/rpc/api_path | {"tag_mrf":"xxx"} | Ruta a root | | POST | /api/rpc/api_related | {"tag_mrf":"xxx"} | Relacionados | | POST | /api/rpc/api_library_tags | {"library_mrf":"xxx"} | Tags de lib | ### 3.3 Filtros PostgREST ``` # Paginacion ?limit=50&offset=0 # Ordenacion ?order=ref.asc ?order=created_at.desc # Filtros ?ref=eq.xxx ?mrf=eq.xxx ?set_hst=eq.xxx ?edge_type=eq.relation # Busqueda ?name_es=ilike.*busqueda* # Seleccion de campos ?select=mrf,ref,name_es ``` --- ## 4. CONFIGURACION NGINX ### 4.1 /opt/hst/nginx/default.conf ```nginx # Redirect HTTP to HTTPS server { listen 80; server_name tzrtech.org www.tzrtech.org *.tzrtech.org; return 301 https://$host$request_uri; } # Main site - tzrtech.org server { listen 443 ssl; http2 on; server_name tzrtech.org www.tzrtech.org; ssl_certificate /etc/letsencrypt/live/tzrtech.org-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/tzrtech.org-0001/privkey.pem; root /opt/hst/web; index index.html; # Serve images from /hst/, /flg/, /itm/, /loc/, /ply/ location ~ ^/(hst|flg|itm|loc|ply)/(thumb/)?(.+\.png)$ { alias /opt/hst/assets/$1/$2$3; add_header Access-Control-Allow-Origin * always; add_header Cache-Control "public, max-age=86400"; try_files "" =404; } # Assets folder (fallback) location /assets/ { alias /opt/hst/assets/; add_header Access-Control-Allow-Origin * always; } # PostgREST API location /api/ { proxy_pass http://postgrest:3000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; add_header Access-Control-Allow-Origin * always; add_header Access-Control-Allow-Methods "GET, POST, PATCH, DELETE, OPTIONS" always; add_header Access-Control-Allow-Headers "Authorization, Content-Type, Prefer" always; add_header Access-Control-Expose-Headers "Content-Range, Range" always; if ($request_method = OPTIONS) { return 204; } } location / { try_files $uri $uri/ /index.html; } } # Directus HST Admin server { listen 443 ssl; http2 on; server_name hst.tzrtech.org directus.tzrtech.org; ssl_certificate /etc/letsencrypt/live/tzrtech.org-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/tzrtech.org-0001/privkey.pem; client_max_body_size 100M; location / { proxy_pass http://directus_hst:8055; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } # Graph subdomain (Flask legacy) server { listen 443 ssl; http2 on; server_name graph.tzrtech.org; ssl_certificate /etc/letsencrypt/live/tzrtech.org-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/tzrtech.org-0001/privkey.pem; location / { proxy_pass http://hst-api:5000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` --- ## 5. INTERFAZ WEB ### 5.1 Constantes JavaScript #### CATS - Categorias/Colores ```javascript const CATS = { hst: {name: "Hashtags", color: "#7c8aff"}, spe: {name: "Specs", color: "#FF9800"}, vue: {name: "Values", color: "#00BCD4"}, vsn: {name: "Visions", color: "#E91E63"}, msn: {name: "Missions", color: "#9C27B0"}, flg: {name: "Flags", color: "#4CAF50"} }; ``` #### EDGE_COLORS - Tipos de relacion ```javascript const EDGE_COLORS = { relation: "#8BC34A", specialization: "#9C27B0", mirror: "#607D8B", dependency: "#2196F3", sequence: "#4CAF50", composition: "#FF9800", hierarchy: "#E91E63", library: "#00BCD4", contextual: "#FFC107", association: "#795548" }; ``` ### 5.2 Caracteristicas de la Interfaz 1. **Vista Biblioteca (Grid)** - Grid responsive con tarjetas - Imagenes con fallback a placeholder - Seleccion multiple con checkboxes - Click para ver detalle 2. **Vista Arbol (Tree)** - Agrupacion por set_hst - Expandir/colapsar grupos - Seleccion multiple - Navegacion a hijos 3. **Vista Grafo (Graph)** - D3.js force simulation - Nodos coloreados por categoria - Edges coloreados por tipo - Sidebar con: - Estadisticas (nodos, edges) - Filtros por categoria - Filtros por tipo de edge - Slider peso minimo - Controles (zoom, fit) - Leyenda de colores 4. **Panel Lateral (Detail)** - Imagen grande - Ref y MRF (copiable) - Nombre localizado - Descripcion - Hijos (api_children) - Relacionados (api_related) 5. **Controles Globales** - Selector de idioma (ES/EN/CH) - Selector de base (HST/FLG/ITM/LOC/PLY) - Buscador - Filtros por grupo (set_hst) - Filtros por biblioteca - SEL/GET para seleccion multiple ### 5.3 Estado de la Aplicacion ```javascript const state = { base: "hst", // Base activa lang: "es", // Idioma view: "grid", // Vista actual search: "", // Busqueda group: "all", // Filtro grupo library: "all", // Filtro biblioteca libraryMembers: Set(), // MRFs de biblioteca selectionMode: false, // Modo seleccion selected: Set(), // Tags seleccionados selectedTag: null, // Tag en panel detalle tags: [], // Tags cargados groups: [], // Grupos cargados libraries: [], // Bibliotecas cargadas graphEdges: [], // Edges del grafo treeEdges: [], // Edges del arbol graphFilters: { // Filtros grafo cats: Set(["hst"]), edges: Set(Object.keys(EDGE_COLORS)) }, graphSettings: { // Config grafo nodeSize: 18, textSize: 9, linkDist: 70, showImg: true, showLbl: true } }; ``` --- ## 6. DOCKER COMPOSE ### 6.1 docker-compose.yml ```yaml version: '3.8' services: postgres: image: postgres:15-alpine container_name: postgres_hst restart: always environment: POSTGRES_USER: hst POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: hst volumes: - ./postgres_data:/var/lib/postgresql/data networks: - hst-net healthcheck: test: ["CMD-SHELL", "pg_isready -U hst -d hst"] interval: 10s timeout: 5s retries: 5 postgrest: image: postgrest/postgrest:latest container_name: postgrest restart: always environment: PGRST_DB_URI: postgres://hst:${POSTGRES_PASSWORD}@postgres:5432/hst PGRST_DB_SCHEMA: public PGRST_DB_ANON_ROLE: anon PGRST_JWT_SECRET: ${JWT_SECRET} depends_on: postgres: condition: service_healthy networks: - hst-net directus: image: directus/directus:latest container_name: directus_hst restart: always environment: KEY: ${DIRECTUS_KEY} SECRET: ${DIRECTUS_SECRET} DB_CLIENT: pg DB_HOST: postgres DB_PORT: 5432 DB_DATABASE: hst DB_USER: hst DB_PASSWORD: ${POSTGRES_PASSWORD} ADMIN_EMAIL: ${ADMIN_EMAIL} ADMIN_PASSWORD: ${ADMIN_PASSWORD} volumes: - ./directus/uploads:/directus/uploads depends_on: postgres: condition: service_healthy networks: - hst-net hst-api: build: ./api container_name: hst-api restart: always environment: DATABASE_URL: postgres://hst:${POSTGRES_PASSWORD}@postgres:5432/hst volumes: - ./assets:/app/assets:ro depends_on: postgres: condition: service_healthy networks: - hst-net healthcheck: test: ["CMD", "curl", "-f", "http://localhost:5000/health"] interval: 30s timeout: 10s retries: 3 filebrowser: image: filebrowser/filebrowser:latest container_name: filebrowser restart: always volumes: - ./assets:/srv - ./filebrowser.db:/database.db networks: - hst-net healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3 networks: hst-net: driver: bridge ``` --- ## 7. RECONSTRUCCION PASO A PASO ### 7.1 Preparar Servidor ```bash # Conectar ssh root@72.62.2.84 # Crear estructura mkdir -p /opt/hst/{web,assets,nginx,api,directus} mkdir -p /opt/hst/assets/{hst,flg,itm,loc,ply} mkdir -p /opt/hst/assets/hst/thumb mkdir -p /opt/hst/assets/flg/thumb # Instalar Docker (si no esta) curl -fsSL https://get.docker.com | sh ``` ### 7.2 Configurar PostgreSQL ```bash # Iniciar contenedor docker run -d \ --name postgres_hst \ --network hst-net \ -e POSTGRES_USER=hst \ -e POSTGRES_PASSWORD=xxx \ -e POSTGRES_DB=hst \ -v /opt/hst/postgres_data:/var/lib/postgresql/data \ --restart always \ postgres:15-alpine # Crear esquema docker exec -i postgres_hst psql -U hst -d hst << 'EOF' -- Insertar SQL de seccion 2 EOF ``` ### 7.3 Configurar PostgREST ```bash docker run -d \ --name postgrest \ --network hst-net \ -e PGRST_DB_URI="postgres://hst:xxx@postgres_hst:5432/hst" \ -e PGRST_DB_SCHEMA=public \ -e PGRST_DB_ANON_ROLE=anon \ --restart always \ postgrest/postgrest:latest ``` ### 7.4 Configurar Nginx ```bash # Copiar configuracion cp default.conf /opt/hst/nginx/ # Obtener certificados SSL certbot certonly --standalone -d tzrtech.org -d www.tzrtech.org -d hst.tzrtech.org # Reiniciar nginx nginx -t && systemctl reload nginx ``` ### 7.5 Desplegar Interfaz Web ```bash # Copiar index.html a /opt/hst/web/ # El archivo completo esta en la seccion 5 # Verificar curl -s http://localhost/api/hst?limit=1 | jq ``` ### 7.6 Importar Datos ```bash # Desde backup PostgreSQL docker exec -i postgres_hst psql -U hst -d hst < backup.sql # O desde CSV docker exec -i postgres_hst psql -U hst -d hst -c "\copy hst FROM '/tmp/hst.csv' CSV HEADER" ``` ### 7.7 Verificacion Final ```bash # Servicios docker ps # API curl -s http://localhost/api/hst?limit=1 curl -s http://localhost/api/api_groups curl -s -X POST http://localhost/api/rpc/api_children \ -H "Content-Type: application/json" \ -d '{"parent_mrf":"xxx"}' # Web curl -s http://localhost/ | head -20 # SSL curl -sI https://tzrtech.org/ ``` --- ## 8. DATOS ACTUALES ### 8.1 Conteos | Tabla | Registros | |-------|-----------| | hst | 963 | | flg | 65 | | itm | 0 | | loc | 0 | | ply | 0 | | tree_hst | ~900 | | graph_hst | ~800 | | library_hst | variable | ### 8.2 Grupos Principales (set_hst) - abeb605c... (hst - etiqueta): ~721 tags - d3d633ff... (spe - especificacion): ~178 tags - 33fa2912... (msn - mision): ~3 tags - 320ad174... (vue - valor): ~21 tags ### 8.3 Tipos de Edge (graph_hst.edge_type) - relation - specialization - mirror - dependency - sequence - composition - hierarchy - library - contextual - association --- ## 9. URLs DE ACCESO | Servicio | URL | |----------|-----| | Interfaz Web | https://tzrtech.org/ | | API REST | https://tzrtech.org/api/ | | Directus Admin | https://hst.tzrtech.org/ | | Graph Legacy | https://graph.tzrtech.org/ | --- ## 10. TROUBLESHOOTING ### PostgREST no responde ```bash docker logs postgrest --tail 50 docker restart postgrest ``` ### Imagenes no cargan ```bash # Verificar ruta ls -la /opt/hst/assets/hst/ # Verificar nginx nginx -t systemctl reload nginx ``` ### Error 502 Bad Gateway ```bash # Verificar red docker docker network inspect hst-net # Verificar contenedor destino docker ps | grep postgrest ``` ### Recargar schema PostgREST ```bash docker exec postgrest pkill -SIGUSR1 postgrest # o docker restart postgrest ``` --- ## ANEXO: ARCHIVOS COMPLETOS ### A. index.html (Web Interface) El archivo completo `/opt/hst/web/index.html` contiene ~47KB de HTML/CSS/JavaScript. Caracteristicas principales implementadas: - SPA con 3 vistas (Grid, Tree, Graph) - D3.js v7 para visualizacion de grafo - Sistema de seleccion SEL/GET - Panel de detalle con hijos y relacionados - Filtros por grupo, biblioteca, categoria - Multiidioma (ES/EN/CH) - Theme oscuro profesional --- *Documento generado: 2026-01-07* *Sistema: HST v2.0* *Servidor: 72.62.2.84*