<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Filipe Lunfuankenda</title>
    <description>The latest articles on DEV Community by Filipe Lunfuankenda (@filipe_lunfuankenda).</description>
    <link>https://dev.to/filipe_lunfuankenda</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3853083%2F2cd5fcc6-8c6a-4d97-ab39-4d5e54c2af8a.jpeg</url>
      <title>DEV Community: Filipe Lunfuankenda</title>
      <link>https://dev.to/filipe_lunfuankenda</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/filipe_lunfuankenda"/>
    <language>en</language>
    <item>
      <title>Why I rebuilt offline web archiving to bypass CORS (The PWAA Format)</title>
      <dc:creator>Filipe Lunfuankenda</dc:creator>
      <pubDate>Fri, 17 Jul 2026 14:09:11 +0000</pubDate>
      <link>https://dev.to/filipe_lunfuankenda/why-i-rebuilt-offline-web-archiving-to-bypass-cors-the-pwaa-format-4h6o</link>
      <guid>https://dev.to/filipe_lunfuankenda/why-i-rebuilt-offline-web-archiving-to-bypass-cors-the-pwaa-format-4h6o</guid>
      <description>&lt;p&gt;The industry has systematically failed at modern offline web portability for the last two decades.If you want to distribute a complex, interactive manual or a heavy React dashboard for pure offline use, what are your options?&lt;/p&gt;

&lt;p&gt;Historically, we had Microsoft's &lt;strong&gt;.CHM&lt;/strong&gt;, which was great for documentation but turned into a malware nightmare and was abandoned. Then we got &lt;strong&gt;EPUB 3&lt;/strong&gt;, which theoretically supports HTML5/JS, but in practice, e-readers aggressively sandbox it, block JS, and break CORS, making it useless for modern web apps. Single-file formats like &lt;strong&gt;.MHTML&lt;/strong&gt; or browser extensions only work for a single flat page, instantly breaking when you have complex Single Page Application (SPA) routing.&lt;/p&gt;

&lt;p&gt;Wrapping it in &lt;strong&gt;Electron&lt;/strong&gt;? Now you are shipping a 150MB executable just to read a document.  Out of absolute necessity, I built &lt;strong&gt;PWAA&lt;/strong&gt; (&lt;strong&gt;&lt;em&gt;Portable Web Application Archive&lt;/em&gt;&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;The big problem was: 'How do we archive today’s rich Web?' Classic formats like PDF freeze static documents, completely destroying any interactivity, videos, or smooth navigation of Single Page Applications (SPA). EPUB is designed strictly for text and structured e-books, choking on heavy JavaScript. WARC (Web ARChive) is the gold standard for institutional preservation, but it's scarily complex for the average user and requires dedicated playback servers (Replay Servers).&lt;/p&gt;

&lt;p&gt;What was missing in the market was a universal container: a file capable of storing all the complexity of modern frameworks (React, Vue, WebGL) and delivering a fast, interactive, and encapsulated experience with a simple double-click, supported by the native technologies of modern operating systems. This is where the PWAA format was born.&lt;/p&gt;

&lt;p&gt;Currently, any interactive dashboard in React or document system requires a hosting server (Vercel, AWS, Netlify). PWAA frees engineers from the Cloud. The developer writes the code, packages it in a PWAA, sends it by email or USB drive, and the end user gets an exact and smooth experience, regardless of server shutdowns or connection drops.&lt;/p&gt;

&lt;p&gt;Because the code thinks it's running on a real server, it completely bypasses CORS restrictions. Heavy manuals and heavy media work natively offline from a single double-clickable file. It even includes an SPA Fallback mechanism so virtual routing never hits a 404.&lt;/p&gt;

&lt;p&gt;What is PWAA? PWAA is a new format engineered to pack an entire web app (HTML, CSS, JS, heavy media) into a standard PKZIP container. But here is the magic: the native reader never extracts it to the disk. &lt;/p&gt;

&lt;p&gt;Instead of using &lt;strong&gt;&lt;em&gt;file:///&lt;/em&gt;&lt;/strong&gt; protocols (which instantly trigger CORS blocks for fetching local JSON or ES6 modules), the PWAA reader maps the ZIP contents to memory and spins up an ephemeral in-memory HTTP server on &lt;strong&gt;&lt;em&gt;127.0.0.1&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Because your web code thinks it's running on a real cloud server, it completely bypasses CORS restrictions. Heavy SPAs (React, Next.js, Vue) work natively offline from a single double-clickable file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built the reference reader and builder in &lt;em&gt;Go&lt;/em&gt; (&lt;em&gt;Golang&lt;/em&gt;). Here are the core problems I had to solve:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The SPA Routing Problem (404s)&lt;/strong&gt;&lt;br&gt;
In a React/Vue app, navigation is virtual. If you refresh on &lt;em&gt;/about&lt;/em&gt;, a static server throws a 404. I built an SPA Fallback algorithm into the in-memory server: if a file isn't found inside the ZIP, it instantly returns the bytes of &lt;em&gt;&lt;strong&gt;index.html&lt;/strong&gt;&lt;/em&gt;, letting the internal JS router take over.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The Video Streaming Problem (HTTP 416)&lt;/strong&gt;&lt;br&gt;
Browsers require &lt;em&gt;Accept-Ranges&lt;/em&gt;: bytes to play &lt;em&gt;.mp4&lt;/em&gt; files. A standard on-the-fly ZIP extractor cannot easily jump to random bytes. I implemented a RAM-Buffering strategy that loads the requested media into physical RAM, transforming it into a bytes reader. This allows instant scrubbing on heavy video files with zero latency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Absolute Security (Zero-Leak)&lt;/strong&gt;&lt;br&gt;
WebViews love to cache data. The PWAA reader is forced to run in an ephemeral sandbox session folder. The exact millisecond the reader window is closed, a graceful shutdown command obliterates the temporary folder. No cookies, no localStorage, and no cache are left on the host machine. I also injected a global JavaScript bodyguard that intercepts external links (&lt;em&gt;&lt;strong&gt;https://&lt;/strong&gt;&lt;/em&gt;) and forces them to open in the user's default external browser, keeping the PWAA window strictly isolated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to create a PWAA?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The core CLI (&lt;strong&gt;&lt;em&gt;pwaa-builder&lt;/em&gt;&lt;/strong&gt;) acts as a universal chameleon. It has three modes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pack&lt;/strong&gt;: Takes a static folder and wraps it into .pwaa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build&lt;/strong&gt;: Automatically detects your framework (&lt;em&gt;package.json&lt;/em&gt;, &lt;em&gt;.csproj&lt;/em&gt;), runs the install/build commands (e.g., &lt;em&gt;npm run build&lt;/em&gt;), finds the &lt;strong&gt;&lt;em&gt;dist&lt;/em&gt;&lt;/strong&gt; folder, and archives it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scrape&lt;/strong&gt;: A recursive Web Crawler (built with Colly and GoQuery) that downloads a live website, rewrites the absolute DOM paths to relative offline paths, and generates an offline clone.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Open Core&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The builder CLI is closed for now, but &lt;strong&gt;the full architectural spec, the VFS and reader logic, and the SDK are completely open-source&lt;/strong&gt;. I want the community to see how the engine works, trust the security model, and even build their own native readers for macOS, Linux, or mobile. You can read the official Whitepaper and try the SDK &lt;a href="https://github.com/Filipe-Lunfuankenda/pwaa-core" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts on this architecture. Is the era of static documentations finally over?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Filipe-Lunfuankenda/pwaa-core/blob/main/assets/Apresenta%C3%A7%C3%A3o-do-Formato-PWAA.gif" rel="noopener noreferrer"&gt;https://github.com/Filipe-Lunfuankenda/pwaa-core/blob/main/assets/Apresenta%C3%A7%C3%A3o-do-Formato-PWAA.gif&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>go</category>
      <category>architecture</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Hello, World! 👋 I'm Filipe Lunfuankenda | Software Developer</title>
      <dc:creator>Filipe Lunfuankenda</dc:creator>
      <pubDate>Tue, 31 Mar 2026 09:06:25 +0000</pubDate>
      <link>https://dev.to/filipe_lunfuankenda/hello-world-im-filipe-lunfuankenda-software-developer-4k32</link>
      <guid>https://dev.to/filipe_lunfuankenda/hello-world-im-filipe-lunfuankenda-software-developer-4k32</guid>
      <description>&lt;p&gt;&lt;strong&gt;Olá, Mundo!&lt;/strong&gt; (Hello, World!) 🌍&lt;/p&gt;

&lt;p&gt;I’m &lt;strong&gt;Filipe Lunfuankenda&lt;/strong&gt;, a self-taught programmer, data analyst, and systems enthusiast. I was born in Angola 🇦🇴 and I am currently based in Portugal 🇵🇹, studying IT Management and Programming (TGPSI) at Escola Profissional de Penacova.&lt;/p&gt;

&lt;p&gt;As I join the DEV community, I wanted to take a moment to introduce myself, share my stack, and connect with other amazing developers! &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Não basta saber, é preciso transformar conhecimento em impacto real."&lt;/em&gt; &amp;gt; &lt;em&gt;(It is not enough to know; we must transform knowledge into real impact.)&lt;/em&gt; — Filipe Lunfuankenda&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  💻 What I Do &amp;amp; My Stack
&lt;/h2&gt;

&lt;p&gt;I am passionate about creating robust software solutions, clean UI/UX interfaces, and tools that solve real-world logistical problems. I love dismantling complexity to understand how things work at their core.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My current toolkit includes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Languages &amp;amp; Web:&lt;/strong&gt; React, TypeScript, JavaScript, Python, C#, PHP, HTML5/CSS3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desktop Apps &amp;amp; Ecosystems:&lt;/strong&gt; Tauri, Electron, Node.js.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Databases &amp;amp; Infra:&lt;/strong&gt; SQL (MySQL), Linux Servers, Git/GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design (UI/UX):&lt;/strong&gt; Microsoft Office, Google Workspace, Adobe Creative Cloud (Premiere Pro, Photoshop), Canva.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Projects I'm Proud Of
&lt;/h2&gt;

&lt;p&gt;I focus heavily on analytical tools and institutional solutions. Some of my recent work includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;OrçaTech (Desktop Software):&lt;/strong&gt; A smart budget management and invoicing desktop application built from scratch with React, TypeScript, and encapsulated in Tauri.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Pedagogical Feedback System:&lt;/strong&gt; Developed a complete web platform utilizing dynamic QR Codes for a school's restaurant. It crosses real-time customer feedback with the specific student teams working that shift, generating automated analytical dashboards and PDFs for grading.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Polynomial Graphing Calculator:&lt;/strong&gt; An analytical tool built with React, Tailwind, and Electron for visualizing extremes, roots, and inverse functions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;(I recently finished a great internship at **TUMO Coimbra&lt;/em&gt;&lt;em&gt;, working with multimedia editing, robotics, and design sprints, and also had an amazing Erasmus+ mobility experience in Bilbao, Spain!)&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🌌 Beyond the Code
&lt;/h2&gt;

&lt;p&gt;When I'm not coding, my brain is usually fueled by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Science &amp;amp; Logic:&lt;/strong&gt; I am deeply fascinated by Physics, Mathematics, Electronics, and Artificial Intelligence. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linguistics:&lt;/strong&gt; My goal is to become a polyglot. I speak fluent Portuguese and English, but I'm also learning Spanish, French, Italian, German, Japanese, and even classical languages like Biblical Hebrew and Greek for theological and literary analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Culture:&lt;/strong&gt; Huge fan of Japanese anime (especially &lt;em&gt;Naruto&lt;/em&gt;), European football (Hala Madrid!), and playing chess.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤝 Let's Connect!
&lt;/h2&gt;

&lt;p&gt;I joined DEV to share my journey, document the challenges I overcome in my projects, and learn from this incredible community. &lt;/p&gt;

&lt;p&gt;Feel free to reach out, say &lt;em&gt;olá&lt;/em&gt;, or check out my work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💼 &lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/filipe-lunfuankenda/" rel="noopener noreferrer"&gt;Filipe Lunfuankenda&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Filipe-Lunfuankenda" rel="noopener noreferrer"&gt;@Filipe-Lunfuankenda&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🎥 &lt;strong&gt;YouTube:&lt;/strong&gt; &lt;a href="https://www.youtube.com/@FilipeLunfuankenda" rel="noopener noreferrer"&gt;My Tech &amp;amp; Video Portfolio&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Muito prazer!&lt;/em&gt; (Nice to meet you!) Let's build something awesome. 🚀&lt;/p&gt;

</description>
      <category>welcome</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
