# Progressive Web App (PWA) Guide (Igbo) 🌐 **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) · 🇪🇪 [et](../../../et/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) · 🇮🇹 [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 na-abịa dịka Progressive Web App a pụrụ ịwụnye n'ụzọ zuru ezu. Mgbe ị si na ihe nchọgharị mkpanaka ọ bụla — Android (Chrome) ma ọ bụ iOS (Safari) — banye na dashboard ahụ, ị nwere ike ịhọrọ **"Tinye na Ihuenyo Mbụ"** wee nweta ahụmịhe yiri nke ngwa e wuru maka ngwaọrụ ahụ n'achọghị ụlọ ahịa ngwa. ## Gịnị Bụ PWA? Progressive Web App na-agbanwe dashboard weebụ OmniRoute ka ọ bụrụ ihe yiri ma na-arụ ọrụ dịka ngwa mkpanaka e wuru maka ngwaọrụ ahụ. Ozugbo awụnyere ya, ọ: - Na-amalite site na ihuenyo mbụ gị site na akara ngosi nke ya - Na-emepe n'ihuenyo zuru ezu — enweghị ogwe adreesị ihe nchọgharị ma ọ bụ UI taabụ - Na-arụ ọrụ mgbe enweghị njikọ site na ibe njikọta pụrụ iche - Na-echekwa akụ static na cache ka nbudata wee dị ngwa - Na-akwado nhazi ihuenyo portrait na landscape ## Nwụnye ### Android (Chrome) 1. Mepee dashboard OmniRoute na Chrome: `http://YOUR_IP:20128` 2. Chrome ga-egosi ọkọlọtọ **"Tinye OmniRoute na Ihuenyo Mbụ"** na-akpaghị aka, ma ọ bụ: - Pịa menu **⋮** (ntụpọ atọ) → **"Tinye na Ihuenyo Mbụ"** ma ọ bụ **"Wụnye ngwa"** 3. Kwenye na arịrịọ ahụ 4. OmniRoute ga-apụta na ihuenyo mbụ gị dịka ngwa kwụụrụ onwe ya ### iOS (Safari) 1. Mepee dashboard OmniRoute na Safari: `http://YOUR_IP:20128` 2. Pịa bọtịnụ **Kekọrịta** (igbe nwere akụ) 3. Pịgharịa gaa n'okpuru wee pịa **"Tinye na Ihuenyo Mbụ"** 4. Nye ya aha (aha ndabara bụ "OmniRoute") wee pịa **Tinye** 5. OmniRoute ga-apụta na ihuenyo mbụ gị yana akara ngosi ngwa ahụ ### Desktọpụ (Chrome / Edge) 1. Mepee dashboard OmniRoute 2. Pịa **akara ngosi nwụnye** dị na ogwe adreesị (ma ọ bụ ⋮ → "Wụnye OmniRoute...") 3. Kwenye na arịrịọ ahụ 4. OmniRoute ga-emeghe dịka windo kwụụrụ onwe ya — enweghị taabụ, enweghị ogwe adreesị ## Njirimara ### Ahụmịhe Ihuenyo Zuru Ezu A haziri manifest ahụ na `display: "fullscreen"`, nke pụtara na ngwa awụnyere na-eji ihuenyo dum — enweghị UI ihe nchọgharị, enweghịkwa ndakọrịta n'elu ogwe ọnọdụ. Nke a na-eme ka dashboard ahụ dị ka ngwa e wuru n'ezie maka ngwaọrụ ahụ. ### Nkwado Mgbe Enweghị Njikọ OmniRoute nwere service worker (`sw.js`) nke na-enye nchekwa cache nwere ọgụgụ isi: | Ụdị Akụ | Atụmatụ | Omume | | ------------------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------- | | **App Shell** | Cache-first | A na-echekwa `/`, `/offline`, manifest, na akara ngosi na cache tupu oge eruo mgbe a na-arụnye ya | | **Akụ static** (CSS, JS, onyonyo, mkpụrụedemede) | Network-first with cache fallback | Ọ na-eweta nke ọhụrụ site na netwọkụ; ọ na-eji nke dị na cache ma ọ bụrụ na enweghị njikọ | | **Ngwugwu Next.js** (`/_next/`) | Network-first with cache update | Ọ na-eweta site na netwọkụ ma na-emelite cache; ọ na-enye ụdị echekwara ma ọ bụrụ na enweghị njikọ | | **Arịrịọ ngagharị** | Bypass (anaghị egbochi ya mgbe ọ bụla) | Ihe nchọgharị na-ahụ maka nlọghachi HTTP/3→HTTP/2; socket QUIC nwụrụ anwụ ekwesịghị ịghọ `Response.error()` | | **Ụzọ API / dashboard** (`/api/`, `/a2a`, `/dashboard`) | Bypass (anaghị echekwa ya na cache) | Ọ na-aga ozugbo na sava mgbe niile — service worker anaghị egbochi ya mgbe ọ bụla | ### Ibe Enweghị Njikọ Mgbe netwọkụ adịghị ma onye ọrụ agaa na ibe ọhụrụ, service worker na-enye ibe `/offline` pụrụ iche nke: - Na-egosi ozi **"Nsogbu Njikọta"** doro anya - Na-egosi **akara ọnọdụ online/offline** dị ndụ nke na-emelite ozugbo - Na-enye bọtịnụ **"Nwaa Njikọ Ọzọ"** iji budata ibe ahụ ọzọ mgbe njikọta lọtara - Na-ejikọ na **Ibe Ọnọdụ** maka nyocha nsogbu ### Akara Ngosi Ngwa OmniRoute na-enye akara ngosi ahaziri maka ikpo okwu ọ bụla: | Faịlụ | Nha | Ndị Na-eji Ya | | ---------------------- | ---------------- | -------------------------------------- | | `icon-512.png` | 512×512 | Arịrịọ nwụnye Android, ihuenyo mmalite | | `apple-touch-icon.png` | 180×180 | Akara ngosi ihuenyo mbụ iOS | | `icon-192.svg` | 192×192 (vector) | Akara ngosi adaptive Android | | `apple-touch-icon.svg` | 180×180 (vector) | Nhọrọ ndabere Apple | | `favicon.svg` | Vector | Taabụ ihe nchọgharị | | `favicon.ico` | Multi-size | Ihe nchọgharị ochie | ### Ndebanye Aha Akpaghị Aka A na-edebanye service worker ahụ na-akpaghị aka site na kọmpọnentị `` dị na root layout. Achọghị ihe onye ọrụ ga-eme — ngwa ahụ ga-abụ nke a pụrụ ịwụnye ozugbo ihe nchọgharị chọpụtara manifest na service worker ziri ezi. ## Nhazi Nka na Ụzụ ### Web App Manifest (`manifest.webmanifest`) Next.js na-emepụta ya site na `src/app/manifest.ts`: ```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" } ] } ``` ### Service Worker (`public/sw.js`) Service worker nkịtị (nke na-adabereghị na framework ọ bụla) nwere: - **Oge nrụnye**: Na-etinye app shell (root, ibe offline, manifest, na akara ngosi) na cache tupu oge eruo - **Oge mmalite ọrụ**: Na-ehichapụ ụdị cache ochie ma na-ejikọta ndị ahịa niile - **Oge fetch**: Nhọrọ ụzọ nwere ọgụgụ isi dabere n'ụdị arịrịọ (ngagharị, akụ static, API) - **Ịnye cache ụdị**: `omniroute-pwa-v3` — bulie nke a iji manye cache ọhụrụ mgbe emelitere ya ### Metadata nke Layout (`src/app/layout.tsx`) Root layout na-enye meta tag niile achọrọ maka nrubeisi PWA: - Njikọ `manifest` gaa na `/manifest.webmanifest` - `apple-web-app-capable: true` maka ọnọdụ standalone nke iOS - `apple-web-app-status-bar-style: black-translucent` - `mobile-web-app-capable: yes` maka Android Chrome - `theme-color: #0b0f1a` - `viewport-fit: cover` maka ngosipụta site n'otu nsọtụ ruo nsọtụ ọzọ ### Akụkụ: `PwaRegister` Dị na `src/shared/components/PwaRegister.tsx`, akụkụ client a: 1. Na-arụ ọrụ mgbe e tinyere ya (naanị n'akụkụ client) 2. Na-enyocha ma browser ahụ ọ na-akwado `serviceWorker` 3. Na-edebanye `/sw.js` n'enweghị ngosi (a na-eleghara njehie anya ka ha ghara igbochi app ahụ) 4. Anaghị egosipụta ihe ọ bụla (`return null`) — ọ bụ akụkụ na-arụ naanị side effect ## Iji Ya na Termux (Android) Mgbe a na-eji Termux agba OmniRoute na Android, PWA ahụ na-arụ ọrụ nke ọma n'enweghị nsogbu: 1. Malite OmniRoute na Termux: `npx omniroute` 2. Mepee Chrome n'otu ekwentị ahụ: `http://localhost:20128` 3. Wụnye PWA site na "Tinye na Ihuenyo Mbụ" 4. PWA ahụ na-ejikọta na sava Termux dị na ngwaọrụ ahụ — ihe niile na-arụ n'ime ngwaọrụ ahụ Ngwakọta a pụtara na ekwentị Android gị bụ ma **sava** (Termux) ma **client** (PWA) — ọnụ ụzọ AI zuru ezu nke na-arụ ọrụ n'onwe ya. ## Iji Ya Site na Ngwaọrụ Ndị Ọzọ Wụnye PWA na ngwaọrụ ọ bụla nke browser ya nwere ike ịbanye na sava OmniRoute gị: - **Ekwentị/mbadamba ọzọ**: Gaa na `http://PHONE_IP:20128` ma wụnye PWA - **Laptọọpụ**: Mepee Chrome/Edge ma wụnye ya dị ka PWA desktọọpụ - **Smart TV nwere browser**: Mepee dashboard ahụ n'ihuenyo zuru ezu ## Nhazi nke Onwe ### Aha Instance Aha PWA na-agbaso ntọala **Aha Instance** dị na `Dashboard → Settings`. Ọ bụrụ na ị gbanwee aha instance gị ka ọ bụrụ "Ọnụ Ụzọ AI M", PWA arụnyere ga-egosi aha ahụ. ### Favicon Ahaziri Ahazi Ọ bụrụ na i bulite favicon ahaziri ahazi site na `Dashboard → Settings`, akara ngosi PWA na desktọọpụ ga-egosipụta akara ngosi ahụ. Akara ngosi ihuenyo mbụ nke ngwaọrụ mkpanaka na-eji faịlụ `icon-512.png` na `apple-touch-icon.png` arụpụtara tupu oge eruo. ## Mmachi - **Enweghị ọkwa push** — Service worker anaghị emejuputa Push API. Kama nke ahụ, ngwa Electron na-ahụ maka ọkwa. - **Enweghị mmekọrịta n’azụ** — Anaghị edobe omume ndị e mere mgbe enweghị njikọ n’ahịrị ka e mee ha ọzọ. Ebumnuche bụ isi nke PWA bụ igosi dashboard. - **Mmachi iOS** — Safari na iOS anaghị akwado njirimara PWA niile (dịka ọmụmaatụ, a ga-eji aka mee arịrịọ nrụnye, ma service worker ndị na-arụ ọrụ n’azụ nwere mmachi). - **Ogo cache** — Service worker na-echekwa naanị akụrụngwa static na cache. Anaghị echekwa nnukwu response payload sitere na route `/api/` na cache. - **Akara ngosi ahaziri iche na ekwentị** — Ịgbanwe favicon na ntọala anaghị emelite akara ngosi home screen na ekwentị (nke a chọrọ imepụta akara ngosi PWA ọzọ). ## Ntụaka Faịlụ | Faịlụ | Ebumnuche | | --------------------------------------- | ----------------------------------------------------------------- | | `src/app/manifest.ts` | Route manifest Next.js (na-emepụta `manifest.webmanifest`) | | `public/sw.js` | Service worker nwere usoro cache | | `src/shared/components/PwaRegister.tsx` | Client component nke na-edebanye service worker | | `src/app/offline/page.tsx` | Ihu fallback offline nwere ihe ngosi status dị ndụ | | `src/app/layout.tsx` | Root layout nwere metadata PWA (apple-web-app, theme-color, wdg.) | | `public/icon-512.png` | Akara ngosi PNG 512×512 (Android, splash screen) | | `public/apple-touch-icon.png` | Akara ngosi PNG 180×180 (iOS home screen) | | `public/icon-192.svg` | Akara ngosi SVG 192×192 (Android adaptive) | | `public/apple-touch-icon.svg` | Akara ngosi SVG 180×180 (Apple fallback) |