<!-- 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>
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.
- Abrir la web: bacorispain.com (se abre en otra pestaña)
- Abrir la web: huellasworld.org (se abre en otra pestaña)
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.
.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; }+}
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; }
-<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>
<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>
<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>
// 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
Hablemos- 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
- Más contratado
Negocio
La opción que elige la mayoría. Diseño propio y contenido serio.
2.900 €desde
Pedir presupuesto- 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
A medida
Producto, integraciones y requisitos que no caben en un CMS.
presupuesto personalizado
Hablemos- 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
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.
Sostener
Lo que evita que una web entregada se pudra sola en seis meses.
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.
Proceso
Cuatro pasos, sin sorpresas
01
Llamada y diagnóstico
Media hora para entender qué vendes, a quién y qué falla hoy. De ahí sale un alcance escrito.
02
Propuesta cerrada
Precio y plazo fijos antes de escribir una línea. Si el alcance cambia, se renegocia por escrito.
03
Diseño y construcción
Ves el avance en un enlace privado desde la primera semana. Dos rondas de cambios incluidas.
04
Entrega y medición
Publico, mido y te enseño a editarla. El informe de métricas es tuyo.

¿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