<?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>Forem: Reza Purnama</title>
    <description>The latest articles on Forem by Reza Purnama (@rezapurnama).</description>
    <link>https://forem.com/rezapurnama</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%2F3602737%2Fc19b4bd0-8a3d-4e26-9e56-704f03be9e27.jpg</url>
      <title>Forem: Reza Purnama</title>
      <link>https://forem.com/rezapurnama</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rezapurnama"/>
    <language>en</language>
    <item>
      <title>How I Built Videly Ei8, Video Hosting Platform on a Shoestring Budget</title>
      <dc:creator>Reza Purnama</dc:creator>
      <pubDate>Sat, 28 Feb 2026 15:49:56 +0000</pubDate>
      <link>https://forem.com/rezapurnama/how-i-built-videly-ei8-video-hosting-platform-on-a-shoestring-budget-5eng</link>
      <guid>https://forem.com/rezapurnama/how-i-built-videly-ei8-video-hosting-platform-on-a-shoestring-budget-5eng</guid>
      <description>&lt;p&gt;Hey everyone! 👋 Today I want to share my journey of building &lt;strong&gt;Videly Ei8&lt;/strong&gt;, a video hosting and sharing platform I recently launched on Google Play. &lt;/p&gt;

&lt;p&gt;As a solo developer with limited funds, building a video platform is a massive challenge. Server processing and storage costs can skyrocket quickly. However, I found an architectural "hack" that allows the platform to run incredibly fast, efficiently, and support uploads of up to &lt;strong&gt;2GB per file&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Here’s a breakdown of what I built and the tech behind it.&lt;/p&gt;

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

&lt;p&gt;The project essentially consists of a Web platform and an Android app (Native Webview):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web Frontend &amp;amp; Backend:&lt;/strong&gt; Pure PHP scripts, HTML/CSS, and vanilla JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android App:&lt;/strong&gt; Native Android app utilizing an optimized webview.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video Processing:&lt;/strong&gt; FFmpeg (embedded directly inside the APK).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage &amp;amp; Delivery:&lt;/strong&gt; AWS S3.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💡 The Architecture Challenge: Web vs. App
&lt;/h2&gt;

&lt;p&gt;If you try our web version at &lt;a href="https://ei8.net" rel="noopener noreferrer"&gt;ei8.net&lt;/a&gt;, you can use it completely for free. However, this web version has a deliberate limitation: videos don't undergo metadata optimization. The raw video from your device is uploaded as-is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why didn't I integrate video processing on the web backend?&lt;/strong&gt;&lt;br&gt;
If I did, the upload pipeline would look like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User uploads the video.&lt;/li&gt;
&lt;li&gt;My main server receives the file and processes/optimizes the video.&lt;/li&gt;
&lt;li&gt;Once done, the server sends it to AWS S3.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This flow requires a &lt;strong&gt;double upload process&lt;/strong&gt;, which heavily wastes the user's time and drains my limited server resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ The Solution: Client-Side FFmpeg Processing on Android
&lt;/h2&gt;

&lt;p&gt;This is where the Videly Ei8 Android app shines. Even though the UI is essentially a webview of the main site, I embedded and integrated &lt;strong&gt;FFmpeg&lt;/strong&gt; natively within the app itself.&lt;/p&gt;

&lt;p&gt;The upload flow on the app is drastically more efficient:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user selects a video.&lt;/li&gt;
&lt;li&gt;The app &lt;strong&gt;instantly optimizes the video metadata&lt;/strong&gt; locally on the user's device in the blink of an eye.&lt;/li&gt;
&lt;li&gt;The optimized video is uploaded directly from the user's device to &lt;strong&gt;AWS S3&lt;/strong&gt; (completely bypassing my PHP backend).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The Results?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maximum Upload Speed:&lt;/strong&gt; Because it connects directly to S3 via pre-signed URLs or direct SDK, users can upload massive files up to 2GB extremely fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant, Lag-Free Playback:&lt;/strong&gt; Thanks to the client-side metadata optimization, the video streams instantly without buffering, regardless of its size.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 Conclusion &amp;amp; Future Plans
&lt;/h2&gt;

&lt;p&gt;I'm always looking for the best, most cost-effective ways to build powerful platforms on a reasonable budget. For now, Videly Ei8 is focused on the &lt;strong&gt;MP4&lt;/strong&gt; format with a 2GB per file upload limit. But this is just the beginning, and I believe massive updates are on the horizon.&lt;/p&gt;

&lt;p&gt;I would be absolutely thrilled if you took some time to try the platform and share your feedback from a developer's perspective! &lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Try the Web version:&lt;/strong&gt; &lt;a href="https://ei8.net" rel="noopener noreferrer"&gt;https://ei8.net&lt;/a&gt;&lt;br&gt;
📱 &lt;strong&gt;Download the Android App:&lt;/strong&gt; &lt;a href="https://play.google.com/store/apps/details?id=com.videlyei8.rdpdigitalkreatif" rel="noopener noreferrer"&gt;Videly Ei8 on Google Play&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading, and let me know what you think in the comments! 👇&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>android</category>
      <category>architecture</category>
      <category>webdev</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Reza Purnama</dc:creator>
      <pubDate>Mon, 10 Nov 2025 07:41:24 +0000</pubDate>
      <link>https://forem.com/rezapurnama/-49cm</link>
      <guid>https://forem.com/rezapurnama/-49cm</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/rezapurnama" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3602737%2Fc19b4bd0-8a3d-4e26-9e56-704f03be9e27.jpg" alt="rezapurnama"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/rezapurnama/trick-or-treat-a-spooky-css-diorama-with-a-few-surprises-256k" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Trick or Treat: A Spooky CSS Diorama with a Few... Surprises&lt;/h2&gt;
      &lt;h3&gt;Reza Purnama ・ Nov 9&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#frontendchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>Trick or Treat: A Spooky CSS Diorama with a Few... Surprises</title>
      <dc:creator>Reza Purnama</dc:creator>
      <pubDate>Sun, 09 Nov 2025 16:24:37 +0000</pubDate>
      <link>https://forem.com/rezapurnama/trick-or-treat-a-spooky-css-diorama-with-a-few-surprises-256k</link>
      <guid>https://forem.com/rezapurnama/trick-or-treat-a-spooky-css-diorama-with-a-few-surprises-256k</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2025-10-15"&gt;Frontend Challenge - Halloween Edition, CSS Art&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;Hey everyone, and Happy Halloween!&lt;/p&gt;

&lt;p&gt;For this CSS art challenge, I didn't want to just make a static image. I wanted to build a living 'diorama' a small, spooky scene you could actually play with.&lt;/p&gt;

&lt;p&gt;As the title suggests, there are both "Tricks" and "Treats" hidden inside. This isn't just for looking it's for &lt;strong&gt;interacting&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  👻 Go Ahead, Click Everything!
&lt;/h3&gt;

&lt;p&gt;The scene is packed with... &lt;em&gt;surprises&lt;/em&gt;. See if you can find them all:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Try &lt;strong&gt;double-clicking&lt;/strong&gt; the 'Trick or Treat' neon sign... if you dare.&lt;/li&gt;
&lt;li&gt;Click on the &lt;strong&gt;ghosts&lt;/strong&gt; to see a special apparition.&lt;/li&gt;
&lt;li&gt;Make the &lt;strong&gt;Jack-o'-lantern&lt;/strong&gt; glow! Click it as many times as you can and watch it.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💻 The "Treat": How It's Made
&lt;/h3&gt;

&lt;p&gt;This is my "treat" (the technical details) behind the "tricks" (the interactive scares).&lt;/p&gt;

&lt;h4&gt;
  
  
  Pure CSS
&lt;/h4&gt;

&lt;p&gt;This is a CSS Art challenge, so the entire visual scene is built with &lt;strong&gt;100% pure CSS&lt;/strong&gt;. The structure is just simple, semantic HTML. Everything you see from the glowing moon and drifting fog to the multi layered pumpkin is crafted with CSS.&lt;/p&gt;

&lt;h4&gt;
  
  
  Advanced CSS "Tricks"
&lt;/h4&gt;

&lt;p&gt;I used a few modern CSS techniques to bring the scene to life:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Non-Destructive Carving:&lt;/strong&gt; The Jack-o'-lantern's face isn't an image file. It's "carved" in real-time using &lt;code&gt;clip-path: polygon(...)&lt;/code&gt; with an &lt;code&gt;evenodd&lt;/code&gt; fill rule. This "cuts" the face shapes out of the pumpkin segments, allowing the glow from behind to shine through.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atmospheric Lighting:&lt;/strong&gt; All the glowing effects (the moon, the neon sign, the candle flames, and the pumpkin's inner light) are a combination of &lt;code&gt;box-shadow&lt;/code&gt; and &lt;code&gt;filter: blur()&lt;/code&gt;. There are no images used for light.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scene Depth:&lt;/strong&gt; The scene has a 3D feel thanks to &lt;code&gt;z-index&lt;/code&gt; layering. The trees, ghosts, and fog are all positioned at different "depths," with the ones further back having a &lt;code&gt;filter: blur()&lt;/code&gt; applied to create a sense of distance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Living Animation:&lt;/strong&gt; &lt;code&gt;@keyframes&lt;/code&gt; are the soul of the scene. They are used for:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;float&lt;/code&gt;: The gentle bobbing of the ghosts.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;flicker&lt;/code&gt; &amp;amp; &lt;code&gt;flame-flicker&lt;/code&gt;: The unstable light of the neon sign and candles.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pulse&lt;/code&gt;: The rhythmic glow of the pumpkin.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;drift&lt;/code&gt;: The slow-moving layer of fog across the ground.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  JavaScript as the "Spark"
&lt;/h4&gt;

&lt;p&gt;While CSS builds the entire world, a small amount of &lt;strong&gt;vanilla JavaScript&lt;/strong&gt; acts as the &lt;em&gt;spark of life&lt;/em&gt; to make it truly interactive. It is purely a supporting tool to enhance the CSS.&lt;/p&gt;

&lt;p&gt;It's only used to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Listen for &lt;code&gt;addEventListener&lt;/code&gt; clicks on the various elements.&lt;/li&gt;
&lt;li&gt;Toggle CSS classes (like &lt;code&gt;.fly-away&lt;/code&gt; or &lt;code&gt;.shake&lt;/code&gt; for the sign).&lt;/li&gt;
&lt;li&gt;Play the HTML5 &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; elements for background music and... other sounds.&lt;/li&gt;
&lt;li&gt;Manage the simple logic for the double click timer and the pumpkin's increasing glow intensity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No libraries, no frameworks. Just a sprinkle of JS to empower the CSS core.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔗 Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;strong&gt;&lt;a href="https://drvx.net/halloween.html" rel="noopener noreferrer"&gt;https://drvx.net/halloween.html&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source Code (CodePen):&lt;/strong&gt; &lt;strong&gt;&lt;a href="https://codepen.io/Gregklotzwolf/pen/EaPqLpO" rel="noopener noreferrer"&gt;https://codepen.io/Gregklotzwolf/pen/EaPqLpO&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT
&lt;strong&gt;CodePen:&lt;/strong&gt; 

&lt;iframe height="600" src="https://codepen.io/Gregklotzwolf/embed/EaPqLpO?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A Final Thought
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are skilled in writing anything, always remember that your content will be served to your clients or visitors. Remember that UI/UX is very important; impress them with your work.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This was a blast to put together. I hope you enjoy it! Let me know in the comments if any of the surprises... got you.&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>How to Use Google Drive to Host Your Website</title>
      <dc:creator>Reza Purnama</dc:creator>
      <pubDate>Sat, 08 Nov 2025 20:17:00 +0000</pubDate>
      <link>https://forem.com/rezapurnama/how-to-use-google-drive-to-host-your-website-16f9</link>
      <guid>https://forem.com/rezapurnama/how-to-use-google-drive-to-host-your-website-16f9</guid>
      <description>&lt;p&gt;We all want a free and fast way to put a simple website online.&lt;br&gt;
Developers and creators are always looking for easy solutions to share their work without paying for servers.&lt;/p&gt;

&lt;p&gt;Years ago, Google Drive was a surprising tool for this. But when Google stopped the direct website hosting feature, smart solutions like drvx.net (DriveX) appeared to fix the problem.&lt;/p&gt;
&lt;h2&gt;
  
  
  Part 1: Why Hosting for Free is Still a Great Idea
&lt;/h2&gt;

&lt;p&gt;drvx.net keeps all the good things about hosting from cloud storage, but makes it work better now:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Totally Free: You just use the free storage space you already have in your Google Drive.&lt;/li&gt;
&lt;li&gt;Go Live Fast: Your files become a live website in just a few seconds.&lt;/li&gt;
&lt;li&gt;Quick Loading: Since the content comes from Google’s strong system, your website loads very fast.&lt;/li&gt;
&lt;li&gt;Very Simple: No need to learn complicated server setups or fancy coding processes.
​Keep in Mind: This method only works for simple websites (like landing pages, portfolios, or documentation) that use just HTML, CSS, and JavaScript.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  ​Part 2: How drvx.net Works
&lt;/h2&gt;

&lt;p&gt;​The old way of hosting directly from a Drive folder doesn't work anymore. drvx.net works by acting as a smart middleman:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Share Your Files: You don't share a whole folder. Instead, you share the links to your main files (&lt;code&gt;.html&lt;/code&gt;, &lt;code&gt;.css&lt;/code&gt;, &lt;code&gt;.js&lt;/code&gt;) from your Google Drive. You usually set the sharing option to "Anyone with the link can edit."&lt;/li&gt;
&lt;li&gt;Set Up Your Site: Go to the Generate page on drvx.net. Paste your shared file links, choose a simple web address (like drvx.net/your-site), and set a secret PIN.&lt;/li&gt;
&lt;li&gt;Your Site is Live: drvx.net then pulls the files from your Google Drive and shows them as a real website to anyone on the internet.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cool Features of drvx.net:&lt;br&gt;
&lt;strong&gt;​Easy Updates&lt;/strong&gt;: If you change a file in your Google Drive, the website updates immediately. No need to re-upload anything to drvx.net!&lt;/p&gt;
&lt;h2&gt;
  
  
  ​Part 3: What Else You Can Use
&lt;/h2&gt;

&lt;p&gt;​While drvx.net is great for using your Google Drive, there are other very simple and popular options used by professionals. &lt;/p&gt;

&lt;p&gt;When deciding where to host your free static website, you have excellent options, each with a slightly different focus:&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/XhT-gJfERuc"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://drvx.net" rel="noopener noreferrer"&gt;Drvx.net&lt;/a&gt;&lt;/strong&gt; is perfect if your files are already sitting in Google Drive. Going live is very easy you simply paste the file links. This setup is great for quick projects where you want to use existing Drive files without hassle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;&lt;/strong&gt; are designed for code stored in GitHub or GitLab. They offer a modern workflow where going live is also very easy because you just connect your code repository. These platforms are better for fast, professional sites and projects that might grow larger later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Drvx.net is a clever and functional choice if you want to use your Google Drive space and keep things very simple without learning complex coding tools.&lt;/p&gt;

&lt;p&gt;But if you want features like using your own custom website name (like yourname.com) or building bigger projects, the industry tools like Netlify or GitHub Pages are also great and simple choices.&lt;/p&gt;

&lt;p&gt;All of these options help you achieve the same goal: putting your static website online for Free and making it Easy.&lt;br&gt;
​GitHub Pages uses your code on GitHub directly. Deploying is easy by adjusting your repository settings. This option is ideal for simple portfolios and documentation where your code already lives on GitHub.&lt;/p&gt;

</description>
      <category>html</category>
      <category>javascript</category>
      <category>website</category>
      <category>nocode</category>
    </item>
  </channel>
</rss>
