<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Desarrollador freelance de .NET, Angular, Python y Flutter en Flandes Occidental on Rock-IT - Peter Dewachtere - Desarrollador IT freelance</title><link>https://dewachtere.be/es/</link><description>Recent content in Desarrollador freelance de .NET, Angular, Python y Flutter en Flandes Occidental on Rock-IT - Peter Dewachtere - Desarrollador IT freelance</description><generator>Hugo</generator><language>es</language><lastBuildDate>Tue, 13 Oct 2026 15:40:00 +0200</lastBuildDate><atom:link href="https://dewachtere.be/es/index.xml" rel="self" type="application/rss+xml"/><item><title>Tienda online B2B de Omni-Term</title><link>https://dewachtere.be/es/projects/omni-term-webshop/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/es/projects/omni-term-webshop/</guid><description>&lt;p&gt;&lt;a href="https://www.omniterm.be"&gt;Omni-Term&lt;/a&gt;, de Izegem, es desde 1970 mayorista de calefacción, energía solar y ventilación, con varias sucursales e instaladores profesionales como clientes. Para esos instaladores construyo y mantengo la tienda online B2B &lt;strong&gt;pro.omniterm.be&lt;/strong&gt;: la prolongación digital del mostrador, abierta las 24 horas del día.&lt;/p&gt;
&lt;h3 id="el-reto"&gt;El reto&lt;/h3&gt;
&lt;p&gt;Los instaladores suelen hacer sus pedidos por la tarde o desde la obra. Quieren saber de inmediato si un artículo está en stock en su sucursal y cuándo pueden recogerlo o recibirlo. Por eso la tienda debe funcionar a la perfección con el ERP de Omni-Term: los precios específicos de cada cliente, el stock por sucursal, los pedidos pendientes y las facturas deben ser siempre correctos.&lt;/p&gt;</description></item><item><title>BillableMe: registro de trabajo para freelances</title><link>https://dewachtere.be/es/projects/billableme/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/es/projects/billableme/</guid><description>&lt;p&gt;Como freelance sé lo pesado que resulta reconstruir las horas después de una larga jornada, reunir los tiques y recordar las ideas que se tuvieron por el camino. &lt;strong&gt;BillableMe&lt;/strong&gt; es la app que desarrollé precisamente para eso: todo lo que hace para un cliente lo registra al momento en su smartphone, por cliente y por proyecto.&lt;/p&gt;
&lt;h3 id="qué-hace-billableme"&gt;Qué hace BillableMe&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Horas y actividades&lt;/strong&gt;: registre el trabajo por cliente, proyecto y actividad, con un temporizador integrado o a posteriori, y consúltelo por día, semana, mes o año&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gastos y desplazamientos&lt;/strong&gt;: gastos profesionales y costes adicionales por registro, con tipos de transporte y fotos de los tiques&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lectura de tiques con IA&lt;/strong&gt;: la foto de un tique se lee automáticamente (OCR), de modo que ya no hay que teclear los importes a mano&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notas de voz&lt;/strong&gt;: grabe sobre la marcha una tarea, un recordatorio o una nota; la app las convierte automáticamente en texto, en neerlandés o inglés, y permite buscar en ellas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Segura y multilingüe&lt;/strong&gt;: inicio de sesión biométrico, disponible por completo en neerlandés e inglés, con una comprobación del estado del backend al arrancar&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="tecnología"&gt;Tecnología&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;App&lt;/strong&gt;: Flutter con Riverpod, GoRouter y Freezed, grabación y reproducción de audio, Material Design; probada mediante TestFlight y próximamente disponible en App Store y Google Play&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backend&lt;/strong&gt;: NestJS (TypeScript) con TypeORM y PostgreSQL, autenticación JWT, Redis y colas Bull para tareas en segundo plano, registro de auditoría y bloqueo optimista&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servicios de IA&lt;/strong&gt;: servicio propio de transcripción con Whisper en Python (FastAPI, sin GPU) y Google Document AI para la lectura de tiques&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hosting y DevOps&lt;/strong&gt;: Docker Swarm con varias réplicas de la API, nginx, registro privado y health checks, alojado por Rock-IT&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="por-qué-un-producto-propio"&gt;¿Por qué un producto propio?&lt;/h3&gt;
&lt;p&gt;BillableMe nació de mi propia práctica diaria y se usa como lo usa un usuario real. Es a la vez mi banco de pruebas para nuevas tecnologías: el desarrollo guiado por especificaciones, la transcripción por IA y el reconocimiento de documentos se probaron aquí antes de aplicarse en proyectos de clientes. Lo que funciona bien aquí también beneficia a mis clientes.&lt;/p&gt;</description></item><item><title>POVV DSV Tool: app de pedidos para socios</title><link>https://dewachtere.be/es/projects/povv-dsv-tool/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/es/projects/povv-dsv-tool/</guid><description>&lt;p&gt;&lt;a href="https://www.povv.be"&gt;POVV&lt;/a&gt; (Producenten Organisatie Vleesvee, la organización de productores de vacuno de carne) es una cooperativa que apoya a los ganaderos de vacuno de carne y refuerza su posición en el mercado. A través de POVV, los socios piden, entre otras cosas, pienso a distintos proveedores. Para simplificar ese proceso de pedido desarrollé la &lt;strong&gt;DSV Tool&lt;/strong&gt;: una app móvil para los socios, un panel de administración web para la secretaría y un backend central que lo conecta todo. Rock-IT colabora con POVV desde 2021; después del sitio web, en 2026 llegó esta plataforma de pedidos.&lt;/p&gt;</description></item><item><title>Kadeo: sitio web para un taller de cerámica</title><link>https://dewachtere.be/es/projects/kadeo-website/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/es/projects/kadeo-website/</guid><description>&lt;p&gt;&lt;a href="https://katleendeprez.be"&gt;Kadeo&lt;/a&gt; es el taller de cerámica de Katleen Deprez. Quería un sitio web que dejara hablar a su obra: sereno, cálido y visual, con una galería que pudiera ampliar ella misma sin la intervención de un desarrollador. Diseñé y construí el sitio de principio a fin y lo alojo en la infraestructura de Rock-IT.&lt;/p&gt;
&lt;h3 id="el-reto"&gt;El reto&lt;/h3&gt;
&lt;p&gt;Un sitio de portafolio para una artista gira en torno a la imagen. Las fotos deben cargarse rápido, verse nítidas en cualquier pantalla y ser fáciles de gestionar: subir, recortar, ordenar en secciones y listo. Al mismo tiempo, el sitio debe encontrarse en Google, tener un formulario de contacto que mantenga a raya el spam y cumplir la normativa de cookies. Y todo ello sin cuotas de suscripción a un CMS externo.&lt;/p&gt;</description></item><item><title>Kadeo Photo Uploader: app de fotos para el taller</title><link>https://dewachtere.be/es/projects/kadeo-photo-uploader/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/es/projects/kadeo-photo-uploader/</guid><description>&lt;p&gt;Una pieza nueva sale del horno, la foto se hace con el smartphone&amp;hellip; y luego todavía hay que pasarla al portátil, recortarla y subirla. Para el taller de cerámica &lt;a href="https://katleendeprez.be"&gt;Kadeo&lt;/a&gt; construí por eso una app Flutter pequeña y muy concreta que se salta ese rodeo: elegir la foto, elegir la sección, subir. Listo.&lt;/p&gt;
&lt;h3 id="el-reto"&gt;El reto&lt;/h3&gt;
&lt;p&gt;El &lt;a href="https://dewachtere.be/es/projects/kadeo-website/"&gt;sitio web de Kadeo&lt;/a&gt; tiene un panel de administración completo, pero en un smartphone un CMS en el navegador resulta engorroso. La app debía ser rápida y sencilla, entregar las fotos automáticamente con la calidad adecuada y comunicarse de forma segura con el sitio web sin tener que teclear una contraseña cada vez. Además, no hacía falta que estuviera en App Store: solo funciona en el iPhone de la ceramista.&lt;/p&gt;</description></item><item><title>MVDM Advocaten: sitio web para un bufete de abogados</title><link>https://dewachtere.be/es/projects/mvdm-advocaten/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/es/projects/mvdm-advocaten/</guid><description>&lt;p&gt;&lt;a href="https://www.mvdmadvocaten.be"&gt;MVDM Advocaten&lt;/a&gt; es un bufete de abogados con oficinas en Ypres y Brielen. Desde 2018 me ocupo del sitio web del bufete, al principio bajo el nombre Onraet-Verfaille. Cuando en otoño de 2022 el bufete continuó como MVDM Advocaten, el sitio recibió una imagen completamente nueva, con la sobria fotografía en blanco y negro que hoy es la tarjeta de visita del bufete.&lt;/p&gt;
&lt;h3 id="el-reto"&gt;El reto&lt;/h3&gt;
&lt;p&gt;Un bufete de abogados quiere transmitir confianza: sobrio, profesional y, sobre todo, claro. Los visitantes buscan rápidamente la respuesta a tres preguntas: ¿qué hace este bufete, cuánto cuesta y quiénes son los abogados? Además, el sitio debía estar disponible en neerlandés y francés, posicionarse bien en Google y absorber el cambio de nombre sin perder visitantes.&lt;/p&gt;</description></item><item><title>Buscar en un catálogo técnico: Elasticsearch y ETIM en Omni-Term</title><link>https://dewachtere.be/es/blog/etim-zoeken-elasticsearch-omniterm/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/es/blog/etim-zoeken-elasticsearch-omniterm/</guid><description>&lt;p&gt;Un instalador que teclea «prescomanometer 1/2» quiere una sola cosa: el artículo correcto, de inmediato. En la &lt;a href="https://dewachtere.be/es/projects/omni-term-webshop/"&gt;tienda B2B de Omni-Term&lt;/a&gt; los instaladores buscan por número de artículo, código de proveedor, marca, descripción o una característica técnica, y todo ello en un catálogo de muchos fabricantes. Así es como construí ese buscador.&lt;/p&gt;
&lt;h3 id="un-solo-campo-de-búsqueda-muchos-tipos-de-consulta"&gt;Un solo campo de búsqueda, muchos tipos de consulta&lt;/h3&gt;
&lt;p&gt;La consulta se analiza primero. Si el código reconoce un número de artículo o un código de proveedor, la búsqueda va directamente a la coincidencia exacta y con comodines en esos campos, con el boost más alto. Si reconoce una marca, los productos de esa marca tienen prioridad. El resto son términos normales, que se buscan en varios campos a la vez: la descripción como keyword exacta, como texto analizado y como edge n-gram para prefijos, la descripción del producto y la jerarquía, desde la categoría hasta la familia de productos. Buscar un número de artículo antiguo devuelve también su sucesor, gracias a una lista anidada de predecesores.&lt;/p&gt;</description></item><item><title>Notas de voz con IA: así convierte BillableMe el audio en texto con Whisper</title><link>https://dewachtere.be/es/blog/whisper-spraaknotities-billableme/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://dewachtere.be/es/blog/whisper-spraaknotities-billableme/</guid><description>&lt;p&gt;Como freelance, las mejores ideas llegan en el coche o en la obra, justo cuando no se puede teclear. Por eso &lt;a href="https://dewachtere.be/es/projects/billableme/"&gt;BillableMe&lt;/a&gt; incorporó notas de voz: se dicta una tarea, un recordatorio o una nota, y medio minuto después el texto está ahí, listo para buscar. Así lo resolví.&lt;/p&gt;
&lt;h3 id="los-requisitos"&gt;Los requisitos&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;El audio se queda en mi propio servidor, sin servicio externo de transcripción.&lt;/li&gt;
&lt;li&gt;Neerlandés e inglés, con detección automática del idioma.&lt;/li&gt;
&lt;li&gt;Sin GPU: debe funcionar en el Docker Swarm existente.&lt;/li&gt;
&lt;li&gt;El usuario nunca espera a la transcripción.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="paso-1-grabar-en-flutter"&gt;Paso 1: grabar en Flutter&lt;/h3&gt;
&lt;p&gt;La app graba con el paquete &lt;code&gt;record&lt;/code&gt; en AAC (m4a), solicita el permiso del micrófono y permite elegir de inmediato una categoría, una marca y un título. El archivo se envía como carga multipart a la API de NestJS. Desde ese momento la nota aparece en la lista, con el estado «procesando».&lt;/p&gt;</description></item></channel></rss>