<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>dweb | UCSC OSPO</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/tag/dweb/</link><atom:link href="https://deploy-preview-1007--ucsc-ospo.netlify.app/tag/dweb/index.xml" rel="self" type="application/rss+xml"/><description>dweb</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Mon, 26 Jan 2026 12:00:00 -0800</lastBuildDate><image><url>https://deploy-preview-1007--ucsc-ospo.netlify.app/media/logo_hub6795c39d7c5d58c9535d13299c9651f_74810_300x300_fit_lanczos_3.png</url><title>dweb</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/tag/dweb/</link></image><item><title>Peersky Browser</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre26/ucsc/peersky/</link><pubDate>Mon, 26 Jan 2026 12:00:00 -0800</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre26/ucsc/peersky/</guid><description>&lt;p>&lt;a href="https://peersky.p2plabs.xyz/" target="_blank" rel="noopener">Peersky Browser&lt;/a> is an experimental personal gatekeeper to a new way of accessing web content. In a world where a handful of big companies control most of the internet, Peersky leverages distributed web technologies—&lt;a href="https://ipfs.tech/" target="_blank" rel="noopener">IPFS&lt;/a>, &lt;a href="https://holepunch.to/" target="_blank" rel="noopener">Hypercore&lt;/a>, and &lt;a href="https://www.bittorrent.com/" target="_blank" rel="noopener">BitTorrent&lt;/a> return control to the users. With integrated local P2P applications, Peersky offers a fresh, community-driven approach to browsing.&lt;/p>
&lt;h3 id="implement-p2p-extension-store">Implement P2P Extension Store&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics:&lt;/strong> &lt;code>Browser Extensions&lt;/code>, &lt;code>P2P&lt;/code>, &lt;code>Electron&lt;/code>, &lt;code>IPFS&lt;/code>, &lt;code>Hypercore&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills:&lt;/strong> JavaScript, Electron.js, HTML/CSS, P2P&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Moderate&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Medium (175 hours)&lt;/li>
&lt;li>&lt;strong>Mentors:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/akhilesh-thite/">Akhilesh Thite&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Build a decentralized extension distribution flow that archives WebExtensions into a predictable P2P-friendly layout and installs directly from P2P URLs.&lt;/p>
&lt;p>&lt;strong>Tasks:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Define the P2P extension layout:&lt;/strong>
&lt;ul>
&lt;li>Standardize &lt;code>/extensions/{name}/{version}/extension.zip&lt;/code> and &lt;code>/extensions/{name}/index.json&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Design install compatibility for P2P URLs:&lt;/strong>
&lt;ul>
&lt;li>Support &lt;code>peersky://extensions/...&lt;/code> and P2P links from IPFS or Hypercore.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Archive Chrome Web Store extensions to P2P:&lt;/strong>
&lt;ul>
&lt;li>Use &lt;a href="https://github.com/akhileshthite/chrome-extension-fetch" target="_blank" rel="noopener">chrome-extension-fetch&lt;/a> to fetch CRX, convert to ZIP, and store it in the layout.&lt;/li>
&lt;li>Update &lt;code>index.json&lt;/code> with metadata like version, &lt;code>P2P_URL&lt;/code>, and &lt;code>fetchedAt&lt;/code>.&lt;/li>
&lt;li>Publish the folder to IPFS or Hypercore and feed the link into the install flow.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Add settings and trust model:&lt;/strong>
&lt;ul>
&lt;li>Add a “Load from P2P” settings toggle.&lt;/li>
&lt;li>Support curated extension hoards (&lt;code>index.json&lt;/code>) and automated updates.&lt;/li>
&lt;li>Clarify integrity assumptions and sandboxing expectations.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>More details in the issue:&lt;/strong> &lt;a href="https://github.com/p2plabsxyz/peersky-browser/issues/42" target="_blank" rel="noopener">https://github.com/p2plabsxyz/peersky-browser/issues/42&lt;/a>&lt;/p>
&lt;h3 id="backup--restore-system-p2p-json--tabs-restore">Backup &amp;amp; Restore System (P2P JSON + Tabs Restore)&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics:&lt;/strong> &lt;code>P2P&lt;/code>, &lt;code>Backup&lt;/code>, &lt;code>Session Restore&lt;/code>, &lt;code>Electron&lt;/code>, &lt;code>Onboarding&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills:&lt;/strong> JavaScript, Electron.js, HTML/CSS, P2P&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Moderate&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Medium (175 hours)&lt;/li>
&lt;li>&lt;strong>Mentors:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/akhilesh-thite/">Akhilesh Thite&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Implement a backup and restore pipeline for Peersky’s P2P app data and session state, including an onboarding import flow for tabs from other browsers.&lt;/p>
&lt;p>&lt;strong>Tasks:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Generate a P2P backup bundle:&lt;/strong>
&lt;ul>
&lt;li>Create a single &lt;code>.zip&lt;/code> that contains &lt;code>lastOpened.json&lt;/code>, &lt;code>tabs.json&lt;/code>, &lt;code>ensCache.json&lt;/code>, and the &lt;code>ipfs/&lt;/code> and &lt;code>hyper/&lt;/code> directories.&lt;/li>
&lt;li>Add an option to generate a CID for the backup zip for instant sharing.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Restore from settings:&lt;/strong>
&lt;ul>
&lt;li>Upload a P2P backup zip file.&lt;/li>
&lt;li>Load a backup from an IPFS or Hyper CID.&lt;/li>
&lt;li>Import Chrome/Firefox tab exports produced by a helper extension.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Define the helper extension export format:&lt;/strong>
&lt;ul>
&lt;li>Create a small extension under &lt;a href="https://github.com/p2plabsxyz/" target="_blank" rel="noopener">p2plabsxyz&lt;/a> to export windows and tabs (URLs, titles, window grouping, active tab indexes).&lt;/li>
&lt;li>Ensure the export format is compatible with Peersky’s import pipeline.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Add onboarding import flow:&lt;/strong>
&lt;ul>
&lt;li>Show &lt;code>onboarding.html&lt;/code> on first launch and prompt “Import tabs from another browser?”.&lt;/li>
&lt;li>Guide users to install the helper extension and import the generated file.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Align with existing persistence:&lt;/strong>
&lt;ul>
&lt;li>Reuse &lt;code>lastOpened.json&lt;/code>, &lt;code>tabs.json&lt;/code>, and &lt;code>peersky-browser-tabs&lt;/code> localStorage for restores.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>More details in the issue:&lt;/strong> &lt;a href="https://github.com/p2plabsxyz/peersky-browser/issues/60" target="_blank" rel="noopener">https://github.com/p2plabsxyz/peersky-browser/issues/60&lt;/a>&lt;/p></description></item><item><title>[Final] Building PeerSky’s Extensions System</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre25/ucsc/peersky/2025-09-22-6cobi/</link><pubDate>Tue, 23 Sep 2025 00:00:00 +0000</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre25/ucsc/peersky/2025-09-22-6cobi/</guid><description>&lt;p>Hi everyone, I’m Hanzhong Liu. Over the summer I worked on building the &lt;code>peersky://extensions&lt;/code> system for &lt;a href="https://github.com/p2plabsxyz/peersky-browser" target="_blank" rel="noopener">PeerSky browser&lt;/a>, a decentralized and privacy-first browser built on Electron.&lt;/p>
&lt;p>This post is my final GSoC 2025 update — covering how the extensions manager was designed, the security model behind IPC, the UI for managing extensions, and what’s next for PeerSky.&lt;/p>
&lt;h2 id="project-overview">Project Overview&lt;/h2>
&lt;p>The new extensions system makes PeerSky behave like a modern browser: you can install extensions from the Chrome Web Store or from local files, enable/disable them, update or uninstall, and interact with their toolbar actions through a puzzle-menu UI.&lt;/p>
&lt;h3 id="key-design-goals">Key Design Goals&lt;/h3>
&lt;ul>
&lt;li>Secure preload-based API exposure via &lt;code>contextBridge&lt;/code>&lt;/li>
&lt;li>Support for preinstalled, Web Store, and local packages&lt;/li>
&lt;li>Toolbar integration with pin/unpin support (up to six)&lt;/li>
&lt;li>Robust validation: MV3-only, size caps, zip-slip prevention&lt;/li>
&lt;/ul>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="./peersky-extensions-management.png" alt="Extensions Management" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;h3 id="preinstalled-mv3s">Preinstalled MV3s&lt;/h3>
&lt;p>PeerSky now ships with three trusted extensions out of the box:&lt;/p>
&lt;ul>
&lt;li>Dark Reader&lt;/li>
&lt;li>Linguist (web page translator)&lt;/li>
&lt;li>uBlock Origin Lite&lt;/li>
&lt;/ul>
&lt;p>They remain installed by default but can be disabled at any time. This ensures users always have a working baseline without needing to browse an extension store.&lt;/p>
&lt;h3 id="electron-integration">Electron Integration&lt;/h3>
&lt;p>Instead of injecting scripts, the system uses &lt;strong>preload + IPC&lt;/strong>. Each operation is routed through validated IPC channels:&lt;/p>
&lt;ul>
&lt;li>&lt;code>listExtensions&lt;/code>, &lt;code>installFromWebStore&lt;/code>, &lt;code>toggleExtension&lt;/code>, etc.&lt;/li>
&lt;li>All methods are scoped to &lt;code>peersky://extensions&lt;/code> only.&lt;/li>
&lt;li>Rate limiting and size caps are enforced per renderer.&lt;/li>
&lt;/ul>
&lt;p>This design makes the surface auditable and prevents privilege leaks.&lt;/p>
&lt;h3 id="toolbar--puzzle-menu">Toolbar &amp;amp; Puzzle Menu&lt;/h3>
&lt;p>Browser actions appear in a puzzle menu and can be pinned for quick access:&lt;/p>
&lt;ul>
&lt;li>Up to six pins are allowed&lt;/li>
&lt;li>Pinned state persists across sessions.&lt;/li>
&lt;li>Popups (e.g., for translators or wallets) open in isolated windows, with OAuth flows preserved via popup guards.&lt;/li>
&lt;/ul>
&lt;h3 id="security-highlights">Security Highlights&lt;/h3>
&lt;ul>
&lt;li>Installs capped at &lt;strong>60 MB&lt;/strong>, with early rejection on oversized payloads&lt;/li>
&lt;li>&lt;strong>5 installs/minute&lt;/strong> per renderer to prevent abuse&lt;/li>
&lt;li>ZIP/CRX extraction hardened against path traversal&lt;/li>
&lt;li>MV3 required; permissions validated at install with warnings for risky hosts&lt;/li>
&lt;li>Web Store installs use Google-signed CRX verification via &lt;code>electron-chrome-web-store&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="example-installing-from-the-web-store">Example: Installing from the Web Store&lt;/h2>
&lt;p>Adding a new extension is simple:&lt;/p>
&lt;ol>
&lt;li>Paste a Chrome Web Store URL or ID into the install bar.&lt;/li>
&lt;li>PeerSky downloads and validates the CRX.&lt;/li>
&lt;li>On success, the extension appears in the grid with toggle, update, and remove options.&lt;/li>
&lt;/ol>
&lt;h2 id="reflection">Reflection&lt;/h2>
&lt;p>This project was both challenging and rewarding. Designing an extension system meant grappling with security, IPC design, and user experience at the same time. I learned to think carefully about security management, UI/UX positioning, and design APIs that are auditable.&lt;/p>
&lt;p>I’m grateful to my mentor Akhilesh Thite and the UC OSPO team for their guidance and feedback. Their support pushed me to make deliberate technical decisions and communicate them clearly.&lt;/p>
&lt;p>You can explore the project here:
&lt;a href="https://github.com/p2plabsxyz/peersky-browser" target="_blank" rel="noopener">https://github.com/p2plabsxyz/peersky-browser&lt;/a>&lt;/p></description></item><item><title>[MidTerm] Building PeerSky’s Settings System</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre25/ucsc/peersky/2025-07-24-6cobi/</link><pubDate>Thu, 24 Jul 2025 00:00:00 +0000</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre25/ucsc/peersky/2025-07-24-6cobi/</guid><description>&lt;p>Hi everyone, I’m Hanzhong Liu. My project focuses on building a secure and extensible &lt;code>peersky://settings&lt;/code> system for the &lt;a href="https://github.com/p2plabsxyz/peersky-browser" target="_blank" rel="noopener">PeerSky browser&lt;/a>, a decentralized and privacy-first browser built on Electron.&lt;/p>
&lt;p>This post is a midterm check-in covering what’s been implemented so far — from IPC architecture to real-time theme and wallpaper updates — and a preview of what’s coming next.&lt;/p>
&lt;h2 id="project-overview">Project Overview&lt;/h2>
&lt;p>Peersky’s new settings system is designed to unify browser preferences (themes, search engine, appearance, extensions, etc.) into a single modular interface. It’s accessible via a protocol route (&lt;code>peersky://settings&lt;/code>) and built using web-standard HTML/CSS, scoped APIs, and Electron’s context isolation model.&lt;/p>
&lt;h3 id="key-design-goals">Key Design Goals:&lt;/h3>
&lt;ul>
&lt;li>Secure preload-based API exposure via &lt;code>contextBridge&lt;/code>&lt;/li>
&lt;li>Fast access to user preferences with zero-flicker wallpaper updates&lt;/li>
&lt;li>Extensibility for bookmarks, future plugins, and privacy tools&lt;/li>
&lt;/ul>
&lt;h2 id="midterm-progress-highlights">Midterm Progress Highlights&lt;/h2>
&lt;h3 id="electron-integration">Electron Integration&lt;/h3>
&lt;p>Rather than using &lt;code>webFrame.executeJavaScript()&lt;/code>, I implemented preload-scoped APIs using &lt;code>contextBridge&lt;/code> and &lt;code>ipcRenderer&lt;/code> to prevent injection vulnerabilities and ensure synchronous availability during early page load. Each internal protocol (settings, home, bookmarks) is granted its own API access level.&lt;/p>
&lt;blockquote>
&lt;p>Code: &lt;a href="https://github.com/p2plabsxyz/peersky-browser/blob/main/src/pages/unified-preload.js" target="_blank" rel="noopener">&lt;code>src/pages/unified-preload.js&lt;/code>&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;h3 id="modular-settings-page">Modular Settings Page&lt;/h3>
&lt;p>The UI lives in a single HTML file with sidebar-based navigation (Appearance, Search, Bookmarks, Extensions). Each section updates independently using event-driven IPC and live sync.&lt;/p>
&lt;h3 id="wallpaper--theme-switching">Wallpaper &amp;amp; Theme Switching&lt;/h3>
&lt;ul>
&lt;li>Supports both built-in wallpapers and custom uploads&lt;/li>
&lt;li>Background applies instantly using &lt;code>sendSync()&lt;/code> during preload&lt;/li>
&lt;li>Themes (light, dark, system) are controlled using root-level CSS variables and real-time IPC events&lt;/li>
&lt;/ul>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="https://hackmd.io/_uploads/S11q7M1Dee.png" alt="Wallpaper" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;h3 id="cache--search-engine">Cache &amp;amp; Search Engine&lt;/h3>
&lt;ul>
&lt;li>Added IPC handler to clear both Electron session and P2P cache directories (&lt;code>ipfs/&lt;/code>, &lt;code>hyper/&lt;/code>)&lt;/li>
&lt;li>Settings API allows switching between DuckDuckGo, Ecosia, and Startpage via dropdown&lt;/li>
&lt;/ul>
&lt;h3 id="example-adding-a-new-setting-autosave">Example: Adding a New Setting (&lt;code>autoSave&lt;/code>)&lt;/h3>
&lt;p>I also documented how developers can add new settings like &lt;code>autoSave&lt;/code> using:&lt;/p>
&lt;ul>
&lt;li>&lt;code>settings-manager.js&lt;/code> for default values and validation&lt;/li>
&lt;li>Preload event listeners (&lt;code>onAutoSaveChanged&lt;/code>)&lt;/li>
&lt;li>UI toggles and save logic in &lt;code>settings.js&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Documentation link: &lt;a href="https://github.com/p2plabsxyz/peersky-browser/blob/main/docs/settings.md" target="_blank" rel="noopener">Settings Guide&lt;/a>&lt;/p>
&lt;h2 id="reflection">Reflection&lt;/h2>
&lt;p>I’m really thankful for the mentorship I’ve received from Akhilesh Thite. His guidance has been the perfect balance of autonomy and support. He challenged me to reason clearly about technical choices, especially when I thought some of them are minor and not worthing paying attention to. His feedback helped me write cleaner, better-scoped code. This project has helped me grow as a software engineer in ways I didn’t fully anticipate, but I&amp;rsquo;ve enjoyed it so so much.&lt;/p>
&lt;p>You can explore the project here:&lt;br>
&lt;a href="https://github.com/p2plabsxyz/peersky-browser" target="_blank" rel="noopener">https://github.com/p2plabsxyz/peersky-browser&lt;/a>&lt;/p></description></item><item><title>Implement Web Extensions &amp; System Settings Integration</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre25/ucsc/peersky/2025-06-15-6cobi/</link><pubDate>Sun, 15 Jun 2025 00:00:00 +0000</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre25/ucsc/peersky/2025-06-15-6cobi/</guid><description>&lt;p>Hi! I&amp;rsquo;m Hanzhong Liu, a Computer Science student at Fordham University with a minor in Business Administration. My interests lie in distributed systems, backend engineering, and decentralized tools—especially systems that prioritize user autonomy and privacy.&lt;/p>
&lt;p>This summer, I&amp;rsquo;m contributing to the &lt;a href="https://github.com/p2plabsxyz/peersky-browser" target="_blank" rel="noopener">Peersky&lt;/a> project as part of OSRE 2025 through Google Summer of Code. My project, &lt;strong>&amp;ldquo;Implement Web Extensions &amp;amp; System Settings Integration,&amp;rdquo;&lt;/strong> will add full support for local browser extensions in Peersky, allowing users to customize their experience without relying on centralized extension stores.&lt;/p>
&lt;p>Deliverables include an extension loader, drag-and-drop installation for &lt;code>.zip&lt;/code> and Git-based extensions, manifest validation, sandboxing, and a unified &lt;code>peersky://settings&lt;/code> page for managing everything from themes to privacy tools. Pre-installed extensions like uBlock Origin and DScan will be bundled by default.&lt;/p>
&lt;p>You can read my full &lt;a href="https://docs.google.com/document/d/1FQU2typchX08ly8lwk7nj8NcARNrTp0GomVICO4b53k/edit?tab=t.0#heading=h.nv2vmujhdrj" target="_blank" rel="noopener">proposal here&lt;/a>. My mentor for this project is &lt;strong>Akhilesh Thite&lt;/strong>.&lt;/p>
&lt;p>I&amp;rsquo;m excited to help build tools that empower users to take control of their browsing experience—and to contribute to the vision of a more decentralized web. Looking forward to the summer ahead!&lt;/p></description></item><item><title>Peersky Browser</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre25/ucsc/peersky/</link><pubDate>Tue, 18 Feb 2025 12:00:00 -0800</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre25/ucsc/peersky/</guid><description>&lt;p>&lt;a href="https://peersky.p2plabs.xyz/" target="_blank" rel="noopener">Peersky Browser&lt;/a> is an experimental personal gatekeeper to a new way of accessing web content. In a world where a handful of big companies control most of the internet, Peersky leverages distributed web technologies—&lt;a href="https://ipfs.tech/" target="_blank" rel="noopener">IPFS&lt;/a>, &lt;a href="https://holepunch.to/" target="_blank" rel="noopener">Hypercore&lt;/a>, and Web3—to return control to the users. With integrated local P2P applications, Peersky offers a fresh, community-driven approach to browsing.&lt;/p>
&lt;h3 id="implement-web-extensions-integration">Implement Web Extensions Integration&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics:&lt;/strong> &lt;code>Browser Extensions&lt;/code>, &lt;code>UI/UX&lt;/code>, &lt;code>Electron&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills:&lt;/strong> JavaScript, Electron.js, HTML/CSS&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Moderate&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Medium (175 hours)&lt;/li>
&lt;li>&lt;strong>Mentors:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/akhilesh-thite/">Akhilesh Thite&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Implement web extension support in Electron by leveraging its web extension node modules, pre-installing extensions, and providing a user interface for adding, updating, and securely managing them.&lt;/p>
&lt;p>&lt;strong>Tasks:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Loading Extensions via Electron Modules:&lt;/strong>
&lt;ul>
&lt;li>Utilize Electron’s web extension node modules to load extensions, as Electron.js doesn&amp;rsquo;t support marketplace integration.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Default Pre-installed Extensions:&lt;/strong>
&lt;ul>
&lt;li>Configure a set of pre-installed extensions like uBlock to offer immediate value for privacy and security.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>User-Installed Extensions UI:&lt;/strong>
&lt;ul>
&lt;li>Create an interface where users can add extension &lt;code>.zip&lt;/code> files in &lt;code>peersky://settings&lt;/code>.&lt;/li>
&lt;li>Add an option for users to manually update all installed extensions.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Validate and Sandbox Extensions:&lt;/strong>
&lt;ul>
&lt;li>Check the integrity and manifest structure of the uploaded extensions to ensure they meet Chrome Manifest V3 requirements.&lt;/li>
&lt;li>Apply sandboxing techniques and enforce strict content security policies to mitigate potential risks.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Extension Management UI:&lt;/strong>
&lt;ul>
&lt;li>Design a dedicated UI at the top right of the navigation bar to manage extensions, including stack order and pinning functionality for quick access and organization.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="implement-chat-history-synchronization-for-hyper-chat-rooms">Implement Chat History Synchronization for Hyper Chat Rooms&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics:&lt;/strong> &lt;code>P2P Communication&lt;/code>, &lt;code>Hypercore Protocol&lt;/code>, &lt;code>Real-time Synchronization&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills:&lt;/strong> JavaScript, Distributed Systems, P2P&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Moderate&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Medium (175 hours)&lt;/li>
&lt;li>&lt;strong>Mentors:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/akhilesh-thite/">Akhilesh Thite&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Implement chat history synchronization for Hyper chat rooms, ensuring that new devices retrieve all past messages—including those sent while offline—for a seamless user experience. Additionally, research and experiment with mDNS to enable true offline, peer-to-peer messaging on local networks.&lt;/p>
&lt;p>&lt;strong>Tasks:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>History Retrieval Mechanism:&lt;/strong>
&lt;ul>
&lt;li>Implement chat history synchronization so that when a new device joins a Hyper chat room, it retrieves the entire chat history from the Hypercore feed.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Offline Message Inclusion:&lt;/strong>
&lt;ul>
&lt;li>Ensure that devices that were offline during prior messages can still access the full chat history upon joining the room, even after messages were sent in their absence.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>UI Integration:&lt;/strong>
&lt;ul>
&lt;li>Create a seamless experience for users across devices by ensuring that no messages are lost and that users can access the full chat history regardless of their online status.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Research mDNS (Multicast DNS):&lt;/strong>
&lt;ul>
&lt;li>mDNS is a protocol that allows devices on the same local network to communicate with each other without the need for a central DNS server. This enables peer-to-peer communication, especially in offline environments, making it ideal for offline messaging.&lt;/li>
&lt;li>Experiment with the &lt;code>mDNS()&lt;/code> function to enable peer-to-peer communication for offline chat rooms.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Create Hyper Chat Web App Version:&lt;/strong>
&lt;ul>
&lt;li>Currently, Hyper chat is accessed via &lt;code>peersky://p2p/chat&lt;/code>. Develop a web app version of Hyper chat that can be hosted on the &lt;code>hyper://&lt;/code> protocol (&lt;code>hyper://chat.p2plabs.xyz&lt;/code>). This way, other P2P browsers (like &lt;a href="https://agregore.mauve.moe/" target="_blank" rel="noopener">Agregore&lt;/a>) can use it to communicate.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item></channel></rss>