{
"name": "AviGest Pro — Gil Tangata",
"short_name": "AviGest",
"description": "Gestão e protótipos de avicultura",
"start_url": "/",
"display": "standalone",
"background_color": "#F5EFE4",
"theme_color": "#2C1A0E",
"orientation": "portrait",
"icons": [
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }
]
}
2. No index.html — adicionar dentro de :
3. public/sw.js (service worker básico para funcionar offline):
self.addEventListener('install', e => e.waitUntil(
caches.open('avigest-v1').then(c => c.addAll(['/']))
));
self.addEventListener('fetch', e => e.respondWith(
caches.match(e.request).then(r => r || fetch(e.request))
));
4. Registar o SW — no src/main.tsx ou entrypoint:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js');
}
{
3. public/sw.js (service worker básico para funcionar offline):"name": "AviGest Pro — Gil Tangata",
"short_name": "AviGest",
"description": "Gestão e protótipos de avicultura",
"start_url": "/",
"display": "standalone",
"background_color": "#F5EFE4",
"theme_color": "#2C1A0E",
"orientation": "portrait",
"icons": [
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }
]
}
2. No index.html — adicionar dentro de :
self.addEventListener('install', e => e.waitUntil(
caches.open('avigest-v1').then(c => c.addAll(['/']))
));
self.addEventListener('fetch', e => e.respondWith(
caches.match(e.request).then(r => r || fetch(e.request))
));
4. Registar o SW — no src/main.tsx ou entrypoint:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js');
}