This commit is contained in:
Emmanuel Rojas committed 2026-08-09 23:41:06 -05:00
1 parent 4f0020bc10
commit 4606f06a7c
7 files changed
+210 -8

No files matched your search

+1
View File
@@ -0,0 +1 @@
/* /index.html 200
+2
View File
@@ -7,6 +7,7 @@ import { Home } from './pages/Home';
import { SobreNosotros } from './pages/SobreNosotros'; import { SobreNosotros } from './pages/SobreNosotros';
import { Productos } from './pages/Productos'; import { Productos } from './pages/Productos';
import { Blog } from './pages/Blog'; import { Blog } from './pages/Blog';
import { Privacidad } from './pages/Privacidad';
const CONTACT_EMAIL = '[email protected]'; const CONTACT_EMAIL = '[email protected]';
const openContact = () => { const openContact = () => {
@@ -29,6 +30,7 @@ export default function App() {
<Route path="/sobre-nosotros" element={<SobreNosotros />} /> <Route path="/sobre-nosotros" element={<SobreNosotros />} />
<Route path="/productos" element={<Productos />} /> <Route path="/productos" element={<Productos />} />
<Route path="/blog" element={<Blog />} /> <Route path="/blog" element={<Blog />} />
<Route path="/privacidad" element={<Privacidad />} />
</Routes> </Routes>
<Footer isNavyBg={isNavyBg} /> <Footer isNavyBg={isNavyBg} />
-3
View File
@@ -53,9 +53,6 @@ export const CtaBanner = ({ onOpenContact, isNavyBg }: CtaBannerProps) => {
> >
Hablemos de tu proyecto <ArrowRight size={16} /> Hablemos de tu proyecto <ArrowRight size={16} />
</Button> </Button>
<Button variant="secondary" href="mailto:[email protected]" isNavyBg={isNavyBg}>
contacto@rynext.com.mx
</Button>
</div> </div>
</motion.div> </motion.div>
</div> </div>
+2 -2
View File
@@ -3,8 +3,8 @@ import { motion, AnimatePresence } from 'framer-motion';
import type { ThemeProps } from '../types'; import type { ThemeProps } from '../types';
import { type Dispatch, type SetStateAction, useState, useEffect } from 'react'; import { type Dispatch, type SetStateAction, useState, useEffect } from 'react';
const WHATSAPP_NUMBER = '521XXXXXXXXXX'; // ← reemplaza con el número real const WHATSAPP_NUMBER = '529984814889';
const WHATSAPP_MSG = encodeURIComponent('¿En qué podemos ayudarte?'); const WHATSAPP_MSG = encodeURIComponent('¡Hola!');
interface FloatingButtonsProps extends ThemeProps { interface FloatingButtonsProps extends ThemeProps {
setIsNavyBg: Dispatch<SetStateAction<boolean>>; setIsNavyBg: Dispatch<SetStateAction<boolean>>;
+34 -3
View File
@@ -1,4 +1,5 @@
import { Mail, MapPin, MessageCircle } from 'lucide-react'; import { Mail, MapPin, MessageCircle } from 'lucide-react';
import { Link } from 'react-router';
import type { ThemeProps } from '../types'; import type { ThemeProps } from '../types';
const navLinks = [ const navLinks = [
@@ -56,6 +57,26 @@ export const Footer = ({ isNavyBg }: ThemeProps) => {
</p> </p>
{/* Social */} {/* Social */}
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<a
href="https://www.facebook.com/RynextTechnologies/"
target="_blank"
rel="noopener noreferrer"
aria-label="Rynext en Facebook"
className="flex h-9 w-9 items-center justify-center rounded transition-colors"
style={{ background: "rgba(255,255,255,0.07)", color: sub }}
onMouseEnter={(e) => {
(e.currentTarget as HTMLAnchorElement).style.background = "rgba(255,255,255,0.14)";
(e.currentTarget as HTMLAnchorElement).style.color = "#fff";
}}
onMouseLeave={(e) => {
(e.currentTarget as HTMLAnchorElement).style.background = "rgba(255,255,255,0.07)";
(e.currentTarget as HTMLAnchorElement).style.color = sub;
}}
>
<svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor">
<path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"/>
</svg>
</a>
<a <a
href="https://linkedin.com/company/rynext" href="https://linkedin.com/company/rynext"
target="_blank" target="_blank"
@@ -87,7 +108,7 @@ export const Footer = ({ isNavyBg }: ThemeProps) => {
</svg> </svg>
</a> </a>
<a <a
href={`https://wa.me/529981234567?text=${encodeURIComponent('¿En qué podemos ayudarte?')}`} href={`https://wa.me/529984814889?text=${encodeURIComponent('¿En qué podemos ayudarte?')}`}
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
aria-label="Rynext en WhatsApp" aria-label="Rynext en WhatsApp"
@@ -196,10 +217,20 @@ export const Footer = ({ isNavyBg }: ThemeProps) => {
className="mt-16 border-t pt-8 text-center" className="mt-16 border-t pt-8 text-center"
style={{ borderColor: border }} style={{ borderColor: border }}
> >
<div className="flex flex-col items-center gap-2 sm:flex-row sm:justify-center sm:gap-4">
<p className="text-xs" style={{ color: "rgba(255,255,255,0.25)" }}> <p className="text-xs" style={{ color: "rgba(255,255,255,0.25)" }}>
© {new Date().getFullYear()} Rynext Technologies S.A.S. | Todos los © {new Date().getFullYear()} Rynext Technologies S.A.S. | Todos los derechos reservados.
derechos reservados.
</p> </p>
<Link
to="/privacidad"
className="text-xs transition-colors"
style={{ color: "rgba(255,255,255,0.25)", textDecoration: "none" }}
onMouseEnter={(e) => (e.currentTarget.style.color = "rgba(255,255,255,0.6)")}
onMouseLeave={(e) => (e.currentTarget.style.color = "rgba(255,255,255,0.25)")}
>
Aviso de Privacidad
</Link>
</div>
</div> </div>
</div> </div>
</footer> </footer>
+34
View File
@@ -151,6 +151,40 @@
animation: fadeIn 200ms ease; animation: fadeIn 200ms ease;
} }
/* Aviso de privacidad — contenido editorial */
.prose-rynext h2 {
font-family: var(--font-display);
font-size: 1.15rem;
font-weight: 800;
letter-spacing: -0.02em;
color: #0a0a0a;
margin-top: 2.5rem;
margin-bottom: 0.75rem;
}
.prose-rynext p,
.prose-rynext ul {
font-size: 0.95rem;
line-height: 1.75;
color: #4a4846;
margin-bottom: 1rem;
}
.prose-rynext ul {
padding-left: 1.25rem;
list-style: disc;
}
.prose-rynext li {
margin-bottom: 0.35rem;
}
.prose-rynext a {
color: #e50914;
text-decoration: underline;
text-underline-offset: 3px;
}
.prose-rynext strong {
color: #0a0a0a;
font-weight: 600;
}
/* Reduced motion */ /* Reduced motion */
@media (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {
*, *::before, *::after { *, *::before, *::after {
+137
View File
@@ -0,0 +1,137 @@
import { useEffect } from 'react';
export const Privacidad = () => {
useEffect(() => {
document.title = 'Aviso de Privacidad | Rynext Technologies';
}, []);
return (
<main id="main-content" style={{ background: '#ffffff', minHeight: '100vh' }}>
<section
style={{
paddingTop: '140px',
paddingBottom: '100px',
borderBottom: '1px solid #dddbd5',
}}
className="px-8 md:px-14"
>
<div className="mx-auto max-w-3xl">
<h1 className="text-headline mb-4" style={{ color: '#0a0a0a' }}>
Aviso de Privacidad Integral
</h1>
<p className="text-sm mb-16" style={{ color: '#aaa8a4' }}>
Última actualización: agosto de 2026
</p>
<div className="prose-rynext">
<h2>1. Responsable del tratamiento de datos personales</h2>
<p>
<strong>Rynext Technologies S.A.S. de C.V.</strong> (en adelante "Rynext"),
con domicilio en Cancún, Quintana Roo, México, es responsable del
tratamiento de sus datos personales conforme a lo establecido en la
Ley Federal de Protección de Datos Personales en Posesión de los
Particulares (LFPDPPP) y su Reglamento.
</p>
<p>
Para cualquier asunto relacionado con el presente Aviso de Privacidad
puede contactarnos en:{' '}
<a href="mailto:[email protected]">contacto@rynext.com.mx</a>
</p>
<h2>2. Datos personales que recabamos</h2>
<p>Rynext puede recabar las siguientes categorías de datos personales:</p>
<ul>
<li><strong>Datos de identificación:</strong> nombre completo, empresa o razón social.</li>
<li><strong>Datos de contacto:</strong> correo electrónico, número de teléfono.</li>
<li><strong>Datos de navegación:</strong> dirección IP, tipo de navegador, páginas visitadas y duración de la sesión (mediante cookies técnicas).</li>
</ul>
<p>
Rynext <strong>no recaba datos personales sensibles</strong> tales como origen racial,
estado de salud, creencias religiosas, datos biométricos ni información financiera
a través de este sitio web.
</p>
<h2>3. Finalidades del tratamiento</h2>
<p>Sus datos personales son utilizados para las siguientes <strong>finalidades primarias</strong>:</p>
<ul>
<li>Atender solicitudes de contacto, cotizaciones y propuestas comerciales.</li>
<li>Dar seguimiento a proyectos de desarrollo de software y consultoría.</li>
<li>Cumplir con obligaciones legales y contractuales.</li>
</ul>
<p>De manera secundaria, y solo con su consentimiento expreso, podemos utilizar sus datos para:</p>
<ul>
<li>Envío de comunicaciones sobre nuevos servicios, actualizaciones o contenido de interés.</li>
<li>Estadísticas internas y mejora de la experiencia en el sitio.</li>
</ul>
<p>
Si no desea que sus datos sean tratados para las finalidades secundarias, puede
manifestarlo en cualquier momento escribiéndonos a{' '}
<a href="mailto:[email protected]">contacto@rynext.com.mx</a>.
</p>
<h2>4. Transferencia de datos personales</h2>
<p>
Rynext no vende, renta ni comercializa sus datos personales a terceros.
Únicamente podremos transferirlos en los siguientes casos:
</p>
<ul>
<li>A proveedores de servicios tecnológicos que actúen como encargados bajo instrucción de Rynext y con las mismas obligaciones de confidencialidad.</li>
<li>Cuando sea requerido por autoridades competentes en cumplimiento de disposiciones legales.</li>
</ul>
<p>En ningún caso sus datos serán transferidos a terceros con fines distintos a los aquí establecidos sin su consentimiento previo.</p>
<h2>5. Derechos ARCO</h2>
<p>
Usted tiene derecho a <strong>Acceder, Rectificar, Cancelar u Oponerse</strong> (derechos ARCO)
al tratamiento de sus datos personales, así como a revocar el consentimiento
que haya otorgado para dicho tratamiento.
</p>
<p>Para ejercer sus derechos ARCO debe enviar una solicitud a:</p>
<p>
<strong>Correo:</strong>{' '}
<a href="mailto:[email protected]">contacto@rynext.com.mx</a><br />
<strong>Asunto:</strong> Ejercicio de Derechos ARCO
</p>
<p>Su solicitud deberá contener:</p>
<ul>
<li>Nombre completo y correo electrónico con el que se registró o contactó.</li>
<li>Descripción clara del derecho que desea ejercer y los datos a los que se refiere.</li>
<li>Cualquier documento que facilite la localización de sus datos.</li>
</ul>
<p>
Rynext responderá a su solicitud en un plazo máximo de <strong>20 días hábiles</strong>
a partir de su recepción.
</p>
<h2>6. Uso de cookies</h2>
<p>
Este sitio utiliza cookies técnicas estrictamente necesarias para su funcionamiento.
No utilizamos cookies de rastreo ni publicidad comportamental sin su consentimiento.
Puede configurar su navegador para bloquear o eliminar las cookies; sin embargo,
algunas funcionalidades del sitio podrían verse afectadas.
</p>
<h2>7. Cambios al aviso de privacidad</h2>
<p>
Rynext se reserva el derecho de modificar este Aviso de Privacidad en cualquier
momento para reflejar cambios legislativos, jurisprudenciales o en nuestras
prácticas de privacidad. Las modificaciones serán publicadas en esta página
con la fecha de actualización correspondiente. Se recomienda revisar periódicamente
este aviso.
</p>
<h2>8. Autoridad competente</h2>
<p>
Si considera que sus derechos han sido vulnerados, tiene derecho a acudir ante
el Instituto Nacional de Transparencia, Acceso a la Información y Protección
de Datos Personales (INAI) en{' '}
<a href="https://www.inai.org.mx" target="_blank" rel="noopener noreferrer">www.inai.org.mx</a>.
</p>
</div>
</div>
</section>
</main>
);
};