<?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: marcosblg</title>
    <description>The latest articles on DEV Community by marcosblg (@marcosblg).</description>
    <link>https://dev.to/marcosblg</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%2F4189448%2F5f0dd5c5-3fc0-4902-8991-6612bddf1438.jpg</url>
      <title>DEV Community: marcosblg</title>
      <link>https://dev.to/marcosblg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcosblg"/>
    <language>en</language>
    <item>
      <title>I replaced three IT spreadsheets with three single-file HTML tools</title>
      <dc:creator>marcosblg</dc:creator>
      <pubDate>Sat, 17 Oct 2026 00:46:59 +0000</pubDate>
      <link>https://dev.to/marcosblg/i-replaced-three-it-spreadsheets-with-three-single-file-html-tools-38mf</link>
      <guid>https://dev.to/marcosblg/i-replaced-three-it-spreadsheets-with-three-single-file-html-tools-38mf</guid>
      <description>&lt;p&gt;Every small IT team has the same three spreadsheets: one for the racks, one for the IP addresses and one for the inventory. None of them is ever up to date.&lt;/p&gt;

&lt;p&gt;So I built three tools. Each one is a single &lt;code&gt;index.html&lt;/code&gt; you open in any browser — no server, no database, no account.&lt;/p&gt;

&lt;h2&gt;
  
  
  RackScope — where each device is
&lt;/h2&gt;

&lt;p&gt;Racks with their devices at their real height in U and their real number of ports. Click any port and it tells you where the cable goes: the device, the exact port, the rack, the cable type and your note. Used ports take the colour of their cable, free U are counted for you, and cables can run between rooms.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp1ual0fb67tj3ejyqi9n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp1ual0fb67tj3ejyqi9n.jpg" alt="RackScope" width="790" height="914"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://marcosblg.github.io/rackscope/" rel="noopener noreferrer"&gt;Live demo&lt;/a&gt; · &lt;a href="https://github.com/marcosblg/rackscope" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  SubnetScope — which IP it has
&lt;/h2&gt;

&lt;p&gt;One cell per IP, coloured by state: free, assigned, reserved, DHCP, leased, gateway. VLANs, subnets from /16 to /30 with overlap warnings, dual-stack IPv6 and documented NAT rules. It imports DHCP leases, reservations and pools from MikroTik, Windows Server, pfSense and Kea exports — without ever connecting to the server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9o25vtwo4izbrs4iaiby.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9o25vtwo4izbrs4iaiby.jpg" alt="SubnetScope" width="799" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://marcosblg.github.io/subnetscope/" rel="noopener noreferrer"&gt;Live demo&lt;/a&gt; · &lt;a href="https://github.com/marcosblg/subnetscope" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AssetScope — what it is and when it expires
&lt;/h2&gt;

&lt;p&gt;It doesn't open on a table, it opens on a traffic light: what has already expired, what expires within 90 days and what is covered — warranties, manufacturer support and maintenance contracts. Device records with serial numbers, a fleet report in PDF with the renewal cost of whatever expires this year, and printable QR labels.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftglb3pah08n25ixenstn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftglb3pah08n25ixenstn.jpg" alt="AssetScope" width="799" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://marcosblg.github.io/assetscope/" rel="noopener noreferrer"&gt;Live demo&lt;/a&gt; · &lt;a href="https://github.com/marcosblg/assetscope" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a single HTML file?
&lt;/h2&gt;

&lt;p&gt;Because the people who need these tools are often not allowed to install a server just to document the network. You double-click the file and it works. Data saves to a JSON file of your own (the File System Access API rewrites it on every change), so it can live on a network share. Each page ships with a Content-Security-Policy of &lt;code&gt;connect-src 'none'&lt;/code&gt;: the browser itself guarantees nothing leaves your machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  A few things I learnt along the way
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;QR codes without a library.&lt;/strong&gt; AssetScope's labels use a QR encoder written from scratch inside the HTML (byte mode, error correction M). Keeping the payload short — inventory number, name, model, serial — made each module about 20 % bigger, and the labels became readable from much further away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importing "real" Excel files.&lt;/strong&gt; Spanish Excel saves CSV with &lt;code&gt;;&lt;/code&gt;, in Windows-1252, with a title row on top and prices like &lt;code&gt;1.150,00 €&lt;/code&gt;. The importer looks for the header row, detects the encoding and recognises Spanish and English column names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Translating without touching the app code.&lt;/strong&gt; The apps are written in Spanish. A small MutationObserver swaps every on-screen string for its English version as it's rendered, and an EN / ES button lets you switch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All three are open source (AGPL-3.0) and work in English and Spanish. The live demos open with sample data, so you can try them in ten seconds.&lt;/p&gt;

&lt;p&gt;What would you add? Feature requests are very welcome in the GitHub issues — most of what people have asked for so far is already in.&lt;/p&gt;

</description>
      <category>sysadmin</category>
      <category>opensource</category>
      <category>html</category>
      <category>networking</category>
    </item>
  </channel>
</rss>
