<?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: Veyl Space</title>
    <description>The latest articles on DEV Community by Veyl Space (@veyl_space).</description>
    <link>https://dev.to/veyl_space</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%2F4138803%2Fba81669b-f224-4ffa-9720-27b5b1cd4496.png</url>
      <title>DEV Community: Veyl Space</title>
      <link>https://dev.to/veyl_space</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/veyl_space"/>
    <language>en</language>
    <item>
      <title>How I Built an App With No CS Background (Firebase + React, AI-Assisted)</title>
      <dc:creator>Veyl Space</dc:creator>
      <pubDate>Wed, 23 Sep 2026 06:38:40 +0000</pubDate>
      <link>https://dev.to/veyl_space/how-i-built-an-app-with-no-cs-background-firebase-react-ai-assisted-26jk</link>
      <guid>https://dev.to/veyl_space/how-i-built-an-app-with-no-cs-background-firebase-react-ai-assisted-26jk</guid>
      <description>&lt;p&gt;A few months ago I couldn't tell you the difference between a Cloud Function and a Firestore trigger. Today, Veyl — an anonymous accountability partner matching app — is live in production, handling real-time chat, voice notes, payments, and matching logic.&lt;/p&gt;

&lt;p&gt;I didn't come from a traditional engineering background. I built Veyl by working closely with AI tools, learning Firebase and React well enough to debug and extend the app myself, one problem at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Veyl does
&lt;/h2&gt;

&lt;p&gt;Users sign up with a pseudonym (not a real profile), get matched with someone working toward a similar goal, and hold each other accountable through text and voice check-ins. No profile pictures, no public streaks — the anonymity is the whole point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some of the harder problems I had to actually understand, not just copy-paste
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Firestore security rules&lt;/strong&gt; — making sure users can only read/write their own data, and that sensitive fields (like premium status) can only ever be set server-side via Cloud Functions, never the client&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic batch writes&lt;/strong&gt; for the matching system, so two users can't accidentally double-match&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhook signature verification&lt;/strong&gt; (HMAC SHA512) for Paystack payments, plus idempotency handling so a webhook retry doesn't double-charge or re-trigger anything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice note encoding&lt;/strong&gt; in-browser (OfflineAudioContext → WAV) before upload, to keep file sizes small without a server-side transcoding step&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I'd tell someone else starting from zero
&lt;/h2&gt;

&lt;p&gt;AI tools are genuinely good at helping you write code — they're not as good at teaching you &lt;em&gt;why&lt;/em&gt; it works, or what happens when it doesn't. The debugging is where you actually learn the system. I didn't get to skip that part; I just got a faster way into it.&lt;/p&gt;

&lt;p&gt;Veyl is live at &lt;a href="https://veyl.space" rel="noopener noreferrer"&gt;veyl.space&lt;/a&gt; if you want to see the actual result. Happy to answer anything about the stack, the security decisions, or the AI-assisted workflow.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>firebase</category>
      <category>react</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
