Initial commit

This commit is contained in:
2026-02-10 16:22:14 +05:00
parent bc64b84640
commit 505f49fbd9
6720 changed files with 1357701 additions and 0 deletions

19
public/robots.txt Normal file
View File

@@ -0,0 +1,19 @@
User-agent: *
Allow: /
# Sitemap
Sitemap: https://geowektor.ru/sitemap.xml
# Запрет индексации служебных файлов
Disallow: /node_modules/
Disallow: /*.json
Disallow: /*.ts
Disallow: /*.tsx
# Доступ к медиа файлам
Allow: /media/
# Host (основной домен)
Host: https://geowektor.ru

107
public/sitemap.xml Normal file
View File

@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://geowektor.ru/</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://geowektor.ru/#/about</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://geowektor.ru/#/services</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://geowektor.ru/#/services/surveying</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://geowektor.ru/#/services/design</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://geowektor.ru/#/services/construction</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://geowektor.ru/#/services/soil-survey</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://geowektor.ru/#/services/building-survey</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://geowektor.ru/#/services/land-survey</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://geowektor.ru/#/services/technical-tasks</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://geowektor.ru/#/projects</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://geowektor.ru/#/fleet</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://geowektor.ru/#/laboratories/soil</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://geowektor.ru/#/laboratories/radiation</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://geowektor.ru/#/certificates</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://geowektor.ru/#/contacts</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://geowektor.ru/#/privacy-policy</loc>
<lastmod>2025-01-01</lastmod>
<changefreq>yearly</changefreq>
<priority>0.5</priority>
</url>
</urlset>

67
public/sw.js Normal file
View File

@@ -0,0 +1,67 @@
const CACHE_NAME = 'geovector-v1';
const urlsToCache = [
'/',
'/index.html',
'/index.css',
'/media/geo-logo.webp',
'/media/qr-code.png'
];
// Установка Service Worker
self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(CACHE_NAME)
.then((cache) => {
console.log('Кэш открыт');
return cache.addAll(urlsToCache);
})
);
self.skipWaiting();
});
// Активация Service Worker
self.addEventListener('activate', (event) => {
event.waitUntil(
caches.keys().then((cacheNames) => {
return Promise.all(
cacheNames.map((cacheName) => {
if (cacheName !== CACHE_NAME) {
console.log('Удаление старого кэша:', cacheName);
return caches.delete(cacheName);
}
})
);
})
);
return self.clients.claim();
});
// Fetch - стратегия Network First, затем Cache
self.addEventListener('fetch', (event) => {
event.respondWith(
fetch(event.request)
.then((response) => {
// Клонируем ответ, так как можем использовать его только один раз
const responseToCache = response.clone();
caches.open(CACHE_NAME).then((cache) => {
cache.put(event.request, responseToCache);
});
return response;
})
.catch(() => {
// Если сеть недоступна, пытаемся получить из кэша
return caches.match(event.request).then((cachedResponse) => {
if (cachedResponse) {
return cachedResponse;
}
// Если нет в кэше, возвращаем офлайн-страницу
return caches.match('/index.html');
});
})
);
});