feat(site): add Umami self-hosted analytics and remove press page

This commit is contained in:
2026-07-31 10:00:18 +02:00
parent 7ffaf864aa
commit c0d2dc1cbf
3 changed files with 4 additions and 149 deletions
+3 -1
View File
@@ -18,7 +18,6 @@ const year = new Date().getFullYear();
<a href="/mapa" class="hover:text-orange-700">{t(lang, "nav.map")}</a>
<a href="/illes" class="hover:text-orange-700">{t(lang, "nav.islands")}</a>
<a href="/dades" class="hover:text-orange-700">{t(lang, "nav.data")}</a>
<a href="/premsa" class="hover:text-orange-700">{t(lang, "nav.press")}</a>
<a href="/qui-som" class="hover:text-orange-700">{t(lang, "nav.about")}</a>
<a href="/metodologia" class="hover:text-orange-700">{t(lang, "nav.methodology")}</a>
</nav>
@@ -40,5 +39,8 @@ const year = new Date().getFullYear();
© {year} Cases Tancades · CC BY-SA 4.0
</p>
<p class="text-xs text-stone-500 mt-2 italic" set:html={t(lang, "footer.based_on")} />
<p class="text-xs text-stone-500 leading-relaxed mt-2">
Esta web usa Umami, analítica autoalojada y sin cookies — no se rastrea ni se almacena ningún dato en tu navegador.
</p>
</div>
</footer>
+1
View File
@@ -49,6 +49,7 @@ const ogLocale = lang === "es" ? "es_ES" : "ca_ES";
<meta name="twitter:title" content={fullTitle} />
<meta name="twitter:description" content={fullDescription} />
<meta name="twitter:image" content={ogImage} />
<script defer src="https://stats.itziarzameza.dev/script.js" data-website-id="48639f89-47fc-4528-9363-54f355c9995d"></script>
</head>
<body class="bg-stone-50 text-stone-900">
<a
-148
View File
@@ -1,148 +0,0 @@
---
export const prerender = false;
import Base from "../layouts/Base.astro";
import { getLangFromAstroCookies, t, tArray, type Lang } from "../i18n";
const lang: Lang = getLangFromAstroCookies(Astro.cookies);
// TODO: substituir per correu real quan es decideixi. Format actual: premsa@<domini>
const CONTACT_EMAIL = "premsa@casestancades.cat";
interface Quoteable {
number: string;
text: string;
source: string;
}
const quoteables = tArray<Quoteable>(lang, "press.quoteables");
const description = t(lang, "press.lead");
---
<Base
lang={lang}
active="press"
title={t(lang, "press.title")}
description={description}
>
<section class="bg-gradient-to-b from-orange-50 to-stone-50 border-b border-stone-200">
<div class="max-w-4xl mx-auto px-4 py-12 sm:py-16 text-center">
<h1 class="text-3xl sm:text-4xl font-bold text-stone-900 mb-4">
{t(lang, "press.title")}
</h1>
<p class="text-base sm:text-lg text-stone-700 max-w-2xl mx-auto">
{description}
</p>
</div>
</section>
<section class="max-w-5xl mx-auto px-4 py-12">
<h2 class="text-2xl sm:text-3xl font-bold text-stone-900 mb-2">
{t(lang, "press.section_quoteable_title")}
</h2>
<p class="text-stone-600 mb-6">{t(lang, "press.section_quoteable_lead")}</p>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
{quoteables.map((q) => (
<blockquote class="border-l-4 border-orange-700 bg-white p-4 rounded-r">
<p class="text-3xl font-bold text-orange-700 tabular-nums mb-1">{q.number}</p>
<p class="text-stone-800 mb-2">{q.text}</p>
<cite class="text-xs text-stone-500 not-italic">— {q.source}</cite>
</blockquote>
))}
</div>
</section>
<section class="max-w-5xl mx-auto px-4 py-12 border-t border-stone-200">
<h2 class="text-2xl sm:text-3xl font-bold text-stone-900 mb-4">
{t(lang, "press.section_bio_title")}
</h2>
<p class="text-stone-700 leading-relaxed text-lg">
{t(lang, "press.section_bio_body")}
</p>
</section>
<section class="max-w-5xl mx-auto px-4 py-12 border-t border-stone-200">
<h2 class="text-2xl sm:text-3xl font-bold text-stone-900 mb-2">
{t(lang, "press.section_contact_title")}
</h2>
<p class="text-stone-700 mb-4">{t(lang, "press.section_contact_body")}</p>
<dl class="grid grid-cols-1 sm:grid-cols-2 gap-4 max-w-2xl">
<div class="bg-white border border-stone-200 rounded p-4">
<dt class="text-xs uppercase tracking-wide text-stone-500 mb-1">
{t(lang, "press.contact_email_label")}
</dt>
<dd>
<a
href={`mailto:${CONTACT_EMAIL}`}
class="text-orange-700 hover:text-orange-800 font-medium underline break-all"
>
{CONTACT_EMAIL}
</a>
</dd>
</div>
<div class="bg-white border border-stone-200 rounded p-4">
<dt class="text-xs uppercase tracking-wide text-stone-500 mb-1">
{t(lang, "press.contact_response_label")}
</dt>
<dd class="text-stone-800 font-medium">{t(lang, "press.contact_response_value")}</dd>
</div>
</dl>
</section>
<section class="max-w-5xl mx-auto px-4 py-12 border-t border-stone-200">
<h2 class="text-2xl sm:text-3xl font-bold text-stone-900 mb-2">
{t(lang, "press.section_assets_title")}
</h2>
<p class="text-stone-600 mb-6">{t(lang, "press.section_assets_lead")}</p>
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<a
href="/og-image.png"
download
class="block border border-stone-200 rounded-lg p-5 bg-white hover:border-orange-700 transition-colors"
>
<h3 class="font-bold text-orange-700 mb-1">{t(lang, "press.asset_og_title")}</h3>
<p class="text-sm text-stone-600 mb-3">{t(lang, "press.asset_og_desc")}</p>
<code class="text-xs bg-stone-100 px-1.5 py-0.5 rounded">/og-image.png</code>
</a>
<a
href="/tiles/dataset.pmtiles"
download
class="block border border-stone-200 rounded-lg p-5 bg-white hover:border-orange-700 transition-colors"
>
<h3 class="font-bold text-orange-700 mb-1">{t(lang, "press.asset_tiles_title")}</h3>
<p class="text-sm text-stone-600 mb-3">{t(lang, "press.asset_tiles_desc")}</p>
<code class="text-xs bg-stone-100 px-1.5 py-0.5 rounded">/tiles/dataset.pmtiles</code>
</a>
<a
href="/dades"
class="block border border-stone-200 rounded-lg p-5 bg-white hover:border-orange-700 transition-colors"
>
<h3 class="font-bold text-orange-700 mb-1">{t(lang, "press.asset_data_title")}</h3>
<p class="text-sm text-stone-600 mb-3">{t(lang, "press.asset_data_desc")}</p>
<code class="text-xs bg-stone-100 px-1.5 py-0.5 rounded">/dades</code>
</a>
</div>
</section>
<section class="max-w-5xl mx-auto px-4 py-12 border-t border-stone-200">
<h2 class="text-2xl sm:text-3xl font-bold text-stone-900 mb-4">
{t(lang, "press.section_how_to_title")}
</h2>
<ul class="space-y-2 text-stone-700 list-disc pl-5">
<li>{t(lang, "press.cite_1")}</li>
<li>{t(lang, "press.cite_2")}</li>
<li>{t(lang, "press.cite_3")}</li>
</ul>
</section>
<section class="max-w-5xl mx-auto px-4 py-12 border-t border-stone-200">
<div class="bg-stone-100 border-l-4 border-stone-400 p-4 rounded-r">
<h2 class="text-lg font-bold text-stone-900 mb-2">
{t(lang, "press.section_disclaimer_title")}
</h2>
<p class="text-stone-700 leading-relaxed">
{t(lang, "press.disclaimer_body")}
</p>
</div>
</section>
</Base>