<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Fanel</title><link>https://giro-dev.github.io/fanel/ca/</link><description>Recent content on Fanel</description><generator>Hugo</generator><language>ca</language><atom:link href="https://giro-dev.github.io/fanel/ca/index.xml" rel="self" type="application/rss+xml"/><item><title>Monòlit modular amb Spring Boot + Spring Modulith</title><link>https://giro-dev.github.io/fanel/ca/docs/adr/0001-monolit-modular/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://giro-dev.github.io/fanel/ca/docs/adr/0001-monolit-modular/</guid><description>&lt;p&gt;&lt;strong&gt;Estat&lt;/strong&gt;: Acceptat · &lt;strong&gt;Data&lt;/strong&gt;: 2026-09-04&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;Fanel és una app familiar (&amp;lt;10 usuaris per llar) auto-allotjable. El requisit principal d&amp;rsquo;operació és la simplicitat: un sol contenidor. Alhora ha de ser extensible (nous mòduls: receptes, automatitzacions, agents) sense degradar-se en un &amp;ldquo;big ball of mud&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="opcions"&gt;Opcions&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Opció&lt;/th&gt;
					&lt;th&gt;Pros&lt;/th&gt;
					&lt;th&gt;Contres&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Microserveis&lt;/td&gt;
					&lt;td&gt;Escalat independent&lt;/td&gt;
					&lt;td&gt;Complexitat operativa enorme per a una família; múltiples contenidors&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Monòlit clàssic per capes&lt;/td&gt;
					&lt;td&gt;Senzill&lt;/td&gt;
					&lt;td&gt;Acoblament creixent, difícil d&amp;rsquo;extreure res després&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Monòlit modular (Spring Modulith)&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Un desplegable; fronteres verificades per tests; esdeveniments persistits; documentació generada&lt;/td&gt;
					&lt;td&gt;Disciplina de paquets; dependència d&amp;rsquo;un projecte Spring addicional&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="decisió"&gt;Decisió&lt;/h2&gt;
&lt;p&gt;Monòlit modular amb Spring Boot 4.x, Java 25 i Spring Modulith 2.x. Un paquet Java per mòdul de negoci (&lt;code&gt;household&lt;/code&gt;, &lt;code&gt;menu&lt;/code&gt;, &lt;code&gt;recipes&lt;/code&gt;, &lt;code&gt;shopping&lt;/code&gt;, &lt;code&gt;calendar&lt;/code&gt;, &lt;code&gt;chores&lt;/code&gt;, &lt;code&gt;assistant&lt;/code&gt;, &lt;code&gt;notifications&lt;/code&gt;, &lt;code&gt;automation&lt;/code&gt;) més &lt;code&gt;shared&lt;/code&gt; (OPEN). Cada mòdul exposa &lt;code&gt;api/&lt;/code&gt; (interfície, DTOs, esdeveniments) i amaga &lt;code&gt;domain/&lt;/code&gt;, &lt;code&gt;infra/&lt;/code&gt;, &lt;code&gt;web/&lt;/code&gt;. La comunicació entre mòduls es fa per esdeveniments de domini amb el registre de publicació persistit (JPA). &lt;code&gt;ApplicationModules.verify()&lt;/code&gt; s&amp;rsquo;executa al CI.&lt;/p&gt;</description></item><item><title>SPA React + TypeScript (PWA) servida des del JAR</title><link>https://giro-dev.github.io/fanel/ca/docs/adr/0002-spa-react-embeguda/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://giro-dev.github.io/fanel/ca/docs/adr/0002-spa-react-embeguda/</guid><description>&lt;p&gt;&lt;strong&gt;Estat&lt;/strong&gt;: Acceptat · &lt;strong&gt;Data&lt;/strong&gt;: 2026-09-04&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;Cal una UI web moderna, usable des del mòbil (PWA instal·lable, offline a la botiga) i reutilitzable per a futurs clients Android i escriptori, sense necessitar Node ni un segon contenidor en producció.&lt;/p&gt;
&lt;h2 id="opcions"&gt;Opcions&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Opció&lt;/th&gt;
					&lt;th&gt;Pros&lt;/th&gt;
					&lt;th&gt;Contres&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;React + Vite + TS&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Ecosistema màxim (components, TanStack Query), bona generació per agents de codi, Capacitor/Tauri&lt;/td&gt;
					&lt;td&gt;Bundle mitjà, més boilerplate&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Vue 3&lt;/td&gt;
					&lt;td&gt;Corba suau, molt productiu en solitari&lt;/td&gt;
					&lt;td&gt;Ecosistema menor&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Svelte 5&lt;/td&gt;
					&lt;td&gt;Bundle mínim&lt;/td&gt;
					&lt;td&gt;Ecosistema petit, runes recents&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Angular&lt;/td&gt;
					&lt;td&gt;Tot inclòs&lt;/td&gt;
					&lt;td&gt;Pesat per a aquest abast&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Thymeleaf + htmx&lt;/td&gt;
					&lt;td&gt;Zero build JS&lt;/td&gt;
					&lt;td&gt;No reutilitzable per a Android; offline pobre&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Flutter / Compose Multiplatform&lt;/td&gt;
					&lt;td&gt;Un codi per a tot&lt;/td&gt;
					&lt;td&gt;Web pesat/immadur; fora de l&amp;rsquo;ecosistema web&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="decisió"&gt;Decisió&lt;/h2&gt;
&lt;p&gt;React 19 + TypeScript strict + Vite, com a PWA (&lt;code&gt;vite-plugin-pwa&lt;/code&gt;). El build (&lt;code&gt;dist/&lt;/code&gt;) s&amp;rsquo;empaqueta en el mòdul Maven &lt;code&gt;frontend&lt;/code&gt; com a recurs &lt;code&gt;static/&lt;/code&gt; i Spring Boot el serveix amb &lt;em&gt;fallback&lt;/em&gt; a &lt;code&gt;index.html&lt;/code&gt; per a rutes de la SPA. En desenvolupament, Vite fa proxy de &lt;code&gt;/api&lt;/code&gt; al backend.&lt;/p&gt;</description></item><item><title>PostgreSQL i SQLite via perfils</title><link>https://giro-dev.github.io/fanel/ca/docs/adr/0003-postgres-i-sqlite/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://giro-dev.github.io/fanel/ca/docs/adr/0003-postgres-i-sqlite/</guid><description>&lt;p&gt;&lt;strong&gt;Estat&lt;/strong&gt;: Acceptat · &lt;strong&gt;Data&lt;/strong&gt;: 2026-09-04&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;Auto-allotjable&amp;rdquo; vol dir dues coses per a públics diferents: qui té un NAS/servidor amb Postgres vol el motor estàndard; qui vol &amp;ldquo;descarrega i executa&amp;rdquo; vol un sol contenidor i un backup que sigui copiar un fitxer.&lt;/p&gt;
&lt;h2 id="opcions"&gt;Opcions&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Opció&lt;/th&gt;
					&lt;th&gt;Pros&lt;/th&gt;
					&lt;th&gt;Contres&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Només PostgreSQL&lt;/td&gt;
					&lt;td&gt;Estàndard, pgvector, tooling&lt;/td&gt;
					&lt;td&gt;Obliga a 2 contenidors&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Només SQLite&lt;/td&gt;
					&lt;td&gt;1 contenidor real, backup trivial&lt;/td&gt;
					&lt;td&gt;Sense pgvector; dialecte Hibernate community&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;H2&lt;/td&gt;
					&lt;td&gt;Integració Spring fàcil&lt;/td&gt;
					&lt;td&gt;No apte per producció&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Postgres + SQLite per perfil&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Millor experiència per a tots dos públics&lt;/td&gt;
					&lt;td&gt;Cal SQL portable i tests dobles&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="decisió"&gt;Decisió&lt;/h2&gt;
&lt;p&gt;Perfils Spring &lt;code&gt;postgres&lt;/code&gt; (per defecte) i &lt;code&gt;sqlite&lt;/code&gt;. Flyway amb migracions a &lt;code&gt;db/migration/common&lt;/code&gt; (SQL portable) i, només quan sigui imprescindible, &lt;code&gt;postgresql/&lt;/code&gt; i &lt;code&gt;sqlite/&lt;/code&gt; (via placeholder &lt;code&gt;{vendor}&lt;/code&gt;). UUID emmagatzemats de manera portable. Els tests d&amp;rsquo;integració s&amp;rsquo;executen amb els dos motors a cada PR.&lt;/p&gt;</description></item><item><title>API first com a base per a clients</title><link>https://giro-dev.github.io/fanel/ca/docs/adr/0004-api-first-clients/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://giro-dev.github.io/fanel/ca/docs/adr/0004-api-first-clients/</guid><description>&lt;p&gt;&lt;strong&gt;Estat&lt;/strong&gt;: Acceptat · &lt;strong&gt;Data&lt;/strong&gt;: 2026-09-04&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;Visió de futur: clients Android, escriptori i agents (MCP). Tots han de compartir les mateixes regles de negoci sense duplicar-les.&lt;/p&gt;
&lt;h2 id="decisió"&gt;Decisió&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tota funcionalitat s&amp;rsquo;exposa primer com a REST JSON a &lt;code&gt;/api/v1/**&lt;/code&gt;, documentada amb OpenAPI 3 (springdoc). El fitxer OpenAPI és el contracte: els clients es generen a partir d&amp;rsquo;ell (TS ara; Kotlin si cal).&lt;/li&gt;
&lt;li&gt;Errors amb RFC 9457 &lt;em&gt;Problem Details&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Temps real amb SSE (&lt;code&gt;/api/v1/events&lt;/code&gt;), no WebSocket, tret que calgui bidireccionalitat.&lt;/li&gt;
&lt;li&gt;Autenticació utilitzable per clients no-navegador: token d&amp;rsquo;API (Bearer) a més de sessió; CORS configurable.&lt;/li&gt;
&lt;li&gt;Zero lògica de negoci al frontend.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conseqüències"&gt;Conseqüències&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Un canvi incompatible d&amp;rsquo;API obliga a &lt;code&gt;/api/v2&lt;/code&gt; o a versionar el recurs.&lt;/li&gt;
&lt;li&gt;El frontend web és &amp;ldquo;un client més&amp;rdquo; i pot ser substituït o duplicat (Capacitor, Tauri) sense tocar el servidor.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Multi-household des de l'inici</title><link>https://giro-dev.github.io/fanel/ca/docs/adr/0005-multi-household/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://giro-dev.github.io/fanel/ca/docs/adr/0005-multi-household/</guid><description>&lt;p&gt;&lt;strong&gt;Estat&lt;/strong&gt;: Acceptat · &lt;strong&gt;Data&lt;/strong&gt;: 2026-09-04&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;La majoria d&amp;rsquo;instal·lacions tindran una sola llar, però és probable voler allotjar-hi família extensa o amics. Afegir &lt;code&gt;householdId&lt;/code&gt; a posteriori implica migrar totes les taules i tots els endpoints.&lt;/p&gt;
&lt;h2 id="decisió"&gt;Decisió&lt;/h2&gt;
&lt;p&gt;Model: &lt;code&gt;Household&lt;/code&gt; → &lt;code&gt;Member&lt;/code&gt; (rol &lt;code&gt;ADULT&lt;/code&gt;/&lt;code&gt;CHILD&lt;/code&gt;, color, PIN opcional per al mode tauleta). &lt;strong&gt;Tota&lt;/strong&gt; entitat de negoci pertany a un household i &lt;strong&gt;tota&lt;/strong&gt; consulta filtra per household. Els tokens d&amp;rsquo;API i les credencials MCP tenen àmbit de household.&lt;/p&gt;</description></item><item><title>Spring AI amb proveïdor configurable; MCP server integrat</title><link>https://giro-dev.github.io/fanel/ca/docs/adr/0006-spring-ai-mcp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://giro-dev.github.io/fanel/ca/docs/adr/0006-spring-ai-mcp/</guid><description>&lt;p&gt;&lt;strong&gt;Estat&lt;/strong&gt;: Acceptat · &lt;strong&gt;Data&lt;/strong&gt;: 2026-09-04&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;Es vol un assistent d&amp;rsquo;IA dins l&amp;rsquo;app i que agents externs (Claude Desktop/Code, Home Assistant, agents propis) puguin operar sobre les dades via MCP. Sense obligar a cap proveïdor ni a cap cost.&lt;/p&gt;
&lt;h2 id="opcions"&gt;Opcions&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Opció&lt;/th&gt;
					&lt;th&gt;Pros&lt;/th&gt;
					&lt;th&gt;Contres&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Servei d&amp;rsquo;agents separat (Python/LangChain)&lt;/td&gt;
					&lt;td&gt;Ecosistema IA ampli&lt;/td&gt;
					&lt;td&gt;Segon contenidor; duplicació de la lògica de domini&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Spring AI al mateix procés&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Tools = mètodes Java ja provats; MCP server/client inclosos; proveïdor per propietats; Ollama local&lt;/td&gt;
					&lt;td&gt;API encara evolutiva (2.x)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="decisió"&gt;Decisió&lt;/h2&gt;
&lt;p&gt;Spring AI 2.x, confinat al mòdul &lt;code&gt;assistant&lt;/code&gt;. Tres capes sobre les mateixes &lt;code&gt;@Tool&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Pla original</title><link>https://giro-dev.github.io/fanel/ca/docs/roadmap/pla-original/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://giro-dev.github.io/fanel/ca/docs/roadmap/pla-original/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Document de planificació prèvia al codi que va originar aquest repositori. Es conserva
íntegre com a referència de context i de &amp;ldquo;per què&amp;rdquo; de les decisions. Les decisions
d&amp;rsquo;arquitectura vinculants viuen a &lt;a href="https://github.com/giro-dev/fanel/blob/main/AGENTS.md"&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/a&gt; i als &lt;a href="../../adr/"&gt;ADRs&lt;/a&gt;; l&amp;rsquo;estat
real d&amp;rsquo;implementació viu a &lt;a href="https://giro-dev.github.io/fanel/ca/docs/"&gt;&lt;code&gt;ROADMAP.md&lt;/code&gt;&lt;/a&gt;. Si aquest document i el &lt;code&gt;ROADMAP.md&lt;/code&gt;
discrepen, &lt;strong&gt;el &lt;code&gt;ROADMAP.md&lt;/code&gt; mana&lt;/strong&gt; (és el que es manté al dia).&lt;/p&gt;
&lt;p&gt;Decisions ja preses respecte a la secció 6 d&amp;rsquo;aquest document (veure &lt;code&gt;AGENTS.md&lt;/code&gt;/ADRs):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Frontend: &lt;strong&gt;React + TypeScript&lt;/strong&gt; (Vite, PWA).&lt;/li&gt;
&lt;li&gt;BD: &lt;strong&gt;PostgreSQL i SQLite&lt;/strong&gt; suportats des del dia 1.&lt;/li&gt;
&lt;li&gt;Nom/paquet: &lt;strong&gt;Fanel&lt;/strong&gt; (&lt;em&gt;the family organizer panel&lt;/em&gt;), paquet &lt;code&gt;dev.agiro.fanel&lt;/code&gt;. UI per
defecte en &lt;strong&gt;català&lt;/strong&gt;, amb castellà com a segon idioma.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-household&lt;/strong&gt; des del model inicial.&lt;/li&gt;
&lt;li&gt;Proveïdor d&amp;rsquo;IA per defecte: &lt;strong&gt;cap actiu per defecte&lt;/strong&gt;, configurable (Ollama/OpenAI/Anthropic).&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-què-fa-la-poc-i-què-naprenem"&gt;1. Què fa la POC (i què n&amp;rsquo;aprenem)&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Mòdul&lt;/th&gt;
					&lt;th&gt;POC&lt;/th&gt;
					&lt;th&gt;Què cal per a la versió real&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Menú&lt;/td&gt;
					&lt;td&gt;Graella dia × (esmorzar, dinar, berenar, sopar), text lliure&lt;/td&gt;
					&lt;td&gt;Setmanes reals (dates, no &amp;ldquo;Dilluns&amp;rdquo; genèric), receptes reutilitzables, generació de compra a partir del menú&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Calendari&lt;/td&gt;
					&lt;td&gt;Llista d&amp;rsquo;esdeveniments amb data + títol + qui l&amp;rsquo;ha afegit&lt;/td&gt;
					&lt;td&gt;Hora, recurrència, per membre, sincronització CalDAV/ICS&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Compra&lt;/td&gt;
					&lt;td&gt;Ítems amb &lt;code&gt;done&lt;/code&gt;, &amp;ldquo;buida comprats&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;Quantitats, categories/passadissos, múltiples llistes, mode botiga offline&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Tasques&lt;/td&gt;
					&lt;td&gt;Text + assignat (Mamà/Papà/Nens) + &lt;code&gt;done&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Membres reals, recurrència, rotació, gamificació opcional&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Identitat&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;prompt('¿Cómo te llamas?')&lt;/code&gt; local&lt;/td&gt;
					&lt;td&gt;Llar (household) + membres + login real però &lt;em&gt;senzill&lt;/em&gt; (família, no empresa)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Persistència&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;window.storage&lt;/code&gt; clau-valor JSON&lt;/td&gt;
					&lt;td&gt;BD relacional, esdeveniments de domini, API estable&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Conclusions: el model de dades és petit però &lt;strong&gt;totes les funcions es creuen&lt;/strong&gt; (menú → compra, tasques → calendari, receptes → compra). L&amp;rsquo;arquitectura ha de facilitar aquestes interaccions sense acoblar els mòduls.&lt;/p&gt;</description></item><item><title>i18n català + castellà des de l'inici</title><link>https://giro-dev.github.io/fanel/ca/docs/adr/0007-i18n/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://giro-dev.github.io/fanel/ca/docs/adr/0007-i18n/</guid><description>&lt;p&gt;&lt;strong&gt;Estat&lt;/strong&gt;: Acceptat · &lt;strong&gt;Data&lt;/strong&gt;: 2026-09-04&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;La POC és en castellà; el projecte i la família usen català. Afegir i18n a posteriori és costós i deixa textos hardcodejats.&lt;/p&gt;
&lt;h2 id="decisió"&gt;Decisió&lt;/h2&gt;
&lt;p&gt;Internacionalització des del primer commit: &lt;code&gt;react-i18next&lt;/code&gt; al frontend (&lt;code&gt;src/i18n/ca.json&lt;/code&gt;, &lt;code&gt;es.json&lt;/code&gt;; &lt;code&gt;ca&lt;/code&gt; per defecte, detecció del navegador) i &lt;code&gt;MessageSource&lt;/code&gt; al backend (&lt;code&gt;messages_ca.properties&lt;/code&gt;, &lt;code&gt;messages_es.properties&lt;/code&gt;) per a errors i notificacions. &lt;code&gt;Household.locale&lt;/code&gt; determina l&amp;rsquo;idioma per defecte de la llar; &lt;code&gt;Member&lt;/code&gt; pot sobreescriure&amp;rsquo;l. Idioma del codi: anglès.&lt;/p&gt;</description></item><item><title>Cap llibreria de components UI general; `FullCalendar` (nucli MIT) només per al calendari</title><link>https://giro-dev.github.io/fanel/ca/docs/adr/0008-llibreria-ui-calendari/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://giro-dev.github.io/fanel/ca/docs/adr/0008-llibreria-ui-calendari/</guid><description>&lt;p&gt;&lt;strong&gt;Estat&lt;/strong&gt;: Acceptat · &lt;strong&gt;Data&lt;/strong&gt;: 2026-09-06&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;El &lt;code&gt;Calendar.tsx&lt;/code&gt; actual mostra els esdeveniments com una llista agrupada per dia (sense vista de graella mensual/setmanal). Es va demanar avaluar &lt;code&gt;Untitled UI React&lt;/code&gt; (&lt;a href="https://www.untitledui.com/react/components/calendars"&gt;https://www.untitledui.com/react/components/calendars&lt;/a&gt;) per al component de calendari, i alhora avaluar-ne l&amp;rsquo;adopció com a llibreria de components &lt;strong&gt;general&lt;/strong&gt; per a tota la SPA. També es va revisar un recull d&amp;rsquo;alternatives (&amp;ldquo;9 React Calendar Components for Your Next App&amp;rdquo;, dev.to/jaydevm) que inclou &lt;code&gt;react-calendar&lt;/code&gt;, &lt;code&gt;react-big-calendar&lt;/code&gt;, &lt;code&gt;react-datepicker&lt;/code&gt;, &lt;code&gt;mantine&lt;/code&gt;, &lt;code&gt;PrimeReact&lt;/code&gt;, &lt;code&gt;MUI X&lt;/code&gt; i &lt;code&gt;FullCalendar&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Assistent multiagent: un model/API per funció</title><link>https://giro-dev.github.io/fanel/ca/docs/adr/0009-assistant-multiagent/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://giro-dev.github.io/fanel/ca/docs/adr/0009-assistant-multiagent/</guid><description>&lt;p&gt;&lt;strong&gt;Estat&lt;/strong&gt;: Acceptat · &lt;strong&gt;Data&lt;/strong&gt;: 2026-09-09&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;&lt;a href="https://giro-dev.github.io/fanel/ca/docs/adr/0006-spring-ai-mcp/"&gt;ADR 0006&lt;/a&gt; ja fixa Spring AI confinat al mòdul &lt;code&gt;assistant&lt;/code&gt;, amb tools compartides i proveïdor configurable. La Fase 3 del roadmap afegeix xat, MCP i automatismes. Es vol un assistent &lt;strong&gt;multiagent&lt;/strong&gt; on cada agent pugui tenir el model i la API més adequats a la seva funció: agents privats amb IA local (Ollama) per a consultes de la llar, i agents més potents (multimodals, cloud) per a tasques com extreure una recepta a partir d&amp;rsquo;una imatge.&lt;/p&gt;</description></item><item><title>Distribució i estratègia de releases</title><link>https://giro-dev.github.io/fanel/ca/docs/adr/0010-distribucio-i-releases/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://giro-dev.github.io/fanel/ca/docs/adr/0010-distribucio-i-releases/</guid><description>&lt;p&gt;&lt;strong&gt;Estat&lt;/strong&gt;: Acceptat · &lt;strong&gt;Data&lt;/strong&gt;: 2026-09-13&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;/h2&gt;
&lt;p&gt;Fanel ja té un backend/frontend estable (&lt;a href="https://giro-dev.github.io/fanel/ca/docs/roadmap/"&gt;Fase 2&lt;/a&gt; completa) i un
client Android natiu. Falta definir com es distribueixen els artefactes
(imatge Docker, APK) i com es publica documentació consultable sense clonar
el repositori. Fins ara: &lt;code&gt;docker.yml&lt;/code&gt; publicava &lt;code&gt;ghcr.io/giro-dev/fanel:latest&lt;/code&gt;
en cada push a &lt;code&gt;main&lt;/code&gt; (i, per error, també amb tags &lt;code&gt;v*&lt;/code&gt; sense versionar la
imatge); &lt;code&gt;android/&lt;/code&gt; només es compilava i testava a CI, sense publicar cap
artefacte; no hi havia lloc de documentació ni tags de versió al repositori.&lt;/p&gt;</description></item></channel></rss>