<?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: sakun</title>
    <description>The latest articles on Forem by sakun (@sakun).</description>
    <link>https://forem.com/sakun</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%2F222763%2F2f019d5f-2068-4305-b55a-bb82926e70b3.jpg</url>
      <title>Forem: sakun</title>
      <link>https://forem.com/sakun</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sakun"/>
    <language>en</language>
    <item>
      <title>A super simple implementation of Infinite Scrolling</title>
      <dc:creator>sakun</dc:creator>
      <pubDate>Mon, 23 Dec 2019 01:53:00 +0000</pubDate>
      <link>https://forem.com/sakun/a-super-simple-implementation-of-infinite-scrolling-3pnd</link>
      <guid>https://forem.com/sakun/a-super-simple-implementation-of-infinite-scrolling-3pnd</guid>
      <description>&lt;p&gt;I thought I’d share our approach to implementing infinite scrolling using jQuery on &lt;a href="https://sideprojects.net" rel="noopener noreferrer"&gt;https://sideprojects.net&lt;/a&gt; and how it could be applied to other sites.&lt;/p&gt;

&lt;p&gt;In our case, our pagination is in a “load more” format where you have to click the “load next days” button every time you reached the bottom of the page in order to show content from the previous 4 days.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1200%2F1%2A18xm60QQiI5WMMmz5nNu_A.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1200%2F1%2A18xm60QQiI5WMMmz5nNu_A.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What we wanted to do was display the next few days as soon as you scrolled to the bottom of the page and that’s what this tutorial will cover.&lt;/p&gt;

&lt;h1&gt;
  
  
  Setup
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A website with some sort of pagination.&lt;/li&gt;
&lt;li&gt;Add jQuery to your website if you haven’t already.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Add a class to the button the controls your site’s pagination if you don’t have one already.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  1) Create a window scroll event
&lt;/h4&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;//Infinite scroll&lt;/span&gt;
&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scroll&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="p"&gt;});&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  2) Create a variable for the height of the entire document as well as a variable to determine your scroll position
&lt;/h4&gt;

&lt;p&gt;Inside the scroll event, create 2 variables. We’re going to call them scrollHeight and scrollPos.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;height&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;scrollPos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;height&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;scrollTop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  3) Let's do some math!
&lt;/h4&gt;

&lt;p&gt;Remember: we want the event to fire every time the user scrolls to the bottom of the page.&lt;/p&gt;

&lt;p&gt;We can check if you’ve reached the bottom of a page with the following conditional statement:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;scrollPos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We want the event to be triggered if the conditional statement is met.&lt;/p&gt;

&lt;p&gt;In our case, the class name for our button is .load-more-days-button. That button will be clicked upon reaching the end of a page.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;scrollPos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;             
   &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.load-more-days-button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;So putting it all together, we get:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;//Infinite scroll&lt;/span&gt;
&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scroll&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;height&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;scrollPos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;height&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;scrollTop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;scrollPos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.load-more-days-button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bottom!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That’s all? Are we done?!? Well — yes, but no.&lt;/p&gt;

&lt;p&gt;It works.&lt;/p&gt;

&lt;p&gt;But it’s not great. Why?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It requires you to scroll all the way down so that your scrollbar touches the end before it fires the event.&lt;/li&gt;
&lt;li&gt;It works poorly on mobile. I’ve noticed that it doesn’t always trigger on mobile and pick up the fact that you’ve reached the bottom of the page — even when you’ve scroll all the way down.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So let's fix it:&lt;/p&gt;

&lt;p&gt;Let’s substitute this line:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;scrollPos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;with this instead:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;scrollPos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This line of code causes the scroll event to trigger when it is 300 (or less) pixels above the bottom of the page. (You can configure the 300 to something else if you’d like)&lt;/p&gt;

&lt;p&gt;This works great on desktop and mobile!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1280%2F1%2AyAGJC5O3pLZoO5H75n2XXw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1280%2F1%2AyAGJC5O3pLZoO5H75n2XXw.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F640%2F1%2ADX91Gh4_34ptN2Rw36nbvQ.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F640%2F1%2ADX91Gh4_34ptN2Rw36nbvQ.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Wrapping things up
&lt;/h1&gt;

&lt;p&gt;Putting everything together, your code will probably end up looking something like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;//Infinite Scroll&lt;/span&gt;
&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scroll&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="c1"&gt;//page height&lt;/span&gt;
 &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;height&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
 &lt;span class="c1"&gt;//scroll position&lt;/span&gt;
 &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;scrollPos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;height&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;scrollTop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
 &lt;span class="c1"&gt;// fire if the scroll position is 300 pixels above the bottom of the page&lt;/span&gt;
 &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;scrollPos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
   &lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.load-more-days-button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You can view a live example &lt;a href="https://sideprojects.net" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>html</category>
      <category>jquery</category>
    </item>
    <item>
      <title>How to get your first 500–1000 users for your product, project, and/or service for free.</title>
      <dc:creator>sakun</dc:creator>
      <pubDate>Sun, 06 Oct 2019 21:14:11 +0000</pubDate>
      <link>https://forem.com/sakun/how-to-get-your-first-500-1000-users-for-your-product-project-and-or-service-for-free-50jk</link>
      <guid>https://forem.com/sakun/how-to-get-your-first-500-1000-users-for-your-product-project-and-or-service-for-free-50jk</guid>
      <description>&lt;p&gt;So you’ve built a cool product: perhaps a website, blog, app, social network etc. and you don’t know where to find your first users and grow organically. I’ve worked on different projects (from forums, to apps, to websites) over the years and can attest to the fact that finding early users is one of the hardest part of launching a product/service.&lt;/p&gt;

&lt;p&gt;The list you’re about to see started off as a personal collection of free websites and resources I’ve been assembling over the past year. I’ve since added my own annotations in hopes that they’d help shed light as to how effective they really are (at least from my own experiences). &lt;/p&gt;

&lt;p&gt;Depending on your product or service, you may want to use most of these resources, mix n’ match, or use none of them at all. It all depends on what your product/service is and what you’re trying to offer.&lt;br&gt;
If you know any other resources, please let me know in the comments or tweet me @sakofchit so I can update my Medium article accordingly :).&lt;/p&gt;
&lt;h1&gt;
  
  
  The 2 “must-use” Platforms
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://producthunt.com"&gt;ProductHunt&lt;/a&gt; I think we’ve all accepted now that PH is the place you go to when you’re ready to launch your product. When/if you get featured, you’ll see a surge of thousands of unique visitors flocking to your website. A lot of journalists/bloggers browse PH and write about cool products they find. When I launched my weekend project, ReadShitFaster I had reached the #2 spot on PH and it was featured on Gizmodo, LifeHacker, etc. which was sick!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://news.ycombinator.com"&gt;HackerNews&lt;/a&gt; Like PH, HackerNews will send in thousands of unique visitors to your site if you get put on the front of HN/ShowHN. HackerNews has over 5 million monthly page views, so you’d be making a mistake if you aren’t sharing your product here.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Other Platforms
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://sideprojects.net"&gt;SideProjects&lt;/a&gt; Alright, I’ll admit that I’m being a bit biased here as this was something I’m currently building; however, this is a platform where you can share your side projects and get feedback, ideas, and even support on them. It’s 100% free to use as well and you’re more than welcome to post on it. We’re working on some cool stuff for SP, so stay tuned! (Also feel free to join the &lt;a href="https://discordapp.com/invite/RbF3RuS"&gt;discord server&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://indiehackers.com"&gt;IndieHackers&lt;/a&gt; is a phenomenal platform that has a bit of overlap with SideProjects.net. You can share projects you’re working on and discuss a wide range of things. They’ve even got a “milestone” widget that allows you to share updates to your project which are then displayed on the site’s homepage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://reddit.com"&gt;Reddit&lt;/a&gt; There’s a lot of great communities on Reddit where you can post your product/service and garner early users + feedback. But if you want your post to be received well, be respectful when posting and avoid spamming/reposting at all costs. Below is a list of subreddits where you can share your project (unspecific to your project’s niche).&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;r/sideprojects
r/javascript (Showoff Saturday Threads)
r/webdev (Showoff Saturday Threads)
r/coding
r/alphaandbetausers
r/betatests
r/gamedev
r/programming (Certain exceptions)
r/usefulwebsites
r/developer
r/opensource
r/opensourcegames
r/iosapps
r/androidapps
r/testmyapp
r/androidapptesters
r/apps
r/webapps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;There are tons of other subreddits you can post in. I recon that you determine the niche that your product/service fits into the most and to post in subreddits dedicated to that niche.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://betalist.com"&gt;BetaList&lt;/a&gt; I have mixed feelings on this. It will help you gain users, but it usually takes over a month to get your project featured (if accepted) on their site. Posting is free, however if you want the review process for your project to be expedited, you’re able to pay a fee — which I personally don’t recommend paying for.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://hackforums.net"&gt;HackForums&lt;/a&gt; I’m aware that HackForums has a conflicting reputation, however the site has evolved into a platform for developers and they have sections where you can share projects that you’re working on.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://betabound.com"&gt;BetaBound&lt;/a&gt; allows you to submit your product/service to accumulate beta testers. From my experience in using it however, you may not get very many users.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Miscellaneous
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quora&lt;/strong&gt; This one takes more effort: answer questions people post on their site that relate in some way to your product/service and weave your product/service into your answer. Strive for writing answers that are still actually helpful so that you don’t come off as an advertising snob in your responses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Participate in Forums&lt;/strong&gt; Building a reputation in certain communities can help bolster your reach. Actively participating in sites such as StackOverFlow, Dev.To, and IndieHackers can help you build a reputation + audience. Post content that’s actually helpful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BetaFamily&lt;/strong&gt; This one’s for IOS/Android devices. BetaFamily is an incredible platform that was really helpful for me back when I was working on building a now-defunct video-sharing application. You can feasibly recruit testers to beta test your app and give feedback on it. I was able to accumulate over 100 beta testers from this site alone. Now whether these testers will convert into long-term users is another story — it all depends on what your app is and if it’s captivating.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Podcasts&lt;/strong&gt; Podcasting is becoming increasingly popular. If you’re able to get featured on a (popular) podcast and you’re given the opportunity to talk about your product/service, you’ll have a handful of listeners flock to it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backlinks&lt;/strong&gt; are vital to SEO. Back when I was about 14, I was into running forum communities and I used backlinks to foster growth. I would host downloads for Minecraft maps on my website and restrict the downloadability to only people registered on my forum. I would then go onto other forums, posting download links that would redirect users to my site. Eventually, when people would search for a specific map by its name on search engines, my website would end up being the first link. By the time I had sold the site, it had roughly 10k users and was growing at a rate of 100–200 users per week and I hadn’t spent a dime on advertising.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt; Assuming you’ve got connections on LinkedIn, you could make a post talking about your product/service. You’re likely not going to generate much buzz from using LinkedIn alone though.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Blog&lt;/strong&gt; I’ve yet to do this as this is something I probably could never commit to, but blogging consistently about some aspect of your product/service and sharing writing on HackerNews, DevTo, Social Media (namely Twitter), etc. can help you garner an audience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Word of Mouth&lt;/strong&gt; is probably one of the oldest methods in the book, but believe it or not, it still works. Reach out to friends/family and let them use your product or service. Word will get out, and it’ll help you generate a bit of buzz. If you already have a following on social media, you already have an advantage, so use it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hope this helps :)&lt;/p&gt;

&lt;p&gt;See the full article on Medium!&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="https://medium.com/sideprojects/how-to-get-your-first-500-1000-users-for-your-product-project-and-or-service-for-free-41a888a08764" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LLOg_773--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/fit/c/96/96/1%2Av8RAGLaOqBkiQzKG2nK0Zw.jpeg" alt="Sakun"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://medium.com/sideprojects/how-to-get-your-first-500-1000-users-for-your-product-project-and-or-service-for-free-41a888a08764" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Gettingt 500–1000 users for your product, project, and/or service for free. | by Sakun | SideProjects | Medium&lt;/h2&gt;
      &lt;h3&gt;Sakun ・ &lt;time&gt;Aug 23, 2020&lt;/time&gt; ・ 
      &lt;div class="ltag__link__servicename"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hnDHPsJs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/medium-f709f79cf29704f9f4c2a83f950b2964e95007a3e311b77f686915c71574fef2.svg" alt="Medium Logo"&gt;
        Medium
      &lt;/div&gt;
    &lt;/h3&gt;
&lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>SideProjects.net | A platform to share side projects you're working on</title>
      <dc:creator>sakun</dc:creator>
      <pubDate>Mon, 02 Sep 2019 22:25:05 +0000</pubDate>
      <link>https://forem.com/sakun/sideprojects-net-a-platform-to-share-side-projects-you-re-working-on-39l9</link>
      <guid>https://forem.com/sakun/sideprojects-net-a-platform-to-share-side-projects-you-re-working-on-39l9</guid>
      <description>&lt;p&gt;I know a lot of people work on a lot of different side projects (myself included) on their own accord, experimenting with different technologies, concepts, ideas, etc.&lt;/p&gt;

&lt;p&gt;So I built a platform that allows you to share early-stage projects that you’re personally working on and to seek feedback/validation from users within the community. Feel free to check it out and let me know what you think!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sideprojects.net"&gt;https://sideprojects.net&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I just launched it on PH and it's currently at the #3 spot :)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There's currently a URL encoding issue with Firefox, so I recon you use another browser when trying to access SideProjects (for now at least :))&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sideprojects</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
