Dos huecos libres para el último trimestre

Webs que no estorban

Rápidas, medibles y construidas para vender. Sin plantillas.

Cada decisión —una fuente, una animación, una consulta— se justifica con un número.

0,8s
Carga media
100
Lighthouse

Prueba

Dos webs en producción. Ábrelas.

Y ésta. Las dos cifras del principio no hace falta que te las creas.Pásale PageSpeed a daroscode.es (se abre en otra pestaña)

Arreglos

007 ejemplos

Lo que cambia cuando reviso una web.

Siete ejemplos del tipo de cambio que sale de una auditoría. A la izquierda lo que suele haber; a la derecha lo que dejo. El código es de ejemplo: los problemas son los de siempre.

Elige un arreglo
Rendimiento3
Accesibilidad2
Seguridad2
Tema del editor
index.htmlcss/listado.csssrc/lib/listado.tspartials/menu.htmlcontacto.htmlwp-content/themes/casa/tarjeta.phpsrc/pages/api/contacto.ts
Antes y después de index.html
                     <!-- Portada: la imagen es lo primero que se pinta. --> <section class="hero grid gap-6 py-24">-  <img src="portada.jpg" class="w-full rounded-xl">+  <img src="portada.avif" class="w-full rounded-xl"+       width="1600" height="900" decoding="async"+       fetchpriority="high" alt="Cocina en Chamberí">   <h1 class="text-5xl font-semibold tracking-tight">     Reformas integrales en Madrid, sin sorpresas   </h1>   <p class="max-w-prose text-lg text-neutral-400">     Presupuesto cerrado en 48 horas laborables.   </p>   <a href="/contacto" class="btn">Pedir presupuesto</a> </section>
                  
Antes y después de css/listado.css
                     .listado { display: grid; gap: 1rem; } -/* Tres saltos, y ninguno sabe cuánto sitio hay. */+/* La tarjeta mide su hueco, no la ventana. */-.tarjeta { padding: 16px; font-size: 18px; }+.listado { container-type: inline-size; }-+-@media (max-width: 900px) {+.tarjeta {-  .tarjeta { padding: 12px; font-size: 16px; }+  padding: clamp(0.5rem, 2cqi, 1rem);-}+  font-size: clamp(0.875rem, 1.6cqi, 1.125rem);-+  border-radius: clamp(0.25rem, 1cqi, 0.75rem);-@media (max-width: 600px) {+}-  .tarjeta { padding: 8px; font-size: 14px; }+-}+@container (min-width: 30rem) {+  .tarjeta { grid-template-columns: 8rem 1fr; }+}
                  
Antes y después de src/lib/listado.ts
                     export async function cargarListado() {   const items = await db.producto.findMany({     where: { activo: true },+    // La categoría entra en la misma ida.+    include: { categoria: true },   }); -  // Una consulta, y luego otra por item.-  for (const item of items) {-    item.categoria = await db.categoria-      .findUnique({ id: item.categoriaId });-  }    return items; }
                  
Antes y después de partials/menu.html
                    -<div class="menu__abrir"+<button class="menu__abrir"-     onclick="abrirMenu()">+        type="button"+        aria-expanded="false"+        aria-controls="menu">+  <span class="sr-only">Abrir el menú</span>   <span></span>   <span></span>-</div>+</button>  <nav id="menu" class="menu">   <a href="/servicios">Servicios</a>   <a href="/proyectos">Proyectos</a>   <a href="/precios">Precios</a>   <a href="/contacto">Contacto</a> </nav>
                  
Antes y después de contacto.html
                     <form method="post" action="/contacto">   <label for="email">Correo</label>-  <input id="email" type="email"+  <input id="email" type="email"-         name="email">+         name="email"+         aria-invalid="true"+         aria-describedby="email-error"> -  <span class="error">+  <span class="error" id="email-error"+        role="alert">     Escribe un correo válido   </span>    <button type="submit">Enviar</button> </form>
                  
Antes y después de wp-content/themes/casa/tarjeta.php
                     <section class="listado"> <?php foreach ( $productos as $p ) : ?> <article class="tarjeta">-  <img src="<?php echo $p['imagen']; ?>" alt="">+  <img src="<?php echo esc_url( $p['imagen'] ); ?>"-  <h2><?php echo $p['nombre']; ?></h2>+       alt="<?php echo esc_attr( $p['nombre'] ); ?>">-  <p><?php echo $p['descripcion']; ?></p>+  <h2><?php echo esc_html( $p['nombre'] ); ?></h2>-  <a href="<?php echo $p['url']; ?>">+  <p><?php echo wp_kses_post( $p['descripcion'] ); ?></p>-    Ver ficha de <?php echo $p['nombre']; ?>+  <a href="<?php echo esc_url( $p['url'] ); ?>">-  </a>+    Ver ficha de <?php echo esc_html( $p['nombre'] ); ?>+  </a> </article> <?php endforeach; ?> </section>
                  
Antes y después de src/pages/api/contacto.ts
                     // El esquema estaba escrito y no lo miraba nadie. const Lead = z.object({   nombre: z.string().min(2).max(80),   email: z.email(),   mensaje: z.string().min(10).max(2000), });  export async function POST({ request }) {-  const datos = await request.json();+  const lead = Lead.safeParse(await request.json());-  await guardarLead(datos);+  if (!lead.success) {+    return new Response(null, { status: 422 });+  }+  await guardarLead(lead.data);   return new Response(null, { status: 204 }); }
                  

Construir

No tienes web, o la que hay se ha quedado sin arreglo posible.

  • Presencia

    Para empezar con una web sólida y rápida.

    1.400 €desde

    • WordPress con tema propio, sin maquetador
    • Accesibilidad WCAG 2.2 AA, obligatoria por ley
    • SEO técnico y alta en Search Console
    • Formulario de contacto y textos legales
    • Hasta 5 páginas · entrega en 3 semanas
    Hablemos
  • Más contratado

    Negocio

    La opción que elige la mayoría. Diseño propio y contenido serio.

    2.900 €desde

    • Diseño propio, dibujado para tu negocio
    • Accesibilidad WCAG 2.2 AA, obligatoria por ley
    • SEO técnico y analítica sin cookies
    • Blog y multiidioma
    • Dos rondas de cambios
    • Hasta 12 páginas · entrega en 5 semanas
    Pedir presupuesto
  • A medida

    Producto, integraciones y requisitos que no caben en un CMS.

    presupuesto personalizado

    • Astro, Next.js o React
    • Integraciones con ERP, CRM o API propias
    • Accesibilidad WCAG 2.2 AA, obligatoria por ley
    • Rendimiento garantizado por contrato
    • Entorno de pruebas y despliegue automático
    • Plazo según alcance
    Hablemos

Cómo las construyo: WordPress a medidaDesarrollo a código

Servicios

Arreglar

Ya tienes web y el problema es concreto: va lenta, no cumple la ley o no la encuentra nadie.

Accesibilidad

Tu web ya está obligada por ley

La Ley 11/2023 aplica desde junio de 2025 a quien vende servicios digitales, y las sanciones llegan a 250.000 €. Los especialistas cobran desde 1.500 € sólo por auditar cinco páginas. Aquí va incluido en todos los proyectos, y si tu web ya existe también la adecúo.

Ver cómo se resuelve

Proceso

Cuatro pasos, sin sorpresas

  1. 01

    Llamada y diagnóstico

    Media hora para entender qué vendes, a quién y qué falla hoy. De ahí sale un alcance escrito.

  2. 02

    Propuesta cerrada

    Precio y plazo fijos antes de escribir una línea. Si el alcance cambia, se renegocia por escrito.

  3. 03

    Diseño y construcción

    Ves el avance en un enlace privado desde la primera semana. Dos rondas de cambios incluidas.

  4. 04

    Entrega y medición

    Publico, mido y te enseño a editarla. El informe de métricas es tuyo.

Samuel Quintero
Quién está detrásSoy Samuel Quintero, desarrollador de software en Madrid. Esta web la escribo yo, y quien te responda el correo también.Sobre mí

¿Hablamos de tu proyecto?

Cuéntame qué necesitas y te doy una primera valoración en menos de 24 horas laborables.

Respuesta en 24 h laborables

O escríbeme por el formulario