feat: complete brand icon and static caching
This commit is contained in:
@@ -12,7 +12,7 @@ RF4DB/RF4-STAT/RF4MAP/RF4 Posts сначала принимаются в изо
|
|||||||
|
|
||||||
На сайте у каждой записи отображается источник, а у агрегированной активности — все вошедшие в расчёт источники. Неполные community-наблюдения публикуются сразу в отдельной ленте «Полевые сигналы» с предупреждением и перечнем отсутствующих полей; до подтверждения полноты они не влияют на индекс клёва.
|
На сайте у каждой записи отображается источник, а у агрегированной активности — все вошедшие в расчёт источники. Неполные community-наблюдения публикуются сразу в отдельной ленте «Полевые сигналы» с предупреждением и перечнем отсутствующих полей; до подтверждения полноты они не влияют на индекс клёва.
|
||||||
|
|
||||||
Базовый SEO-контур готов для `rf4spotter.ru`: страницы имеют уникальные метаданные, canonical, Open Graph/Twitter Card, фирменное изображение 1200×630 и JSON-LD; доступны динамические `/robots.txt` и `/sitemap.xml`, административные и ошибочные страницы закрыты от индексации, добавлена собственная страница 404. Индексируемые каталоги рыб и водоёмов, detail-страницы и сочетания водоём + рыба строятся из актуального разрешённого справочника и включаются в sitemap.
|
Базовый SEO-контур готов для `rf4spotter.ru`: страницы имеют уникальные метаданные, canonical, Open Graph/Twitter Card, фирменное изображение 1200×630 и JSON-LD; доступны динамические `/robots.txt` и `/sitemap.xml`, административные и ошибочные страницы закрыты от индексации, добавлена собственная страница 404. Индексируемые каталоги рыб и водоёмов, detail-страницы и сочетания водоём + рыба строятся из актуального разрешённого справочника и включаются в sitemap. Подключены фирменные favicon/app icons, web manifest и production-кэширование статических ресурсов.
|
||||||
|
|
||||||
Публичные точки используют постоянные читаемые адреса вида `/spots/kuori-85x92`; старые UUID-адреса остаются совместимыми и перенаправляются на канонический URL.
|
Публичные точки используют постоянные читаемые адреса вида `/spots/kuori-85x92`; старые UUID-адреса остаются совместимыми и перенаправляются на канонический URL.
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 57 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.9 KiB |
@@ -1,6 +1,11 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||||
<rect width="32" height="32" rx="9" fill="#082226"/>
|
<rect width="64" height="64" rx="16" fill="#082226"/>
|
||||||
<path d="M7 16c3.2-4.2 7-6 11.1-4.2 2 .9 3.5 2.4 4.9 4.2-1.4 1.8-2.9 3.3-4.9 4.2C14 22 10.2 20.2 7 16Z" fill="#c9f45b"/>
|
<g stroke="#295158" stroke-width="1" opacity=".7">
|
||||||
<circle cx="19" cy="14.5" r="1.1" fill="#082226"/>
|
<path d="M16 8v48M32 8v48M48 8v48M8 16h48M8 32h48M8 48h48"/>
|
||||||
<path d="m8 16-3.5-3.5v7L8 16Z" fill="#c9f45b"/>
|
</g>
|
||||||
|
<path d="M11 46c8-5 14 5 22 0s14 5 21 0" fill="none" stroke="#6fc3c4" stroke-width="2.5" stroke-linecap="round"/>
|
||||||
|
<path d="M37 8v21" stroke="#f4efe2" stroke-width="3" stroke-linecap="round"/>
|
||||||
|
<path d="M32 17h10l-2 12h-6Z" fill="#c9f45b"/>
|
||||||
|
<path d="M37 29v13c0 9-13 11-15 2-1-5 3-8 7-7" fill="none" stroke="#c9f45b" stroke-width="4" stroke-linecap="round"/>
|
||||||
|
<circle cx="37" cy="13" r="2.5" fill="#ff785a"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 350 B After Width: | Height: | Size: 665 B |
Binary file not shown.
|
After Width: | Height: | Size: 60 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 368 KiB |
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "RF4 Spotter — Ни хвоста, ни чешуи",
|
||||||
|
"short_name": "RF4 Spotter",
|
||||||
|
"description": "Свежие точки и уловы в Russian Fishing 4 с указанием источников.",
|
||||||
|
"lang": "ru",
|
||||||
|
"start_url": "/",
|
||||||
|
"scope": "/",
|
||||||
|
"display": "standalone",
|
||||||
|
"background_color": "#f2f5ee",
|
||||||
|
"theme_color": "#082226",
|
||||||
|
"icons": [
|
||||||
|
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any maskable" },
|
||||||
|
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any maskable" }
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -29,7 +29,11 @@ const jsonLd = JSON.stringify({
|
|||||||
<meta name="description" content={description} />
|
<meta name="description" content={description} />
|
||||||
<meta name="robots" content={preventIndexing ? "noindex, nofollow" : "index, follow, max-image-preview:large"} />
|
<meta name="robots" content={preventIndexing ? "noindex, nofollow" : "index, follow, max-image-preview:large"} />
|
||||||
<link rel="canonical" href={canonical} />
|
<link rel="canonical" href={canonical} />
|
||||||
<link rel="icon" href="/favicon.svg" />
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
||||||
|
<link rel="icon" href="/favicon-32.png" sizes="32x32" type="image/png" />
|
||||||
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
||||||
|
<link rel="manifest" href="/site.webmanifest" />
|
||||||
|
<meta name="theme-color" content="#082226" />
|
||||||
<meta property="og:locale" content="ru_RU" />
|
<meta property="og:locale" content="ru_RU" />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:site_name" content="RF4 Spotter" />
|
<meta property="og:site_name" content="RF4 Spotter" />
|
||||||
|
|||||||
@@ -6,6 +6,15 @@
|
|||||||
{$SITE_DOMAIN} {
|
{$SITE_DOMAIN} {
|
||||||
encode zstd gzip
|
encode zstd gzip
|
||||||
|
|
||||||
|
@immutable path /_astro/*
|
||||||
|
header @immutable Cache-Control "public, max-age=31536000, immutable"
|
||||||
|
|
||||||
|
@brandAssets path /favicon.svg /favicon-32.png /apple-touch-icon.png /icon-192.png /icon-512.png /og-rf4spotter.png
|
||||||
|
header @brandAssets Cache-Control "public, max-age=86400, stale-while-revalidate=604800"
|
||||||
|
|
||||||
|
@manifest path /site.webmanifest
|
||||||
|
header @manifest Cache-Control "public, max-age=3600"
|
||||||
|
|
||||||
@admin path /admin/*
|
@admin path /admin/*
|
||||||
handle @admin {
|
handle @admin {
|
||||||
basic_auth {
|
basic_auth {
|
||||||
|
|||||||
+2
-2
@@ -123,7 +123,7 @@
|
|||||||
|
|
||||||
### Графические элементы и объяснение данных
|
### Графические элементы и объяснение данных
|
||||||
|
|
||||||
- [ ] Подготовить фирменный знак «крючок + поплавок + координатная сетка» и согласованный набор favicon/app icons.
|
- [x] Подготовить фирменный знак «крючок + поплавок + координатная сетка» и согласованный набор favicon/app icons (7 сентября 2026).
|
||||||
- [ ] Добавить координатный радар или мини-карту на страницу точки.
|
- [ ] Добавить координатный радар или мини-карту на страницу точки.
|
||||||
- [ ] Добавить временную шкалу активности 24/72 часа в рыболовной стилистике.
|
- [ ] Добавить временную шкалу активности 24/72 часа в рыболовной стилистике.
|
||||||
- [ ] Добавить лёгкие силуэты видов рыб, не перегружая карточки результатов.
|
- [ ] Добавить лёгкие силуэты видов рыб, не перегружая карточки результатов.
|
||||||
@@ -139,7 +139,7 @@
|
|||||||
- [x] Добавить экспоненциальный backoff community scheduler после повторных ошибок от 30 минут до 24 часов со сбросом после успеха (7 сентября 2026).
|
- [x] Добавить экспоненциальный backoff community scheduler после повторных ошибок от 30 минут до 24 часов со сбросом после успеха (7 сентября 2026).
|
||||||
- [x] Показывать на `/status` безопасное состояние источников: актуален, устарел, временно ограничен, изменился DOM, ожидает запуска или выключен (7 сентября 2026).
|
- [x] Показывать на `/status` безопасное состояние источников: актуален, устарел, временно ограничен, изменился DOM, ожидает запуска или выключен (7 сентября 2026).
|
||||||
- [ ] Добавить короткое серверное кэширование публичных GET API и проверить корректную инвалидацию после публикации.
|
- [ ] Добавить короткое серверное кэширование публичных GET API и проверить корректную инвалидацию после публикации.
|
||||||
- [ ] Настроить долгий immutable cache для хешированных assets и разумный cache для изображений/favicon.
|
- [x] Настроить долгий immutable cache для хешированных assets и разумный cache для изображений/favicon (7 сентября 2026).
|
||||||
- [ ] Добавить пагинацию или «Показать ещё» для публичной ленты полевых сигналов.
|
- [ ] Добавить пагинацию или «Показать ещё» для публичной ленты полевых сигналов.
|
||||||
- [ ] Ограничить визуальные повторы одинаковых сигналов без потери provenance.
|
- [ ] Ограничить визуальные повторы одинаковых сигналов без потери provenance.
|
||||||
- [ ] Добавить безопасный административный экспорт диагностики без персональных данных.
|
- [ ] Добавить безопасный административный экспорт диагностики без персональных данных.
|
||||||
|
|||||||
Reference in New Issue
Block a user