<?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: Abdo Hbd</title>
    <description>The latest articles on DEV Community by Abdo Hbd (@abdo0x).</description>
    <link>https://dev.to/abdo0x</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%2F4084833%2F5f9cf1eb-eb36-4ff5-a97f-30d03ceaeedd.jpg</url>
      <title>DEV Community: Abdo Hbd</title>
      <link>https://dev.to/abdo0x</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abdo0x"/>
    <language>en</language>
    <item>
      <title>I built a social network with a single HTML file</title>
      <dc:creator>Abdo Hbd</dc:creator>
      <pubDate>Thu, 12 Nov 2026 00:05:56 +0000</pubDate>
      <link>https://dev.to/abdo0x/i-built-a-social-network-with-a-single-html-file-3h01</link>
      <guid>https://dev.to/abdo0x/i-built-a-social-network-with-a-single-html-file-3h01</guid>
      <description>&lt;p&gt;I've been building Relay, a small social network. It's live and free to use: &lt;a href="https://relay-4vm.pages.dev" rel="noopener noreferrer"&gt;https://relay-4vm.pages.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What it has so far:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For you and Following feeds&lt;/li&gt;
&lt;li&gt;Direct messages with images and GIFs&lt;/li&gt;
&lt;li&gt;Notifications&lt;/li&gt;
&lt;li&gt;Editable profiles&lt;/li&gt;
&lt;li&gt;Dark mode&lt;/li&gt;
&lt;li&gt;Password reset with email codes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The frontend is a single HTML file, now past 13,000 lines. The backend is TypeScript, and the frontend is hosted on Cloudflare Pages.&lt;/p&gt;

&lt;p&gt;A few things I ran into:&lt;/p&gt;

&lt;p&gt;One file works until it doesn't. Past roughly 10k lines, every change touches the same file, searching gets slow, and parallel changes conflict. I'm keeping it for now, but the CSS and JS are the first things I'd split out.&lt;/p&gt;

&lt;p&gt;Small UI details take longer than features. Getting a message action bar to sit beside an image instead of on top of it, without resizing the image when it appears, took more effort than adding the feature itself.&lt;/p&gt;

&lt;p&gt;Security belongs on the server. For password reset, the code check and the single-use reset token live in the backend. The UI only collects input.&lt;/p&gt;

&lt;p&gt;Test on a real phone early. Long display names, Arabic text, and the keyboard covering buttons broke things I never saw on desktop.&lt;/p&gt;

&lt;p&gt;It's still rough in places. If you try it, tell me what breaks or what's missing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://relay-4vm.pages.dev" rel="noopener noreferrer"&gt;https://relay-4vm.pages.dev&lt;/a&gt;&lt;br&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%2Fbe3pd32sk9hk06m9e2wb.png" 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%2Fbe3pd32sk9hk06m9e2wb.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
