








Bellum Property Management
Sitio institucional para una administradora de consorcios
Virginia, Estados Unidos
Ver sitio en vivo- Rol
- Frontend Engineer · Design System y SEO
- Tipo de trabajo
- Trabajo para cliente
- Industria
- Real estate • Administración de HOAs y condominios
- Duración
- 10 semanas
- Año
- 2026
Resumen
Bellum Property Management es el sitio institucional de una empresa que administra asociaciones de propietarios (HOAs) y condominios en Richmond y Northern Virginia. Le habla a un público concreto, los integrantes de las juntas directivas, y tiene un objetivo comercial claro: que una junta pida una propuesta de administración.
El usuario puede recorrer los servicios (administración financiera, administración integral, transición desde el desarrollador y consultoría), ver la cobertura de seguros con las aseguradoras asociadas y consultar el protocolo de emergencias 24/7 y una biblioteca de recursos para juntas. El centro del sitio es un cuestionario para clientes nuevos, con validación por campo, que pide los datos de la comunidad, la cantidad de unidades, el tipo de servicio y el rol en la junta. Desde el navbar se llega a los sistemas externos del cliente: el portal de residentes, los documentos de reventa y el sitio de gestión financiera de la misma empresa.
El proyecto arrancó de una situación poco común: no había código fuente, solo el bundle compilado en producción. El trabajo fue recuperarlo, migrarlo, auditarlo, rediseñarlo por completo y dejarlo indexable, sin cortar el sitio en vivo.
El desafío
El cliente había heredado un sitio hecho con Create React App del que solo existía el build: un bundle minificado y sus source maps, servidos tal cual desde la raíz del repositorio. Los estilos tenían defectos que no se veían a simple vista (variables CSS que no existían, reglas de CSS Modules que se filtraban y pisaban la tipografía de todo el sitio, un navbar con posiciones fijas que se desarmaba) y el SEO casi no existía: las seis rutas compartían el mismo title, la description era la que trae el framework por defecto, no había robots.txt, el sitemap devolvía el HTML de la app y cualquier URL inventada respondía 200.
La solución fue reconstruir el código desde los source maps y montarlo sobre Vite 5, para lo que primero hubo que pasar a imports ESM los require() propios de webpack, que dejaban la pantalla en blanco. Después vino una auditoría con arreglos puntuales y un rediseño completo sobre un design system propio con tokens de color, tipografía fluida con clamp(), espaciado y sombras. En SEO se sumaron metadatos por ruta con un componente propio sin dependencias, un sitemap y un robots.txt reales servidos como archivos estáticos antes del rewrite de la SPA, datos estructurados ProfessionalService y una página 404 con noindex que corta los soft 404.
Antes del rediseño se hizo una exploración de diseño con ocho direcciones distintas más dos variantes refinadas. Se eligió "Cornerstone", una estética editorial de estudio de agrimensura (serif Newsreader, monoespaciada IBM Plex Mono, paleta verde bosque y bronce), aplicada en todas las páginas.
Enlaces
Repositorio de GitHub
Privado — proyecto de cliente
Arquitectura del sistema
Una SPA en React servida como sitio estático. El contenido (navegación, contacto, hero, servicios, métricas, aliados) vive en módulos de datos separados de los componentes de presentación, así los textos y enlaces se editan sin tocar la UI, y las páginas se arman con secciones sobre una capa de UI compartida.
Arquitectura de la aplicación
- React Router con 6 rutas públicas más un catch-all 404, dentro de un layout compartido.
- Una capa ui/ con componentes base, primitivas de formulario y utilidades de animación.
- Contenido centralizado en módulos de datos del sitio, los servicios y los aliados.
- ScrollToTop y PageMeta como componentes sin render que reaccionan al cambio de ruta.
- Un skip link al contenido principal para navegar con teclado.
Funcionalidades del sitio
- Home con hero, diferenciales, métricas animadas, servicios, sección de sustentabilidad, mapa de cobertura, aliados y llamado a la acción.
- Cuestionario de nuevo cliente con validación por campo.
- Páginas de servicios, seguros, emergencias 24/7, recursos y contacto.
- Enlaces externos marcados al portal de residentes, a los documentos de reventa y al sitio financiero.
SEO
- Meta por ruta
- Canonical
- Open Graph
- JSON-LD
- Sitemap XML
- robots.txt
- 404 noindex
Accesibilidad
- ARIA en formularios
- Reduced motion
- Skip link
- SVG con title
- Foco gestionado
Infraestructura y deploy
Se publica como sitio estático en Render, con deploy automático en cada push a main. El dominio pasa por Cloudflare, y www redirige al dominio principal con un 301.
Deploy
- Build con npm install y npm run build, publicando dist/. Se corrigió una configuración que seguía sirviendo el bundle viejo desde la raíz del repo, por eso producción no reflejaba los cambios.
- Regla de rewrite /* → /index.html para el routing del lado del cliente.
- Archivos de SEO servidos como estáticos reales, antes del rewrite.
- Imágenes convertidas a WebP para bajar el peso de la página.
Construido con
JavaScript
React
React
Vite 5
CSS
Design tokens
Formspree
Google Fonts
GeoJSON → SVG
Schema.org JSON-LD
Render
Cloudflare
Un sitio recuperado, rediseñado e indexable, entregado sin interrumpir el sitio en vivo.
Entregado
- Código fuente recuperado y migrado de Create React App a Vite.
- Auditoría de CSS y layout con los arreglos aplicados.
- Exploración de diseño con 10 direcciones.
- El design system "Cornerstone": tokens, tipografía y componentes base.
- Rediseño completo de las 7 vistas (home, servicios, seguros, emergencias, recursos, contacto y 404), más el navbar, el menú móvil y el footer.
- Cuestionario de propuesta accesible integrado con Formspree.
- Paquete de SEO técnico: metadatos por ruta, sitemap, robots, JSON-LD y una 404 real.
- Mapa SVG de cobertura generado desde datos geográficos.
- Configuración de deploy en Render corregida.