<?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: Pere</title>
    <description>The latest articles on DEV Community by Pere (@pere-deltum).</description>
    <link>https://dev.to/pere-deltum</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3724568%2F03cca5b2-fb63-4d1c-b101-ac814c962d89.jpg</url>
      <title>DEV Community: Pere</title>
      <link>https://dev.to/pere-deltum</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pere-deltum"/>
    <language>en</language>
    <item>
      <title>Building a High-Performance Site Analyzer with Astro, React, and Node.js Performance Hooks</title>
      <dc:creator>Pere</dc:creator>
      <pubDate>Sun, 22 Feb 2026 22:28:26 +0000</pubDate>
      <link>https://dev.to/pere-deltum/building-a-high-performance-site-analyzer-with-astro-react-and-nodejs-performance-hooks-1ic3</link>
      <guid>https://dev.to/pere-deltum/building-a-high-performance-site-analyzer-with-astro-react-and-nodejs-performance-hooks-1ic3</guid>
      <description>&lt;h2&gt;
  
  
  Precision Diagnostics: How We Built the Deltum Site Checker
&lt;/h2&gt;

&lt;p&gt;Most website "health checkers" are either bloated, marketing-heavy, or hide their most valuable data behind a sign-up wall. At &lt;strong&gt;Deltum&lt;/strong&gt;, we believe that digital systems should be transparent and built to last. &lt;/p&gt;

&lt;p&gt;To support this, we built a &lt;strong&gt;Site Checker&lt;/strong&gt;—a real-time diagnostic tool designed to give developers and founders an immediate, high-fidelity look at their site’s connectivity, security, and performance.&lt;/p&gt;

&lt;p&gt;Here is a look at the technical architecture behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Goal: Accuracy Without Overhead
&lt;/h2&gt;

&lt;p&gt;We needed the tool to be three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Instant&lt;/strong&gt;: No waiting for full page renders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accurate&lt;/strong&gt;: Measuring raw server response, not just browser-level "perceived" speed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Informative&lt;/strong&gt;: Auditing security headers that actually matter (CSP, HSTS, etc.).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Tech Stack
&lt;/h2&gt;

&lt;p&gt;Following our core principle of "Fewer dependencies, stronger systems," we utilized our standard stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Framework&lt;/strong&gt;: &lt;a href="https://astro.build" rel="noopener noreferrer"&gt;Astro&lt;/a&gt; (using SSR mode on Vercel)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI Architecture&lt;/strong&gt;: React Islands (hydrated only when the tool is in use)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling&lt;/strong&gt;: Tailwind CSS + daisyUI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Node.js &lt;code&gt;http/https&lt;/code&gt; modules &amp;amp; &lt;code&gt;performance&lt;/code&gt; hooks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technical Implementation: Microsecond Timing
&lt;/h2&gt;

&lt;p&gt;To get the most accurate network timings, we avoided high-level fetch libraries which can add unnecessary overhead. Instead, we used Node.js's native &lt;code&gt;performance&lt;/code&gt; hooks within a serverless API route.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The HEAD Request Strategy
&lt;/h3&gt;

&lt;p&gt;Instead of a &lt;code&gt;GET&lt;/code&gt; request (which downloads the entire HTML body), we perform a &lt;code&gt;HEAD&lt;/code&gt; request. This respects the target server’s resources and allows us to inspect headers and timings with minimal data transfer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;performance&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;perf_hooks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// We measure the request lifecycle:&lt;/span&gt;
  &lt;span class="c1"&gt;// DNS -&amp;gt; TCP Handshake -&amp;gt; TLS -&amp;gt; TTFB&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;targetUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;HEAD&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ttfb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
  &lt;span class="c1"&gt;// ... more detailed timing logic&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. The React Island
&lt;/h3&gt;

&lt;p&gt;The UI is a React component integrated into an Astro page. We use framer-motion for subtle state transitions—ensuring the tool feels "premium" and responsive without cluttering the global site bundle.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="o"&gt;---&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;SiteChecker&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../components/SiteChecker.tsx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;---&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;SiteChecker&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;load&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Security Posture Audit
&lt;/h2&gt;

&lt;p&gt;Performance is only half the story. A "stable system" is a secure one. The tool automatically parses the response headers to check for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content-Security-Policy (CSP): To prevent injection.&lt;/li&gt;
&lt;li&gt;HSTS: To ensure encrypted connections.&lt;/li&gt;
&lt;li&gt;X-Frame-Options: To mitigate clickjacking.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why We Built This
&lt;/h2&gt;

&lt;p&gt;At Deltum, we treat websites as infrastructure, not decoration. This tool is a small piece of our philosophy: providing clarity and structure to the digital systems we manage.&lt;/p&gt;

&lt;p&gt;Try the tool here: &lt;a href="https://www.deltum.io/en/tools/site-checker?ref=devto" rel="noopener noreferrer"&gt;https://www.deltum.io/en/tools/site-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love to hear how you handle server-side performance monitoring. Do you prefer HEAD requests for health checks, or do you find GET more reliable for certain edge cases?&lt;/p&gt;

&lt;p&gt;Built by &lt;a href="https://www.deltum.io/en?ref=devto" rel="noopener noreferrer"&gt;Deltum &lt;/a&gt;— Digital systems, built to last.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>astro</category>
      <category>react</category>
      <category>performance</category>
    </item>
    <item>
      <title>Websites are systems, not deliverables</title>
      <dc:creator>Pere</dc:creator>
      <pubDate>Mon, 02 Feb 2026 17:00:07 +0000</pubDate>
      <link>https://dev.to/pere-deltum/websites-are-systems-not-deliverables-41dh</link>
      <guid>https://dev.to/pere-deltum/websites-are-systems-not-deliverables-41dh</guid>
      <description>&lt;p&gt;Launching a website often feels like crossing a finish line.&lt;/p&gt;

&lt;p&gt;Design approved, code deployed, project done!&lt;/p&gt;

&lt;p&gt;In practice, launch day is the moment a website enters its most &lt;strong&gt;complex&lt;/strong&gt; phase.&lt;/p&gt;

&lt;p&gt;Once public, a website operates in a hostile environment: the open internet. It receives real traffic, real content changes, real dependency updates, and real security pressure. Over time, small decisions compound — for better or worse.&lt;/p&gt;

&lt;p&gt;This is why treating websites as one-off deliverables is risky.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with “finished” websites
&lt;/h2&gt;

&lt;p&gt;When a website is treated as something to be delivered and forgotten, a predictable pattern appears:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dependencies age and become harder to update&lt;/li&gt;
&lt;li&gt;Performance slowly degrades&lt;/li&gt;
&lt;li&gt;Content structure becomes brittle&lt;/li&gt;
&lt;li&gt;Small changes feel increasingly expensive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually, the system reaches a point where the only perceived option is a full rewrite.&lt;/p&gt;

&lt;p&gt;This cycle is common, and costly.&lt;/p&gt;

&lt;p&gt;Not because teams are careless, but because the system was never designed to evolve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thinking in systems changes everything
&lt;/h2&gt;

&lt;p&gt;A system is something that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;evolves over time&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;requires maintenance&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;accumulates value or debt&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;responds to change&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a website is treated as a system, decisions shift.&lt;/p&gt;

&lt;p&gt;Instead of optimizing for launch speed, you optimize for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;clear structure&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;small surface area&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;understandable dependencies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;separation between content and presentation&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These choices don’t eliminate change — they make change survivable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stability is not the absence of change
&lt;/h2&gt;

&lt;p&gt;Stability is often misunderstood as stagnation.&lt;/p&gt;

&lt;p&gt;In reality, stable systems change constantly. The difference is how they change.&lt;/p&gt;

&lt;p&gt;Deliberate change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;is incremental&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;respects existing structure&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;avoids unnecessary rewrites&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;compounds value over time&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Undisciplined change does the opposite.&lt;/p&gt;

&lt;h2&gt;
  
  
  The long-term payoff
&lt;/h2&gt;

&lt;p&gt;Systems designed for longevity tend to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;require fewer emergency fixes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;be cheaper to maintain&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;adapt more easily to new needs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;inspire more confidence in the teams that use them&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These benefits aren’t always visible on launch day, but they matter far more on day two — and day two hundred.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thought
&lt;/h2&gt;

&lt;p&gt;Websites don’t fail because they change.&lt;br&gt;
They fail because they were never designed to change.&lt;/p&gt;

&lt;p&gt;Treating websites as systems is not about doing more work upfront.&lt;br&gt;
It’s about making different decisions and taking responsibility for what happens after launch.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pere&lt;/em&gt;&lt;br&gt;
Founder at &lt;strong&gt;Deltum&lt;/strong&gt;&lt;br&gt;
Digital systems, built to last.&lt;br&gt;
&lt;a href="https://www.deltum.io" rel="noopener noreferrer"&gt;deltum.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
