# Progressive Web App (PWA) Guide (ଓଡ଼ିଆ) 🌐 **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) · 🇳🇬 [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) · 🇮🇳 [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 ଏକ ସମ୍ପୂର୍ଣ୍ଣ ଇନଷ୍ଟଲ୍ଯୋଗ୍ୟ Progressive Web App ଭାବେ ଉପଲବ୍ଧ। ଆପଣ ଯେତେବେଳେ କୌଣସି ମୋବାଇଲ୍ ବ୍ରାଉଜର୍ — Android (Chrome) କିମ୍ବା iOS (Safari) — ରୁ ଡ୍ୟାସ୍ବୋର୍ଡ ଆକ୍ସେସ୍ କରନ୍ତି, ସେତେବେଳେ ଆପଣ "ହୋମ୍ ସ୍କ୍ରିନ୍ରେ ଯୋଡ଼ନ୍ତୁ" ବିକଳ୍ପ ବ୍ୟବହାର କରି କୌଣସି ଆପ୍ ଷ୍ଟୋର୍ର ଆବଶ୍ୟକତା ବିନା ଏକ ନେଟିଭ୍ ଆପ୍ ପରି ଅନୁଭବ ପାଇପାରିବେ। ## PWA କ’ଣ? ଏକ Progressive Web App, OmniRoute ୱେବ୍ ଡ୍ୟାସ୍ବୋର୍ଡକୁ ଏପରି ଏକ ଆପ୍ରେ ପରିଣତ କରେ ଯାହା ଦେଖିବାକୁ ଓ ବ୍ୟବହାର କରିବାକୁ ଏକ ନେଟିଭ୍ ମୋବାଇଲ୍ ଆପ୍ ପରି ଲାଗେ। ଇନଷ୍ଟଲ୍ ହୋଇଗଲା ପରେ, ଏହା: - ନିଜସ୍ୱ ଆଇକନ୍ ସହିତ ଆପଣଙ୍କ ହୋମ୍ ସ୍କ୍ରିନ୍ରୁ ଚାଲୁ ହୁଏ - ଫୁଲ୍ସ୍କ୍ରିନ୍ରେ ଖୋଲେ — କୌଣସି ବ୍ରାଉଜର୍ ଆଡ୍ରେସ୍ ବାର୍ କିମ୍ବା ଟ୍ୟାବ୍ UI ନଥାଏ - ଏକ ଉତ୍ସର୍ଗୀକୃତ ସଂଯୋଗ ପୃଷ୍ଠା ସହିତ ଅଫ୍ଲାଇନ୍ରେ କାମ କରେ - ଅଧିକ ଦ୍ରୁତ ଲୋଡିଂ ପାଇଁ ଷ୍ଟାଟିକ୍ ଆସେଟ୍ଗୁଡ଼ିକୁ କ୍ୟାଶ୍ କରେ - ପୋର୍ଟ୍ରେଟ୍ ଏବଂ ଲ୍ୟାଣ୍ଡସ୍କେପ୍, ଉଭୟ ଅଭିମୁଖୀକରଣକୁ ସମର୍ଥନ କରେ ## ଇନଷ୍ଟଲେସନ୍ ### Android (Chrome) 1. Chromeରେ OmniRoute ଡ୍ୟାସ୍ବୋର୍ଡ ଖୋଲନ୍ତୁ: `http://YOUR_IP:20128` 2. Chrome ସ୍ୱୟଂଚାଳିତ ଭାବେ **"OmniRouteକୁ ହୋମ୍ ସ୍କ୍ରିନ୍ରେ ଯୋଡ଼ନ୍ତୁ"** ବ୍ୟାନର୍ ଦେଖାଇବ, କିମ୍ବା: - **⋮** ମେନୁ (ତିନୋଟି ବିନ୍ଦୁ) ଟ୍ୟାପ୍ କରନ୍ତୁ → **"ହୋମ୍ ସ୍କ୍ରିନ୍ରେ ଯୋଡ଼ନ୍ତୁ"** କିମ୍ବା **"ଆପ୍ ଇନଷ୍ଟଲ୍ କରନ୍ତୁ"** 3. ପ୍ରମ୍ପ୍ଟକୁ ନିଶ୍ଚିତ କରନ୍ତୁ 4. OmniRoute ଆପଣଙ୍କ ହୋମ୍ ସ୍କ୍ରିନ୍ରେ ଏକ ସ୍ୱତନ୍ତ୍ର ଆପ୍ ଭାବେ ଦେଖାଯିବ ### iOS (Safari) 1. Safariରେ OmniRoute ଡ୍ୟାସ୍ବୋର୍ଡ ଖୋଲନ୍ତୁ: `http://YOUR_IP:20128` 2. **ସେୟାର୍** ବଟନ୍ (ତୀର ଚିହ୍ନ ଥିବା ବାକ୍ସ) ଟ୍ୟାପ୍ କରନ୍ତୁ 3. ତଳକୁ ସ୍କ୍ରୋଲ୍ କରି **"ହୋମ୍ ସ୍କ୍ରିନ୍ରେ ଯୋଡ଼ନ୍ତୁ"** ଟ୍ୟାପ୍ କରନ୍ତୁ 4. ଏହାକୁ ଏକ ନାମ ଦିଅନ୍ତୁ (ଡିଫଲ୍ଟ ଭାବେ "OmniRoute") ଏବଂ **ଯୋଡ଼ନ୍ତୁ** ଟ୍ୟାପ୍ କରନ୍ତୁ 5. OmniRoute ଆପ୍ ଆଇକନ୍ ସହିତ ଆପଣଙ୍କ ହୋମ୍ ସ୍କ୍ରିନ୍ରେ ଦେଖାଯିବ ### ଡେସ୍କଟପ୍ (Chrome / Edge) 1. OmniRoute ଡ୍ୟାସ୍ବୋର୍ଡ ଖୋଲନ୍ତୁ 2. ଆଡ୍ରେସ୍ ବାର୍ରେ ଥିବା **ଇନଷ୍ଟଲ୍ ଆଇକନ୍** କ୍ଲିକ୍ କରନ୍ତୁ (କିମ୍ବା ⋮ → "OmniRoute ଇନଷ୍ଟଲ୍ କରନ୍ତୁ...") 3. ପ୍ରମ୍ପ୍ଟକୁ ନିଶ୍ଚିତ କରନ୍ତୁ 4. OmniRoute ଏକ ସ୍ୱତନ୍ତ୍ର ୱିଣ୍ଡୋ ଭାବେ ଖୋଲିବ — କୌଣସି ଟ୍ୟାବ୍ କିମ୍ବା ଆଡ୍ରେସ୍ ବାର୍ ରହିବ ନାହିଁ ## ବୈଶିଷ୍ଟ୍ୟଗୁଡ଼ିକ ### ଫୁଲ୍ସ୍କ୍ରିନ୍ ଅନୁଭବ ମାନିଫେଷ୍ଟକୁ `display: "fullscreen"` ସହିତ କନଫିଗର୍ କରାଯାଇଛି, ଯାହାର ଅର୍ଥ ଇନଷ୍ଟଲ୍ ହୋଇଥିବା ଆପ୍ଟି ସମ୍ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍ ବ୍ୟବହାର କରେ — କୌଣସି ବ୍ରାଉଜର୍ UI କିମ୍ବା ଷ୍ଟାଟସ୍ ବାର୍ ଓଭରଲାପ୍ ନଥାଏ। ଏହା ଡ୍ୟାସ୍ବୋର୍ଡକୁ ପ୍ରକୃତରେ ନେଟିଭ୍ ଆପ୍ ପରି ଅନୁଭବ କରାଏ। ### ଅଫ୍ଲାଇନ୍ ସମର୍ଥନ OmniRouteରେ ଏକ ସର୍ଭିସ୍ ୱାର୍କର୍ (`sw.js`) ଅନ୍ତର୍ଭୁକ୍ତ, ଯାହା ବୁଦ୍ଧିମାନ କ୍ୟାଶିଂ ପ୍ରଦାନ କରେ: | ଆସେଟ୍ର ପ୍ରକାର | କୌଶଳ | ଆଚରଣ | | ---------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------- | | **ଆପ୍ ସେଲ୍** | ପ୍ରଥମେ କ୍ୟାଶ୍ | ଇନଷ୍ଟଲ୍ ସମୟରେ `/`, `/offline`, ମାନିଫେଷ୍ଟ ଏବଂ ଆଇକନ୍ଗୁଡ଼ିକ ପୂର୍ବରୁ କ୍ୟାଶ୍ ହୁଏ | | **ଷ୍ଟାଟିକ୍ ଆସେଟ୍ଗୁଡ଼ିକ** (CSS, JS, ପ୍ରତିଛବି, ଫଣ୍ଟ୍) | କ୍ୟାଶ୍ ଫଲ୍ବ୍ୟାକ୍ ସହିତ ପ୍ରଥମେ ନେଟୱର୍କ | ନେଟୱର୍କରୁ ସଦ୍ୟତମ ଆସେଟ୍ ଆଣେ; ଅଫ୍ଲାଇନ୍ ଥିଲେ କ୍ୟାଶ୍ ବ୍ୟବହାର କରେ | | **Next.js ବଣ୍ଡଲ୍ଗୁଡ଼ିକ** (`/_next/`) | କ୍ୟାଶ୍ ଅପଡେଟ୍ ସହିତ ପ୍ରଥମେ ନେଟୱର୍କ | ନେଟୱର୍କରୁ ଆଣି କ୍ୟାଶ୍ ଅପଡେଟ୍ କରେ; ଅଫ୍ଲାଇନ୍ ଥିଲେ କ୍ୟାଶ୍ ହୋଇଥିବା ସଂସ୍କରଣ ପ୍ରଦାନ କରେ | | **ନାଭିଗେସନ୍ ଅନୁରୋଧଗୁଡ଼ିକ** | ବାଇପାସ୍ (କେବେ ମଧ୍ୟ ଇଣ୍ଟରସେପ୍ଟ ହୁଏ ନାହିଁ) | HTTP/3→HTTP/2 ଫଲ୍ବ୍ୟାକ୍ ବ୍ରାଉଜର୍ ପରିଚାଳନା କରେ; ଏକ ଅଚଳ QUIC ସକେଟ୍ କଦାପି `Response.error()` ହେବା ଉଚିତ୍ ନୁହେଁ | | **API / ଡ୍ୟାସ୍ବୋର୍ଡ ରୁଟ୍ଗୁଡ଼ିକ** (`/api/`, `/a2a`, `/dashboard`) | ବାଇପାସ୍ (କେବେ ମଧ୍ୟ କ୍ୟାଶ୍ ହୁଏ ନାହିଁ) | ସର୍ବଦା ସିଧାସଳଖ ସର୍ଭର୍କୁ ଯାଏ — ସର୍ଭିସ୍ ୱାର୍କର୍ ଦ୍ୱାରା କେବେ ମଧ୍ୟ ଇଣ୍ଟରସେପ୍ଟ ହୁଏ ନାହିଁ | ### ଅଫ୍ଲାଇନ୍ ପୃଷ୍ଠା ନେଟୱର୍କ ଉପଲବ୍ଧ ନଥିବା ବେଳେ ଜଣେ ବ୍ୟବହାରକାରୀ ଏକ ନୂତନ ପୃଷ୍ଠାକୁ ନାଭିଗେଟ୍ କଲେ, ସର୍ଭିସ୍ ୱାର୍କର୍ ଏକ ଉତ୍ସର୍ଗୀକୃତ `/offline` ପୃଷ୍ଠା ପ୍ରଦାନ କରେ, ଯାହା: - ଏକ ସ୍ପଷ୍ଟ **"ସଂଯୋଗ ସମସ୍ୟା"** ବାର୍ତ୍ତା ଦେଖାଏ - ଏକ ଲାଇଭ୍ **ଅନ୍ଲାଇନ୍/ଅଫ୍ଲାଇନ୍ ସ୍ଥିତି ସୂଚକ** ଦେଖାଏ, ଯାହା ରିଅଲ୍ ଟାଇମ୍ରେ ଅପଡେଟ୍ ହୁଏ - ସଂଯୋଗ ପୁନଃସ୍ଥାପିତ ହେଲେ ପୁନର୍ବାର ଲୋଡ୍ କରିବା ପାଇଁ ଏକ **"ସଂଯୋଗ ପୁନଃଚେଷ୍ଟା କରନ୍ତୁ"** ବଟନ୍ ପ୍ରଦାନ କରେ - ଡାଇଗ୍ନୋଷ୍ଟିକ୍ସ ପାଇଁ **ସ୍ଥିତି ପୃଷ୍ଠା** ସହିତ ଲିଙ୍କ୍ କରେ ### ଆପ୍ ଆଇକନ୍ଗୁଡ଼ିକ OmniRoute ପ୍ରତ୍ୟେକ ପ୍ଲାଟଫର୍ମ ପାଇଁ ଅପ୍ଟିମାଇଜ୍ ହୋଇଥିବା ଆଇକନ୍ ପ୍ରଦାନ କରେ: | ଫାଇଲ୍ | ଆକାର | ବ୍ୟବହୃତ ସ୍ଥାନ | | ---------------------- | ----------------- | ------------------------------------------- | | `icon-512.png` | 512×512 | Android ଇନଷ୍ଟଲ୍ ପ୍ରମ୍ପ୍ଟ, ସ୍ପ୍ଲାସ୍ ସ୍କ୍ରିନ୍ | | `apple-touch-icon.png` | 180×180 | iOS ହୋମ୍ ସ୍କ୍ରିନ୍ ଆଇକନ୍ | | `icon-192.svg` | 192×192 (ଭେକ୍ଟର୍) | Android ଆଡାପ୍ଟିଭ୍ ଆଇକନ୍ | | `apple-touch-icon.svg` | 180×180 (ଭେକ୍ଟର୍) | Apple ଫଲ୍ବ୍ୟାକ୍ | | `favicon.svg` | ଭେକ୍ଟର୍ | ବ୍ରାଉଜର୍ ଟ୍ୟାବ୍ଗୁଡ଼ିକ | | `favicon.ico` | ଏକାଧିକ ଆକାର | ପୁରୁଣା ବ୍ରାଉଜର୍ଗୁଡ଼ିକ | ### ସ୍ୱୟଂଚାଳିତ ପଞ୍ଜୀକରଣ ରୁଟ୍ ଲେଆଉଟ୍ରେ ଥିବା `` କମ୍ପୋନେଣ୍ଟ ମାଧ୍ୟମରେ ସର୍ଭିସ୍ ୱାର୍କର୍ ସ୍ୱୟଂଚାଳିତ ଭାବେ ପଞ୍ଜୀକୃତ ହୁଏ। ବ୍ୟବହାରକାରୀଙ୍କର କୌଣସି କାର୍ଯ୍ୟ ଆବଶ୍ୟକ ନାହିଁ — ବ୍ରାଉଜର୍ ବୈଧ ମାନିଫେଷ୍ଟ ଏବଂ ସର୍ଭିସ୍ ୱାର୍କର୍କୁ ଚିହ୍ନଟ କରିବା ମାତ୍ରେ ଆପ୍ଟି ଇନଷ୍ଟଲ୍ଯୋଗ୍ୟ ହୋଇଯାଏ। ## ବୈଷୟିକ ସ୍ଥାପତ୍ୟ ### ୱେବ୍ ଆପ୍ ମାନିଫେଷ୍ଟ (`manifest.webmanifest`) `src/app/manifest.ts` ମାଧ୍ୟମରେ Next.js ଦ୍ୱାରା ସୃଷ୍ଟି କରାଯାଇଛି: ```json { "name": "OmniRoute", "short_name": "OmniRoute", "description": "OmniRoute ହେଉଛି ଏକାଧିକ ପ୍ରଦାନକାରୀଙ୍କ LLM ପାଇଁ ଏକ AI ଗେଟୱେ। ଆପଣଙ୍କ ସମସ୍ତ AI ପ୍ରଦାନକାରୀଙ୍କ ପାଇଁ ଗୋଟିଏ ଏଣ୍ଡପଏଣ୍ଟ।", "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" } ] } ``` ### ସର୍ଭିସ୍ ୱାର୍କର୍ (`public/sw.js`) କୌଣସି ଫ୍ରେମୱର୍କ ନିର୍ଭରଶୀଳତା ନଥିବା ଏକ ସାଧାରଣ ସର୍ଭିସ୍ ୱାର୍କର୍, ଯେଉଁଥିରେ ରହିଛି: - **ଇନଷ୍ଟଲ୍ ପର୍ଯ୍ୟାୟ**: ଆପ୍ ସେଲ୍କୁ ପୂର୍ବରୁ କ୍ୟାଶ୍ କରେ (ରୁଟ୍, ଅଫଲାଇନ୍ ପୃଷ୍ଠା, ମାନିଫେଷ୍ଟ, ଆଇକନ୍) - **ସକ୍ରିୟକରଣ ପର୍ଯ୍ୟାୟ**: ପୁରୁଣା କ୍ୟାଶ୍ ସଂସ୍କରଣଗୁଡ଼ିକୁ ସଫା କରେ ଏବଂ ସମସ୍ତ କ୍ଲାଏଣ୍ଟକୁ ନିଜ ନିୟନ୍ତ୍ରଣକୁ ନିଏ - **ଫେଚ୍ ପର୍ଯ୍ୟାୟ**: ଅନୁରୋଧ ପ୍ରକାର (ନାଭିଗେସନ୍, ଷ୍ଟାଟିକ୍ ଆସେଟ୍, API) ଆଧାରରେ ବୁଦ୍ଧିମାନ ରାଉଟିଂ - **କ୍ୟାଶ୍ ସଂସ୍କରଣକରଣ**: `omniroute-pwa-v3` — ଅପଡେଟ୍ ସମୟରେ ନୂଆ କ୍ୟାଶ୍ ବାଧ୍ୟତାମୂଳକ କରିବାକୁ ଏହାକୁ ବୃଦ୍ଧି କରନ୍ତୁ ### ଲେଆଉଟ୍ ମେଟାଡାଟା (`src/app/layout.tsx`) ରୁଟ୍ ଲେଆଉଟ୍ PWA ଅନୁପାଳନ ପାଇଁ ଆବଶ୍ୟକ ସମସ୍ତ ମେଟା ଟ୍ୟାଗ୍ ପ୍ରଦାନ କରେ: - `/manifest.webmanifest` ପାଇଁ `manifest` ଲିଙ୍କ୍ - iOS ସ୍ୱତନ୍ତ୍ର ମୋଡ୍ ପାଇଁ `apple-web-app-capable: true` - `apple-web-app-status-bar-style: black-translucent` - Android Chrome ପାଇଁ `mobile-web-app-capable: yes` - `theme-color: #0b0f1a` - ଧାରରୁ ଧାର ପର୍ଯ୍ୟନ୍ତ ରେଣ୍ଡରିଂ ପାଇଁ `viewport-fit: cover` ### କମ୍ପୋନେଣ୍ଟ: `PwaRegister` `src/shared/components/PwaRegister.tsx`ରେ ଅବସ୍ଥିତ ଏହି କ୍ଲାଏଣ୍ଟ କମ୍ପୋନେଣ୍ଟ: 1. ମାଉଣ୍ଟ ସମୟରେ ଚାଲେ (କେବଳ କ୍ଲାଏଣ୍ଟ-ସାଇଡ୍) 2. ବ୍ରାଉଜର୍ରେ `serviceWorker` ସମର୍ଥନ ଅଛି କି ନାହିଁ ଯାଞ୍ଚ କରେ 3. ନିରବରେ `/sw.js` ପଞ୍ଜୀକରଣ କରେ (ଆପ୍କୁ ଅବରୋଧ କରିବାରୁ ବଞ୍ଚାଇବା ପାଇଁ ତ୍ରୁଟିଗୁଡ଼ିକୁ ଅଣଦେଖା କରାଯାଏ) 4. କିଛି ରେଣ୍ଡର୍ କରେ ନାହିଁ (`return null`) — ଏହା କେବଳ ପାର୍ଶ୍ୱ-ପ୍ରଭାବ ପାଇଁ ଉଦ୍ଦିଷ୍ଟ ଏକ କମ୍ପୋନେଣ୍ଟ ## Termux (Android) ସହିତ ବ୍ୟବହାର Termux ମାଧ୍ୟମରେ Androidରେ OmniRoute ଚଳାଇବା ସମୟରେ PWA ନିରବଚ୍ଛିନ୍ନ ଭାବେ କାମ କରେ: 1. Termuxରେ OmniRoute ଆରମ୍ଭ କରନ୍ତୁ: `npx omniroute` 2. ସେହି ଫୋନ୍ରେ Chrome ଖୋଲନ୍ତୁ: `http://localhost:20128` 3. "ହୋମ୍ ସ୍କ୍ରିନ୍ରେ ଯୋଡ଼ନ୍ତୁ" ମାଧ୍ୟମରେ PWA ଇନଷ୍ଟଲ୍ କରନ୍ତୁ 4. PWA ସ୍ଥାନୀୟ Termux ସର୍ଭର୍ସହିତ ସଂଯୋଗ କରେ — ସବୁକିଛି ଡିଭାଇସ୍ରେ ହିଁ ଚାଲେ ଏହି ସଂଯୋଜନର ଅର୍ଥ ହେଉଛି ଆପଣଙ୍କ Android ଫୋନ୍ ଉଭୟ **ସର୍ଭର୍** (Termux) ଏବଂ **କ୍ଲାଏଣ୍ଟ** (PWA) — ଏକ ସମ୍ପୂର୍ଣ୍ଣ ସ୍ୱୟଂସମ୍ପୂର୍ଣ୍ଣ AI ଗେଟୱେ। ## ଅନ୍ୟ ଡିଭାଇସ୍ରୁ ବ୍ୟବହାର ଆପଣଙ୍କ OmniRoute ସର୍ଭର୍କୁ ବ୍ରାଉଜର୍ ମାଧ୍ୟମରେ ପ୍ରବେଶ କରିପାରୁଥିବା ଯେକୌଣସି ଡିଭାଇସ୍ରେ PWA ଇନଷ୍ଟଲ୍ କରନ୍ତୁ: - **ଅନ୍ୟ ଫୋନ୍/ଟ୍ୟାବଲେଟ୍**: `http://PHONE_IP:20128`କୁ ଯାଆନ୍ତୁ ଏବଂ PWA ଇନଷ୍ଟଲ୍ କରନ୍ତୁ - **ଲାପଟପ୍**: Chrome/Edge ଖୋଲନ୍ତୁ ଏବଂ ଏହାକୁ ଏକ ଡେସ୍କଟପ୍ PWA ଭାବେ ଇନଷ୍ଟଲ୍ କରନ୍ତୁ - **ବ୍ରାଉଜର୍ ଥିବା ସ୍ମାର୍ଟ TV**: ଡ୍ୟାସବୋର୍ଡକୁ ଫୁଲ୍ସ୍କ୍ରିନ୍ରେ ପ୍ରବେଶ କରନ୍ତୁ ## କଷ୍ଟମାଇଜେସନ୍ ### ଇନଷ୍ଟାନ୍ସ ନାମ PWA ଶୀର୍ଷକ `Dashboard → Settings`ର **ଇନଷ୍ଟାନ୍ସ ନାମ** ସେଟିଂକୁ ଅନୁସରଣ କରେ। ଯଦି ଆପଣ ନିଜ ଇନଷ୍ଟାନ୍ସର ନାମ ପରିବର୍ତ୍ତନ କରି "ମୋ AI ଗେଟୱେ" ରଖନ୍ତି, ତେବେ ଇନଷ୍ଟଲ୍ ହୋଇଥିବା PWA ସେହି ନାମ ଦେଖାଇବ। ### କଷ୍ଟମ୍ ଫାଭିକନ୍ ଯଦି ଆପଣ `Dashboard → Settings` ମାଧ୍ୟମରେ ଏକ କଷ୍ଟମ୍ ଫାଭିକନ୍ ଅପଲୋଡ୍ କରନ୍ତି, ତେବେ ଡେସ୍କଟପ୍ରେ PWA ଆଇକନ୍ ସେହି କଷ୍ଟମ୍ ଆଇକନ୍କୁ ପ୍ରତିଫଳିତ କରିବ। ମୋବାଇଲ୍ ହୋମ୍ ସ୍କ୍ରିନ୍ ଆଇକନ୍ଗୁଡ଼ିକ ପୂର୍ବରୁ ପ୍ରସ୍ତୁତ `icon-512.png` ଏବଂ `apple-touch-icon.png` ଫାଇଲ୍ ବ୍ୟବହାର କରେ। ## ସୀମାବଦ୍ଧତା - **ପୁଶ୍ ବିଜ୍ଞପ୍ତି ନାହିଁ** — ସର୍ଭିସ୍ ୱର୍କର୍ Push API କାର୍ଯ୍ୟକାରୀ କରେ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ Electron ଆପ୍ ଦ୍ୱାରା ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପରିଚାଳିତ ହୁଏ। - **ପୃଷ୍ଠଭୂମି ସିଙ୍କ୍ ନାହିଁ** — ପୁନଃଚାଳନ ପାଇଁ ଅଫ୍ଲାଇନ୍ କାର୍ଯ୍ୟଗୁଡ଼ିକୁ କ୍ୟୁରେ ରଖାଯାଏ ନାହିଁ। PWA ମୁଖ୍ୟତଃ ଏକ ଡ୍ୟାସ୍ବୋର୍ଡ ଭ୍ୟୁଅର୍। - **iOS ସୀମାବଦ୍ଧତା** — iOSର Safari ସମସ୍ତ PWA ବୈଶିଷ୍ଟ୍ୟକୁ ସମର୍ଥନ କରେ ନାହିଁ (ଯଥା, ଇନ୍ଷ୍ଟଲ୍ ପ୍ରମ୍ପ୍ଟଗୁଡ଼ିକ ମାନୁଆଲ୍ ଅଟେ ଏବଂ ପୃଷ୍ଠଭୂମି ସର୍ଭିସ୍ ୱର୍କର୍ଗୁଡ଼ିକ ସୀମିତ)। - **କ୍ୟାଶ୍ ଆକାର** — ସର୍ଭିସ୍ ୱର୍କର୍ କେବଳ ଷ୍ଟାଟିକ୍ ଆସେଟ୍ଗୁଡ଼ିକୁ କ୍ୟାଶ୍ କରେ। `/api/` ରୁଟ୍ଗୁଡ଼ିକରୁ ଆସୁଥିବା ବଡ଼ ରେସ୍ପନ୍ସ ପେଲୋଡ୍ଗୁଡ଼ିକ କେବେବି କ୍ୟାଶ୍ କରାଯାଏ ନାହିଁ। - **ମୋବାଇଲ୍ରେ କଷ୍ଟମ୍ ଆଇକନ୍** — ସେଟିଂସ୍ରେ favicon ପରିବର୍ତ୍ତନ କଲେ ମୋବାଇଲ୍ର ହୋମ୍ ସ୍କ୍ରିନ୍ ଆଇକନ୍ ଅପଡେଟ୍ ହୁଏ ନାହିଁ (ଏଥିପାଇଁ PWA ଆଇକନ୍ଗୁଡ଼ିକୁ ପୁନଃ ସୃଷ୍ଟି କରିବା ଆବଶ୍ୟକ)। ## ଫାଇଲ୍ ସନ୍ଦର୍ଭ | ଫାଇଲ୍ | ଉଦ୍ଦେଶ୍ୟ | | --------------------------------------- | ------------------------------------------------------------------ | | `src/app/manifest.ts` | Next.js ମାନିଫେଷ୍ଟ ରୁଟ୍ (`manifest.webmanifest` ସୃଷ୍ଟି କରେ) | | `public/sw.js` | କ୍ୟାଶିଂ ଲଜିକ୍ ସହିତ ସର୍ଭିସ୍ ୱର୍କର୍ | | `src/shared/components/PwaRegister.tsx` | ସର୍ଭିସ୍ ୱର୍କର୍କୁ ପଞ୍ଜୀକୃତ କରୁଥିବା କ୍ଲାଏଣ୍ଟ କମ୍ପୋନେଣ୍ଟ | | `src/app/offline/page.tsx` | ଲାଇଭ୍ ସ୍ଥିତି ସୂଚକ ସହିତ ଅଫ୍ଲାଇନ୍ ଫଲ୍ବ୍ୟାକ୍ ପୃଷ୍ଠା | | `src/app/layout.tsx` | PWA ମେଟାଡାଟା ସହିତ ରୁଟ୍ ଲେଆଉଟ୍ (apple-web-app, theme-color ଇତ୍ୟାଦି) | | `public/icon-512.png` | 512×512 PNG ଆଇକନ୍ (Android, ସ୍ପ୍ଲାଶ୍ ସ୍କ୍ରିନ୍) | | `public/apple-touch-icon.png` | 180×180 PNG ଆଇକନ୍ (iOS ହୋମ୍ ସ୍କ୍ରିନ୍) | | `public/icon-192.svg` | 192×192 SVG ଆଇକନ୍ (Android ଆଡାପ୍ଟିଭ୍) | | `public/apple-touch-icon.svg` | 180×180 SVG ଆଇକନ୍ (Apple ଫଲ୍ବ୍ୟାକ୍) |