<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://dandanilyuk.com/feed/projects.xml" rel="self" type="application/atom+xml" /><link href="https://dandanilyuk.com/" rel="alternate" type="text/html" /><updated>2026-11-06T02:53:40+00:00</updated><id>https://dandanilyuk.com/feed/projects.xml</id><title type="html">Dan Danilyuk | Projects</title><subtitle>Personal website of Dan Danilyuk showcasing projects and detailing professional experience.</subtitle><author><name>Dan Danilyuk</name></author><entry><title type="html">Adobe Services Disabler</title><link href="https://dandanilyuk.com/projects/2026-07-28-adobe-services-disabler/" rel="alternate" type="text/html" title="Adobe Services Disabler" /><published>2026-07-28T16:00:00+00:00</published><updated>2026-07-28T16:00:00+00:00</updated><id>https://dandanilyuk.com/projects/adobe-services-disabler</id><content type="html" xml:base="https://dandanilyuk.com/projects/2026-07-28-adobe-services-disabler/"><![CDATA[<h2 id="description">Description</h2>

<p>Adobe Services Disabler is a pair of menu-driven scripts, one for macOS and one for Windows, that switch off every Adobe background service, helper, updater, and telemetry agent with a single command. The same command switches everything back on. Nothing is deleted, so Enable genuinely restores the original state.</p>

<h2 id="features">Features</h2>

<ul>
  <li>One-line install command for both macOS (Bash) and Windows (PowerShell)</li>
  <li>Interactive arrow-key menu with Disable, Enable, and Quit choices; nothing is touched until a choice is made</li>
  <li>Wildcard discovery of Adobe items, so the scripts keep working after an Adobe update recreates them</li>
  <li>macOS: boots out and disables every <code class="language-plaintext highlighter-rouge">com.adobe.*</code> launchd agent and daemon across <code class="language-plaintext highlighter-rouge">/Library/LaunchAgents</code>, <code class="language-plaintext highlighter-rouge">~/Library/LaunchAgents</code>, and <code class="language-plaintext highlighter-rouge">/Library/LaunchDaemons</code> so they stay off across reboots</li>
  <li>macOS: switches off the Finder Sync and right-click app extensions with <code class="language-plaintext highlighter-rouge">pluginkit</code>, the only level at which they stay off</li>
  <li>Windows: stops services and sets them to Disabled, recording the original start type in the registry so Enable restores Manual instead of forcing everything to Automatic</li>
  <li>Windows: disables updater and telemetry scheduled tasks, plus Run and RunOnce startup entries, using the same <code class="language-plaintext highlighter-rouge">StartupApproved</code> flag Task Manager’s Startup tab writes</li>
  <li>Stops running Adobe helper processes while never touching the creative apps themselves</li>
  <li>Degrades gracefully without sudo or Administrator rights by handling per-user items and saying so up front</li>
  <li>A downloaded copy deletes itself once it finishes; a copy inside a git checkout is left alone</li>
</ul>

<h2 id="motivation">Motivation</h2>

<p>Creative Cloud installs a set of helpers, updaters, and telemetry agents that start with the machine and keep running whether or not any Creative Cloud app is ever opened. Ending them from Activity Monitor or Task Manager does not last, since they relaunch on the next boot. These scripts find every Adobe launch item by wildcard, switch each one off in the place that actually keeps it off, and stop the ones already running. Making the change fully reversible removes the risk of trying it.</p>

<h2 id="technologies-used">Technologies Used</h2>

<ul>
  <li>Bash with <code class="language-plaintext highlighter-rouge">launchctl</code> and <code class="language-plaintext highlighter-rouge">pluginkit</code> on macOS</li>
  <li>PowerShell with Windows services, scheduled tasks, and registry <code class="language-plaintext highlighter-rouge">StartupApproved</code> startup flags</li>
  <li>Arrow-key terminal menus built from raw escape sequences, with no dependencies beyond a stock shell</li>
  <li>Static landing page in vanilla HTML, CSS, and JavaScript with light and dark theming, served by GitHub Pages</li>
</ul>

<h2 id="impact">Impact</h2>

<p>Adobe Services Disabler reclaims memory and CPU on any machine with Creative Cloud installed, without uninstalling anything. Because state is recorded before each change and nothing is deleted, a single Enable run puts the machine back exactly as it was.</p>]]></content><author><name>Dan Danilyuk</name></author><category term="project" /><summary type="html"><![CDATA[Switch every Adobe background service off, and back on, with one command on macOS or Windows.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://dandanilyuk.com/images/projects/adobe_services_disabler.jpg" /><media:content medium="image" url="https://dandanilyuk.com/images/projects/adobe_services_disabler.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Bill of Sale Builder</title><link href="https://dandanilyuk.com/projects/2026-05-07-bill-of-sale-builder/" rel="alternate" type="text/html" title="Bill of Sale Builder" /><published>2026-05-07T20:04:00+00:00</published><updated>2026-05-07T20:04:00+00:00</updated><id>https://dandanilyuk.com/projects/bill-of-sale-builder</id><content type="html" xml:base="https://dandanilyuk.com/projects/2026-05-07-bill-of-sale-builder/"><![CDATA[<h2 id="description">Description</h2>

<p>Bill of Sale Builder is a static, browser-only wizard that produces a downloadable PDF Vehicle Bill of Sale for any US state plus the District of Columbia. A six-step flow collects the state and role, both parties’ details, the vehicle, and the sale terms, then renders a state-aware PDF in the browser. Nothing is sent to a server; all data lives in <code class="language-plaintext highlighter-rouge">localStorage</code> until the form is cleared.</p>

<h2 id="features">Features</h2>

<ul>
  <li>Six-step wizard covering setup, your info, the other party, the vehicle, sale terms, and review</li>
  <li>Full coverage for all 50 US states and the District of Columbia</li>
  <li>State-aware PDF output with the correct honorific, DMV reference link, and notary block per jurisdiction</li>
  <li>Federal post-2021 odometer disclosure (49 CFR 580) with automatic 20-year exemption</li>
  <li>Three vehicle types supported: motor vehicle, trailer, and boat, each with the right VIN, serial, or HIN rules</li>
  <li>VIN auto-decode via the NHTSA vPIC API to fill year, make, model, and body</li>
  <li>ZIP-driven city and state autofill via api.zippopotam.us, only filling blank values</li>
  <li>Joint-title support with a co-owner toggle on each party step</li>
  <li>Light and dark theme that follows <code class="language-plaintext highlighter-rouge">prefers-color-scheme</code> and persists explicit choices</li>
  <li>In-browser PDF preview before download, with form state saved to <code class="language-plaintext highlighter-rouge">localStorage</code> between sessions</li>
</ul>

<h2 id="motivation">Motivation</h2>

<p>Selling a used car, trailer, or boat usually means hunting down the right state-specific Bill of Sale form, paying a generator service, or typing one from scratch. Bill of Sale Builder produces a clean, jurisdiction-correct PDF for free without sending personal details to a server. Keeping the form fully client-side matters because it carries names, addresses, ID numbers, and VINs.</p>

<h2 id="technologies-used">Technologies Used</h2>

<ul>
  <li>Vanilla JavaScript (ES2020) with native ES modules, no build step</li>
  <li>jsPDF, vendored locally with no runtime CDN dependency</li>
  <li>NHTSA vPIC API for VIN decoding</li>
  <li>api.zippopotam.us for ZIP to city/state lookup</li>
  <li><code class="language-plaintext highlighter-rouge">localStorage</code> for form persistence and theme preference</li>
  <li>HTML and CSS with <code class="language-plaintext highlighter-rouge">[data-theme]</code> light/dark theming</li>
  <li>Self-hosted Inter woff2 font</li>
</ul>

<h2 id="impact">Impact</h2>

<p>Bill of Sale Builder removes a small but persistent friction from private vehicle sales by producing a legally formatted, state-correct document in a few minutes. The fully client-side architecture keeps sensitive personal information on the user’s device.</p>]]></content><author><name>Dan Danilyuk</name></author><category term="project" /><summary type="html"><![CDATA[Build a free, state-aware vehicle bill of sale PDF for any US state, right in your browser.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://dandanilyuk.com/images/projects/bill_of_sale_builder.jpg" /><media:content medium="image" url="https://dandanilyuk.com/images/projects/bill_of_sale_builder.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Passport Photo Generator</title><link href="https://dandanilyuk.com/projects/2026-03-11-passport-photo-generator/" rel="alternate" type="text/html" title="Passport Photo Generator" /><published>2026-03-11T21:04:00+00:00</published><updated>2026-03-11T21:04:00+00:00</updated><id>https://dandanilyuk.com/projects/passport-photo-generator</id><content type="html" xml:base="https://dandanilyuk.com/projects/2026-03-11-passport-photo-generator/"><![CDATA[<h2 id="description">Description</h2>

<p>Passport Photo Generator is a client-side web app that arranges passport photos onto standard print sizes, ready to print at home or at a pharmacy kiosk. Crop your photo with the State Department’s free tool, upload it, pick a print size, and download a print-ready JPEG. Every pixel is processed in the browser; nothing is uploaded anywhere.</p>

<h2 id="features">Features</h2>

<ul>
  <li>Four-step workflow: crop with the State Department’s tool, upload, pick a size, download</li>
  <li>4x6” and 5x7” print layouts filled with 2x2” passport photos</li>
  <li>300 DPI output with exact pixel dimensions: 600x600 per photo, 1200x1800 for 4x6”, 1500x2100 for 5x7”</li>
  <li>Fully client-side processing with no server uploads and no data collection</li>
  <li>No build tools or dependencies; the whole app is a single page</li>
</ul>

<h2 id="motivation">Motivation</h2>

<p>Pharmacies charge upwards of fifteen dollars for passport photos, and the actual work is arranging a government-cropped image onto a 4x6 sheet. That is a job for a canvas, not a service counter. Printing the sheet as a regular photo costs under a dollar.</p>

<h2 id="technologies-used">Technologies Used</h2>

<ul>
  <li>HTML, CSS, and vanilla JavaScript</li>
  <li>Canvas API for photo arrangement, resizing, and JPEG export</li>
  <li>The State Department’s photo crop tool as the upstream compliance step</li>
</ul>

<h2 id="impact">Impact</h2>

<p>Passport Photo Generator turns a fifteen-dollar errand into a one-dollar print. Keeping identity photos entirely on the user’s own device makes it an easy tool to trust with a sensitive document.</p>]]></content><author><name>Dan Danilyuk</name></author><category term="project" /><summary type="html"><![CDATA[Print your own passport photos for under a dollar, with every pixel processed in your browser.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://dandanilyuk.com/images/projects/passport_photo_generator.jpg" /><media:content medium="image" url="https://dandanilyuk.com/images/projects/passport_photo_generator.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Loaf Buddy</title><link href="https://dandanilyuk.com/projects/2026-01-16-loafbuddy/" rel="alternate" type="text/html" title="Loaf Buddy" /><published>2026-01-16T21:04:00+00:00</published><updated>2026-01-16T21:04:00+00:00</updated><id>https://dandanilyuk.com/projects/loafbuddy</id><content type="html" xml:base="https://dandanilyuk.com/projects/2026-01-16-loafbuddy/"><![CDATA[<h2 id="description">Description</h2>

<p>Loaf Buddy is a sourdough baking companion that takes the guesswork out of feeding a starter and mixing a loaf. It pairs two calculators in one interface: a starter feeding planner that sizes your next feed based on when you want it ripe, and a bread calculator that converts baker’s percentages into exact gram weights for flour, water, starter, and salt.</p>

<h2 id="features">Features</h2>

<ul>
  <li>Paired calculators for starter feeding and bread formulation</li>
  <li>Six timing presets for starter ripeness, from 4-6 hours up to 16-24 hours</li>
  <li>Starter hydration support at 50%, 75%, 100%, and 125%</li>
  <li>Automatic flour, water, and starter calculations from target dough weight</li>
  <li>Flour-specific hydration guidance for All-Purpose, Bread, Whole Wheat, Rye, and Spelt</li>
  <li>Container tare compensation for accurate scale-based measurements</li>
  <li>Dough presets for Bagels, Standard Loaf, Ciabatta, and Focaccia</li>
  <li>Adjustable salt percentage with live recalculation</li>
  <li>Ambient-temperature timing guidance calibrated to 75F / 24C</li>
  <li>Dark mode and a mobile-first layout</li>
</ul>

<h2 id="motivation">Motivation</h2>

<p>Sourdough rewards precision, but the math around baker’s percentages, starter hydration, and feed timing is easy to get wrong at 6am on a Saturday. Loaf Buddy automates that math and keeps the schedule honest, so bakers can focus on the dough instead of the spreadsheet.</p>

<h2 id="technologies-used">Technologies Used</h2>

<ul>
  <li>HTML with embedded CSS and JavaScript</li>
  <li>Baker’s percentage calculation algorithms</li>
  <li>Responsive tab-based navigation</li>
  <li>Dark mode theming via CSS</li>
</ul>

<h2 id="impact">Impact</h2>

<p>Loaf Buddy lowers the barrier for new sourdough bakers while giving experienced ones a faster way to scale a formula. Exact ingredient amounts cut down on waste, and the timing guidance makes it realistic to fit a loaf around a normal week.</p>]]></content><author><name>Dan Danilyuk</name></author><category term="project" /><summary type="html"><![CDATA[Take the guesswork out of sourdough with calculators for starter feeds and dough formulas.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://dandanilyuk.com/images/projects/loafbuddy.jpg" /><media:content medium="image" url="https://dandanilyuk.com/images/projects/loafbuddy.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">RTW88 WiFi Driver Installer</title><link href="https://dandanilyuk.com/projects/2025-11-03-rtw88-wifi-driver-installer/" rel="alternate" type="text/html" title="RTW88 WiFi Driver Installer" /><published>2025-11-03T22:02:00+00:00</published><updated>2025-11-03T22:02:00+00:00</updated><id>https://dandanilyuk.com/projects/rtw88-wifi-driver-installer</id><content type="html" xml:base="https://dandanilyuk.com/projects/2025-11-03-rtw88-wifi-driver-installer/"><![CDATA[<h2 id="description">Description</h2>

<p>RTW88 WiFi Driver Installer is a script that automates setting up Realtek WiFi 5 drivers on Linux. One command handles dependency resolution, kernel module compilation, Secure Boot MOK enrollment, and post-install verification, turning a notoriously fiddly driver installation into a single step.</p>

<h2 id="features">Features</h2>

<ul>
  <li>One-line install command for the Realtek RTW88 driver family</li>
  <li>Support for multiple Realtek chipsets (RTL8723DE, RTL8814AE, RTL8821CE, RTL8822BE, RTL8822CE, and USB variants)</li>
  <li>PCIe, USB, and SDIO adapter support</li>
  <li>DKMS integration so drivers rebuild automatically on every kernel update</li>
  <li>Secure Boot support through MOK (Machine Owner Key) enrollment</li>
  <li>Pre-built firmware bundling and modprobe configuration</li>
  <li>Works on Ubuntu 20.04+, Debian, Arch Linux, Manjaro, EndeavourOS, and Raspberry Pi OS, on both 32-bit and 64-bit systems</li>
  <li>Automated post-installation verification</li>
</ul>

<h2 id="motivation">Motivation</h2>

<p>Realtek WiFi adapters are everywhere in budget laptops, and Linux support for them regularly means compiling a kernel module by hand and fighting Secure Boot. Each step is a place for a newcomer to get stuck with no working internet to search for answers. The installer collapses all of it into one command that ends with working WiFi.</p>

<h2 id="technologies-used">Technologies Used</h2>

<ul>
  <li>Bash shell scripting</li>
  <li>DKMS (Dynamic Kernel Module Support)</li>
  <li>The Linux kernel module compilation toolchain</li>
  <li>Multi-distro package management (apt, pacman)</li>
</ul>

<h2 id="impact">Impact</h2>

<p>The installer gives owners of Realtek hardware a reliable, reproducible path to working WiFi across major distributions. What used to cost an afternoon of forum threads now takes the time of one command.</p>]]></content><author><name>Dan Danilyuk</name></author><category term="project" /><summary type="html"><![CDATA[Get Realtek WiFi working on Linux with one command, Secure Boot included.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://dandanilyuk.com/images/projects/rtw88_driver_installer.jpg" /><media:content medium="image" url="https://dandanilyuk.com/images/projects/rtw88_driver_installer.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Mortgage vs Income</title><link href="https://dandanilyuk.com/projects/2025-10-21-mortgage-affordability-analysis/" rel="alternate" type="text/html" title="Mortgage vs Income" /><published>2025-10-21T18:30:00+00:00</published><updated>2025-10-21T18:30:00+00:00</updated><id>https://dandanilyuk.com/projects/mortgage-affordability-analysis</id><content type="html" xml:base="https://dandanilyuk.com/projects/2025-10-21-mortgage-affordability-analysis/"><![CDATA[<h2 id="description">Description</h2>

<p>Mortgage vs Income is a dashboard that charts US home affordability by comparing the full cost of a 30-year mortgage against income. It computes a price-to-income ratio: total principal plus interest divided by annual earnings, where a higher number means housing is further out of reach. The data refreshes weekly from federal sources and covers the nation, all 50 states, and Washington, D.C.</p>

<h2 id="features">Features</h2>

<ul>
  <li>Price-to-income ratio combining home prices, 30-year mortgage rates, and average earnings in one number</li>
  <li>Single-earner and dual-income (1.4x) household views</li>
  <li>State-level breakdowns using state-specific income multipliers and home prices</li>
  <li>Interactive chart with zoom, pan, date range selection, and per-point inspection</li>
  <li>Dark mode with system preference detection</li>
  <li>Data regenerated automatically every Thursday by a GitHub Actions workflow</li>
</ul>

<h2 id="motivation">Motivation</h2>

<p>“Is housing getting less affordable?” is a simple question buried under three separate datasets: prices, rates, and wages. Each one alone tells a partial story. Combining them into a single ratio, tracked weekly across decades and broken down by state, makes the trend plain enough to see at a glance.</p>

<h2 id="technologies-used">Technologies Used</h2>

<ul>
  <li>Vanilla JavaScript (ES6+), HTML, and CSS custom properties for theming</li>
  <li>Chart.js 4 with chartjs-plugin-zoom for the interactive chart</li>
  <li>Ruby data pipeline pulling BLS Average Weekly Earnings, Zillow Home Value Index via FRED, and Freddie Mac 30-year rates (MORTGAGE30US)</li>
  <li>BLS Quarterly Census of Employment and Wages for state income multipliers</li>
  <li>GitHub Actions for the weekly refresh; GitHub Pages hosting on mortgagevsincome.com with no build step</li>
</ul>

<h2 id="impact">Impact</h2>

<p>Mortgage vs Income condenses decades of economic data into one legible affordability trend, at both the national and state level. Because the pipeline runs itself every week, the picture stays current without anyone touching it.</p>]]></content><author><name>Dan Danilyuk</name></author><category term="project" /><summary type="html"><![CDATA[Track US home affordability by comparing the full cost of a mortgage against income, refreshed weekly.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://dandanilyuk.com/images/projects/mortgage_vs_income.jpg" /><media:content medium="image" url="https://dandanilyuk.com/images/projects/mortgage_vs_income.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Legal Off-Road</title><link href="https://dandanilyuk.com/projects/2024-05-17-legal-offroad/" rel="alternate" type="text/html" title="Legal Off-Road" /><published>2024-05-16T17:01:12+00:00</published><updated>2024-05-16T17:01:12+00:00</updated><id>https://dandanilyuk.com/projects/legal-offroad</id><content type="html" xml:base="https://dandanilyuk.com/projects/2024-05-17-legal-offroad/"><![CDATA[<h2 id="description">Description</h2>

<p>Legal Off-Road is a service that makes dirt bikes and ATVs street legal by taking over the titling and registration paperwork. A rider fills out one online form with their vehicle’s details; the service prepares the required documents, handles submission, and follows through until an official title and license plate arrive.</p>

<h2 id="features">Features</h2>

<ul>
  <li>Single online form that collects everything needed to generate the legal paperwork</li>
  <li>Automated PDF generation of the titling and registration documents</li>
  <li>Guided process covering document preparation, submission, and fee payment</li>
  <li>Email updates at each stage so riders always know where their registration stands</li>
  <li>Support for dirt bikes and ATVs across applicable jurisdictions</li>
</ul>

<h2 id="motivation">Motivation</h2>

<p>Riding legally on the street means a title and a plate, but the paperwork to get them varies by jurisdiction and is confusing enough that most riders never try. The alternative is trailering the bike to every trailhead. Legal Off-Road folds the whole process into one form, so the bike can be ridden to the trail instead of hauled.</p>

<h2 id="technologies-used">Technologies Used</h2>

<ul>
  <li>Static HTML, CSS, and JavaScript front end</li>
  <li>Multi-step vehicle information form with client-side validation</li>
  <li>Automated PDF document generation</li>
  <li>Email notifications and payment collection behind the form</li>
</ul>

<h2 id="impact">Impact</h2>

<p>Legal Off-Road turns hours of jurisdiction-specific bureaucracy into a single form. It makes street legalization realistic for riders who would otherwise give up on the paperwork, and it spares the ones who would have persisted the research time.</p>]]></content><author><name>Dan Danilyuk</name></author><category term="project" /><summary type="html"><![CDATA[Get a dirt bike or ATV street legal from one online form, with the title and registration paperwork handled for you.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://dandanilyuk.com/images/projects/legal_offroad.jpg" /><media:content medium="image" url="https://dandanilyuk.com/images/projects/legal_offroad.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Wi-Fi QR Generator</title><link href="https://dandanilyuk.com/projects/2024-05-16-wifi-qr-generator/" rel="alternate" type="text/html" title="Wi-Fi QR Generator" /><published>2024-05-15T17:01:12+00:00</published><updated>2024-05-15T17:01:12+00:00</updated><id>https://dandanilyuk.com/projects/wifi-qr-generator</id><content type="html" xml:base="https://dandanilyuk.com/projects/2024-05-16-wifi-qr-generator/"><![CDATA[<h2 id="description">Description</h2>

<p>Wi-Fi QR Generator creates QR codes that join a Wi-Fi network the moment they are scanned. Type a network into the static web app by hand, or run the companion shell helper to autodetect the network you are already connected to and open the app with everything prefilled. Finished codes can be copied, downloaded as PNG, or exported as a printable PDF card.</p>

<h2 id="features">Features</h2>

<ul>
  <li>Form-based QR generation for WPA/WPA2/WPA3, WEP, and open networks, including hidden SSIDs</li>
  <li>Cross-platform shell helper that autodetects the current network on macOS, Linux (NetworkManager), and Windows</li>
  <li>Reads the password from the macOS Keychain when available, with a hidden prompt as the fallback</li>
  <li>“Copy Setup Link” produces a shareable URL that prefills the form on the recipient’s end</li>
  <li>Copy to clipboard, PNG download, and printable PDF card export</li>
  <li>Dark and light theme that follows the system preference</li>
  <li>Works offline once loaded, with no analytics and no backend</li>
  <li>Warns when an enterprise 802.1X network is detected, since Wi-Fi QR codes cannot join those</li>
</ul>

<h2 id="motivation">Motivation</h2>

<p>Sharing Wi-Fi usually means dictating a long password character by character. A QR code lets any modern phone join through its camera in one gesture. The shell helper removes the last bit of typing by pulling the SSID, security type, and password straight from the operating system.</p>

<h2 id="technologies-used">Technologies Used</h2>

<ul>
  <li>HTML, CSS, and vanilla JavaScript, fully client-side</li>
  <li>QRCode.js for QR generation and jsPDF for the printable card</li>
  <li>Bash helper using <code class="language-plaintext highlighter-rouge">networksetup</code>, <code class="language-plaintext highlighter-rouge">ipconfig</code>, and the Keychain on macOS, <code class="language-plaintext highlighter-rouge">nmcli</code> on Linux, and <code class="language-plaintext highlighter-rouge">netsh</code> via PowerShell on Windows</li>
  <li>URL parameters as the handoff between the shell helper and the web app</li>
</ul>

<h2 id="impact">Impact</h2>

<p>Wi-Fi QR Generator removes the friction of getting guests online in homes, offices, and rentals. Nothing about the network ever leaves the browser, so sharing access does not mean surrendering the password to a third-party service.</p>]]></content><author><name>Dan Danilyuk</name></author><category term="project" /><summary type="html"><![CDATA[Turn a Wi-Fi network into a QR code guests can scan to join, without the password leaving your browser.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://dandanilyuk.com/images/projects/wifi_qr_generator.jpg" /><media:content medium="image" url="https://dandanilyuk.com/images/projects/wifi_qr_generator.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Facebook Message Deleter</title><link href="https://dandanilyuk.com/projects/2024-05-14-facebook-message-deleter/" rel="alternate" type="text/html" title="Facebook Message Deleter" /><published>2024-05-14T17:01:12+00:00</published><updated>2024-05-14T17:01:12+00:00</updated><id>https://dandanilyuk.com/projects/facebook-message-deleter</id><content type="html" xml:base="https://dandanilyuk.com/projects/2024-05-14-facebook-message-deleter/"><![CDATA[<h2 id="description">Description</h2>

<p>Facebook Message Deleter is a browser console script that bulk-deletes Facebook Messenger conversations. Open Messenger, paste the script into the developer console, and it works through the conversation list the same way a person would: open each thread’s menu, click Delete, confirm, repeat. No extension, no install, and nothing to hand your login to.</p>

<h2 id="features">Features</h2>

<ul>
  <li>Runs straight from the browser console; nothing to install or grant permissions to</li>
  <li>On-page status bar with a live deletion count and a STOP button to end the run at any point</li>
  <li>Keeps deleting until the conversation list is empty, pacing itself as Messenger lazy-loads more threads</li>
  <li>Optional <code class="language-plaintext highlighter-rouge">LIMIT</code> constant to cap deletions per run for anyone worried about rate limiting</li>
  <li>Minified single-line version for quick pasting</li>
  <li>Companion GitHub Pages site for copying the script without cloning the repo</li>
  <li>Entirely client-side; the script touches nothing but the Messenger page it runs on</li>
</ul>

<h2 id="motivation">Motivation</h2>

<p>Facebook offers no way to bulk-delete Messenger conversations. Clearing years of history means removing threads one at a time, three clicks each. This script automates exactly those clicks, so a cleanup that would take hours runs unattended in minutes.</p>

<h2 id="technologies-used">Technologies Used</h2>

<ul>
  <li>Vanilla JavaScript executed in the browser’s developer console</li>
  <li>DOM automation driving the same Messenger menus a person would click</li>
  <li>Timed waits that pace deletions against Messenger’s lazy loading</li>
  <li>A minified build alongside the readable source</li>
</ul>

<h2 id="impact">Impact</h2>

<p>Facebook Message Deleter gives people a practical way to clear their message history and take back some privacy. Because it is a readable script pasted by hand rather than an extension, there is no third party to trust with account access.</p>]]></content><author><name>Dan Danilyuk</name></author><category term="project" /><summary type="html"><![CDATA[Bulk-delete Facebook Messenger conversations from the browser console, with nothing to install.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://dandanilyuk.com/images/projects/facebook_message_deleter.jpg" /><media:content medium="image" url="https://dandanilyuk.com/images/projects/facebook_message_deleter.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>