# P2P Sync Tutorial: Cross-Device Without Cloud > **Sync your notes across devices securely — no cloud storage required.** Sa isang panahon kung saan ang privacy ng data ay mas mahalaga kaysa dati, nag-aalok ang Noterich ng isang makabagong paraan para sa cross-device synchronization. Ang aming **P2P (Peer-to-Peer) Sync** feature ay nagpapahintulot sa iyong mga device na magbahagi ng mga tala nang walang pag-asa sa anumang cloud server. Ang iyong data ay mananatiling sa iyo — palagi. ## Bakit P2P Sync? Ang mga tradisyonal na app para sa pagtatala ng tala ay nag-iimbak ng iyong data sa mga centralized na server. Ito ay naglalagay sa atin sa potensyal na panganib sa privacy, gastos sa subscription, at pag-asa sa imprastraktura ng third-party. Ang Noterich ay gumagamit ng ibang paraan: ```mermaid graph LR A[Your Device] <-->|Direct Connection| B[Your Other Device] C[Cloud Server] -.->|Not Required| A C -.->|Not Required| B style A fill:#4CAF50,color:#fff style B fill:#4CAF50,color:#fff style C fill:#9E9E9E,color:#fff,stroke-dasharray: 5 5 ``` ### Mga Pangunahing Bentahe - **🔒 Privacy First**: Ang iyong mga tala ay hindi kailanman makakarating sa mga third-party server - **⚡ Fast & Direct**: Ang mga device ay direktang nag-uugnayan para sa mas mabilis na synchronization - **💰 No Subscription**: Libreng P2P sync nang walang premium tiers - **🌐 Works Anywhere**: Sync sa pamamagitan ng local network o internet - **📱 Cross-Platform**: gumagana sa desktop, laptop, tablet, at mobile ## Paano gumagana ang P2P Sync Ginagamit ng Noterich ang **WebRTC technology** kasama ang **PeerJS** upang makabuo ng direktang koneksyon sa pagitan ng iyong mga device. Kapag ikaw ay nagsimula ng synchronization: ```mermaid sequenceDiagram participant D1 as Device A (Sender) participant S as Signaling Server participant D2 as Device B (Receiver) D1->>S: Request connection ID S-->>D1: Generate room ID D1->>D2: Share connection link (QR/URL) D2->>S: Connect using room ID S-->>D2: Establish peer connection D1->>D2: Encrypt & send notes D2->>D2: Decrypt & import notes Note over D1,D2: Direct encrypted transfer<br/>No data stored on server ``` ### Ang Teknolohiya sa Likod ng Scenes Ang P2P implementation ng Noterich ay gumagamit ng: 1. **PeerJS Library**: Naghawak ng komplikadong WebRTC para sa komunikasyon sa pagitan ng browser 2. **AES-GCM Encryption**: Militar-grade encryption para sa iyong mga tala ng data 3. **PBKDF2 Key Derivation**: Secure password-based encryption key generation 4. **MessagePack Serialization**: Epektibong binary data encoding para sa mabilis na transfer 5. **IndexedDB Storage**: Local-first database para sa offline access ## Pagsisimula sa P2P Sync ### Mga Prerequisite Bago ka magsimula, tiyakin na mayroon kang: - ✅ Naka-install ang Noterich sa parehong device - ✅ Ang parehong device ay nakakonekta sa internet (o pareho sa local network) - ✅ Isang modernong web browser (Chrome, Firefox, Edge, Safari) ### Hakbang 1: Simulan ang Pagbabahagi mula sa Source Device 1. Buksan ang tala na gusto mong ibahagi sa Noterich 2. I-click ang **Share** button sa toolbar 3. Piliin ang **"P2P Share"** option 4. (Opsyonal) Mag-set ng password para sa karagdagang seguridad - Ang mga password ay dapat may hindi kukulangin sa 8 characters - Ginagamit ang AES-256-GCM encryption 5. Maghintay hanggang ang P2P server ay makapag-initialize ```mermaid graph TD A[Open Note] --> B[Click Share Button] B --> C[Select P2P Share] C --> D{Set Password?} D -->|Yes| E[Enter Password ≥8 chars] D -->|No| F[Skip Encryption] E --> G[Initialize P2P Server] F --> G G --> H[Generate Share Link & QR Code] ``` ### Hakbang 2: Ibahagi ang Connection Link Kapag nagsimula na ang P2P server, gumagawa ang Noterich ng: - **Isang natatanging shareable link** na naglalaman ng mga parameter ng koneksyon - **Isang QR code** para sa mabilis na mobile scanning Ang format ng link ay ganito: ``` https://noterich.com/#dbshare=<infoHash>&server=<signaling-server> ``` **Mga Paraan ng Pagbabahagi:** | Paraan | Pinakamainam para sa | Paano gawin | |--------|----------|--------| | 🔗 Kopyahin ang Link | Email, messaging apps | I-click ang "Copy Link" button | | 📱 QR Code | Mobile devices | Scan gamit ang camera ng device | | 📧 Email | Remote collaborators | I-paste ang link sa email | ### Hakbang 3: Makatanggap sa Target Device Sa receiving device: 1. **Buksan ang share link** - I-click ang link nang direkta, O - Scan ang QR code gamit ang mobile device 2. **Tingnan ang mga dumating na tala** - Preview ang mga title at metadata ng tala - Siguradong tiyakin ang impormasyon ng sender 3. **I-enter ang password** (kung naka-encrypt) - I-input ang password na ibinigay ng sender - Ang data ay de-encrypt sa lokal sa iyong device 4. **Piliin ang destinasyong workspace** - Pumili ng existing workspace, O - Lumikha ng bagong workspace para sa mga imported na tala 5. **Kumpirmahin ang import** - Ang mga tala ay de-encrypt at nai-save sa IndexedDB - Ang search index ay muling nabubuo nang awtomatiko ```mermaid graph TD A[Open Link] --> B[Connect to Sender] B --> C{Encrypted?} C -->|Yes| D[Enter Password] C -->|No| E[Receive Metadata] D --> E E --> F[Preview Notes] F --> G[Select Workspace] G --> H[Import & Index] H --> I[Sync Complete!] style I fill:#4CAF50,color:#fff ``` ## Mga Advanced na Feature ### Naka-encrypt na Transfers Para sa mga sensitibong tala, nag-aalok ang Noterich ng opsyonal na end-to-end encryption: **Proseso ng Encryption:** ```javascript // Password → Encryption Key (PBKDF2) password + salt → deriveKey() → AES-256-GCM key // Note Data → Encrypted Buffer noteData + key + iv → encrypt() → encryptedBuffer // Transfer Package { encryptedBuffer: ArrayBuffer, salt: Uint8Array, // Para sa key derivation iv: Uint8Array // Initialization vector } ``` **Mga Security Feature:** - 🔐 100,000 PBKDF2 iterations para sa key derivation - 🔐 Random salt at IV para sa bawat transfer - 🔐 AES-256-GCM authenticated encryption - 🔐 Ang password ay hindi kailanman ipinapadala — ginagamit lamang sa lokal ### Batch Note Sync I-transfer nang epektibo ang maraming tala: 1. Akses ang **Database Transfer** mula sa settings 2. Piliin ang **"P2P Sync"** mode 3. Pumili ng mga tala na sasabayin 4. Ang receiver ay makakakuha ng batch preview na may mga opsyon sa pagpili **Optimization ng Performance:** - Ang mga tala ay inililipat sa mga chunk (512KB bawat isa) - Non-blocking async processing ay pumipigil sa UI freeze - Pagtatala ng progress na may precision sa byte-level - I-cancel anumang oras nang walang data corruption ### Conflict Resolution Kapag sinusabay ang mga tala na umiiral sa parehong device: ```mermaid graph TD A[Detect Conflict] --> B{Compare Timestamps} B -->|Local Newer| C[Keep Local Version] B -->|Remote Newer| D[Show Conflict Dialog] D --> E[Choose Version] E --> F[Local] E --> G[Remote] E --> H[Merge Manually] B -->|Both Deleted| I[Skip] style C fill:#2196F3,color:#fff style F fill:#2196F3,color:#fff style G fill:#4CAF50,color:#fff ``` **Mga Conflict Type na Hinaharap:** - `local-newer`: Ang iyong bersyon ay mas bago - `remote-newer`: Ang incoming version ay mas bago - `local-deleted`: I-deleted mo ang tala sa lokal - `remote-deleted`: Ang tala ay nai-delete sa device ng sender - `remote-restored`: Ang dating deleted na tala ay na-rerestore ## Troubleshooting ### Karaniwang Mga Problema at Solusyon #### ❌ "PeerJS library not loaded" **Cause**: Network blocking ng PeerJS CDN o signaling server **Solusyon:** 1. Tingnan ang internet connection 2. Siguradong pinapayagan ng firewall ang WebRTC connections 3. Subukan ang alternatibong network (mobile hotspot) 4. Siguraduhing suportado ng browser ang WebRTC #### ❌ "Connection timeout" **Cause**: NAT/Firewall na pumipigil sa direktang koneksyon **Solusyon:** 1. Ang parehong device ay nasa parehong network ay nakatutulong 2. I-disable ang VPN pansamantala 3. Tingnan ang mga setting ng WebRTC ng router 4. Gamitin ang QR code para sa mobile connections #### ❌ "Decryption failed" **Cause**: Maling password o corrupted na transfer **Solusyon:** 1. Siguradong tiyakin na ang password ay eksaktong tumutugma (case-sensitive) 2. Humingi ng bagong share link mula sa sender 3. Siguraduhing stable ang koneksyon habang nag-transfer 4. Subukan ang mas maliit na batch sizes #### ❌ "Sync in progress" error **Cause**: Maraming simultaneous sync attempts **Solusyon:** 1. Maghintay hanggang matapos ang kasalukuyang synchronization 2. I-close ang ibang Noterich tabs/windows 3. I-refresh ang page at subukan muli 4. I-lockdown ang browser cache kung patuloy ### Mga Indikasyon ng Koneksyon | Status | Kahulugan | Aksyon | |--------|---------|--------| | 🔵 Connecting | Nagtatag ng peer connection | Maghintay ng 5-10 segundo | | 🟡 Comparing | Sinusuri ang mga pagkakaiba ng tala | Normal na proseso | | 🟠 Waiting-for-user | Kailangan ng password o confirmation | Tingnan ang modal dialogs | | 🟢 Applying | I-import ang mga tala sa database | Huwag isara ang tab | | ✅ Success | Naging matagumpay ang synchronization | Handa nang gamitin ang mga tala | | 🔴 Error | Nangyari ang koneksyon o transfer | Tingnan ang troubleshooting | ## Mga Security Best Practices ### Proteksyon ng Iyong Data Bagaman ang P2P sync ay likas na ligtas, sundin ang mga sumusunod na alituntunin: 1. **Gumamit ng Matatag na mga Password** - Minimum 8 characters (12+ recommended) - Pagsamahin ang uppercase, lowercase, numbers, symbols - Huwag ulitin ang mga password mula sa ibang services 2. **Suriin ang mga Recipient** - Ibahagi lamang ang links sa mga trusted na device - Gamitin ang QR code para sa physical proximity transfers - Iwasan ang pag-post ng links sa mga public channels 3. **Subaybayan ang Aktibong Koneksyon** - Tingnan ang mga connected peer habang nag-sync - I-disconnect matapos ang matagumpay na transfer - I-revoke ang shared links kung naging compromised 4. **Regular na Backups** - I-export ang mga mahahalagang tala paminsan-minsan - Itago ang mga backup sa isang secure na lugar - Subukan ang mga proseso ng restoration paminsan-minsan ### Pag-unawa sa mga Limitasyon ng Encryption **Ano ang naka-encrypt:** - ✅ Laman ng tala (text, formatting, metadata) - ✅ Mga attachment at embedded media - ✅ Estruktura ng database habang nag-transfer **Ano ang hindi naka-encrypt:** - ⚠️ Mga metadata ng koneksyon (timing, data size) - ⚠️ Mga IP address (visible sa signaling server) - ⚠️ Mga device identifier (para sa routing ng koneksyon) ## Mga Performance Tips ### Optimize ang Sync Speed 1. **Mga kondisyon ng Network** - Parehong local network = pinakamabilis na transfer - Mas mainam ang 5GHz WiFi kaysa sa 2.4GHz - Wired Ethernet para sa desktop devices 2. **Mga Batch Sizes** - Malalaking transfer: Split sa mas maliliit na batch - Tingnan ang progress indicator - I-cancel at subukan muli kung nahuli 3. **Performance ng Browser** - Panatilihing aktibo ang Noterich tab habang nag-sync - I-close ang mga hindi kinakailangang browser tabs - I-update sa pinakabagong bersyon ng browser 4. **Mga Resources ng Device** - Siguraduhing may sapat na storage space - I-disconnect ang mga application na nangangailangan ng maraming memory - I-restart ang browser kung nahuli ang sync ## Memory Management Ginagamit ng Noterich ang smart batching upang maiwasan ang browser crash: ```javascript // Async batch processing with setTimeout yielding async function asyncBatchProcessor(items, processor, batchSize = 10) { // Processes items in batches of 10 // Yields control every 10ms para manatiling responsive ang UI // Para maiwasan ang pag-block ng main thread sa panahon ng malalaking import } ``` **Mga Rekomendasyon:** - Limitahan ang isang transfer sa 100 notes maximum - Maghintay ng 30 segundo sa pagitan ng malalaking batch syncs - I-lockdown ang browser cache paminsan-minsan ## FAQ ### Q: Maaari ba akong mag-sync sa higit sa dalawang device? **A:** Oo! Simulan ang separate P2P sessions para sa bawat device pair. Para sa multi-device workflows: 1. Sync Device A → Device B 2. Pagkatapos ay sync Device B → Device C 3. O gumamit ang Device A bilang central hub para sa lahat ng iba pa ### Q: Gumagana ba ang P2P sync offline? **A:** Ang P2P ay nangangailangan ng paunang internet connection para sa signaling server handshake. Pagkatapos ma-set up: - ✅ Ang local network transfer ay gumagana nang walang internet - ✅ Ang data ay direktang nagte-transfer sa pagitan ng mga device - ❌ Ang paunang koneksyon ay nangangailangan ng access sa signaling server ### Q: Ano ang mangyayari kung ma-interrupt ang synchronization? **A:** Ang Noterich ay mahusay na humaharap sa mga interbensyon: - Ang mga bahaging transferred ay itatapon - Walang corrupted na data ang makakapasok sa iyong database - Magsimula lamang muli ang proseso ng synchronization - Ang mga na-sync na tala ay mananatiling hindi nagbabago ### Q: Maaari ba akong mag-sync sa isang Noterich instance ng ibang tao? **A:** Oo! Ang P2P sync ay gumagana sa pagitan ng anumang Noterich user: - Ibahagi ang mga indibidwal na tala sa mga collaborator - Hindi kailangan ang account linkage - Bawat transfer ay independent at secure - Perpekto para sa one-time note sharing ### Q: Mayroon bang limitasyon sa laki ng file? **A:** Ang practical limitasyon ay nakadepende sa: - Memory availability ng browser - Stability ng network - Recommended max: 50MB bawat session - Mas malalaking transfer: Split sa multiple batches ### Q: Gaano katagal nananatiling valid ang share links? **A:** Ang mga share links ay session-based: - Valid habang bukas ang Noterich tab ng sender - Aalis ang valididad kapag nagsara ang sender ng tab/browser - Inirerekomenda ang one-time use para sa seguridad - Gumawa ng bagong link para sa bawat transfer session ## Comparison: P2P vs Cloud Sync ```mermaid quadrantChart title "Sync Method Comparison" x-axis "Lower Privacy" --> "Higher Privacy" y-axis "Lower Control" --> "Higher Control" quadrant-1 "Noterich P2P" quadrant-2 "Avoid" quadrant-3 "Traditional Cloud" quadrant-4 "Centralized Services" "Noterich P2P": [0.9, 0.9] "Traditional Cloud": [0.3, 0.4] "Centralized Services": [0.4, 0.3] ``` | Feature | Noterich P2P | Cloud Sync | |---------|--------------|------------| | **Data Storage** | Iyong mga device lamang | Third-party servers | | **Privacy Level** | Maximum | Depende sa provider | | **Cost** | Libre | Kadalasan ay subscription-based | | **Complexidad ng Pag-setup** | Moderate | Simple | | **Sync Speed** | Napakabilis (direct) | Medium (sa pamamagitan ng server) | | **Offline Access** | Buo | Limitado | | **Vendor Lock-in** | Wala | Malaki | | **Portability ng Data** | Buo | Restricted | ## Mga Real-World Use Cases ### 📚 Personal Knowledge Base Sync ang iyong PKM (Personal Knowledge Management) system sa: - Desktop sa bahay para sa malalim na trabaho - Laptop para sa mga sesyon sa coffee shop - Tablet para sa pagbabasa at pag-annotate - Phone para sa mabilis na pagkuha ng data ### 👥 Team Collaboration Ibahagi nang ligtas ang mga tala ng pananaliksik sa loob ng mga team: - Walang kinakailangang IT infrastructure - End-to-end encrypted transfers - Audit trail sa pamamagitan ng mga log ng transfer - Sumusunod sa mga privacy regulation ### 🎓 Academic Research Magsanay sa mga papel at literature review: - Ibahagi ang mga annotated na PDF at tala - Panatilihing lokal na history ng version - Magtrabaho sa mga university/personal device - Protektahan ang hindi pa nailathalang pananaliksik ### 🏢 Enterprise Deployment I-deploy ang Noterich sa mga organisasyon na may privacy-conscious na mga polisiya: - Walang data ang lumalabas sa network ng kompanya - Gumagana sa likod ng mga firewall na may configuration - I-integrate sa mga umiiral na security policies - Nabawasan ang dependence sa cloud services ## Technical Deep Dive (Para sa Developers) ### Overview ng Architecture ```mermaid graph TB subgraph Sender["Sender Device"] A1[Note Data] --> A2[MessagePack Serialize] A2 --> A3{Encrypted?} A3 -->|Yes| A4[AES-256-GCM Encrypt] A3 -->|No| A5[Plain Binary] A4 --> A6[Chunk into 512KB] A5 --> A6 A6 --> A7[WebRTC Data Channel] end subgraph Receiver["Receiver Device"] B1[WebRTC Data Channel] --> B2[Reassemble Chunks] B2 --> B3{Encrypted?} B3 -->|Yes| B4[AES-256-GCM Decrypt] B3 -->|No| B5[Plain Binary] B4 --> B6[MessagePack Deserialize] B5 --> B6 B6 --> B7[IndexedDB Storage] B7 --> B8[Search Index Rebuild] end