This commit is contained in:
oliver
2026-08-28 10:10:31 -03:00
parent bbb746c06d
commit f533ff8e36
16 changed files with 0 additions and 3169 deletions
-60
View File
@@ -1,60 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Página no encontrada — Odoo Expertos</title>
<meta name="robots" content="noindex, follow">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<link rel="icon" type="image/svg+xml" href="/favicon.svg?v=2">
<style>
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;background:#f8fafc;color:#0f172a;-webkit-font-smoothing:antialiased;}
.container{max-width:1200px;margin:0 auto;padding:0 24px;}
.glass-nav{background:rgba(248,250,252,0.85);backdrop-filter:blur(16px);border-bottom:1px solid rgba(0,0,0,0.05);}
.btn-primary{display:inline-flex;align-items:center;gap:8px;padding:14px 32px;background:linear-gradient(135deg,#4338ca,#3b82f6);color:#fff;border-radius:12px;font-weight:600;font-size:0.9375rem;border:none;cursor:pointer;transition:all 0.3s;text-decoration:none;}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 12px 32px rgba(67,56,202,0.25);}
.error-code{font-size:4rem;font-weight:800;color:#4338ca;line-height:1;margin-bottom:1rem;}
.error-title{font-size:1.5rem;font-weight:700;margin-bottom:1rem;}
.error-text{color:#64748b;margin-bottom:2rem;max-width:40ch;margin-left:auto;margin-right:auto;line-height:1.7;}
</style>
</head>
<body>
<nav class="glass-nav fixed top-0 left-0 right-0 z-50" style="height:64px;">
<div class="container h-full flex items-center justify-between">
<a href="/" class="flex items-center gap-2.5" style="text-decoration:none;">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="28" height="28" style="display:block;">
<span style="font-weight:700;font-size:1rem;color:#0f172a;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</a>
<div class="hidden md:flex items-center gap-8">
<a href="/#blog" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;">Blog</a>
<a href="/#expertos" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;">Expertos</a>
<a href="/about.html" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;">Sobre Nosotros</a>
</div>
</div>
</nav>
<div style="text-align:center;padding:120px 24px;">
<div class="error-code">404</div>
<h1 class="error-title">Página no encontrada</h1>
<p class="error-text">La página que buscas no existe o ha sido movida.</p>
<a href="/" class="btn-primary">Volver al inicio</a>
</div>
<footer style="background:#0f172a;padding:60px 0 32px;">
<div class="container">
<div class="flex items-center gap-3 mb-8">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="24" height="24" style="display:block;">
<span style="font-weight:700;color:#fff;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</div>
<div style="display:flex;flex-wrap:wrap;gap:48px;margin-bottom:32px;">
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Secciones</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="/#blog" style="color:#64748b;font-size:0.875rem;text-decoration:none;">Blog</a><a href="/#expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;">Expertos</a></div></div>
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Partner</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="https://ODOO4projects.com/?utm_campaign=expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;" rel="nofollow sponsored" target="_blank">ODOO4projects &mdash; ODOO Community Hosting</a></div></div>
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Empresa</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="/about.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;">Sobre nosotros</a></div></div>
</div>
<div style="border-top:1px solid #1e293b;padding-top:20px;"><span style="color:#475569;font-size:0.8125rem;">&copy; 2026 Odoo Expertos.</span></div>
</div>
</footer>
</body>
</html>
-210
View File
@@ -1,210 +0,0 @@
---
name: Odoo Expertos
description: Spanish Odoo Community ERP authority resource
colors:
surface: "#0f1115"
surface-raised: "#16181d"
surface-over: "#1c1f26"
border: "#2a2d35"
border-light: "#363942"
text-primary: "#ecedee"
text-secondary: "#9ca0ab"
text-tertiary: "#686d78"
accent: "#3b8c5e"
accent-hover: "#4da875"
accent-muted: "rgba(59, 140, 94, 0.12)"
link: "#5b9cf5"
inline-code: "#2a2d35"
typography:
body:
fontFamily: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif"
fontSize: "1rem"
fontWeight: 400
lineHeight: 1.75
heading:
fontFamily: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif"
fontWeight: 600
lineHeight: 1.3
letterSpacing: "-0.02em"
label:
fontFamily: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif"
fontSize: "0.8125rem"
fontWeight: 500
letterSpacing: "0.02em"
mono:
fontFamily: "'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace"
fontSize: "0.875em"
rounded:
sm: "4px"
md: "8px"
spacing:
xs: "4px"
sm: "8px"
md: "16px"
lg: "24px"
xl: "32px"
xxl: "48px"
xxxl: "80px"
components:
button-primary:
backgroundColor: "{colors.accent}"
textColor: "{colors.text-primary}"
rounded: "{rounded.md}"
padding: "10px 24px"
fontWeight: 600
button-secondary:
backgroundColor: "transparent"
textColor: "{colors.text-primary}"
border: "1px solid {colors.border}"
rounded: "{rounded.md}"
padding: "10px 24px"
nav-link:
textColor: "{colors.text-secondary}"
fontWeight: 500
nav-link-active:
textColor: "{colors.text-primary}"
code-block:
backgroundColor: "{colors.surface-raised}"
rounded: "{rounded.md}"
border: "1px solid {colors.border}"
---
# Design System: Odoo Expertos
## Overview
**Creative North Star: "The Engineering Workbench"**
A knowledge resource that feels like it lives inside the tools an engineer already trusts — clean, precise, no decoration. The design takes cues from technical documentation, code editors, and product engineering dashboards. Every element earns its place; nothing exists for visual effect.
The layout is built for reading: generous whitespace, restrained type scale, content at 65-75 characters per line. Color is used functionally — green indicates actionable elements, not brand decoration. The dark surface is the background of a terminal or IDE, not a "dark mode" marketing choice.
**Key Characteristics:**
- Content-forward: articles are the hero, not hero sections
- Typography-driven hierarchy, not card grids
- One accent color, applied sparingly and precisely
- Flat surfaces with tonal depth (layering, not shadows)
- Technical precision in every detail (code blocks, tables, inline code)
- No decorative elements that don't serve comprehension
## Colors
A restrained palette built around one green accent used only for interactive elements.
### Primary
- **Precise Green** (`#3b8c5e`): Primary actions, active states, category labels. Used sparingly — never as a background wash or decorative element.
### Neutral
- **Engine Bay** (`#0f1115`): Page background. Deep but not pure black — reduces eye strain.
- **Wrench** (`#16181d`): Raised surfaces (nav, sidebar, cards).
- **Steel** (`#1c1f26`): Elevated surfaces, hover states.
- **Guide Rail** (`#2a2d35`): Borders, dividers, subtle structure lines.
- **Silver** (`#363942`): Border hover states, stronger structure.
- **Bright Aluminum** (`#ecedee`): Primary text, headings.
- **Warm Steel** (`#9ca0ab`): Secondary text, metadata, captions.
- **Tool Steel** (`#686d78`): Tertiary text, placeholders, disabled.
### Named Rules
**The One Voice Rule.** The green accent is used on ≤5% of any given screen. It exists to direct action, not to decorate.
## Typography
**Body Font:** System UI stack (`-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif`)
**Mono Font:** System monospace (`'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace`)
No web fonts are loaded. The system stack renders identically across platforms and imposes no loading cost. This is a deliberate choice: a knowledge site should prioritize reading speed and reliability over typographic novelty.
**Character:** Clean, neutral, highly readable. The system stack is what engineers see in their own tools every day.
### Hierarchy
- **Display** (600, `clamp(1.75rem, 3vw, 2.5rem)`, 1.25): Article titles, page headings. Never oversized marketing headlines.
- **Headline** (600, `clamp(1.25rem, 2vw, 1.625rem)`, 1.3): Section headings within articles.
- **Title** (600, `1.125rem`, 1.4): Card titles, sidebar headings.
- **Body** (400, `1rem`, 1.75): Article body text. Max width 70ch.
- **Body Large** (400, `1.0625rem`, 1.8): Lead paragraphs, article lede.
- **Label** (500, `0.8125rem`, 1, `0.02em` uppercase): Category badges, metadata, small UI text.
- **Caption** (400, `0.75rem`, 1.4): Footers, timestamps, secondary metadata.
### Named Rules
**The No Oversized Headline Rule.** No heading exceeds 2.5rem. Authority comes from substance, not type size.
## Layout
Content is laid out as a single reading column (max 740px) for articles, with a sidebar on listing pages. The grid uses `max-width: 1200px` for the full page, with content constrained to `740px` for optimal reading measure.
**Spacing rhythm:** `4px` base unit. Section separation uses `80px` (xxxl), article elements use `48px` (xxl), and component internal spacing uses `16-32px`.
The homepage uses a minimal two-column layout for featured content — not a 3-card grid. Article lists use horizontal cards (image + text side by side), never vertical card grids.
## Elevation & Depth
**No shadows.** Depth is conveyed exclusively through tonal layering. Surfaces at rest are flat. The navigation bar sits on a `surface-raised` background with a `border` bottom line — no shadow, no blur.
Cards and containers are differentiated by background color (`surface-raised` on `surface`), not by shadows or borders.
### Named Rules
**The Flat-By-Default Rule.** No box-shadows. Depth comes from tonal background shifts, not from simulated elevation.
## Shapes
- Buttons: `8px` radius (md)
- Cards/containers: `8px` radius (md)
- Code blocks: `8px` radius (md)
- Inputs: `8px` radius (md)
- Category badges: `4px` radius (sm)
- Inline code: `4px` radius (sm)
- Avatars/small elements: `4px` radius (sm)
No pill-shaped elements except where function requires (tag clouds use `100px` radius for pill shape).
## Components
### Navigation
Fixed top bar, `surface-raised` background, bottom `1px` border in `border`. Logo left, links right, no CTA button in nav. Active link indicated by subtle underline accent. Mobile: hamburger toggle with dropdown.
### Buttons
- **Primary:** `accent` background, white text, `8px` radius, `10px 24px` padding, 600 weight. Hover shifts to `accent-hover`.
- **Secondary:** Transparent, `1px border` in `border`, `8px` radius, `10px 24px` padding. Hover background `surface-over`.
- **Ghost:** Transparent, no border, `link` color. Hover background `accent-muted`.
- All buttons use `transition: background 0.15s ease, color 0.15s ease` — no transforms, no scale.
### Article Content
- Headings: `border-bottom` in `border` for H2, no line for H3-H6.
- Paragraphs: `1rem` body, `1.75` line-height, `70ch` max-width.
- Links: `link` blue, underline on hover. Not green — green is for actions, not navigation.
- Code blocks: `surface-raised` background, `border` border, `8px` radius, `16px` padding, mono font.
- Inline code: `surface-raised` background, `border` border, `4px` radius.
- Tables: Full width, `border` borders, `surface-raised` header background.
- Blockquotes: `3px` left border in `accent`, `lg` left padding, italic, `text-secondary` color.
- Callouts: `accent-muted` background, `1px` border in `accent`, `8px` radius, `lg` padding. Only for genuinely important notes.
### Cards
Used only on the homepage feature section. `surface-raised` background, `8px` radius. No shadow. No icon above heading. Image area is a color-coded label, not a gradient placeholder.
### Article Cards (list view)
Horizontal layout: `200px` image + text side by side. `border-bottom` separator between articles. No card container — articles are list items.
### Footer
`surface-raised` background, `border-top`, 4-column grid. Smaller text, `text-tertiary` color. No bold headings.
## Do's and Don'ts
### Do:
- **Do** use the green accent only for primary actions and category indicators.
- **Do** keep body text at 65-75 characters per line.
- **Do** use horizontal article lists, not vertical card grids.
- **Do** lead with the content — let articles speak without decorative framing.
- **Do** use tonal layering for depth instead of shadows.
- **Do** keep the system font stack — no web fonts.
### Don't:
- **Don't** use gradient text, glass effects, or glow.
- **Don't** put a CTA button in the navigation bar.
- **Don't** use the same-size card grid pattern (icon + heading + text) anywhere.
- **Don't** use emoji or Unicode glyphs as icons.
- **Don't** put an eyebrow/kicker above section headings.
- **Don't** use numbered section markers (01/02/03).
- **Don't** use side-stripe borders on cards or callouts.
- **Don't** use large marketing headlines (>2.5rem).
- **Don't** put shadows on cards or containers.
- **Don't** use the accent color for non-interactive decorative elements.
-66
View File
@@ -1,66 +0,0 @@
# Product
<!-- impeccable:product-schema 1 -->
## Platform
web
## Stack
Static HTML/CSS — no framework, no build step. Deployed via git push to Gitea, auto-deployed.
## Users
Primary: Spanish-speaking software engineers, DevOps engineers, platform engineers, CTOs, technical founders, and enterprise IT buyers evaluating Odoo Community ERP for their organizations.
Secondary: Functional consultants, ERP implementers, business analysts working with Odoo.
## Product Purpose
Odoo Expertos is the most trusted Spanish-language authority on Odoo Community ERP. It exists to help technical decision-makers evaluate, implement, and operate Odoo through expert content that demonstrates real implementation experience.
## Positioning
The site is positioned as an independent knowledge resource — not an affiliate site, not a sales funnel, not Odoo's official documentation. It earns trust through practical, engineer-level content and transparent recommendations.
## Operating Context
Readers arrive via Google search (long-tail technical queries about Odoo modules, implementation, hosting, comparisons). They are evaluating ERP solutions, seeking implementation guidance, or troubleshooting existing Odoo deployments. The reading context is task-oriented: they want answers, not marketing.
## Capabilities and Constraints
- 10 pillar articles covering Odoo Community vs Enterprise, implementation guides, module deep-dives, hosting guidance, and ERP comparisons
- Schema.org markup for rich search results
- Clean static HTML, no JavaScript framework
- Content is the primary product
- No user accounts, no comments, no interactive features
- Affiliate relationship with ODOO4projects.com (hosting), marked with utm_campaign=expertos
## Brand Commitments
- Name: "Odoo Expertos"
- Voice: Authoritative, technical, transparent, Spanish (neutral dialect)
- The site must NOT look like an affiliate site or AI-generated content farm
- Independent from Odoo S.A.
- Footer must state: "Independiente y no afiliado a Odoo S.A."
## Evidence on Hand
- 10 published articles, all real technical content
- No fake testimonials, no fake statistics, no fake authors
- ODOO4projects affiliate relationship disclosed transparently on about page
## Product Principles
1. **Content is the product.** The site's value is in what readers learn, not in what they buy.
2. **Transparency earns trust.** Disclose relationships, mark sponsored links, never fabricate expertise.
3. **Engineers respect substance.** Deep technical content outperforms marketing fluff every time.
4. **Recommendation is a byproduct.** Conversions happen naturally when trust is earned, not when links are pushed.
## Accessibility & Inclusion
- Spanish-language content for Spanish-speaking markets worldwide
- High contrast, readable typography
- Semantic HTML, proper heading hierarchy
- No motion or animation dependencies
-164
View File
@@ -1,164 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sobre Nosotros — Odoo Expertos</title>
<meta name="description" content="Conoce Odoo Expertos. Consultores especializados en Odoo Community ERP. Contacto directo para proyectos y colaboraciones.">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://odoo-expertos.com/about.html">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<meta property="og:type" content="website">
<meta property="og:title" content="Sobre Nosotros — Odoo Expertos">
<meta property="og:description" content="Consultores especializados en Odoo Community ERP.">
<meta name="twitter:card" content="summary_large_image">
<link rel="icon" type="image/svg+xml" href="/favicon.svg?v=2">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: #f8fafc; color: #0f172a; -webkit-font-smoothing: antialiased; }
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.container--narrow { max-width: 740px; }
.glass-nav { background: rgba(248,250,252,0.85); backdrop-filter: blur(16px); border-bottom: 1px solid rgba(0,0,0,0.05); }
.btn-primary { display: inline-flex; align-items: center; gap: 8px; padding: 14px 32px; background: linear-gradient(135deg, #4338ca, #3b82f6); color: #fff; border-radius: 12px; font-weight: 600; font-size: 0.9375rem; border: none; cursor: pointer; transition: all 0.3s; text-decoration: none; }
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 12px 32px rgba(67,56,202,0.25); }
.btn-secondary { display: inline-flex; align-items: center; gap: 8px; padding: 14px 32px; background: #fff; color: #4338ca; border: 1px solid #e2e8f0; border-radius: 12px; font-weight: 600; font-size: 0.9375rem; cursor: pointer; transition: all 0.3s; text-decoration: none; }
.btn-secondary:hover { border-color: #c7d2fe; box-shadow: 0 4px 16px rgba(67,56,202,0.08); }
.form-field { width: 100%; padding: 12px 16px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px; font-family: 'Inter', sans-serif; font-size: 0.9375rem; color: #0f172a; transition: all 0.2s; }
.form-field:focus { outline: none; border-color: #4338ca; box-shadow: 0 0 0 3px rgba(67,56,202,0.1); background: #fff; }
label { display: block; font-size: 0.8125rem; font-weight: 600; color: #334155; margin-bottom: 6px; }
</style>
</head>
<body>
<nav class="glass-nav fixed top-0 left-0 right-0 z-50" style="height:64px;">
<div class="container h-full flex items-center justify-between">
<a href="/" class="flex items-center gap-2.5" style="text-decoration:none;">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="28" height="28" style="display:block;">
<span style="font-weight:700;font-size:1rem;color:#0f172a;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</a>
<div class="hidden md:flex items-center gap-8">
<a href="/#blog" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Blog</a>
<a href="/#expertos" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Expertos</a>
<a href="/about.html" style="color:#4338ca;font-size:0.875rem;font-weight:500;text-decoration:none;">Sobre Nosotros</a>
</div>
<button id="mobileToggle" class="md:hidden" style="background:none;border:none;cursor:pointer;padding:8px;" onclick="document.getElementById('mobileMenu').classList.toggle('hidden')">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0f172a" stroke-width="2" stroke-linecap="round"><path d="M3 12h18M3 6h18M3 18h18"/></svg>
</button>
</div>
<div id="mobileMenu" class="hidden md:hidden" style="background:#fff;border-top:1px solid #e2e8f0;padding:16px;">
<div style="display:flex;flex-direction:column;gap:16px;">
<a href="/#blog" style="color:#475569;font-size:0.9375rem;font-weight:500;text-decoration:none;">Blog</a>
<a href="/#expertos" style="color:#475569;font-size:0.9375rem;font-weight:500;text-decoration:none;">Expertos</a>
<a href="/about.html" style="color:#4338ca;font-size:0.9375rem;font-weight:500;text-decoration:none;">Sobre Nosotros</a>
</div>
</div>
</nav>
<div style="padding-top:120px;padding-bottom:80px;">
<div class="container container--narrow">
<h1 style="font-size:clamp(2rem,3.5vw,3rem);font-weight:800;line-height:1.1;letter-spacing:-0.03em;color:#0f172a;margin-bottom:16px;">Sobre Odoo Expertos</h1>
<p style="font-size:1.0625rem;color:#64748b;line-height:1.7;margin-bottom:48px;max-width:550px;">Conocimiento práctico de Odoo, creado por consultores. Sin marketing, sin cursos, solo experiencia real compartida.</p>
<div style="display:grid;gap:32px;max-width:600px;">
<div>
<h2 style="font-size:1.25rem;font-weight:700;color:#0f172a;margin-bottom:12px;">Nuestra filosofía</h2>
<p style="color:#475569;font-size:0.9375rem;line-height:1.8;">Creemos en el poder del software open source. Odoo Community es una de las plataformas ERP más potentes disponibles, y nuestra misión es ayudar a la comunidad hispanohablante a aprovecharla al máximo. No somos marketing. Somos consultores que han implementado Odoo en entornos reales.</p>
</div>
<div>
<h2 style="font-size:1.25rem;font-weight:700;color:#0f172a;margin-bottom:12px;">Nuestro enfoque</h2>
<ul style="color:#475569;font-size:0.9375rem;line-height:1.8;padding-left:20px;list-style:disc;">
<li style="margin-bottom:8px;"><strong>Investigación práctica:</strong> Probamos cada configuración antes de publicar.</li>
<li style="margin-bottom:8px;"><strong>Contexto real:</strong> Ejemplos basados en implementaciones reales, no en casos teóricos.</li>
<li style="margin-bottom:8px;"><strong>Actualización continua:</strong> Mantenemos el contenido al día con cada versión de Odoo.</li>
<li style="margin-bottom:8px;"><strong>Transparencia:</strong> Cuando recomendamos productos o servicios, lo hacemos con honestidad.</li>
</ul>
</div>
<div style="border-top:1px solid #e2e8f0;padding-top:32px;margin-top:16px;">
<h2 style="font-size:1.25rem;font-weight:700;color:#0f172a;margin-bottom:20px;">Contáctanos</h2>
<form id="contactForm" style="display:grid;gap:16px;">
<div>
<label for="name">Nombre</label>
<input type="text" id="name" name="name" class="form-field" required placeholder="Tu nombre">
</div>
<div>
<label for="email">Correo electrónico</label>
<input type="email" id="email" name="email" class="form-field" required placeholder="tu@email.com">
</div>
<div>
<label for="message">Mensaje</label>
<textarea id="message" name="message" class="form-field" rows="5" required placeholder="Cuéntanos en qué podemos ayudarte..."></textarea>
</div>
<button type="submit" class="btn-primary" style="justify-content:center;padding:14px 32px;">
Enviar mensaje
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
</button>
</form>
</div>
</div>
</div>
</div>
<footer style="background:#0f172a;padding:60px 0 32px;">
<div class="container">
<div class="flex items-center gap-3 mb-8">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="24" height="24" style="display:block;">
<span style="font-weight:700;color:#fff;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</div>
<div style="display:flex;flex-wrap:wrap;gap:48px;margin-bottom:32px;">
<div>
<h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Secciones</h4>
<div style="display:flex;flex-direction:column;gap:8px;">
<a href="/#blog" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Blog</a>
<a href="/#expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Mercado de expertos</a>
</div>
</div>
<div>
<h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Partner</h4>
<div style="display:flex;flex-direction:column;gap:8px;">
<a href="https://ODOO4projects.com/?utm_campaign=expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" rel="nofollow sponsored" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">ODOO4projects &mdash; ODOO Community Hosting</a>
<a href="https://derez.ai" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Derez AI &mdash; Agent Hosting</a>
<a href="https://oca-py.org" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">OCA Paraguay &mdash; Comunidad Odoo</a>
</div>
</div>
<div>
<h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Empresa</h4>
<div style="display:flex;flex-direction:column;gap:8px;">
<a href="/about.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Sobre nosotros</a>
<a href="/contact.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Contacto</a>
</div>
</div>
</div>
<div style="border-top:1px solid #1e293b;padding-top:20px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;">
<span style="color:#475569;font-size:0.8125rem;">&copy; 2026 Odoo Expertos. Independiente y no afiliado a Odoo S.A.</span>
</div>
</div>
</footer>
<script>
document.getElementById('mobileToggle').addEventListener('click', function() {
document.getElementById('mobileMenu').classList.toggle('hidden');
});
document.getElementById('contactForm').addEventListener('submit', async function(e) {
e.preventDefault();
const btn = this.querySelector('button[type="submit"]');
btn.innerHTML = 'Enviando...'; btn.disabled = true;
const payload = { to: 'mark@odoo-expertos.com',
name: document.getElementById('name').value,
email: document.getElementById('email').value,
message: document.getElementById('message').value
};
try { await fetch('https://n8n.odoo4projects.com/webhook/odoo-expertos/mail', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); } catch(e) {}
this.innerHTML = '<div style="text-align:center;padding:40px 0;"><div style="width:56px;height:56px;border-radius:50%;background:rgba(16,185,129,0.1);display:flex;align-items:center;justify-content:center;margin:0 auto 20px;"><svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2.5" stroke-linecap="round"><polyline points="20 6 9 17 4 12"/></svg></div><h3 style="font-size:1.25rem;font-weight:700;color:#0f172a;margin-bottom:8px;">Mensaje enviado</h3><p style="color:#64748b;font-size:0.9375rem;line-height:1.7;">Gracias por contactarnos. Te responderemos a la mayor brevedad posible.</p></div>';
});
</script>
</body>
</html>
-29
View File
@@ -1,29 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 120" fill="none">
<defs>
<linearGradient id="lg" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#4338ca"/>
<stop offset="100%" stop-color="#3b82f6"/>
</linearGradient>
</defs>
<!-- Icon: small consultant figure with connection dots -->
<g transform="translate(10, 10)">
<!-- Head -->
<circle cx="50" cy="32" r="14" fill="url(#lg)"/>
<!-- Body -->
<path d="M28 80c0-14 10-24 22-24s22 10 22 24" fill="url(#lg)" opacity="0.15" stroke="url(#lg)" stroke-width="4.5" stroke-linecap="round"/>
<!-- Connection dots orbiting -->
<circle cx="18" cy="28" r="5" fill="url(#lg)" opacity="0.4"/>
<circle cx="82" cy="28" r="5" fill="url(#lg)" opacity="0.4"/>
<circle cx="28" cy="72" r="3.5" fill="url(#lg)" opacity="0.25"/>
<circle cx="72" cy="72" r="3.5" fill="url(#lg)" opacity="0.25"/>
<!-- Dashed orbit arcs -->
<path d="M20 50a42 42 0 0 1 60 0" stroke="url(#lg)" stroke-width="2" stroke-dasharray="4 6" fill="none" opacity="0.3"/>
<path d="M20 54a42 42 0 0 0 60 0" stroke="url(#lg)" stroke-width="2" stroke-dasharray="4 6" fill="none" opacity="0.3"/>
</g>
<!-- Wordmark -->
<g transform="translate(120, 18)">
<text x="0" y="36" font-family="'Inter','-apple-system',sans-serif" font-weight="700" font-size="32" fill="#0f172a" letter-spacing="-0.5">Odoo</text>
<text x="0" y="72" font-family="'Inter','-apple-system',sans-serif" font-weight="300" font-size="26" fill="#64748b" letter-spacing="1.5">Expertos</text>
</g>
<text x="360" y="82" font-family="'Inter','-apple-system',sans-serif" font-weight="400" font-size="9" fill="#94a3b8" letter-spacing="0.5" text-anchor="end">Proyectos + Expertos Odoo</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

-136
View File
@@ -1,136 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Brief semanal Odoo — 7 agosto 2026 | Odoo Expertos</title>
<meta name="description" content="Resumen semanal del ecosistema Odoo: la OCA lanza su nuevo Apps Store, novedades del blog oficial y más.">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://odoo-expertos.com/blog/brief-semanal-2026-08-07.html">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<meta property="og:type" content="article">
<meta property="og:title" content="Brief semanal Odoo — 7 agosto 2026">
<meta property="og:description" content="Resumen semanal del ecosistema Odoo.">
<meta property="article:published_time" content="2026-08-07">
<meta property="article:tag" content="Brief Semanal">
<meta property="article:tag" content="OCA">
<meta name="twitter:card" content="summary_large_image">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Brief semanal Odoo — 7 agosto 2026",
"description": "Resumen semanal del ecosistema Odoo.",
"author": {"@type": "Organization", "name": "Odoo Expertos", "url": "https://odoo-expertos.com"},
"publisher": {"@type": "Organization", "name": "Odoo Expertos", "logo": {"@type": "ImageObject", "url": "https://odoo-expertos.com/favicon.svg?v=2"}},
"datePublished": "2026-08-07",
"dateModified": "2026-08-07",
"mainEntityOfPage": {"@type": "WebPage", "@id": "https://odoo-expertos.com/blog/brief-semanal-2026-08-07.html"}
}
</script>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: #f8fafc; color: #0f172a; -webkit-font-smoothing: antialiased; }
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.container--narrow { max-width: 740px; }
.glass-nav { background: rgba(248,250,252,0.85); backdrop-filter: blur(16px); border-bottom: 1px solid rgba(0,0,0,0.05); }
.btn-primary { display: inline-flex; align-items: center; gap: 8px; padding: 14px 32px; background: linear-gradient(135deg, #4338ca, #3b82f6); color: #fff; border-radius: 12px; font-weight: 600; font-size: 0.9375rem; border: none; cursor: pointer; transition: all 0.3s; text-decoration: none; }
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 12px 32px rgba(67,56,202,0.25); }
.btn-secondary { display: inline-flex; align-items: center; gap: 8px; padding: 14px 32px; background: #fff; color: #4338ca; border: 1px solid #e2e8f0; border-radius: 12px; font-weight: 600; font-size: 0.9375rem; cursor: pointer; transition: all 0.3s; text-decoration: none; }
.btn-secondary:hover { border-color: #c7d2fe; }
article a { color: #4338ca; text-decoration: none; }
article a:hover { text-decoration: underline; }
article p { font-size: 1rem; line-height: 1.8; color: #334155; margin-bottom: 1.5rem; max-width: 65ch; }
article h1 { font-size: clamp(2rem, 3.5vw, 3rem); font-weight: 800; line-height: 1.1; letter-spacing: -0.03em; color: #0f172a; margin-bottom: 1.5rem; }
article h2 { font-size: 1.375rem; font-weight: 700; color: #0f172a; margin-top: 2.5rem; margin-bottom: 1rem; }
article ul { margin-bottom: 1.5rem; padding-left: 1.5rem; list-style: disc; }
article li { font-size: 1rem; line-height: 1.8; color: #334155; margin-bottom: 0.75rem; }
article li strong { color: #0f172a; }
article li a { color: #4338ca; font-weight: 500; }
article .meta { display: flex; align-items: center; gap: 1.5rem; color: #64748b; font-size: 0.875rem; padding-bottom: 1.5rem; border-bottom: 1px solid #e2e8f0; margin-bottom: 2rem; }
.badge { display: inline-block; background: rgba(99,102,241,0.1); color: #6366f1; font-size: 0.75rem; font-weight: 600; padding: 4px 10px; border-radius: 100px; margin-bottom: 1rem; letter-spacing: 0.02em; text-transform: uppercase; }
</style>
<link rel="icon" type="image/svg+xml" href="/favicon.svg?v=2">
<script defer data-domain="odoo-expertos.com" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.pageview-props.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body>
<nav class="glass-nav fixed top-0 left-0 right-0 z-50" style="height:64px;">
<div class="container h-full flex items-center justify-between">
<a href="/" class="flex items-center gap-2.5" style="text-decoration:none;">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="28" height="28" style="display:block;">
<span style="font-weight:700;font-size:1rem;color:#0f172a;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</a>
<div class="hidden md:flex items-center gap-8">
<a href="/#blog" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Blog</a>
<a href="/#expertos" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Expertos</a>
<a href="/about.html" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Sobre Nosotros</a>
</div>
<button id="mobileToggle" class="md:hidden" style="background:none;border:none;cursor:pointer;padding:8px;" onclick="document.getElementById('mobileMenu').classList.toggle('hidden')">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0f172a" stroke-width="2" stroke-linecap="round"><path d="M3 12h18M3 6h18M3 18h18"/></svg>
</button>
</div>
<div id="mobileMenu" class="hidden md:hidden" style="background:#fff;border-top:1px solid #e2e8f0;padding:16px;">
<div style="display:flex;flex-direction:column;gap:16px;">
<a href="/#blog" style="color:#475569;font-size:0.9375rem;font-weight:500;text-decoration:none;">Blog</a>
<a href="/#expertos" style="color:#475569;font-size:0.9375rem;font-weight:500;text-decoration:none;">Expertos</a>
<a href="/about.html" style="color:#475569;font-size:0.9375rem;font-weight:500;text-decoration:none;">Sobre Nosotros</a>
</div>
</div>
</nav>
<div style="padding-top:120px;padding-bottom:80px;">
<div class="container container--narrow">
<article>
<span class="badge">Brief Semanal</span>
<h1>Brief semanal Odoo — 7 agosto 2026</h1>
<div class="meta">
<span>Odoo Expertos</span>
<span>7 agosto 2026</span>
<span>3 min lectura</span>
</div>
<p>El ecosistema Odoo no se detiene. Esta semana trae novedades importantes desde la comunidad, nuevos lanzamientos y contenido que todo profesional del ERP debería conocer. Este es tu resumen semanal.</p>
<h2>La OCA lanza su nuevo Apps Store</h2>
<p>La <strong>Odoo Community Association (OCA)</strong> ha anunciado el lanzamiento de su nuevo <strong>Apps Store</strong>, una plataforma diseñada para centralizar los miles de módulos desarrollados por la comunidad. Desarrollado en colaboración con <a href="https://akretion.com" rel="noopener" target="_blank">Akretion</a>, el nuevo store permite buscar módulos, contribuidores, integradores y patrocinadores de la OCA. El evento de lanzamiento oficial se celebró el 16 de julio. <a href="https://www.odoo-community.org/blog/news-updates-1/the-oca-launches-its-new-apps-store-242" rel="noopener" target="_blank">Leer más →</a></p>
<h2>Novedades en el blog oficial de Odoo</h2>
<p>El blog oficial de Odoo ha publicado varios artículos recientemente sobre optimización de rendimiento, nuevas funcionalidades de la versión 18 y casos de éxito de implementaciones en empresas europeas. Destaca especialmente una guía sobre migración desde sistemas legacy a Odoo, un tema recurrente para las pymes que buscan modernizar su infraestructura ERP. <a href="https://www.odoo.com/de_DE/blog" rel="noopener" target="_blank">Explorar blog oficial →</a></p>
<h2>Actualizaciones en los módulos Community</h2>
<p>La comunidad de desarrolladores ha publicado actualizaciones significativas en varios módulos clave de Odoo Community, incluyendo mejoras en el módulo de contabilidad con nueva localización fiscal para LATAM, y optimizaciones en el módulo de inventario que mejoran el rendimiento en almacenes con alto volumen de movimientos. Estas actualizaciones están disponibles a través de los canales habituales de GitHub y el nuevo OCA Apps Store. <a href="https://github.com/odoo/odoo" rel="noopener" target="_blank">Ver en GitHub →</a></p>
<p style="margin-top:2rem;padding-top:1.5rem;border-top:1px solid #e2e8f0;font-size:0.875rem;color:#64748b;">¿Te ha parecido útil este resumen? Si tienes alguna sugerencia para incluir en el próximo brief, <a href="/contact.html" style="color:#4338ca;">contáctanos</a>.</p>
</article>
</div>
</div>
<footer style="background:#0f172a;padding:60px 0 32px;margin-top:40px;">
<div class="container">
<div class="flex items-center gap-3 mb-8">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="24" height="24" style="display:block;">
<span style="font-weight:700;color:#fff;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</div>
<div style="display:flex;flex-wrap:wrap;gap:48px;margin-bottom:32px;">
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Secciones</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="/#blog" style="color:#64748b;font-size:0.875rem;text-decoration:none;">Blog</a><a href="/#expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;">Expertos</a></div></div>
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Recursos</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="https://ODOO4projects.com/?utm_campaign=expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;" rel="nofollow sponsored" target="_blank">Hosting Odoo</a></div></div>
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Empresa</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="/about.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;">Sobre nosotros</a><a href="/contact.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;">Contacto</a></div></div>
</div>
<div style="border-top:1px solid #1e293b;padding-top:20px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;">
<span style="color:#475569;font-size:0.8125rem;">&copy; 2026 Odoo Expertos. Independiente y no afiliado a Odoo S.A.</span>
</div>
</div>
</footer>
<script>
document.getElementById('mobileToggle').addEventListener('click', function() {
document.getElementById('mobileMenu').classList.toggle('hidden');
});
</script>
</body>
</html>
-18
View File
@@ -1,18 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Blog — Odoo Expertos</title>
<meta name="robots" content="noindex, follow">
<link rel="canonical" href="https://odoo-expertos.com/">
<meta http-equiv="refresh" content="0;url=https://odoo-expertos.com/#blog">
<link rel="icon" type="image/svg+xml" href="/favicon.svg?v=2">
<script defer data-domain="odoo-expertos.com" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.pageview-props.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body>
<p style="font-family:sans-serif;padding:40px;text-align:center;color:#64748b;">Redirigiendo al blog...</p>
<script>window.location.href = '/#blog';</script>
</body>
</html>
-176
View File
@@ -1,176 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Conecta Odoo con Hermes Agent vía XML-RPC — Guía completa | Odoo Expertos</title>
<meta name="description" content="Guía paso a paso para conectar Odoo Community con Hermes Agent usando XML-RPC. Sin middleware, sin MCP, sin n8n. Tu agente IA hablando directamente con tu ERP.">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://odoo-expertos.com/blog/odoo-xml-rpc-hermes-agent.html">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<meta property="og:type" content="article">
<meta property="og:title" content="Conecta Odoo con Hermes Agent vía XML-RPC">
<meta property="og:description" content="Guía paso a paso para conectar Odoo con Hermes Agent usando XML-RPC.">
<meta property="article:published_time" content="2026-08-07">
<meta property="article:tag" content="Guía Técnica">
<meta property="article:tag" content="XML-RPC">
<meta property="article:tag" content="Hermes Agent">
<meta property="article:tag" content="API">
<meta name="twitter:card" content="summary_large_image">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Conecta Odoo con Hermes Agent vía XML-RPC — Guía completa",
"description": "Guía paso a paso para conectar Odoo Community con Hermes Agent usando XML-RPC. Sin middleware, sin MCP, sin n8n.",
"author": {"@type": "Organization", "name": "Odoo Expertos", "url": "https://odoo-expertos.com"},
"publisher": {"@type": "Organization", "name": "Odoo Expertos", "logo": {"@type": "ImageObject", "url": "https://odoo-expertos.com/favicon.svg?v=2"}},
"datePublished": "2026-08-07",
"dateModified": "2026-08-07",
"mainEntityOfPage": {"@type": "WebPage", "@id": "https://odoo-expertos.com/blog/odoo-xml-rpc-hermes-agent.html"}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Inicio", "item": "https://odoo-expertos.com/"},
{"@type": "ListItem", "position": 2, "name": "Blog", "item": "https://odoo-expertos.com/#blog"},
{"@type": "ListItem", "position": 3, "name": "Conecta Odoo con Hermes Agent vía XML-RPC", "item": "https://odoo-expertos.com/blog/odoo-xml-rpc-hermes-agent.html"}
]
}
</script>
<link rel="icon" type="image/svg+xml" href="/favicon.svg?v=2">
<style>
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;background:#f8fafc;color:#0f172a;-webkit-font-smoothing:antialiased;}
.container{max-width:1200px;margin:0 auto;padding:0 24px;}
.container--narrow{max-width:740px;}
.glass-nav{background:rgba(248,250,252,0.85);backdrop-filter:blur(16px);border-bottom:1px solid rgba(0,0,0,0.05);}
.btn-primary{display:inline-flex;align-items:center;gap:8px;padding:14px 32px;background:linear-gradient(135deg,#4338ca,#3b82f6);color:#fff;border-radius:12px;font-weight:600;font-size:0.9375rem;border:none;cursor:pointer;transition:all 0.3s;text-decoration:none;}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 12px 32px rgba(67,56,202,0.25);}
article h1{font-size:clamp(2rem,3.5vw,3rem);font-weight:800;line-height:1.1;letter-spacing:-0.03em;color:#0f172a;margin-bottom:1.5rem;}
article h2{font-size:1.375rem;font-weight:700;color:#0f172a;margin-top:2.5rem;margin-bottom:1rem;}
article h3{font-size:1.125rem;font-weight:700;color:#0f172a;margin-top:1.5rem;margin-bottom:0.75rem;}
article p{font-size:1rem;line-height:1.8;color:#334155;margin-bottom:1.5rem;max-width:65ch;}
article ul,article ol{margin-bottom:1.5rem;padding-left:1.5rem;}
article li{font-size:1rem;line-height:1.8;color:#334155;margin-bottom:0.5rem;}
article a{color:#4338ca;font-weight:500;}
article a:hover{text-decoration:underline;}
article pre{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:12px;padding:20px;overflow-x:auto;margin-bottom:1.5rem;font-size:0.875rem;line-height:1.6;font-family:'SFMono-Regular',Consolas,monospace;color:#0f172a;}
article code{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:6px;padding:2px 8px;font-size:0.875em;font-family:'SFMono-Regular',Consolas,monospace;color:#4338ca;}
article pre code{background:none;border:none;padding:0;color:#0f172a;}
.meta{display:flex;align-items:center;gap:1.5rem;color:#64748b;font-size:0.875rem;padding-bottom:1.5rem;border-bottom:1px solid #e2e8f0;margin-bottom:2rem;flex-wrap:wrap;}
.badge{display:inline-block;background:rgba(67,56,202,0.1);color:#4338ca;font-size:0.75rem;font-weight:600;padding:4px 10px;border-radius:100px;margin-bottom:1rem;letter-spacing:0.02em;text-transform:uppercase;}
.video-wrapper{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:16px;margin-bottom:2rem;background:#0f172a;}
.video-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;}
</style>
<script defer data-domain="odoo-expertos.com" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.pageview-props.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body>
<nav class="glass-nav fixed top-0 left-0 right-0 z-50" style="height:64px;">
<div class="container h-full flex items-center justify-between">
<a href="/" class="flex items-center gap-2.5" style="text-decoration:none;">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="28" height="28" style="display:block;">
<span style="font-weight:700;font-size:1rem;color:#0f172a;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</a>
<div class="hidden md:flex items-center gap-8">
<a href="/#blog" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Blog</a>
<a href="/#expertos" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Expertos</a>
<a href="/about.html" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;">Sobre Nosotros</a>
</div>
</div>
</nav>
<div style="padding-top:120px;padding-bottom:80px;">
<div class="container container--narrow">
<article>
<span class="badge">Guía Técnica</span>
<h1>Conecta Odoo con Hermes Agent vía XML-RPC</h1>
<div class="meta">
<span>Odoo Expertos</span>
<span>7 agosto 2026</span>
<span>6 min lectura</span>
</div>
<div class="video-wrapper">
<iframe src="https://www.youtube.com/embed/odoo-hermes-xmlrpc" title="Odoo + AI Agent en 3 minutos (XML-RPC)" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen loading="lazy"></iframe>
</div>
<p>Imagina poder preguntarle a un asistente de IA cosas como <em>"¿cuántos clientes tenemos en CRM?"</em> o <em>"crea una orden de venta para el cliente X"</em> y que responda en tiempo real desde tu Odoo. Eso es exactamente lo que permite <strong>Hermes Agent</strong> conectado a Odoo vía XML-RPC, sin middleware, sin servidores MCP y sin pipelines de n8n. Solo tu agente y tu ERP hablando directamente.</p>
<p>Esta es la primera y más simple de las <strong>tres formas de integrar Odoo con Hermes Agent</strong> —llamadas directas a la API XML-RPC. Es la ruta más rápida: un salto, un bloque de configuración, y una cosa menos que puede fallar. Para consultas simples, prototipos y demostraciones, es la elección correcta.</p>
<h2>Qué vas a construir</h2>
<p>Al final de esta guía tendrás un agente Hermes que puede consultar y manipular datos de tu Odoo en tiempo real usando XML-RPC.</p>
<h2>Prerrequisitos</h2>
<ul>
<li>Una instancia de Odoo (Community o Enterprise) con acceso de administrador</li>
<li>Hermes Agent instalado. Si aún no lo tienes, sigue la <a href="https://derez.ai/blog/posts/odoo-xml-rpc-hermes-agent.html" rel="noopener" target="_blank">guía de instalación en derez.ai</a></li>
<li>Acceso a la terminal o interfaz de Hermes</li>
</ul>
<h2>Paso 1 — Generar una clave API de Odoo</h2>
<p>Ve a <strong>Ajustes → Usuarios → Técnico</strong> en tu Odoo. Selecciona tu usuario y, en la pestaña <strong>Claves API</strong>, genera una nueva clave. Asígnale un nombre descriptivo como <code>hermes-agent</code>. Copia la clave generada: la necesitarás en el siguiente paso.</p>
<h2>Paso 2 — Añadir la conexión a Hermes</h2>
<p>En tu archivo de configuración de Hermes, añade un bloque de conexión Odoo. La estructura básica incluye la URL de tu instancia, el nombre de la base de datos, el usuario y la clave API:</p>
<pre><code>url: "https://tu-instancia.odoo.com"
db: "nombre-de-tu-base-de-datos"
user: "tu@email.com"
api_key: "tu-clave-api-generada"
readonly: true</code></pre>
<p>El parámetro <code>readonly: true</code> es recomendable si solo quieres realizar consultas. Para operaciones de escritura, cámbialo a <code>false</code>.</p>
<h2>Paso 3 — Darle el prompt de conexión a tu agente</h2>
<p>Hermes Agent necesita un prompt que le indique cómo conectarse a tu Odoo. El prompt debe incluir las credenciales y el alcance de las operaciones permitidas. Puedes usar el prompt de ejemplo que encontrarás en la <a href="https://derez.ai/blog/posts/odoo-xml-rpc-hermes-agent.html" rel="noopener" target="_blank">guía completa en derez.ai</a>.</p>
<h2>Paso 4 — Iniciar Hermes y verificar</h2>
<p>Inicia Hermes Agent y haz tu primera consulta. Por ejemplo, pregúntale: <em>"¿Cuántos clientes hay en CRM?"</em>. Si todo está configurado correctamente, tu agente responderá con el número de registros.</p>
<pre><code>&gt; ¿Cuántos clientes tenemos en CRM?
Total: 8 clientes en CRM</code></pre>
<h2>Qué puedes hacer ahora</h2>
<p>Una vez conectado, tu agente puede:</p>
<ul>
<li>Consultar clientes, productos, pedidos y facturas</li>
<li>Crear y actualizar registros en cualquier modelo</li>
<li>Ejecutar búsquedas complejas con filtros en múltiples modelos</li>
<li>Automatizar tareas rutinarias desde una sola conversación</li>
</ul>
<h2>Seguridad primero</h2>
<p>La conexión XML-RPC expone tu Odoo directamente al agente. Es importante usar <strong>claves API específicas</strong> para cada integración, activar <strong>readonly</strong> cuando sea posible, y limitar el acceso del agente a los modelos estrictamente necesarios.</p>
<h2>¿Por qué XML-RPC?</h2>
<p>La vía directa por XML-RPC es el camino más rápido: un salto, un bloque de configuración, una cosa menos que puede fallar. Sin servidores MCP que mantener, sin flujos de n8n que depurar. Para consultas simples, prototipos y experimentación, es la elección correcta. Para integraciones más complejas, puedes explorar los otros dos enfoques (MCP y n8n) en el <a href="https://derez.ai" rel="noopener" target="_blank">blog de derez.ai</a>.</p>
<p style="margin-top:2rem;padding-top:1.5rem;border-top:1px solid #e2e8f0;font-size:0.875rem;color:#64748b;">Este artículo está basado en la guía original de <a href="https://derez.ai/blog/posts/odoo-xml-rpc-hermes-agent.html" rel="noopener" target="_blank">derez.ai</a>.</p>
</article>
</div>
</div>
<footer style="background:#0f172a;padding:60px 0 32px;margin-top:40px;">
<div class="container">
<div class="flex items-center gap-3 mb-8">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="24" height="24" style="display:block;">
<span style="font-weight:700;color:#fff;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</div>
<div style="display:flex;flex-wrap:wrap;gap:48px;margin-bottom:32px;">
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Secciones</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="/#blog" style="color:#64748b;font-size:0.875rem;text-decoration:none;">Blog</a><a href="/#expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;">Expertos</a></div></div>
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Partner</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="https://ODOO4projects.com/?utm_campaign=expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;" rel="nofollow sponsored" target="_blank">ODOO4projects &mdash; ODOO Community Hosting</a><a href="https://derez.ai" style="color:#64748b;font-size:0.875rem;text-decoration:none;" target="_blank">Derez AI &mdash; Agent Hosting</a><a href="https://oca-py.org" style="color:#64748b;font-size:0.875rem;text-decoration:none;" target="_blank">OCA Paraguay &mdash; Comunidad Odoo</a></div></div>
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Empresa</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="/about.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;">Sobre nosotros</a><a href="/contact.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;">Contacto</a></div></div>
</div>
<div style="border-top:1px solid #1e293b;padding-top:20px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;"><span style="color:#475569;font-size:0.8125rem;">&copy; 2026 Odoo Expertos. Independiente y no afiliado a Odoo S.A.</span></div>
</div>
</footer>
</body>
</html>
-127
View File
@@ -1,127 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Contacto — Odoo Expertos</title>
<meta name="description" content="Contacta con Odoo Expertos. Sugerencias, colaboraciones y consultas sobre Odoo Community ERP.">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://odoo-expertos.com/contact.html">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<meta property="og:type" content="website">
<meta property="og:title" content="Contacto — Odoo Expertos">
<meta property="og:description" content="Contacta con Odoo Expertos.">
<meta name="twitter:card" content="summary_large_image">
<link rel="icon" type="image/svg+xml" href="/favicon.svg?v=2">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: #f8fafc; color: #0f172a; -webkit-font-smoothing: antialiased; }
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.container--narrow { max-width: 740px; }
.glass-nav { background: rgba(248,250,252,0.85); backdrop-filter: blur(16px); border-bottom: 1px solid rgba(0,0,0,0.05); }
.btn-primary { display: inline-flex; align-items: center; gap: 8px; padding: 14px 32px; background: linear-gradient(135deg, #4338ca, #3b82f6); color: #fff; border-radius: 12px; font-weight: 600; font-size: 0.9375rem; border: none; cursor: pointer; transition: all 0.3s; text-decoration: none; }
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 12px 32px rgba(67,56,202,0.25); }
.form-field { width: 100%; padding: 12px 16px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px; font-family: 'Inter', sans-serif; font-size: 0.9375rem; color: #0f172a; transition: all 0.2s; }
.form-field:focus { outline: none; border-color: #4338ca; box-shadow: 0 0 0 3px rgba(67,56,202,0.1); background: #fff; }
label { display: block; font-size: 0.8125rem; font-weight: 600; color: #334155; margin-bottom: 6px; }
</style>
</head>
<body>
<nav class="glass-nav fixed top-0 left-0 right-0 z-50" style="height:64px;">
<div class="container h-full flex items-center justify-between">
<a href="/" class="flex items-center gap-2.5" style="text-decoration:none;">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="28" height="28" style="display:block;">
<span style="font-weight:700;font-size:1rem;color:#0f172a;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</a>
<div class="hidden md:flex items-center gap-8">
<a href="/#blog" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Blog</a>
<a href="/#expertos" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Expertos</a>
<a href="/about.html" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Sobre Nosotros</a>
<a href="/contact.html" style="color:#4338ca;font-size:0.875rem;font-weight:500;text-decoration:none;">Contacto</a>
</div>
<button id="mobileToggle" class="md:hidden" style="background:none;border:none;cursor:pointer;padding:8px;" onclick="document.getElementById('mobileMenu').classList.toggle('hidden')">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0f172a" stroke-width="2" stroke-linecap="round"><path d="M3 12h18M3 6h18M3 18h18"/></svg>
</button>
</div>
<div id="mobileMenu" class="hidden md:hidden" style="background:#fff;border-top:1px solid #e2e8f0;padding:16px;">
<div style="display:flex;flex-direction:column;gap:16px;">
<a href="/#blog" style="color:#475569;font-size:0.9375rem;font-weight:500;text-decoration:none;">Blog</a>
<a href="/#expertos" style="color:#475569;font-size:0.9375rem;font-weight:500;text-decoration:none;">Expertos</a>
<a href="/about.html" style="color:#475569;font-size:0.9375rem;font-weight:500;text-decoration:none;">Sobre Nosotros</a>
<a href="/contact.html" style="color:#4338ca;font-size:0.9375rem;font-weight:500;text-decoration:none;">Contacto</a>
</div>
</div>
</nav>
<div style="padding-top:120px;padding-bottom:80px;">
<div class="container container--narrow">
<h1 style="font-size:clamp(2rem,3.5vw,3rem);font-weight:800;line-height:1.1;letter-spacing:-0.03em;color:#0f172a;margin-bottom:12px;">Contacto</h1>
<p style="font-size:1.0625rem;color:#64748b;line-height:1.7;margin-bottom:40px;max-width:500px;">¿Tienes dudas sobre Odoo Community? ¿Quieres sugerir un tema para el blog? Estaremos encantados de ayudarte.</p>
<form id="contactForm" style="display:grid;gap:16px;max-width:540px;">
<div>
<label for="name">Nombre</label>
<input type="text" id="name" name="name" class="form-field" required placeholder="Tu nombre">
</div>
<div>
<label for="email">Correo electrónico</label>
<input type="email" id="email" name="email" class="form-field" required placeholder="tu@email.com">
</div>
<div>
<label for="subject">Asunto</label>
<input type="text" id="subject" name="subject" class="form-field" placeholder="¿Sobre qué trata tu mensaje?">
</div>
<div>
<label for="message">Mensaje</label>
<textarea id="message" name="message" class="form-field" rows="5" required placeholder="Cuéntanos en qué podemos ayudarte..."></textarea>
</div>
<button type="submit" class="btn-primary" style="justify-content:center;padding:14px 32px;">
Enviar mensaje
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
</button>
</form>
</div>
</div>
<footer style="background:#0f172a;padding:60px 0 32px;margin-top:40px;">
<div class="container">
<div class="flex items-center gap-3 mb-8">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="24" height="24" style="display:block;">
<span style="font-weight:700;color:#fff;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</div>
<div style="display:flex;flex-wrap:wrap;gap:48px;margin-bottom:32px;">
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Secciones</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="/#blog" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Blog</a><a href="/#expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Expertos</a></div></div>
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Partner</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="https://ODOO4projects.com/?utm_campaign=expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" rel="nofollow sponsored" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">ODOO4projects &mdash; ODOO Community Hosting</a><a href="https://derez.ai" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Derez AI &mdash; Agent Hosting</a><a href="https://oca-py.org" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">OCA Paraguay &mdash; Comunidad Odoo</a></div></div>
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Empresa</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="/about.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Sobre nosotros</a><a href="/contact.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Contacto</a></div></div>
</div>
<div style="border-top:1px solid #1e293b;padding-top:20px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;">
<span style="color:#475569;font-size:0.8125rem;">&copy; 2026 Odoo Expertos. Independiente y no afiliado a Odoo S.A.</span>
</div>
</div>
</footer>
<script>
document.getElementById('mobileToggle').addEventListener('click', function() {
document.getElementById('mobileMenu').classList.toggle('hidden');
});
document.getElementById('contactForm').addEventListener('submit', async function(e) {
e.preventDefault();
const btn = this.querySelector('button[type="submit"]');
btn.innerHTML = 'Enviando...'; btn.disabled = true;
const payload = { to: 'mark@odoo-expertos.com',
name: document.getElementById('name').value,
email: document.getElementById('email').value,
subject: document.getElementById('subject').value,
message: document.getElementById('message').value
};
try { await fetch('https://n8n.odoo4projects.com/webhook/odoo-expertos/mail', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); } catch(e) {}
this.innerHTML = '<div style="text-align:center;padding:40px 0;"><div style="width:56px;height:56px;border-radius:50%;background:rgba(16,185,129,0.1);display:flex;align-items:center;justify-content:center;margin:0 auto 20px;"><svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2.5" stroke-linecap="round"><polyline points="20 6 9 17 4 12"/></svg></div><h3 style="font-size:1.25rem;font-weight:700;color:#0f172a;margin-bottom:8px;">Mensaje enviado</h3><p style="color:#64748b;font-size:0.9375rem;line-height:1.7;">Gracias por contactarnos. Te responderemos a la mayor brevedad posible.</p></div>';
});
</script>
</body>
</html>
-1146
View File
File diff suppressed because it is too large Load Diff
-11
View File
@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
<defs>
<linearGradient id="fg" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#4338ca"/>
<stop offset="100%" stop-color="#3b82f6"/>
</linearGradient>
</defs>
<rect x="2" y="2" width="60" height="60" rx="14" fill="url(#fg)"/>
<circle cx="32" cy="22" r="8" fill="#fff"/>
<path d="M18 50c0-9 6.5-15 14-15s14 6 14 15" fill="none" stroke="#fff" stroke-width="3" stroke-linecap="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 503 B

-855
View File
@@ -1,855 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Odoo Expertos — Proyectos, expertos y conocimiento Odoo</title>
<meta name="description" content="Conectamos proyectos Odoo con expertos hispanohablantes. Conocimiento, noticias y un mercado de profesionales certificados en Odoo Community.">
<link rel="canonical" href="https://odoo-expertos.com/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<link rel="icon" type="image/svg+xml" href="/favicon.svg?v=2">
<meta property="og:type" content="website">
<meta property="og:title" content="Odoo Expertos — Proyectos, expertos y conocimiento Odoo">
<meta property="og:description" content="Conectamos proyectos Odoo con expertos hispanohablantes.">
<meta name="twitter:card" content="summary_large_image">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: #f8fafc; color: #0f172a; -webkit-font-smoothing: antialiased; }
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.glass-nav { background: rgba(248,250,252,0.85); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border-bottom: 1px solid rgba(0,0,0,0.05); }
.gradient-text { background: linear-gradient(135deg, #4338ca 0%, #3b82f6 50%, #8b5cf6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
.hero-gradient { background: linear-gradient(180deg, #f8fafc 0%, #eef2ff 40%, #ede9fe 70%, #f8fafc 100%); }
.hero-glow { position: absolute; width: 600px; height: 600px; border-radius: 50%; filter: blur(100px); opacity: 0.15; pointer-events: none; }
.hero-glow-1 { background: #4338ca; top: -200px; right: -100px; }
.hero-glow-2 { background: #8b5cf6; bottom: -200px; left: -100px; }
.glass-card { background: rgba(255,255,255,0.8); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid rgba(255,255,255,0.6); box-shadow: 0 8px 32px rgba(0,0,0,0.06); }
.premium-card { background: #fff; border: 1px solid #e2e8f0; border-radius: 16px; transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); }
.premium-card:hover { border-color: #c7d2fe; box-shadow: 0 20px 60px rgba(67,56,202,0.08), 0 8px 24px rgba(0,0,0,0.04); transform: translateY(-4px); }
.btn-primary { display: inline-flex; align-items: center; gap: 8px; padding: 14px 32px; background: linear-gradient(135deg, #4338ca, #3b82f6); color: #fff; border-radius: 12px; font-weight: 600; font-size: 0.9375rem; border: none; cursor: pointer; transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); text-decoration: none; }
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 12px 32px rgba(67,56,202,0.25); }
.btn-secondary { display: inline-flex; align-items: center; gap: 8px; padding: 14px 32px; background: #fff; color: #4338ca; border: 1px solid #e2e8f0; border-radius: 12px; font-weight: 600; font-size: 0.9375rem; cursor: pointer; transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); text-decoration: none; }
.btn-secondary:hover { border-color: #c7d2fe; box-shadow: 0 4px 16px rgba(67,56,202,0.08); transform: translateY(-2px); }
.fade-up { opacity: 0; transform: translateY(30px); transition: all 0.8s cubic-bezier(0.16, 1, 0.3, 1); }
.fade-up.visible { opacity: 1; transform: translateY(0); }
section { padding: 100px 0; }
@media (max-width: 768px) { section { padding: 60px 0; } }
.expert-card { background: #fff; border: 1px solid #e2e8f0; border-radius: 20px; padding: 32px; transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); }
.expert-card:hover { border-color: #c7d2fe; box-shadow: 0 16px 48px rgba(67,56,202,0.08); transform: translateY(-4px); }
.badge-certified { background: rgba(16,185,129,0.1); color: #10b981; }
.badge-community { background: rgba(245,158,11,0.1); color: #f59e0b; }
.avatar { width: 64px; height: 64px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 1.25rem; color: #fff; }
.filter-chip { display: inline-flex; align-items: center; gap: 6px; padding: 8px 18px; border-radius: 100px; font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all 0.2s ease; border: 1px solid #e2e8f0; background: #fff; color: #475569; }
.filter-chip:hover { border-color: #c7d2fe; color: #4338ca; }
.filter-chip.active { background: #4338ca; border-color: #4338ca; color: #fff; }
.cta-gradient { background: linear-gradient(135deg, #1e1b4b 0%, #312e81 30%, #3730a3 60%, #4338ca 100%); }
/* Modal */
.modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(15,23,42,0.6); backdrop-filter: blur(4px); z-index: 100; display: none; align-items: center; justify-content: center; padding: 24px; }
.modal-overlay.open { display: flex; }
.modal-box { background: #fff; border-radius: 24px; max-width: 640px; width: 100%; max-height: 90vh; overflow-y: auto; box-shadow: 0 32px 80px rgba(0,0,0,0.2); }
.form-field { width: 100%; padding: 12px 16px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px; font-family: 'Inter', sans-serif; font-size: 0.9375rem; color: #0f172a; transition: all 0.2s; }
.form-field:focus { outline: none; border-color: #4338ca; box-shadow: 0 0 0 3px rgba(67,56,202,0.1); background: #fff; }
.label { display: block; font-size: 0.8125rem; font-weight: 600; color: #334155; margin-bottom: 6px; }
/* Toast */
.toast { position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%) translateY(100px); background: #0f172a; color: #fff; padding: 14px 28px; border-radius: 12px; font-size: 0.9375rem; font-weight: 500; z-index: 200; transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1); box-shadow: 0 12px 40px rgba(0,0,0,0.2); }
.toast.show { transform: translateX(-50%) translateY(0); }
::-webkit-scrollbar { width: 8px; }
::-webkit-scrollbar-track { background: #f1f5f9; }
::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 4px; }
@media (max-width: 768px) {
.hero-title { font-size: 2.5rem !important; line-height: 1.1 !important; }
}
@keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } }
.float { animation: float 6s ease-in-out infinite; }
.float-delayed { animation: float 6s ease-in-out 2s infinite; }
</style>
<script defer data-domain="odoo-expertos.com" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.pageview-props.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body>
<!-- ===== NAV ===== -->
<nav class="glass-nav fixed top-0 left-0 right-0 z-50" style="height:64px;">
<div class="container h-full flex items-center justify-between">
<a href="/" class="flex items-center gap-2.5" style="text-decoration:none;">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="28" height="28" style="display:block;">
<span style="font-weight:700;font-size:1rem;color:#0f172a;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</a>
<div class="hidden md:flex items-center gap-8">
<a href="/#blog" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Blog</a>
<a href="/#expertos" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Mercado de Expertos</a>
<a href="/about.html" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Sobre Nosotros</a>
<button class="btn-primary" style="padding:10px 24px;font-size:0.875rem;" onclick="openSignupModal()">Soy experto</button>
</div>
<button id="mobileToggle" class="md:hidden" style="background:none;border:none;cursor:pointer;padding:8px;" onclick="document.getElementById('mobileMenu').classList.toggle('hidden')">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0f172a" stroke-width="2" stroke-linecap="round"><path d="M3 12h18M3 6h18M3 18h18"/></svg>
</button>
</div>
<div id="mobileMenu" class="hidden md:hidden" style="background:#fff;border-top:1px solid #e2e8f0;padding:16px;">
<div style="display:flex;flex-direction:column;gap:16px;">
<a href="/#blog" style="color:#475569;font-size:0.9375rem;font-weight:500;text-decoration:none;">Blog</a>
<a href="/#expertos" style="color:#475569;font-size:0.9375rem;font-weight:500;text-decoration:none;">Mercado de Expertos</a>
<a href="/about.html" style="color:#475569;font-size:0.9375rem;font-weight:500;text-decoration:none;">Sobre Nosotros</a>
<button class="btn-primary" style="justify-content:center;" onclick="openSignupModal()">Soy experto</button>
</div>
</div>
</nav>
<!-- ===== HERO ===== -->
<section class="hero-gradient" id="hero" style="padding-top:140px;padding-bottom:100px;position:relative;overflow:hidden;">
<div class="hero-glow hero-glow-1"></div>
<div class="hero-glow hero-glow-2"></div>
<div class="container" style="position:relative;z-index:1;">
<div class="text-center max-w-3xl mx-auto">
<div style="display:inline-flex;align-items:center;gap:8px;background:rgba(67,56,202,0.08);border:1px solid rgba(67,56,202,0.12);border-radius:100px;padding:6px 16px;margin-bottom:28px;">
<span style="width:6px;height:6px;border-radius:50%;background:#10b981;display:inline-block;"></span>
<span style="color:#4338ca;font-size:0.8125rem;font-weight:500;">El puente entre proyectos y expertos Odoo</span>
</div>
<h1 class="hero-title" style="font-size:clamp(2.75rem,5vw,4rem);font-weight:800;line-height:1.08;letter-spacing:-0.04em;color:#0f172a;margin-bottom:24px;">
Conectamos desarrolladores Odoo<br>
<span class="gradient-text">con proyectos en español</span>
</h1>
<p style="font-size:1.1875rem;line-height:1.7;color:#475569;max-width:600px;margin:0 auto 40px;font-weight:400;">
Ponemos en contacto a empresas con desarrolladores y consultores hispanohablantes especializados en Odoo.
Nosotros solo facilitamos el contacto. Todos los contratos y acuerdos son entre las partes.</p>
<div class="flex flex-wrap justify-center gap-4">
<a href="/#expertos" class="btn-primary" style="font-size:1rem;padding:16px 36px;">
Encontrar un experto
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
</a>
<button class="btn-secondary" style="font-size:1rem;padding:16px 36px;" onclick="openSignupModal()">
Publicar mi perfil de experto
</button>
</div>
<!-- Hero images: Spanish business professionals -->
<div style="margin-top:64px;display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;max-width:720px;margin-left:auto;margin-right:auto;">
<div style="border-radius:20px;overflow:hidden;box-shadow:0 8px 32px rgba(0,0,0,0.08);aspect-ratio:3/4;position:relative;" class="float">
<img src="https://images.unsplash.com/photo-1573497019940-1c28c88b4f3e?w=400&h=533&fit=crop&crop=face" alt="Consultor Odoo" style="width:100%;height:100%;object-fit:cover;">
<div style="position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,0.7));padding:20px;">
<span style="color:#fff;font-weight:600;font-size:0.875rem;">Consultor ERP</span>
</div>
</div>
<div style="border-radius:20px;overflow:hidden;box-shadow:0 8px 32px rgba(0,0,0,0.08);aspect-ratio:3/4;position:relative;margin-top:24px;" class="float-delayed">
<img src="https://images.unsplash.com/photo-1573164713714-d95e436ab8d6?w=400&h=533&fit=crop&crop=face" alt="Desarrolladora Odoo" style="width:100%;height:100%;object-fit:cover;">
<div style="position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,0.7));padding:20px;">
<span style="color:#fff;font-weight:600;font-size:0.875rem;">Desarrolladora</span>
</div>
</div>
<div style="border-radius:20px;overflow:hidden;box-shadow:0 8px 32px rgba(0,0,0,0.08);aspect-ratio:3/4;position:relative;">
<img src="https://images.unsplash.com/photo-1552581234-26160f608093?w=400&h=533&fit=crop&crop=face" alt="Equipo Odoo" style="width:100%;height:100%;object-fit:cover;">
<div style="position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,0.7));padding:20px;">
<span style="color:#fff;font-weight:600;font-size:0.875rem;">Equipo técnico</span>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- ===== BLOG ===== -->
<section id="blog" style="padding:100px 0;">
<div class="container">
<div class="flex items-end justify-between flex-wrap gap-6 mb-8">
<div>
<h2 style="font-size:clamp(1.75rem,3vw,2.5rem);font-weight:700;line-height:1.1;letter-spacing:-0.03em;color:#0f172a;margin-bottom:12px;">Blog y noticias</h2>
<p style="font-size:1.0625rem;color:#64748b;line-height:1.7;max-width:480px;">Conocimiento práctico sobre Odoo Community. Tutoriales, guías y novedades del ecosistema.</p>
</div>
</div>
<!-- Search -->
<div style="position:relative;max-width:480px;margin-bottom:32px;">
<svg style="position:absolute;left:16px;top:50%;transform:translateY(-50%);" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2.5" stroke-linecap="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
<input type="text" id="blogSearch" placeholder="Buscar artículos..." oninput="blogSearch(this.value)" style="width:100%;padding:12px 16px 12px 46px;background:#fff;border:1px solid #e2e8f0;border-radius:12px;font-family:'Inter',sans-serif;font-size:0.9375rem;color:#0f172a;outline:none;transition:border-color 0.2s;" onfocus="this.style.borderColor='#4338ca'" onblur="this.style.borderColor='#e2e8f0'">
</div>
<!-- Blog grid -->
<div class="grid md:grid-cols-3 gap-6" id="blogGrid"></div>
<!-- Pagination -->
<div id="blogPagination" style="display:flex;justify-content:center;gap:12px;margin-top:40px;"></div>
</div>
</section>
<script>
// All blog articles data
const allArticles = [
{ slug:"brief-semanal-2026-08-07.html", cat:"Brief Semanal", time:"3 min", date:"2026-08-07", title:"Brief semanal Odoo — 7 agosto 2026", excerpt:"La OCA lanza su nuevo Apps Store, novedades del blog oficial de Odoo y actualizaciones en los módulos Community. Tu resumen semanal del ecosistema Odoo.", tag:"news" },
{ slug:"odoo-xml-rpc-hermes-agent.html", cat:"Guía Técnica", time:"6 min", date:"2026-07-28", title:"Conecta Odoo con Hermes Agent vía XML-RPC", excerpt:"Guía paso a paso para conectar Odoo Community con Hermes Agent usando XML-RPC. Sin middleware, sin MCP, sin n8n. Tu agente IA hablando directamente con tu ERP.", tag:"guide" }
];
// Sort newest first
allArticles.sort((a, b) => b.date.localeCompare(a.date));
const perPage = 6;
let currentPage = 1;
let filteredArticles = [...allArticles];
const tagColors = { news:"rgba(99,102,241,0.1)", guide:"rgba(67,56,202,0.1)", comparison:"rgba(245,158,11,0.1)", tutorial:"rgba(16,185,129,0.1)" };
const tagText = { news:"#6366f1", guide:"#4338ca", comparison:"#f59e0b", tutorial:"#10b981" };
function renderBlog() {
const grid = document.getElementById('blogGrid');
const pag = document.getElementById('blogPagination');
const start = (currentPage - 1) * perPage;
const page = filteredArticles.slice(start, start + perPage);
const totalPages = Math.ceil(filteredArticles.length / perPage);
grid.innerHTML = page.map(a => `<a href="/blog/${a.slug}" class="premium-card p-8" style="text-decoration:none;display:flex;flex-direction:column;">
<div style="display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap;">
<span style="background:${tagColors[a.tag]||tagColors.guide};color:${tagText[a.tag]||tagText.guide};font-size:0.75rem;font-weight:500;padding:4px 10px;border-radius:100px;">${a.cat}</span>
<span style="background:rgba(16,185,129,0.1);color:#10b981;font-size:0.75rem;font-weight:500;padding:4px 10px;border-radius:100px;">${a.time}</span>
<span style="color:#94a3b8;font-size:0.75rem;font-weight:400;padding:4px 0;margin-left:auto;">${a.date}</span>
</div>
<h3 style="font-size:1.125rem;font-weight:600;color:#0f172a;margin-bottom:8px;line-height:1.4;">${a.title}</h3>
<p style="color:#64748b;font-size:0.875rem;line-height:1.7;margin-bottom:16px;flex:1;">${a.excerpt}</p>
<span style="color:#4338ca;font-size:0.875rem;font-weight:600;display:inline-flex;align-items:center;gap:6px;">Leer m\u00e1s <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg></span>
</a>`).join('');
if (totalPages <= 1) { pag.innerHTML = ''; return; }
pag.innerHTML = Array.from({length:totalPages}, (_, i) => i+1).map(p =>
`<button onclick="currentPage=${p};renderBlog()" style="padding:8px 18px;border-radius:10px;font-weight:600;font-size:0.875rem;border:1px solid ${p===currentPage?'#4338ca':'#e2e8f0'};background:${p===currentPage?'#4338ca':'#fff'};color:${p===currentPage?'#fff':'#475569'};cursor:pointer;transition:all 0.2s;">${p}</button>`
).join('');
}
function blogSearch(q) {
const query = q.toLowerCase().trim();
filteredArticles = query ? allArticles.filter(a =>
a.title.toLowerCase().includes(query) || a.excerpt.toLowerCase().includes(query) || a.cat.toLowerCase().includes(query)
) : [...allArticles];
currentPage = 1;
renderBlog();
}
renderBlog();
</script>
<!-- ===== MAILING LIST ===== -->
<section style="padding:60px 0;background:#f1f5f9;border-top:1px solid #e2e8f0;border-bottom:1px solid #e2e8f0;">
<div class="container">
<div class="max-w-2xl mx-auto text-center">
<h2 style="font-size:clamp(1.25rem,2vw,1.5rem);font-weight:700;line-height:1.2;letter-spacing:-0.02em;color:#0f172a;margin-bottom:8px;">Newsletter Odoo Expertos</h2>
<p style="color:#64748b;font-size:0.9375rem;line-height:1.7;margin-bottom:24px;max-width:440px;margin-left:auto;margin-right:auto;">Dos ediciones al a&ntilde;o con novedades, gu&iacute;as y recursos exclusivos del ecosistema Odoo.</p>
<form id="mailingForm" style="display:flex;gap:12px;max-width:440px;margin:0 auto;">
<input type="email" id="mailEmail" placeholder="tu@email.com" required style="flex:1;padding:14px 18px;background:#fff;border:1px solid #e2e8f0;border-radius:12px;font-family:'Inter',sans-serif;font-size:0.9375rem;color:#0f172a;outline:none;transition:border-color 0.2s;" onfocus="this.style.borderColor='#4338ca'" onblur="this.style.borderColor='#e2e8f0'">
<button type="submit" class="btn-primary" style="white-space:nowrap;padding:14px 28px;">Suscribirme</button>
</form>
<p style="color:#94a3b8;font-size:0.8125rem;margin-top:12px;">Sin spam. Solo contenido útil para tu proyecto Odoo.</p>
</div>
</div>
</section>
<script>
document.getElementById('mailingForm').addEventListener('submit', async function(e) {
e.preventDefault();
const btn = this.querySelector('button');
btn.innerHTML = 'Enviando...'; btn.disabled = true;
try {
await fetch('https://n8n.odoo4projects.com/webhook/odoo-expertos/mailing', {
method: 'POST', headers: {'Content-Type':'application/json'},
body: JSON.stringify({email: document.getElementById('mailEmail').value})
});
} catch(e) {}
this.innerHTML = '<div style="padding:12px 0;"><span style="color:#10b981;font-weight:600;font-size:0.9375rem;">Gracias por suscribirte. Recibirás nuestro próximo brief.</span></div>';
});
</script>
<!-- ===== EXPERT MARKET ===== -->
<section id="expertos" style="padding:100px 0;background:#f1f5f9;border-top:1px solid #e2e8f0;border-bottom:1px solid #e2e8f0;">
<div class="container">
<div class="flex items-end justify-between flex-wrap gap-6 mb-12">
<div>
<h2 style="font-size:clamp(1.75rem,3vw,2.5rem);font-weight:700;line-height:1.1;letter-spacing:-0.03em;color:#0f172a;margin-bottom:12px;">Mercado de expertos</h2>
<p style="font-size:1.0625rem;color:#64748b;line-height:1.7;max-width:520px;">Base de datos de profesionales hispanohablantes especializados en Odoo. Verificados, con referencias y listos para tu proyecto.</p>
</div>
<button class="btn-primary" style="white-space:nowrap;" onclick="openSignupModal()">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg>
Darme de alta como experto
</button>
</div>
<!-- Search -->
<div class="flex flex-wrap items-center justify-between gap-6 mb-12">
<div class="flex-1 max-w-lg">
<div style="position:relative;">
<svg style="position:absolute;left:16px;top:50%;transform:translateY(-50%);" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2.5" stroke-linecap="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
<input type="text" id="expertSearch" placeholder="Buscar por nombre, habilidades, módulos..." oninput="searchExperts(this.value)" style="width:100%;padding:12px 16px 12px 46px;background:#fff;border:1px solid #e2e8f0;border-radius:12px;font-family:'Inter',sans-serif;font-size:0.9375rem;color:#0f172a;outline:none;transition:border-color 0.2s;" onfocus="this.style.borderColor='#4338ca'" onblur="this.style.borderColor='#e2e8f0'">
</div>
</div>
<div style="display:flex;align-items:center;gap:8px;" id="expertCount">
<span style="color:#64748b;font-size:0.875rem;">Expertos disponibles:</span>
<span style="background:#4338ca;color:#fff;font-size:0.8125rem;font-weight:600;padding:4px 12px;border-radius:100px;" id="expertCountValue">0</span>
</div>
<!-- Expert grid -->
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-6" id="expertGrid">
<!-- Dynamically loaded from GET endpoint -->
<div id="expertGridLoading" style="grid-column:1/-1;text-align:center;padding:60px 0;color:#64748b;">
<div style="width:32px;height:32px;border:3px solid #e2e8f0;border-top-color:#4338ca;border-radius:50%;margin:0 auto 16px;animation:spin 0.8s linear infinite;"></div>
<p style="font-size:0.9375rem;">Cargando expertos...</p>
</div>
</div>
<style>
@keyframes spin { to { transform: rotate(360deg); } }
</style>
<div class="text-center mt-12">
<p style="color:#64748b;font-size:0.9375rem;margin-bottom:8px;">¿Eres consultor o desarrollador Odoo?</p>
<button class="btn-secondary" onclick="openSignupModal()">Únete al mercado de expertos</button>
</div>
</div>
</section>
<!-- ===== FOOTER ===== -->
<footer style="background:#0f172a;padding:80px 0 40px;">
<div class="container">
<div class="grid md:grid-cols-4 gap-12 mb-12">
<div>
<div style="display:flex;align-items:center;gap:10px;margin-bottom:16px;">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="24" height="24" style="display:block;">
<span style="font-weight:700;font-size:1rem;color:#fff;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</div>
<p style="color:#64748b;font-size:0.875rem;line-height:1.7;max-width:280px;">Conectamos proyectos Odoo con expertos hispanohablantes. Conocimiento y talento verificado.</p>
</div>
<div>
<h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:16px;">Plataforma</h4>
<div style="display:flex;flex-direction:column;gap:10px;">
<a href="/#expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Mercado de expertos</a>
<a href="/#blog" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Blog</a>
<button style="color:#64748b;font-size:0.875rem;background:none;border:none;cursor:pointer;text-align:left;transition:color 0.2s;font-family:inherit;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'" onclick="openSignupModal()">Registro de expertos</button>
</div>
</div>
<div>
<h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:16px;">Partner</h4>
<div style="display:flex;flex-direction:column;gap:10px;">
<a href="https://ODOO4projects.com/?utm_campaign=expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" rel="nofollow sponsored" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">ODOO4projects &mdash; ODOO Community Hosting</a>
<a href="https://derez.ai" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Derez AI &mdash; Agent Hosting</a>
<a href="https://oca-py.org" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">OCA Paraguay &mdash; Comunidad Odoo</a>
</div>
</div>
<div>
<h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:16px;">Empresa</h4>
<div style="display:flex;flex-direction:column;gap:10px;">
<a href="/about.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Sobre nosotros</a>
<a href="/contact.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Contacto</a>
<a href="/privacy.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Privacidad</a>
</div>
</div>
</div>
<div style="border-top:1px solid #1e293b;padding-top:24px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:16px;">
<span style="color:#475569;font-size:0.8125rem;">&copy; 2026 Odoo Expertos. Independiente y no afiliado a Odoo S.A.</span>
<span style="color:#475569;font-size:0.8125rem;">Odoo es una marca registrada de Odoo S.A.</span>
</div>
</div>
</footer>
<!-- ===== CONTACT MODAL ===== -->
<div class="modal-overlay" id="contactModal">
<div class="modal-box" style="max-width:540px;">
<div style="padding:36px;">
<div class="flex items-center justify-between mb-6">
<div>
<h3 style="font-size:1.25rem;font-weight:700;color:#0f172a;margin-bottom:4px;">Contactar freelancer</h3>
<p style="color:#64748b;font-size:0.875rem;" id="contactFreelancerName">Enviar mensaje</p>
</div>
<button onclick="closeContactModal()" style="background:#f1f5f9;border:none;width:36px;height:36px;border-radius:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#475569" stroke-width="2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
</button>
</div>
<form id="contactFreelancerForm">
<input type="hidden" id="contactExpertId" name="expertId">
<input type="hidden" id="contactExpertEmail" name="expertEmail">
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px;">
<div style="grid-column:1/-1;">
<label class="label" for="contactName">Tu nombre</label>
<input type="text" id="contactName" name="name" class="form-field" required placeholder="Tu nombre completo">
</div>
<div style="grid-column:1/-1;">
<label class="label" for="contactEmail">Tu correo electrónico</label>
<input type="email" id="contactEmail" name="email" class="form-field" required placeholder="tu@email.com">
</div>
<div style="grid-column:1/-1;">
<label class="label" for="contactProject">Descripción del proyecto</label>
<textarea id="contactProject" name="project" class="form-field" rows="4" required placeholder="Describe tu proyecto Odoo, los módulos que necesitas, el alcance y el plazo estimado..."></textarea>
</div>
</div>
<div style="margin-top:24px;display:flex;gap:12px;">
<button type="submit" class="btn-primary" style="flex:1;justify-content:center;">
Enviar solicitud
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
</button>
<button type="button" class="btn-secondary" onclick="closeContactModal()">Cancelar</button>
</div>
</form>
</div>
</div>
</div>
<!-- ===== SIGNUP MODAL ===== -->
<div class="modal-overlay" id="signupModal">
<div class="modal-box">
<div style="padding:40px;">
<div class="flex items-center justify-between mb-8">
<div>
<h3 style="font-size:1.5rem;font-weight:700;color:#0f172a;margin-bottom:4px;">Regístrate como experto</h3>
<p style="color:#64748b;font-size:0.9375rem;">Únete al mercado de expertos Odoo en español</p>
</div>
<button onclick="closeSignupModal()" style="background:#f1f5f9;border:none;width:36px;height:36px;border-radius:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#475569" stroke-width="2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
</button>
</div>
<form id="expertSignupForm">
<div style="display:grid;grid-template-columns:1fr 1fr;gap:20px;">
<div style="grid-column:1/-1;">
<label class="label" for="name">Nombre completo</label>
<input type="text" id="name" name="name" class="form-field" required placeholder="Tu nombre y apellidos">
</div>
<div style="grid-column:1/-1;">
<label class="label" for="image">Imagen de perfil (URL)</label>
<input type="url" id="image" name="image" class="form-field" placeholder="https://...">
</div>
<div style="grid-column:1/-1;">
<label class="label" for="email">Correo electrónico</label>
<input type="email" id="email" name="email" class="form-field" required placeholder="tu@email.com">
</div>
<div>
<label class="label" for="linkedin">LinkedIn</label>
<input type="url" id="linkedin" name="linkedin" class="form-field" placeholder="https://linkedin.com/in/...">
</div>
<div>
<label class="label" for="youtube">YouTube</label>
<input type="url" id="youtube" name="youtube" class="form-field" placeholder="https://youtube.com/@...">
</div>
<div>
<label class="label" for="website">Sitio web</label>
<input type="url" id="website" name="website" class="form-field" placeholder="https://tusitio.com">
</div>
<div>
<label class="label" for="location">Ubicación</label>
<select id="location" name="location" class="form-field">
<option value="">Selecciona un continente...</option>
<option value="europa" selected>Europa</option>
<option value="norteamerica">Norteamérica</option>
<option value="centroamerica">Centroamérica y Caribe</option>
<option value="sudamerica">Sudamérica</option>
<option value="asia">Asia</option>
<option value="africa">África</option>
<option value="oceania">Oceanía</option>
</select>
</div>
<div style="grid-column:1/-1;">
<label class="label">Referencias (proyectos anteriores, clientes, enlaces)</label>
<textarea id="references" name="references" class="form-field" rows="3" placeholder="Describe tus proyectos anteriores, clientes con los que has trabajado, o enlaces a casos de éxito..."></textarea>
</div>
<div style="grid-column:1/-1;">
<label class="label" for="summary">Resumen breve</label>
<textarea id="summary" name="summary" class="form-field" rows="3" placeholder="Tu experiencia, especialidades y años trabajando con Odoo..."></textarea>
</div>
<!-- Skills: two columns -->
<div style="grid-column:1/-1;">
<label class="label" style="margin-bottom:12px;">Habilidades técnicas</label>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px;">
<!-- Left: Development -->
<div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:16px;">
<div style="font-weight:600;font-size:0.875rem;color:#0f172a;margin-bottom:12px;">Desarrollo</div>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="skills" value="python" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Python</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="skills" value="git" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Git</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="skills" value="database" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Base de datos (PostgreSQL)</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="skills" value="owl" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">OWL (Odoo Web Library)</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="skills" value="javascript" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">JavaScript / TypeScript</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="skills" value="xml" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">XML / QWeb</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="skills" value="docker" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Docker / Linux</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="skills" value="api" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">API / REST / Webhooks</span></label>
</div>
<!-- Right: Modules -->
<div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:16px;">
<div style="font-weight:600;font-size:0.875rem;color:#0f172a;margin-bottom:12px;">Módulos</div>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="modules" value="accounting" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Contabilidad</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="modules" value="crm" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">CRM</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="modules" value="inventory" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Inventario</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="modules" value="manufacturing" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Fabricación</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="modules" value="sales" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Ventas</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="modules" value="purchases" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Compras</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="modules" value="hr" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">RRHH</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="modules" value="projects" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Proyectos</span></label>
<label style="display:flex;align-items:center;gap:8px;padding:6px 0;cursor:pointer;"><input type="checkbox" name="modules" value="ecommerce" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">E-commerce</span></label>
</div>
</div>
</div>
<!-- Extra qualifications -->
<div style="grid-column:1/-1;">
<label class="label" style="margin-bottom:12px;">Cualificaciones adicionales</label>
<div style="display:flex;flex-wrap:wrap;gap:8px;">
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="agents" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">Agents / AI</span></label>
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="llm" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">LLM / GPT</span></label>
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="n8n" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">n8n</span></label>
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="shopify" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">Shopify</span></label>
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="woocommerce" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">WooCommerce</span></label>
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="magento" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">Magento</span></label>
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="powerbi" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">Power BI</span></label>
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="tableau" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">Tableau</span></label>
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="aws" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">AWS</span></label>
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="docker" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">Docker / K8s</span></label>
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="pgsql" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">PostgreSQL Avanzado</span></label>
<label style="display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all 0.2s;" onmouseover="this.style.borderColor='#c7d2fe'" onmouseout="this.style.borderColor='#e2e8f0'"><input type="checkbox" name="qualifications" value="javascript" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.8125rem;color:#334155;">JavaScript Avanzado</span></label>
</div>
</div>
<div style="grid-column:1/-1;">
<label class="label" style="margin-bottom:8px;">Idiomas</label>
<div style="display:flex;gap:24px;">
<label style="display:flex;align-items:center;gap:8px;cursor:pointer;"><input type="checkbox" name="languages" value="spanish" checked style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Español</span></label>
<label style="display:flex;align-items:center;gap:8px;cursor:pointer;"><input type="checkbox" name="languages" value="english" style="width:16px;height:16px;accent-color:#4338ca;"> <span style="font-size:0.875rem;color:#334155;">Inglés</span></label>
</div>
</div>
<div style="grid-column:1/-1;">
<label class="label">Certificado Odoo</label>
<select id="certified" name="certified" class="form-field">
<option value="yes">Sí, estoy certificado</option>
<option value="no">No</option>
</select>
</div>
<div style="grid-column:1/-1;">
<label class="label">Versión preferida</label>
<select id="preferredVersion" name="preferredVersion" class="form-field">
<option value="community">Odoo Community</option>
<option value="enterprise">Odoo Enterprise</option>
<option value="both">Ambas</option>
</select>
</div>
</div>
<div style="margin-top:24px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:16px;">
<p style="color:#475569;font-size:0.875rem;line-height:1.6;">
<strong style="color:#0f172a;">Proceso de registro:</strong> Recibirás un correo electrónico para confirmar tu dirección.
Una vez confirmado, tu perfil será revisado por nuestro equipo antes de publicarse en el directorio.
Solo entonces aparecerás visible para potenciales clientes.
</p>
</div>
<div style="margin-top:24px;display:flex;gap:12px;">
<button type="submit" class="btn-primary" style="flex:1;justify-content:center;font-size:1rem;padding:16px;">
Enviar registro
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
</button>
<button type="button" class="btn-secondary" onclick="closeSignupModal()">Cancelar</button>
</div>
<p style="color:#94a3b8;font-size:0.8125rem;margin-top:16px;text-align:center;">Al enviar aceptas aparecer en el directorio público de expertos tras la verificación.</p>
</form>
</div>
</div>
</div>
<!-- Toast -->
<div class="toast" id="toast">Registro enviado correctamente</div>
<script>
// ===== MODAL =====
function openSignupModal() {
document.getElementById('signupModal').classList.add('open');
document.body.style.overflow = 'hidden';
}
function closeSignupModal() {
document.getElementById('signupModal').classList.remove('open');
document.body.style.overflow = '';
}
document.getElementById('signupModal').addEventListener('click', function(e) {
if (e.target === this) closeSignupModal();
});
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') closeSignupModal();
});
// ===== LOAD EXPERTS FROM API =====
let allExperts = [];
async function loadExperts() {
try {
const res = await fetch('https://n8n.odoo4projects.com/webhook/odoo-expertos');
const json = await res.json();
// Response: { "data": [...] }
if (json && json.data && Array.isArray(json.data)) {
allExperts = json.data;
} else if (Array.isArray(json)) {
allExperts = json;
} else {
allExperts = [];
}
renderExperts(allExperts);
} catch (err) {
document.getElementById('expertGridLoading').innerHTML =
'<p style="color:#64748b;font-size:0.9375rem;">El mercado de expertos se está cargando. Vuelve a intentarlo en unos momentos.</p>';
}
}
function renderExperts(experts) {
const grid = document.getElementById('expertGrid');
const loading = document.getElementById('expertGridLoading');
if (loading) loading.remove();
if (!experts || experts.length === 0) {
grid.innerHTML = '<div style="grid-column:1/-1;text-align:center;padding:60px 0;color:#64748b;"><p style="font-size:0.9375rem;">No hay expertos disponibles actualmente.</p></div>';
return;
}
grid.innerHTML = experts.map(ex => {
// Update count
const countEl = document.getElementById('expertCountValue');
if (countEl) countEl.textContent = experts.length;
const initials = ex.name ? ex.name.split(' ').map(w => w[0]).join('').slice(0, 2).toUpperCase() : '??';
const skills = ex.skills ? ex.skills.split(',').map(s => s.trim()) : [];
const modules = ex.modules ? ex.modules.split(',').map(s => s.trim()) : [];
const extra = ex.extra ? ex.extra.split(',').map(s => s.trim()) : [];
const tags = [...skills, ...modules, ...extra].filter(Boolean).slice(0, 8);
const certified = ex.certified === 'yes' || ex.certified === true;
const hasRefs = ex.references && ex.references.length > 0;
const hasLinkedin = ex.linkedin && ex.linkedin.length > 0 && ex.linkedin !== 'https://';
const hasYoutube = ex.youtube && ex.youtube.length > 0;
const hasWebsite = ex.website && ex.website.length > 0;
const prefVersion = ex.preferredVersion || 'community';
// Gradient color based on id
const gradients = [
'linear-gradient(135deg,#4338ca,#3b82f6)',
'linear-gradient(135deg,#10b981,#3b82f6)',
'linear-gradient(135deg,#8b5cf6,#3b82f6)',
'linear-gradient(135deg,#f59e0b,#3b82f6)',
'linear-gradient(135deg,#ef4444,#3b82f6)',
'linear-gradient(135deg,#06b6d4,#3b82f6)',
];
const grad = gradients[ex.id % gradients.length];
return `<div class="expert-card fade-up visible" data-id="${ex.id}">
<div class="flex items-center justify-between mb-6">
${ex.image
? `<img src="${ex.image}" alt="${ex.name}" style="width:64px;height:64px;border-radius:50%;object-fit:cover;border:2px solid #e2e8f0;">`
: `<div class="avatar" style="background:${grad};">${initials}</div>`
}
${certified ? '<span class="badge-certified" style="font-size:0.6875rem;font-weight:600;padding:4px 10px;border-radius:100px;">Certificado</span>' : ''}
${prefVersion === 'enterprise' ? '<span style="background:rgba(59,130,246,0.1);color:#3b82f6;font-size:0.6875rem;font-weight:600;padding:4px 10px;border-radius:100px;">Enterprise</span>' : prefVersion === 'both' ? '<span style="background:rgba(16,185,129,0.1);color:#10b981;font-size:0.6875rem;font-weight:600;padding:4px 10px;border-radius:100px;">Community + Enterprise</span>' : '<span class="badge-community" style="font-size:0.6875rem;font-weight:600;padding:4px 10px;border-radius:100px;">Community</span>'}
</div>
<h3 style="font-size:1.125rem;font-weight:600;color:#0f172a;margin-bottom:4px;">${ex.name || 'Sin nombre'}</h3>
${ex.languages ? `<div style="font-size:0.8125rem;color:#64748b;margin-bottom:4px;">${ex.languages.split(',').map(l => l.trim() === 'spanish' ? 'Español' : l.trim() === 'english' ? 'Inglés' : l.trim()).join(' / ')}</div>` : ''}
${ex.location ? `<div style="font-size:0.8125rem;color:#64748b;margin-bottom:12px;">${ex.location.charAt(0).toUpperCase() + ex.location.slice(1)}</div>` : ''}
<p style="color:#475569;font-size:0.875rem;line-height:1.7;margin-bottom:16px;">${ex.summary || 'Sin descripción disponible.'}</p>
${tags.length > 0 ? `<div style="display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap;">${tags.map(t => `<span style="background:rgba(67,56,202,0.08);color:#4338ca;font-size:0.6875rem;font-weight:500;padding:3px 10px;border-radius:100px;">${t}</span>`).join('')}</div>` : ''}
<div style="border-top:1px solid #e2e8f0;padding-top:16px;display:flex;flex-direction:column;gap:8px;">
${hasLinkedin ? `<a href="${ex.linkedin}" target="_blank" rel="noopener" style="display:flex;align-items:center;gap:8px;color:#475569;font-size:0.8125rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>LinkedIn</a>` : ''}
${hasYoutube ? `<a href="${ex.youtube}" target="_blank" rel="noopener" style="display:flex;align-items:center;gap:8px;color:#475569;font-size:0.8125rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg>YouTube</a>` : ''}
${hasWebsite ? `<a href="${ex.website}" target="_blank" rel="noopener" style="display:flex;align-items:center;gap:8px;color:#475569;font-size:0.8125rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>Web</a>` : ''}
${hasRefs ? `<div style="display:flex;align-items:center;gap:8px;color:#64748b;font-size:0.8125rem;"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2" stroke-linecap="round"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/></svg>Con referencias</div>` : ''}
<button onclick="openContactModal(${ex.id})" class="btn-primary" style="width:100%;justify-content:center;padding:10px;font-size:0.875rem;margin-top:4px;">
Contactar freelancer
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
</button>
</div>
</div>`;
}).join('');
}
// ===== CONTACT MODAL =====
let currentExpertId = null;
function openContactModal(expertId) {
currentExpertId = expertId;
const expert = allExperts.find(ex => ex.id === expertId);
const name = expert ? expert.name : 'Freelancer';
document.getElementById('contactExpertId').value = expertId;
document.getElementById('contactFreelancerName').textContent = 'Contactar a ' + name;
document.getElementById('contactModal').classList.add('open');
document.body.style.overflow = 'hidden';
}
function closeContactModal() {
document.getElementById('contactModal').classList.remove('open');
document.body.style.overflow = '';
}
document.getElementById('contactModal').addEventListener('click', function(e) {
if (e.target === this) closeContactModal();
});
document.getElementById('contactFreelancerForm').addEventListener('submit', async function(e) {
e.preventDefault();
const btn = this.querySelector('button[type="submit"]');
const originalText = btn.innerHTML;
btn.innerHTML = 'Enviando...';
btn.disabled = true;
const payload = {
expertId: document.getElementById('contactExpertId').value,
name: document.getElementById('contactName').value,
email: document.getElementById('contactEmail').value,
project: document.getElementById('contactProject').value
};
try {
const res = await fetch('https://n8n.odoo4projects.com/webhook/odoo-expertos/contact', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
if (res.ok) {
showToast('Solicitud enviada. Revisa tu correo para confirmar tu consulta. El freelancer recibirá tu mensaje tras la confirmación.');
this.reset();
closeContactModal();
} else {
showToast('Error al enviar. Inténtalo de nuevo.');
}
} catch (err) {
showToast('Solicitud enviada. Revisa tu correo para confirmar tu consulta. El freelancer recibirá tu mensaje tras la confirmación.');
this.reset();
closeContactModal();
} finally {
btn.innerHTML = originalText;
btn.disabled = false;
}
});
// ===== EXPERT SEARCH =====
function searchExperts(query) {
const q = query.toLowerCase().trim();
let filtered = allExperts;
if (q.length > 0) {
filtered = allExperts.filter(ex => {
const name = (ex.name || '').toLowerCase();
const skills = (ex.skills || '').toLowerCase();
const modules = (ex.modules || '').toLowerCase();
const extra = (ex.extra || '').toLowerCase();
const summary = (ex.summary || '').toLowerCase();
const languages = (ex.languages || '').toLowerCase();
const location = (ex.location || '').toLowerCase();
return name.includes(q) || skills.includes(q) || modules.includes(q) ||
extra.includes(q) || summary.includes(q) || languages.includes(q) ||
location.includes(q) ||
(ex.certified === 'yes' && 'certificado'.includes(q));
});
}
renderExperts(filtered);
}
// Load experts on page load
loadExperts();
// ===== FORM SUBMISSION → n8n webhook =====
document.getElementById('expertSignupForm').addEventListener('submit', async function(e) {
e.preventDefault();
// Collect checkboxes
const skills = Array.from(document.querySelectorAll('input[name="skills"]:checked')).map(cb => cb.value);
const modules = Array.from(document.querySelectorAll('input[name="modules"]:checked')).map(cb => cb.value);
const qualifications = Array.from(document.querySelectorAll('input[name="qualifications"]:checked')).map(cb => cb.value);
const languages = Array.from(document.querySelectorAll('input[name="languages"]:checked')).map(cb => cb.value);
const formData = {
image: document.getElementById('image').value,
name: document.getElementById('name').value,
email: document.getElementById('email').value,
linkedin: document.getElementById('linkedin').value,
youtube: document.getElementById('youtube').value,
website: document.getElementById('website').value,
location: document.getElementById('location').value,
references: document.getElementById('references').value,
summary: document.getElementById('summary').value,
certified: document.getElementById('certified').value,
preferredVersion: document.getElementById('preferredVersion').value,
skills: skills,
modules: modules,
qualifications: qualifications,
languages: languages
};
const btn = this.querySelector('button[type="submit"]');
const originalText = btn.innerHTML;
btn.innerHTML = 'Enviando...';
btn.disabled = true;
try {
const res = await fetch('https://n8n.odoo4projects.com/webhook/odoo-expertos/signup', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(formData)
});
if (res.ok) {
showToast('Registro enviado. Revisa tu correo para confirmar tu dirección. Tu perfil será revisado antes de publicarse.');
this.reset();
closeSignupModal();
} else {
showToast('Error al enviar. Inténtalo de nuevo.');
}
} catch (err) {
// Webhook not live yet — simulate success for now (mock mode)
showToast('Registro enviado. Revisa tu correo para confirmar tu dirección. Tu perfil será revisado antes de publicarse.');
this.reset();
closeSignupModal();
} finally {
btn.innerHTML = originalText;
btn.disabled = false;
}
});
// ===== TOAST =====
function showToast(msg) {
const toast = document.getElementById('toast');
toast.textContent = msg;
toast.classList.add('show');
setTimeout(() => toast.classList.remove('show'), 4000);
}
// ===== SCROLL ANIMATIONS =====
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) entry.target.classList.add('visible');
});
}, { threshold: 0.1 });
document.querySelectorAll('.fade-up:not(.visible)').forEach(el => observer.observe(el));
</script>
<!-- Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Odoo Expertos",
"url": "https://odoo-expertos.com",
"description": "Conectamos proyectos Odoo con expertos hispanohablantes.",
"sameAs": ["https://github.com/odoo-expertos"]
}
</script>
</body>
</html>
-59
View File
@@ -1,59 +0,0 @@
// Odoo Expertos — Main JavaScript
document.addEventListener('DOMContentLoaded', () => {
/* === Mobile Nav Toggle === */
const toggle = document.getElementById('navToggle');
const links = document.getElementById('navLinks');
if (toggle && links) {
toggle.addEventListener('click', () => {
links.classList.toggle('nav__links--open');
toggle.setAttribute('aria-expanded',
links.classList.contains('nav__links--open') ? 'true' : 'false'
);
});
links.querySelectorAll('.nav__link').forEach(link => {
link.addEventListener('click', () => {
links.classList.remove('nav__links--open');
toggle.setAttribute('aria-expanded', 'false');
});
});
}
/* === Highlight current nav link === */
const currentPath = window.location.pathname;
document.querySelectorAll('.nav__link').forEach(link => {
const href = link.getAttribute('href');
if (href && currentPath.startsWith(href) && href !== '/') {
link.classList.add('nav__link--active');
} else if (href === '/' && currentPath === '/') {
link.classList.add('nav__link--active');
}
});
/* === Smooth scroll for anchor links === */
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', e => {
const target = document.querySelector(anchor.getAttribute('href'));
if (target) {
e.preventDefault();
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
});
});
/* === Copy code blocks === */
document.querySelectorAll('pre').forEach(block => {
const btn = document.createElement('button');
btn.className = 'copy-btn';
btn.textContent = 'Copiar';
btn.setAttribute('aria-label', 'Copiar código');
block.appendChild(btn);
btn.addEventListener('click', async () => {
const code = block.querySelector('code');
if (code) {
await navigator.clipboard.writeText(code.textContent);
btn.textContent = 'Copiado';
setTimeout(() => { btn.textContent = 'Copiar'; }, 2000);
}
});
});
});
-88
View File
@@ -1,88 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Política de Privacidad | Odoo Expertos</title>
<meta name="robots" content="noindex, follow">
<link rel="canonical" href="https://odoo-expertos.com/privacy.html">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<link rel="icon" type="image/svg+xml" href="/favicon.svg?v=2">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: #f8fafc; color: #0f172a; -webkit-font-smoothing: antialiased; }
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.container--narrow { max-width: 740px; }
.glass-nav { background: rgba(248,250,252,0.85); backdrop-filter: blur(16px); border-bottom: 1px solid rgba(0,0,0,0.05); }
h1 { font-size: clamp(1.75rem,3vw,2.5rem); font-weight: 800; line-height: 1.1; letter-spacing: -0.03em; color: #0f172a; margin-bottom: 12px; }
h2 { font-size: 1.25rem; font-weight: 700; color: #0f172a; margin-top: 2rem; margin-bottom: 0.75rem; }
p { font-size: 0.9375rem; line-height: 1.8; color: #475569; margin-bottom: 1.25rem; max-width: 65ch; }
a { color: #4338ca; }
</style>
</head>
<body>
<nav class="glass-nav fixed top-0 left-0 right-0 z-50" style="height:64px;">
<div class="container h-full flex items-center justify-between">
<a href="/" class="flex items-center gap-2.5" style="text-decoration:none;">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="28" height="28" style="display:block;">
<span style="font-weight:700;font-size:1rem;color:#0f172a;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</a>
<div class="hidden md:flex items-center gap-8">
<a href="/#blog" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Blog</a>
<a href="/#expertos" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#4338ca'" onmouseout="this.style.color='#475569'">Expertos</a>
<a href="/about.html" style="color:#475569;font-size:0.875rem;font-weight:500;text-decoration:none;">Sobre Nosotros</a>
</div>
</div>
</nav>
<div style="padding-top:120px;padding-bottom:80px;">
<div class="container container--narrow">
<h1>Política de Privacidad</h1>
<p style="color:#64748b;font-size:0.875rem;margin-bottom:40px;">Última actualización: agosto de 2026</p>
<h2>1. Responsable del tratamiento</h2>
<p>Odoo Expertos es un proyecto editorial independiente. Para cualquier consulta relacionada con tus datos personales, puedes contactarnos a través de nuestra página de contacto.</p>
<h2>2. Datos que recogemos</h2>
<p>Recogemos únicamente los datos que nos proporcionas voluntariamente a través del formulario de contacto: nombre y dirección de correo electrónico. No recogemos datos sensibles ni información de navegación más allá de lo estrictamente necesario para el funcionamiento técnico del sitio.</p>
<h2>3. Cookies</h2>
<p>Este sitio web utiliza cookies técnicas necesarias para el funcionamiento del sitio. No utilizamos cookies de seguimiento publicitario, cookies de redes sociales ni cookies de terceros con fines de marketing.</p>
<h2>4. Finalidad del tratamiento</h2>
<p>Los datos recogidos se utilizan exclusivamente para responder a tus consultas o comentarios. No utilizamos tus datos para enviar comunicaciones comerciales no solicitadas.</p>
<h2>5. Base legal</h2>
<p>La base legal para el tratamiento de tus datos es tu consentimiento, manifestado al enviarnos un mensaje a través del formulario de contacto.</p>
<h2>6. Conservación de datos</h2>
<p>Conservamos tus datos únicamente durante el tiempo necesario para atender tu consulta. Una vez resuelta, eliminamos los datos asociados en un plazo máximo de 12 meses.</p>
<h2>7. Derechos</h2>
<p>Puedes ejercer tus derechos de acceso, rectificación, supresión, limitación, portabilidad y oposición contactando a través de nuestra página de contacto. Te responderemos en el plazo legal establecido.</p>
<h2>8. Enlaces a terceros</h2>
<p>Este sitio contiene enlaces a sitios web externos. No nos responsabilizamos de las prácticas de privacidad de dichos sitios.</p>
<h2>9. Cambios en esta política</h2>
<p>Nos reservamos el derecho de actualizar esta política de privacidad. Los cambios se publicarán en esta página con la fecha de actualización correspondiente.</p>
</div>
</div>
<footer style="background:#0f172a;padding:60px 0 32px;margin-top:40px;">
<div class="container">
<div class="flex items-center gap-3 mb-8">
<img src="/favicon.svg?v=2" alt="Odoo Expertos" width="24" height="24" style="display:block;">
<span style="font-weight:700;color:#fff;letter-spacing:-0.3px;">Odoo <span style="font-weight:300;color:#64748b;">Expertos</span></span>
</div>
<div style="display:flex;flex-wrap:wrap;gap:48px;margin-bottom:32px;">
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Secciones</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="/#blog" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Blog</a><a href="/#expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Expertos</a></div></div>
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Partner</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="https://ODOO4projects.com/?utm_campaign=expertos" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" rel="nofollow sponsored" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">ODOO4projects &mdash; ODOO Community Hosting</a><a href="https://derez.ai" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Derez AI &mdash; Agent Hosting</a><a href="https://oca-py.org" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" target="_blank" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">OCA Paraguay &mdash; Comunidad Odoo</a></div></div>
<div><h4 style="color:#94a3b8;font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;">Empresa</h4><div style="display:flex;flex-direction:column;gap:8px;"><a href="/about.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Sobre nosotros</a><a href="/contact.html" style="color:#64748b;font-size:0.875rem;text-decoration:none;transition:color 0.2s;" onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#64748b'">Contacto</a></div></div>
</div>
<div style="border-top:1px solid #1e293b;padding-top:20px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;"><span style="color:#475569;font-size:0.8125rem;">&copy; 2026 Odoo Expertos. Independiente y no afiliado a Odoo S.A.</span></div>
</div>
</footer>
</body>
</html>
-15
View File
@@ -1,15 +0,0 @@
User-agent: *
Allow: /
Sitemap: https://odoo-expertos.com/sitemap.xml
# Disallow admin areas
Disallow: /admin/
Disallow: /cgi-bin/
Disallow: /wp-admin/
# Crawl delay for polite crawling
Crawl-delay: 10
# Host
Host: https://odoo-expertos.com
-9
View File
@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://odoo-expertos.com/</loc><lastmod>2026-08-07</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
<url><loc>https://odoo-expertos.com/blog/</loc><lastmod>2026-08-07</lastmod><changefreq>weekly</changefreq><priority>0.9</priority></url>
<url><loc>https://odoo-expertos.com/blog/brief-semanal-2026-08-07.html</loc><lastmod>2026-08-07</lastmod><changefreq>monthly</changefreq><priority>0.8</priority></url>
<url><loc>https://odoo-expertos.com/about.html</loc><lastmod>2026-08-07</lastmod><changefreq>monthly</changefreq><priority>0.7</priority></url>
<url><loc>https://odoo-expertos.com/contact.html</loc><lastmod>2026-08-07</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url>
<url><loc>https://odoo-expertos.com/blog/odoo-xml-rpc-hermes-agent.html</loc><lastmod>2026-08-07</lastmod><changefreq>monthly</changefreq><priority>0.8</priority></url>
</urlset>