delete
This commit is contained in:
@@ -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 — 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;">© 2026 Odoo Expertos.</span></div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -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
@@ -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
@@ -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 — 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 — 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 — 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;">© 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>
|
||||
@@ -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 |
@@ -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;">© 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>
|
||||
@@ -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>
|
||||
@@ -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>> ¿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 — ODOO Community Hosting</a><a href="https://derez.ai" style="color:#64748b;font-size:0.875rem;text-decoration:none;" target="_blank">Derez AI — Agent Hosting</a><a href="https://oca-py.org" style="color:#64748b;font-size:0.875rem;text-decoration:none;" target="_blank">OCA Paraguay — 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;">© 2026 Odoo Expertos. Independiente y no afiliado a Odoo S.A.</span></div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
-127
@@ -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 — 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 — 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 — 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;">© 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
File diff suppressed because it is too large
Load Diff
-11
@@ -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
@@ -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ño con novedades, guí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 — 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 — 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 — 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;">© 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
@@ -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);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -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 — 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 — 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 — 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;">© 2026 Odoo Expertos. Independiente y no afiliado a Odoo S.A.</span></div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
-15
@@ -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
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user