47 Commits
Author SHA1 Message Date
itziarZG c0d2dc1cbf feat(site): add Umami self-hosted analytics and remove press page 2026-07-31 10:00:18 +02:00
itziarZG 7ffaf864aa feat(site): refine og:description with commercialize angle
Restore the descriptive lead-in and swap the rhetorical question to
focus on both building AND commercializing — sharper framing of the
'investigation' angle.

- ca: "Creuem dades oficials d'habitatge semi-buit amb lloguer turístic
  a les Illes Balears. De veritat cal construir i comercialitzar més?"
- es: "Cruzamos datos oficiales de vivienda semi-vacía con alquiler
  turístico en las Islas Baleares. ¿De verdad hay que construir y
  comercializar más?"
2026-07-30 08:03:55 +02:00
itziarZG 6519baceb7 feat(site): punchier og:description
Replace descriptive site.description with a short rhetorical question
that fits the investigative tone. Used by og:description, meta
description, and twitter:description on home, /mapa, and /404.

- ca: "Cases tancades. Cal construir-ne més?"
- es: "Casas cerradas. ¿Hay que construir más?"
2026-07-30 07:57:43 +02:00
itziarZG 1f06a4831f refactor(site): remove all GitHub references and Reproduir section
GitHub URL is no longer in use after migration to self-hosted Gitea.
Removes the "codi font" footer link, GitHub button on /qui-som, the
repoUrl constants, and the entire "Reproduir l'anàlisi" reproduction
guide on /dades. Cleans 6 orphaned i18n keys in ca.json and es.json.
2026-07-30 07:48:22 +02:00
itziarZG 6d735cc103 chore(qui-som): remove "Com contribuir" section and orphaned i18n keys
The project is repositioned as a personal research project on a
self-hosted VPS — no longer framed as open for contribution.
Removes the contribution call-to-action from /qui-som and the
7 i18n keys that became orphaned as a result.
2026-07-29 16:30:36 +02:00
itziarZG b923e42517 feat(site): add sustainability footer, replace favicon, fix SEO URLs
- Replace default Astro favicon with minimal "CT" SVG (orange brand color)
- Delete unused favicon.ico
- Add carbon footprint disclosure to footer with Ecograder data (A+,
  0,001 g CO₂/visita, 10,7 kB, 100% green hosting)
- Add explicit "personal research project, not official" disclosure
- Update site URL to casesbuides.itziarzameza.dev across astro.config.mjs
  and Base.astro fallback
2026-07-29 16:25:50 +02:00
itziarZG b5af81f9ef build(deploy): migrate from Vercel to Coolify with @astrojs/node + Nixpacks
Swap @astrojs/vercel adapter for @astrojs/node standalone (Vercel adapter
emits serverless functions; Coolify runs a long-lived Node container).
Add web/nixpacks.toml with explicit install/build/start phases.
Fix web/pnpm-workspace.yaml: scaffolded without the packages field, which
broke pnpm install on any environment that validates workspaces strictly
(this was the root cause of the original Coolify build error).
2026-07-29 15:41:26 +02:00
itziarZG 70a556f0de Merge branch 'main' of github.com:itziarZG/Vivienda 2026-07-21 19:35:53 +02:00
itziarZG 1f45866dc5 chore: add autoskills 2026-07-21 19:35:31 +02:00
itziarZG 60e28b5296 feat(mapa): data freshness marker + mobile responsive panels
- Mark consumo fields with asterisk in popup (INE 59532 refreshes with next Censo de Viviendas)
- Add footnote in map header explaining the pending update
- Collapse variables panel on mobile behind a toggle button
- Move legend below the map on mobile (out of overlay)
2026-07-17 07:57:51 +02:00
itziarZG 9bbcfc1e57 feat(mapa): strip persistent de fonts + línia 'Font:' al popup
Acaba d'arribar a 0 la manca de transparència que l'usuaria va
senyalar: el mapa mostra Mallorca groc i Eivissa blau sense
explicar per què, i això podia semblar una tria editorial.

1. Strip de fonts persistent sota el mapa a /mapa:
   'Per què cada illa té una capa diferent?' — targetes per a
   Mallorca/Menorca (Airbnb Inside), Eivissa (HUT Consell) i
   Formentera (IBESTAT 2019 única font pública).

2. Línia 'Font:' al popup que canvia segons el context:
   - Capa Possibles vacants / Habitatges totals → INE 59531
   - Capa Pressio turística + click M/Mn      → Inside Airbnb
   - Capa Pressio turística + click Eivissa  → HUT
   - Capa Pressio turística + click Formentera → IBESTAT 2019

Texts dins T (no pas t(): el client-side script ja té T com a
única font d'estrings del navegador).

astro-check: 0 errors.
2026-07-16 16:14:10 +02:00
itziarZG 80635f4714 fix: errores ASTRO_CHECK resueltos + attributions de font
El report d'astro-check passava de 8 errors → 0 errors + 1 hint.

1. /informe no compilava:
   - Substituir t(...).map(...) per tArray<T>(...) al frontmatter
     (no es pot posar el generic <T> dins expressions JSX d'Astro).
   - Ara cifras i fuentes es declaren a la capçalera TS i es
     reusen al template.

2. /premsa: tArray<Quoteable> al frontmatter en lloc de
   t():Quoteable[] (que TypeScript rebutjava).

3. /premsa fora del menu:
   - Eliminat l'<a href='/premsa'> de Header.astro.
   - Premsa queda inaccessible des de la UI per ordre de l'usuaria
     (la plana en si continua reachable si s'entra la URL).

4. Base.astro: ampliar el type union d'active de 4 a 8 valors
   (home|map|methodology|islands|data|press|about|informe) perquè
   coincideixi amb Header.astro. Resol 4 errors residuals:
     /premsa (active=press), /qui-som (active=about),
     /illes (active=islands), /dades (active=data).

5. /404: afegit active=home que faltava per complir Props.

6. i18n actualitzat (ca+es):
   - variable_pressio_turistica_desc explicita per illa
     (M+Mn→Airbnb, Eivissa→HUT, Formentera→IBESTAT)
   - popup_source_{ine,airbnb,hut_eivissa,ibestat_formentera}
     per posar una línia 'Font:' al popup
   - sources_strip_{title,intro,pm,eivissa,formentera}_*
     per afegir un strip persistent de fonts sota el mapa (TODO)
2026-07-16 16:12:52 +02:00
itziarZG c362849dee fix(mapa): popup sense duplicats + hints per a cada camp
Abans el popup mostrava el camp actiu DUES vegades quan coincidia
amb una fila auxiliar (ex. 'Possibles vacants' = consumo_p10_kwh
es pintava al requadre destacat i a la fila 'Consum p10 (kWh)').

Ara:
- 1 SOLA fila destacada a la part superior del popup (caixa negra
  amb el valor més gran + label + hint).
- Filas sota amb camps relacionats però DIFERENTS del cfgField
  (skip silencios si coincideix).
- Cada camp porta unit (kWh/any, €) + hint de 1 línia explicant
  què és. P.ex. 'Ratio p10/p50: 0,38 · <0,3=quasi-vacant'.

Mapa d'un camp = {label{ca,es}, unit?, hint{ca,es}} inline al
component per mantenir-ho tot al mateix lloc (no inflar i18n).

astro-check: 0 errors nous a Mapa.astro.
2026-07-16 16:00:02 +02:00
itziarZG a42b67f768 feat(mapa): panell de consum també a / + capçalera + altura
- Extract ConsumoDistribucion.astro (panel abans inline a mapa.astro).
  Aquest panell (105.632 vacants, 13.466 testimonial, etc.) ara apareix
  TANT a /mapa com a /. A /, va entre la taula per illa i les story cards.
- mapa.astro ja no té markup propi: <Mapa /> + <ConsumoDistribucion />.
- Capçalera del mapa més petita (py-8 → py-2/3, text-2xl/3xl → text-lg/xl,
  lead més curt) perquè el mapa sigui la peça dominant.
- Alçada del mapa adaptable:
    height: calc(100vh - 60px); min-height: 480px;
  ↓
    height: clamp(420px, 62vh, 640px);
  Així el mapa s'adapta a la finestra sense cobrir la pantalla en monitors
  grans, i no obliga a fer scroll horitzontal en mòbils.
- Llegenda (bottom-right) i panell de capes (top-left) ara amb
  max-h-[calc(100%-1.5rem)] overflow-y-auto — el desbordament es controla
  dins la caixa en lloc de quedar tallat per la vora del mapa.

astro-check: 0 errors nous.
2026-07-16 15:08:54 +02:00
itziarZG 4a8e2d42b8 refactor(mapa): simplificat de 15 a 3 capes (dropdown -> botons grans)
L'usuaria no entenia el mapa: 15 variables, 2 capes redundants
(consumo_p10_muy_bajo + consumo_p10_bajo pintaven el MATEIX camp), i
noms quasi-iguals ('Cua de baix consum' vs 'Cua de consum baix').
Decidim tornar a 0.

3 capes simples, 3 botons grans (no dropdown):

1. 'Habitatges totals'   (capa original)
2. 'Possibles vacants'   (renova 4 capes consumo + viviendas_vacantes,
                           pintant consumo_p10_kwh amb semafor vermell)
3. 'Pressio turistica'   (capa composta nova: airbnb_listings a
                           Mallorca/Menorca + hut_plazas a Eivissa,
                           pintades simultaniament)

Treu:
- 14 entrades de variableOptions
- 13 entrades de LAYERS
- 18 claus i18n obsoletes (group_consumo/presion/hut/avanzado +
  variables buides)
- El format dropdown + optgroup

AFEGEIX:
- HTML <button> amb aria-pressed (estil actiu automatic via <style>)
- Listener click en lloc de change event
- Llegenda custom per 'pressio_turistica' amb 2 mini-barres
  (groc-taronya Airbnb, blau HUT) perque la capa composta no
  es pot representar amb un sol degradat
- formatTick especial per a possibles_vacants (kWh)

Net: -404 linies a Mapa.astro, -42 a cada i18n (-488 total).

astro-check: 0 errors nous a Mapa.astro.
2026-07-16 10:46:42 +02:00
itziarZG b3510b3f2f fix(mapa): popup contextual segun scope + dropdown agrupado en 5 categorias
El usuario veia en el popup TODA la informacion de golpe (INE + Airbnb + HUT)
independientemente de la variable seleccionada. Eso es ruido innecesario.

Popup ahora contextual segun el scope de la variable activa:
- scope 'airbnb' (variables Airbnb): muestra Airbnb data
- scope 'hut'   (variables HUT):     muestra HUT data
- scope 'all'   (INE vivienda/consumo): muestra INE data
Ademas, el valor de la variable activa aparece destacado arriba de la seccion
para que el usuario vea inmediatamente 'lo que pinta el mapa'.

Dropdown reagrupado en 5 optgroups:
  - Habitatge (INE Cens 2021): viviendas totales + viviendas vacantes
  - Consum electric: 4 tramos (p10_muy_bajo, p10_bajo, p50_medio, p90_alto)
  - Presio Airbnb: listings, enteros, ingresos, por_1000
  - Habitatge turistic legal HUT: registros, plazas
  - Avanzado: con_licencia, ratio, mediana_kWh

CA: 'Habitatge (INE Cens 2021)' / 'Consum electric (Cens 2021)' / etc.
ES: 'Vivienda (INE Censo 2021)' / 'Consumo electrico (Censo 2021)' / etc.

Resultado:
- Dropdown mas escaneable (5 grupos vs lista plana de 15)
- Popup focal en lo que importa (no mas ruido)
- Valor de la variable activa destacado arriba
2026-07-15 18:34:55 +02:00
itziarZG 7aa0fb7a89 feat(mapa): añadir capa 'viviendas vacantes estimadas' por municipio
El usuario queria ver claramente dónde hay viviendas vacantes y cuántas.
Hasta ahora solo teníamos el choropleth de consumo_p50, que era
abstracto y los numeros de Airbnb en circulos confundian.

Nueva variable 'viviendas_vacantes_estimadas' en el dataset:
- Viviendas_totales (municipio) * 0.162 (tasa CCAA INE 2021)
- Asume distribucion uniforme del 16,2% (proxy: en realidad varia
  por municipio, mas alta en zonas turisticas)
- Replicada a todas las secciones del mismo municipio

Capa nueva en el mapa con escala de rojos:
  < 100    vacants   (claro)
  100-500
  500-1500
  1500-5000
  > 5000   vacants   (oscuro, Palma)

Total Balears = 105.632 vacantes (proxy)
- Palma: 30.210
- Calvia: 5.912
- Manacor: 4.629
- Inca: 2.570
- Llucmajor: 3.776
- Eivissa: 3.878

i18n: nueva key 'variable_viviendas_vacantes' en ca.json y es.json
2026-07-15 17:36:12 +02:00
itziarZG 05e3d48922 fix(mapa): ocultar circulos Airbnb cuando la variable no es de scope airbnb
Cuando el usuario seleccionaba una variable de consumo (p10, p50, ratio,
viviendas_totales), los circulos de los clusters de Airbnb seguian
mostrando el mismo dato (count de listings, p.ej. 212, 76, 15),
creando confusion porque el usuario pensaba que esos numeros eran
el valor de la variable de consumo elegida.

Ahora applyVariable auto-oculta los 3 layers de airbnb-clusters
cuando la variable no es de scope 'airbnb'. El toggle manual
'Punts Airbnb (clusters)' se sincroniza automaticamente con el estado
real: solo se muestra cuando la variable es Airbnb.
2026-07-15 17:10:38 +02:00
itziarZG d0c80d9cf5 fix(mapa): simplificar consumo energetico a 4 capas categoricas
Antes: una sola variable 'consumo_p50_kwh' continua, dificil de leer
y los numeros del cluster de Airbnb (212, 76, 15) se confundian con
los valores del coroplético.

Ahora: 4 variables categoricas claras, todas pintando distritos
censales con escala de color semaforo (rojo = mal, verde = bien):

  1. Cola de bajo consumo (p10)        [ROJO = sospecha semi-vacios]
     p10 < 800 kWh: hay casas con consumo testimonial
  2. Cola de consumo bajo (p10)         [NARANJA = posible uso estacional]
     p10 entre 800-2500 kWh
  3. Consumo medio (p50)                [AMARILLO = residencial estandar]
     p50 entre 2500-4000 kWh (mediana 2869 kWh)
  4. Cola de consumo alto (p90)         [VERDE = sin cola de bajo consumo]
     p90 > 4500 kWh

El dropdown ahora muestra:
  - Habitatges totals
  - 4 variables de consumo (las nuevas)
  - Ratio p10/p50
  - Mediana consumo kWh (avanzado, al final)

i18n: 4 keys nuevas en ca.json y es.json con label + desc claros
que explican el significado politico (semi-vacio, uso estacional,
residencial estable).
2026-07-15 16:55:08 +02:00
itziarZG ff373fa2b8 fix(mapa): t() devolvia string, añadir tArray() para arrays i18n
La función t() está tipada como string, por lo que al pedir
'map.consumo_distribucion_buckets' devolvía la clave literal
en vez del array, y buckets.reduce fallaba con TypeError.

Solución: nueva función tArray<T>(lang, key) que resuelve la clave
y devuelve el array tipado (o [] si no es array).
2026-07-15 15:30:38 +02:00
itziarZG 04a6012318 feat(mapa): añadir panel contextual con distribución del consumo eléctrico
Bajo el mapa interactivo, un panel con la distribución de las 652.123
viviendas de Balears por tramo de consumo eléctrico (Cens 2021, Holm 2025):

  - Consumo 0 (vacantes):              105.632 (16,2%)
  - < 250 kWh/año (testimonial):        13.466  (2,1%)
  - 251-1.000 kWh (esporádico):         67.202 (10,3%)
  - 1.001-4.000 kWh (consumo medio):   298.871 (45,8%)  ← mediana 2.869 kWh
  - > 4.000 kWh (consumo alto):        166.952 (25,6%)

Visualización: barras horizontales con porcentaje y valor absoluto,
con interpretación textual por tramo.

Limitación documentada: los datos son a nivel CCAA (no municipio),
por lo que aparecen como contexto al lado del mapa, no como capa pintable
(motivo explicado en el intro de la sección).

Total viviendas = suma de los 5 tramos = 652.123 (verificado).
2026-07-15 15:26:44 +02:00
itziarZG 8ffb3d37e3 feat(informe): añadir validacion externa con datos COAIB jul 2025
- Nuevo resumen_p6 que cita los datos del observatorio semestral del COAIB
  (julio 2025): +34,68% viviendas nueva creacion, -33,87% protegidas.
  La conclusion del propio COAIB ('no podrá solucionar la escasez')
  refuerza el argumentario del informe Holm 2025.

- 2 cifras nuevas del COAIB en la tabla:
  +34,68% aumento interanual viviendas nueva creacion (1S 2025)
  -33,87% caida interanual viviendas protegidas (1S 2025)

- COAIB añadido como fuente externa (observatorio semestral julio 2025)

- informe.astro renderiza resumen_p6

Estas cifras NO actualizan las del informe (datos del Censo 2021
siguen siendo la fuente de las 105.632 vacantes), sino que aportan
contexto ACTUALIZADO (2025) sobre la tendencia de nueva construccion
que valida el argumentario: 'se construye más, pero no para residentes'.
2026-07-15 14:56:32 +02:00
itziarZG 80f3752331 feat(informe): integrar informe Holm 2025 con resumen ejecutivo, 10 quoteables y atribucion
Pagina nueva /informe con:
- Resumen ejecutivo (5 parrafos) con atribucion inline (Holm, 2025)
- Tabla de 10 cifras clave del informe
- Tabla de 7 fuentes (INE, Ministerios, 4 busquedas VPN)
- Bio breve de la autora + nota de revision pendiente
- CTAs a /mapa y /metodologia

Modificaciones en paginas existentes:
- /premsa: 4 quoteables nuevos del informe (102.597, 4.9bn€, 1.18bn€, 208.470)
  i18n-ificados los 10 quoteables (CA+ES) para consistencia bilingue
- / (home): narrative_p3 reescrito con conclusion clave del informe
- /metodologia: parrafo contextual citando Holm 2025
- /Header: nav link 'Informe' entre Mapa y Per illa
- /Base.astro: type 'informe' añadido a active
- /Footer: atribucion al informe de Holm 2025

i18n:
- ca.json y es.json: nuevo bloque 'informe' (22 strings)
- methodology.report_context añadido a ambos
- home.narrative_p3 actualizado en ambos
- press.quoteables movido de hardcoded a i18n (10 entries)
- nav.informe y footer.based_on añadidos

Atribucion:
- Todas las cifras del informe llevan '(Holm, 2025)' o similar
- Footer con 'Analisi basat en l'informe de Lic. Emma C. Holm (2025)'
- NO se copia el PDF a web/public/ (pendiente publicacion por la autora)
2026-07-15 13:50:40 +02:00
itziarZG ffc170d054 feat(analysis): añadir ratio p10/p50 consumo electrico como proxy de vivienda semi-vacia
Origen: usuario pidió comparar demanda invierno vs verano. API REE rota para
geo_limit=baleares (devuelve 400 en todos los endpoints). Alternativa: analizar
los percentiles de consumo electrico del Censo 2021 (tabla 59532) como proxy
de heterogeneidad de uso.

Logica:
- p10 muy bajo en relacion a p50 (ratio <0.3) = hay casas con consumo muy bajo
  (posibles vacantes, segundas residencias estacionales, personas mayores)
- p10/p50 alto (~0.6+) = distribucion mas homogenea = uso residencial estable

Limitaciones documentadas en data/output/vivienda_vacia_analysis.md:
- Es un snapshot del 2011, NO serie temporal
- Ratio NO distingue invierno de verano, solo colas de bajo consumo
- Para invierno vs verano real, hace falta REE funcionando o Govern Balear

Outputs:
- scripts/07_vivienda_vacia_analysis.py: nuevo script de analisis
- data/output/vivienda_vacia_por_distrito.csv: 116 distritos con ratios + Airbnb
- data/output/vivienda_vacia_analysis.md: reporte markdown con top-10, correlacion, etc
- web/public/vivienda_vacia_*: copies para acceso publico
- ratio_p10_p50_consumo: nueva variable en dataset y mapa (color naranja-rojo)
  Invertido: naranja = mucha cola de bajo consumo (potencial vacio), verde = estable
2026-07-15 12:36:27 +02:00
itziarZG a237ad48f1 feat(data+map): añadir INE Censo 2021 (viviendas por municipio + consumo por distrito) y 3 variables nuevas al mapa
Datos:
- 59531.csv: viviendas totales por municipio (62 Balears, total 1.300.622)
- 59532.csv: percentiles consumo eléctrico por distrito (116 Balears)

Pipeline:
- 01_load_sources: nuevos loaders con parsing latin1
- 02_build_dataset: join por CUSEC prefix (5 dig municipio, 7 dig distrito)
- Nuevos campos: viviendas_totales, consumo_p{10,25,50,75,90}_kwh, airbnb_listings_por_1000_viviendas

Mapa:
- 3 variables nuevas (viviendas_totales verde, consumo_p50_kwh rojo, airbnb_per_1000 morado)
- Nueva fill layer 'all' (sin filtro de isla) para variables universales
- Popup ampliado con sección INE
2026-07-15 11:42:45 +02:00
itziarZG 2692fc6d71 fix(map): quitar filtro de isla + indicador 'sense dades' (gris) per illa sense variable 2026-07-15 10:32:30 +02:00
itziarZG bb21bebc65 feat(map): refactor con 6 variables toggleables (listings/entire/revenue/licencia/hut_plazas/hut_registros) 2026-07-15 10:19:31 +02:00
itziarZG 940c9ebb3c fix(deploy): eliminar nodeVersion invalid de vercel.json (Vercel ho agafa de package.json engines) 2026-07-15 09:53:27 +02:00
itziarZG 7630406e3c fix(deploy): afegir @astrojs/vercel adapter per a server-rendered pages 2026-07-15 09:50:38 +02:00
itziarZG 1208342942 chore: untrack docs de fase i fitxers raw duplicats (ja ignorats) 2026-07-15 09:38:37 +02:00
itziarZG e0fd449b6c chore: afegir vercel.json (Node 22) i DEPLOY.md amb instruccions 2026-07-14 13:47:11 +02:00
itziarZG 69ea05e705 feat(web): afegir skip link per accessibilitat amb teclat 2026-07-14 13:46:31 +02:00
itziarZG 02e40dd383 feat(web): afegir footer ampliat amb tots els links i pagina 404 2026-07-14 13:46:04 +02:00
itziarZG ed0cef279a feat(web): afegir pagina /qui-som amb transparencia i privacitat 2026-07-14 13:45:32 +02:00
itziarZG 776ad064b0 feat(web): afegir pagina /premsa amb kit per a periodistes 2026-07-14 13:44:31 +02:00
itziarZG 5511265e16 feat(web): afegir pagina /dades amb downloads + llicencia + repo 2026-07-14 13:43:23 +02:00
itziarZG df4ffef9d7 chore: ignorar FASE-*.md para que els docs de fase no entrin al repo 2026-07-14 13:41:36 +02:00
itziarZG 8a3a44ed5f feat(web): afegir pagina /illes amb comparativa de les 4 illes 2026-07-14 13:39:47 +02:00
itziarZG 6b09a711fc feat(web): afegir OG image 1200x630 amb xifres d'impacte 2026-07-14 13:37:02 +02:00
itziarZG 322704a945 feat(web): SEO base con sitemap, robots.txt y meta tags completos 2026-07-14 13:34:48 +02:00
itziarZG c4e503df77 docs: handoff para Fase 2 web MVP en nueva conversacion 2026-07-14 11:57:37 +02:00
itziarZG e270a0a54a feat(fase-1): pipeline completo, dataset.parquet + tiles.pmtiles
- 01_load_sources.py: carga INE, shapefile, Airbnb, HUT, IBESTAT
- 02_build_dataset.py: spatial join, agregacion por isla/granularidad
- 03_generate_tiles.py: tippecanoe -zg a partir de dataset.gpkg
- Outputs: dataset.parquet (41KB), dataset_web.json (1KB),
  tiles.pmtiles (1.5MB), STATS.md
- 18.175 listings Airbnb Mallorca+Menorca, 18.184 plazas HUT Eivissa
- Fallback isla por CMUN para 136 secciones rurales sin datos
- .gitignore: commitea outputs clave (parquet/json/tiles/STATS)
2026-07-14 11:46:01 +02:00
itziarZG fefbaf2c40 chore: no commitear archivos raw grandes 2026-07-14 11:20:24 +02:00
itziarZG 9abba6d7c0 feat(fase-0): anadir HUT Eivissa 2026 + IBESTAT Formentera 2019
- HUT Eivissa 2026: 2.369 registros, 18.184 plazas (CSV limpio desde HTML-as-xls)
- IBESTAT Formentera 2019: 1.375 establecimientos, 14.935 plazas (JSON desde OLE .xls)
- Insight clave del usuario: legal != realidad, la diferencia ES la denuncia
- Cobertura 4/4 islas con calidad desigual documentada en VALIDACION.md
- PLAN.md y FASE-0-setup.md actualizados con el estado real
2026-07-14 11:20:08 +02:00
itziarZG 99ad1f86cd chore: no commitear secciones_balears.gpkg 2026-07-14 10:10:02 +02:00
itziarZG 1e86070998 feat(fase-0): setup entorno, descarga shapefile y listings Airbnb
- Estructura de carpetas creada (data/{raw,processed,output}, web, docs, scripts)
- .gitignore con reglas para archivos grandes
- Entorno Python 3.10 con uv (pandas, geopandas, duckdb, etc.)
- Entorno Node 20 + pnpm 9
- Shapefile INE 2025 (60MB) -> GeoPackage Balears en WGS84 (5.3MB, 674 secciones)
- Inside Airbnb: Mallorca (45.741 listings) y Menorca (8.492 listings)
- Documentacion: ORIGEN.md, VALIDACION.md, PLAN.md, FASE-X.md actualizados

Limitacion detectada: Inside Airbnb no tiene datos para Eivissa ni Formentera.
Pendiente decidir fuente alternativa antes de Fase 1.
2026-07-14 10:09:55 +02:00
itziarZG 53f24de3ce chore: estructura inicial del proyecto 2026-07-14 09:52:12 +02:00