# Progressive Web App (PWA) Guide (Eesti) 🌐 **Languages:** 🇺🇸 [English](../../../../guides/PWA_GUIDE.md) · 🇪🇹 [am](../../../am/docs/guides/PWA_GUIDE.md) · 🇸🇦 [ar](../../../ar/docs/guides/PWA_GUIDE.md) · 🇦🇿 [az](../../../az/docs/guides/PWA_GUIDE.md) · 🇧🇬 [bg](../../../bg/docs/guides/PWA_GUIDE.md) · 🇧🇩 [bn](../../../bn/docs/guides/PWA_GUIDE.md) · 🇧🇦 [bs](../../../bs/docs/guides/PWA_GUIDE.md) · 🇨🇿 [cs](../../../cs/docs/guides/PWA_GUIDE.md) · 🇩🇰 [da](../../../da/docs/guides/PWA_GUIDE.md) · 🇩🇪 [de](../../../de/docs/guides/PWA_GUIDE.md) · 🇬🇷 [el](../../../el/docs/guides/PWA_GUIDE.md) · 🇪🇸 [es](../../../es/docs/guides/PWA_GUIDE.md) · 🇮🇷 [fa](../../../fa/docs/guides/PWA_GUIDE.md) · 🇫🇮 [fi](../../../fi/docs/guides/PWA_GUIDE.md) · 🇫🇷 [fr](../../../fr/docs/guides/PWA_GUIDE.md) · 🇮🇪 [ga](../../../ga/docs/guides/PWA_GUIDE.md) · 🇮🇳 [gu](../../../gu/docs/guides/PWA_GUIDE.md) · 🇳🇬 [ha](../../../ha/docs/guides/PWA_GUIDE.md) · 🇮🇱 [he](../../../he/docs/guides/PWA_GUIDE.md) · 🇮🇳 [hi](../../../hi/docs/guides/PWA_GUIDE.md) · 🇭🇷 [hr](../../../hr/docs/guides/PWA_GUIDE.md) · 🇭🇺 [hu](../../../hu/docs/guides/PWA_GUIDE.md) · 🇦🇲 [hy](../../../hy/docs/guides/PWA_GUIDE.md) · 🇮🇩 [id](../../../id/docs/guides/PWA_GUIDE.md) · 🇳🇬 [ig](../../../ig/docs/guides/PWA_GUIDE.md) · 🇮🇹 [it](../../../it/docs/guides/PWA_GUIDE.md) · 🇯🇵 [ja](../../../ja/docs/guides/PWA_GUIDE.md) · 🇬🇪 [ka](../../../ka/docs/guides/PWA_GUIDE.md) · 🇰🇭 [km](../../../km/docs/guides/PWA_GUIDE.md) · 🇮🇳 [kn](../../../kn/docs/guides/PWA_GUIDE.md) · 🇰🇷 [ko](../../../ko/docs/guides/PWA_GUIDE.md) · 🇱🇹 [lt](../../../lt/docs/guides/PWA_GUIDE.md) · 🇱🇻 [lv](../../../lv/docs/guides/PWA_GUIDE.md) · 🇮🇳 [ml](../../../ml/docs/guides/PWA_GUIDE.md) · 🇮🇳 [mr](../../../mr/docs/guides/PWA_GUIDE.md) · 🇲🇾 [ms](../../../ms/docs/guides/PWA_GUIDE.md) · 🇲🇹 [mt](../../../mt/docs/guides/PWA_GUIDE.md) · 🇲🇲 [my](../../../my/docs/guides/PWA_GUIDE.md) · 🇳🇵 [ne](../../../ne/docs/guides/PWA_GUIDE.md) · 🇳🇱 [nl](../../../nl/docs/guides/PWA_GUIDE.md) · 🇳🇴 [no](../../../no/docs/guides/PWA_GUIDE.md) · 🇮🇳 [or](../../../or/docs/guides/PWA_GUIDE.md) · 🇮🇳 [pa](../../../pa/docs/guides/PWA_GUIDE.md) · 🇵🇭 [phi](../../../phi/docs/guides/PWA_GUIDE.md) · 🇵🇱 [pl](../../../pl/docs/guides/PWA_GUIDE.md) · 🇵🇹 [pt](../../../pt/docs/guides/PWA_GUIDE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/guides/PWA_GUIDE.md) · 🇷🇴 [ro](../../../ro/docs/guides/PWA_GUIDE.md) · 🇷🇺 [ru](../../../ru/docs/guides/PWA_GUIDE.md) · 🇱🇰 [si](../../../si/docs/guides/PWA_GUIDE.md) · 🇸🇰 [sk](../../../sk/docs/guides/PWA_GUIDE.md) · 🇸🇮 [sl](../../../sl/docs/guides/PWA_GUIDE.md) · 🇷🇸 [sr](../../../sr/docs/guides/PWA_GUIDE.md) · 🇸🇪 [sv](../../../sv/docs/guides/PWA_GUIDE.md) · 🇰🇪 [sw](../../../sw/docs/guides/PWA_GUIDE.md) · 🇮🇳 [ta](../../../ta/docs/guides/PWA_GUIDE.md) · 🇮🇳 [te](../../../te/docs/guides/PWA_GUIDE.md) · 🇹🇭 [th](../../../th/docs/guides/PWA_GUIDE.md) · 🇹🇷 [tr](../../../tr/docs/guides/PWA_GUIDE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/guides/PWA_GUIDE.md) · 🇵🇰 [ur](../../../ur/docs/guides/PWA_GUIDE.md) · 🇺🇿 [uz](../../../uz/docs/guides/PWA_GUIDE.md) · 🇻🇳 [vi](../../../vi/docs/guides/PWA_GUIDE.md) · 🇳🇬 [yo](../../../yo/docs/guides/PWA_GUIDE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/guides/PWA_GUIDE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/guides/PWA_GUIDE.md) --- OmniRoute tarnitakse täielikult installitava progressiivse veebirakendusena. Kui avate töölaua mis tahes mobiilibrauseris — Androidis (Chrome) või iOS-is (Safari) — saate valida „Lisa avakuvale“ ja kasutada omarakendusega sarnanevat kasutuskogemust ilma rakendustepoeta. ## Mis on PWA? Progressiivne veebirakendus muudab OmniRoute'i veebitöölaua rakenduseks, mis näeb välja ja toimib nagu omarakendus. Pärast installimist: - Käivitub see avakuvalt oma ikooniga - Avaneb see täisekraanil — ilma brauseri aadressiriba või vahelehtede kasutajaliideseta - Töötab see võrguühenduseta spetsiaalse ühenduvuslehe abil - Salvestab staatilised ressursid kiiremaks laadimiseks vahemällu - Toetab nii püst- kui ka rõhtpaigutust ## Installimine ### Android (Chrome) 1. Avage OmniRoute'i töölaud Chrome'is: `http://YOUR_IP:20128` 2. Chrome kuvab automaatselt bänneri **„Lisa OmniRoute avakuvale“** või tehke järgmist: - Puudutage menüüd **⋮** (kolm punkti) → **„Lisa avakuvale“** või **„Installi rakendus“** 3. Kinnitage viip 4. OmniRoute ilmub teie avakuvale eraldiseisva rakendusena ### iOS (Safari) 1. Avage OmniRoute'i töölaud Safaris: `http://YOUR_IP:20128` 2. Puudutage nuppu **Jaga** (noolega kast) 3. Kerige alla ja puudutage valikut **„Lisa avakuvale“** 4. Pange sellele nimi (vaikimisi „OmniRoute“) ja puudutage nuppu **Lisa** 5. OmniRoute ilmub teie avakuvale rakenduse ikooniga ### Lauaarvuti (Chrome / Edge) 1. Avage OmniRoute'i töölaud 2. Klõpsake aadressiribal **installimisikooni** (või ⋮ → „Installi OmniRoute...“) 3. Kinnitage viip 4. OmniRoute avaneb eraldiseisvas aknas — ilma vahelehtede ja aadressiribata ## Funktsioonid ### Täisekraanikogemus Manifest on konfigureeritud sättega `display: "fullscreen"`, mis tähendab, et installitud rakendus kasutab kogu ekraani — ilma brauseri kasutajaliidese ja olekuribaga kattumiseta. See muudab töölaua kasutuskogemuse tõeliselt omarakenduse sarnaseks. ### Võrguühenduseta kasutamise tugi OmniRoute sisaldab service worker'it (`sw.js`), mis pakub nutikat vahemällu salvestamist: | Ressursi tüüp | Strateegia | Käitumine | | ------------------------------------------------------------ | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | | **Rakenduse kest** | Esmalt vahemälu | `/`, `/offline`, manifest ja ikoonid salvestatakse installimisel eelnevalt vahemällu | | **Staatilised ressursid** (CSS, JS, pildid, fondid) | Esmalt võrk, varuvariandina vahemälu | Hangib värske versiooni võrgust; võrguühenduseta olekus kasutab vahemälu | | **Next.js-i paketid** (`/_next/`) | Esmalt võrk koos vahemälu uuendamisega | Hangib võrgust ja uuendab vahemälu; võrguühenduseta olekus edastab vahemällu salvestatud versiooni | | **Navigeerimispäringud** | Möödajuhtimine (ei püüta kunagi kinni) | Brauser haldab HTTP/3→HTTP/2 varumehhanismi; mittetoimiv QUIC-sokkel ei tohi muutuda väärtuseks `Response.error()` | | **API / töölaua marsruudid** (`/api/`, `/a2a`, `/dashboard`) | Möödajuhtimine (ei salvestata kunagi vahemällu) | Läheb alati otse serverisse — service worker ei püüa seda kunagi kinni | ### Võrguühenduseta leht Kui võrguühendus pole saadaval ja kasutaja liigub uuele lehele, kuvab service worker spetsiaalse `/offline` lehe, mis: - Kuvab selge teate **„Ühenduvusprobleem“** - Näitab reaalajas uuenevat **võrgus / võrguühenduseta oleku indikaatorit** - Pakub nuppu **„Proovi uuesti ühendust luua“**, et ühenduse taastumisel leht uuesti laadida - Sisaldab diagnostikaks linki **olekulehele** ### Rakenduse ikoonid OmniRoute pakub iga platvormi jaoks optimeeritud ikoone: | Fail | Suurus | Kasutuskoht | | ---------------------- | ---------------- | -------------------------------------- | | `icon-512.png` | 512×512 | Androidi installimisviip, käivituskuva | | `apple-touch-icon.png` | 180×180 | iOS-i avakuva ikoon | | `icon-192.svg` | 192×192 (vektor) | Androidi kohanduv ikoon | | `apple-touch-icon.svg` | 180×180 (vektor) | Apple'i varuvariant | | `favicon.svg` | Vektor | Brauseri vahelehed | | `favicon.ico` | Mitu suurust | Vanemad brauserid | ### Automaatne registreerimine Service worker registreeritakse automaatselt juurpaigutuse komponendi `` kaudu. Kasutaja ei pea midagi tegema — rakendus muutub installitavaks kohe, kui brauser tuvastab kehtiva manifesti ja service worker'i. ## Tehniline arhitektuur ### Veebirakenduse manifest (`manifest.webmanifest`) Loodud Next.js-i poolt faili `src/app/manifest.ts` kaudu: ```json { "name": "OmniRoute", "short_name": "OmniRoute", "description": "OmniRoute is an AI gateway for multi-provider LLMs. One endpoint for all your AI providers.", "start_url": "/", "scope": "/", "display": "fullscreen", "orientation": "any", "background_color": "#0b0f1a", "theme_color": "#0b0f1a", "icons": [ { "src": "/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any maskable" }, { "src": "/apple-touch-icon.png", "sizes": "180x180", "type": "image/png" } ] } ``` ### Teenusetöötaja (`public/sw.js`) Tavaline teenusetöötaja (ilma raamistikusõltuvusteta), millel on: - **Installimisetapp**: Salvestab rakenduse kesta (juurlehe, võrguühenduseta lehe, manifesti ja ikoonid) eelnevalt vahemällu - **Aktiveerimisetapp**: Eemaldab vanad vahemäluversioonid ja võtab kõik kliendid enda kontrolli alla - **Päringuetapp**: Nutikas marsruutimine päringu tüübi alusel (navigeerimine, staatiline ressurss, API) - **Vahemälu versioonihaldus**: `omniroute-pwa-v3` — suurendage seda versiooni, et sundida värskendamisel uue vahemälu loomist ### Paigutuse metaandmed (`src/app/layout.tsx`) Juurpaigutus sisaldab kõiki PWA nõuetele vastavuseks vajalikke metasilte: - `manifest`-link aadressile `/manifest.webmanifest` - `apple-web-app-capable: true` iOS-i eraldiseisva režiimi jaoks - `apple-web-app-status-bar-style: black-translucent` - `mobile-web-app-capable: yes` Androidi Chrome'i jaoks - `theme-color: #0b0f1a` - `viewport-fit: cover` servast servani renderdamiseks ### Komponent: `PwaRegister` See failis `src/shared/components/PwaRegister.tsx` asuv kliendikomponent: 1. Käivitub komponendi ühendamisel (ainult kliendipoolel) 2. Kontrollib brauseris `serviceWorker`-i toe olemasolu 3. Registreerib `/sw.js`-i vaikselt (vead jäetakse tähelepanuta, et vältida rakenduse blokeerimist) 4. Ei renderda midagi (`return null`) — see komponent on mõeldud ainult kõrvalmõju tekitamiseks ## Kasutamine Termuxiga (Android) OmniRoute'i käitamisel Androidis Termuxi kaudu töötab PWA sujuvalt: 1. Käivitage OmniRoute Termuxis: `npx omniroute` 2. Avage samas telefonis Chrome: `http://localhost:20128` 3. Installige PWA valiku „Lisa avakuvale” kaudu 4. PWA loob ühenduse kohaliku Termuxi serveriga — kõik töötab seadmes See kombinatsioon tähendab, et teie Androidi telefon on korraga nii **server** (Termux) kui ka **klient** (PWA) — täielikult iseseisev tehisintellekti lüüs. ## Kasutamine teistest seadmetest Installige PWA mis tahes seadmesse, mille brauseril on juurdepääs teie OmniRoute'i serverile: - **Teine telefon/tahvelarvuti**: Minge aadressile `http://PHONE_IP:20128` ja installige PWA - **Sülearvuti**: Avage Chrome/Edge ja installige see töölaua-PWA-na - **Brauseriga nutiteler**: Avage juhtpaneel täisekraanirežiimis ## Kohandamine ### Eksemplari nimi PWA pealkiri arvestab jaotises `Dashboard → Settings` määratud seadet **Eksemplari nimi**. Kui nimetate oma eksemplari ümber nimeks „Minu tehisintellekti lüüs”, kuvatakse installitud PWA-l see nimi. ### Kohandatud favicon Kui laadite jaotise `Dashboard → Settings` kaudu üles kohandatud faviconi, kasutab töölaua PWA teie kohandatud ikooni. Mobiilseadme avakuva ikoonid kasutavad eelnevalt loodud faile `icon-512.png` ja `apple-touch-icon.png`. ## Piirangud - **Tõukemärguanded puuduvad** — Service worker ei rakenda Push API-t. Märguandeid haldab selle asemel Electroni rakendus. - **Taustal sünkroonimine puudub** — Võrguühenduseta tehtud toiminguid ei panda hilisemaks taasesitamiseks järjekorda. PWA on mõeldud peamiselt töölaua vaatamiseks. - **iOS-i piirangud** — Safari iOS-is ei toeta kõiki PWA funktsioone (nt installimisviibad on käsitsi käivitatavad ja taustal töötavad service worker'id on piiratud). - **Vahemälu suurus** — Service worker salvestab vahemällu ainult staatilised ressursid. Marsruutide `/api/` suuri vastuseandmeid ei salvestata kunagi vahemällu. - **Kohandatud ikoonid mobiilseadmetes** — Faviconi muutmine seadetes ei uuenda mobiilseadme avakuva ikooni (selleks tuleb PWA ikoonid uuesti genereerida). ## Failide ülevaade | Fail | Otstarve | | --------------------------------------- | ---------------------------------------------------------------------- | | `src/app/manifest.ts` | Next.js-i manifesti marsruut (genereerib faili `manifest.webmanifest`) | | `public/sw.js` | Vahemällu salvestamise loogikaga service worker | | `src/shared/components/PwaRegister.tsx` | Kliendikomponent, mis registreerib service worker'i | | `src/app/offline/page.tsx` | Võrguühenduseta režiimi varuleht koos reaalajas olekunäidikuga | | `src/app/layout.tsx` | PWA metaandmetega juurpaigutus (apple-web-app, theme-color jne) | | `public/icon-512.png` | 512×512 PNG-ikoon (Android, käivituskuva) | | `public/apple-touch-icon.png` | 180×180 PNG-ikoon (iOS-i avakuva) | | `public/icon-192.svg` | 192×192 SVG-ikoon (Androidi kohanduv ikoon) | | `public/apple-touch-icon.svg` | 180×180 SVG-ikoon (Apple'i varuikoon) |