<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>                  
        <title>FeedRiv Blog</title>
        <link>https://www.feedriv.com/blog</link>
        <description></description>
        <language>en-us</language>
        <atom:link href="https://www.feedriv.com/rss" rel="self" type="application/rss+xml" />
    
                <item>                 
            <title>Build Out The Backend Code</title>
            <link>https://www.feedriv.com/blog/build-out-the-backend-code</link>
            <guid>https://www.feedriv.com/blog/build-out-the-backend-code</guid>
            <pubDate>Tue, 23 Jan 2024 00:00:00 +0000</pubDate> 
            <description><![CDATA[
<p>The final step after the database data structures are in place is to write the code to connect the frontend HTML with the backend database. There are usually a lot of debates over which language and framework to use (a framework is basically prepackaged code that is expecting the app code to be in a certain structure). Going into details about the various frameworks available is outside the scope of this post. I typically recommend using something as simple as possible.</p>
<p>Out of all the different languages used for backend programming, I think PHP is probably one of the more beginner-friendly languages. I'm using a custom PHP framework I've developed called MAVOC. It is what is called an MVC (model View Controller) framework. What that means is the code typically flows in a specific pattern.</p>
<p>For MVC frameworks, the code flow usually starts with a routing list, the routing list then indicates that the code should load a specific Controller. The Controller helps &quot;control&quot; what is sent back to the browser. The Controller will usually load a Model. The Model is often used to pull data from another source like a database. The Model allows the data from the database to be in a format that can be easily used in the code. The last step of the Controller is to select a specfic View to use in the browser. The View is basically a template that takes all the data passed to it and outputs the final HTML displayed by the browser.</p>
<p>When you load a URL address, like this blog post page, the first thing that happens is the code figures out which route (or path through the codebase) to take. You can see all the different routes (website pages and website endpoints) available by looking at the routing list: <a href="https://github.com/dashboardq/feedriv/blob/main/app/settings/routes/web.php">app/settings/routes/web.php</a></p>
<p>On the web routes page, you'll notice that their is an entry for <code>blog/{slug}</code> and it points to the <code>BlogController</code> <code>post</code> method. When a user loads the web page, the code looks at the routing list and then it figures out which controller method to use. The <code>{slug}</code> value is a dynamic value which can change. Each blog post has a different slug, so the code passes the <code>{slug}</code> value, when loading this blog post. The slug value for the very first post is <code>getting-started</code>. The code then proceeds to the BlogController and passes that slug info. The BlogController can be found here: <a href="https://github.com/dashboardq/feedriv/blob/main/app/controllers/BlogController.php">app/controllers/BlogController.php</a></p>
<p>If you look at the <code>post</code> function (also called a method), you'll see that it is making use of the <code>Blog</code> model. Normally a model loads data from a database but models can also load data from other sources. In this example, the code is using the <code>Blog::get</code> method to load the markdown file based on the slug. You can find the Blog model here: <a href="https://github.com/dashboardq/feedriv/blob/main/app/models/Blog.php">app/models/Blog.php</a></p>
<p>The <code>get</code> function in that model is specifically looking for the markdown file that matches the slug. It find a matching markdown file for <code>getting-started</code> in the blog directory: <a href="https://github.com/dashboardq/feedriv/blob/main/storage/markdown/blog/2022-12-13_getting-started.md">storage/markdown/blog/2022-12-13_getting-started.md</a></p>
<p>Once the BlogController has the data it needs, the last step is passing that data to the view that is then displayed to the user in the browser. The BlogController <code>post</code> method returns the data which is then passed to the blog post view. By default, the views will match the controller methods.</p>
<p>PHP started off as a templating language (basically a way to take data and dynamically create an HTML file). It has grown significantly from its original roots but it still works well as a templating language. The data from the controller is passed to the view which is basically just a template to output HTML. If you understand basic HTML, then the view file should look familiar. In the middle of the view file, you can see that it is taking the content it received from the Blog model and it outputting it: <a href="https://github.com/dashboardq/feedriv/blob/main/app/views/blog/post.php">app/views/blog/post.php</a></p>
<p>As you can see, when a user loads a page, the code follows the following route: <code>route list</code> -&gt; <code>controller</code> -&gt; <code>model</code> -&gt; <code>controller</code> -&gt; <code>view</code>. Each of the hardcoded HTML that we created earlier needs to be turned into a route and that HTML needs to be converted from hardcoded HTML to a dynamic template.</p>
<p>There is obviously a lot more involved in creating the backend code but creating routes, controllers, models, and views is basically what is involved. It can be a bit tedious at times and you may also run into issues where when you were thinking through everything from a hardcoded perspective, you realize you have to make adjustments when using real data.</p>
<p>If you want to learn more, I think the best step is to actually try it yourself. Try to load FeedRiv on your own server and see how it works. If you have any questiosn or run into any problems, don't hesitate to reach out.</p>
]]></description>
        </item>                
                <item>                 
            <title>Build The Database Structure</title>
            <link>https://www.feedriv.com/blog/build-the-database-structure</link>
            <guid>https://www.feedriv.com/blog/build-the-database-structure</guid>
            <pubDate>Sun, 26 Feb 2023 00:00:00 +0000</pubDate> 
            <description><![CDATA[
<p>Once the HTML and design have been completed, the next step is to build out the data structures (the database). I like building out the HTML and design first because it shows how the data will be used and often makes it easy to figure out how the data should be structured.</p>
<p>There are many different databases to choose from. At some point I would like to use SQLite as the underlying database but for now, I typically use MySQL. I've been working with MySQL for years and I'm very comfortable using it (I'm not in any way an expert, but I know enough to get work done).</p>
<p>There are many different ways to structure a database but I typically think about how the data is going to be used and then figure out what would be the most obvious way to group that data.</p>
<p>A database table is basically a group of data. The web framework I'm building comes with three tables already setup:</p>
<ul>
<li>Users</li>
<li>Password Resets</li>
<li>Usernames</li>
</ul>
<p>Generally, when I'm create a database table, I will always include an <code>id</code> column, a <code>created_at</code> column, and an <code>updated_at</code> column. If the column ends in <code>_at</code>, then it is a datetime field.</p>
<p>If a columns ends in <code>_int2</code> that means the decimal place has been shifted two places to the right so that the data can be saved as an integer. When using that data, the value will need to be divided by 100 to shift it back to the original value. It is simpler to run math operations on integers than to deal with <a href="https://0.30000000000000004.com/">floating point math</a>. I haven't seen anyone else use the <code>_int2</code> suffix. It is just something I've found helpful. If the data I was using needed three decimal places, I would save it with a suffix of <code>_int3</code>. That last number indicates how many places the number has been shifted.</p>
<p>You generally want to add indexes to a database to speed up the responses, especially when there is a lot of data. There are generally pretty obvious places for adding indexes (like on the relationship ids), however when I'm starting out with a new project, I usually prefer not to add any indexes and only add them as the need arises (when the responses for certain queries start to slow down).</p>
<p>Here is a breakdown of the initial tables built by the system:</p>
<h2><a id="section-users" href="#section-users" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Users</h2>
<ul>
<li>id</li>
<li>name</li>
<li>email</li>
<li>password (hashed)</li>
<li>data (for any extra data that needs to be saved)</li>
<li>encrypted (indicates whether or not encryption is being used when saving data)</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-password-resets" href="#section-password-resets" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Password Resets</h2>
<ul>
<li>id</li>
<li>user_id</li>
<li>token</li>
<li>created_ip (the IP that requested the password reset)</li>
<li>used_ip (the IP that completed the password reset)</li>
<li>used (whether or not the password reset has been completed)</li>
<li>expires_at</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-usernames" href="#section-usernames" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Usernames</h2>
<ul>
<li>id</li>
<li>user_id</li>
<li>name</li>
<li>primary</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<p>The tables listed above are the starting point. After examining the HTML pages and the data I'm going to need, I've come up with the following database tables that I need to create:</p>
<ul>
<li>Settings</li>
<li>Categories</li>
<li>Shared Feeds</li>
<li>Shared Items</li>
<li>Feeds</li>
<li>Items</li>
<li>Tags</li>
<li>Colors</li>
<li>Items Tags</li>
<li>Auto Ratings</li>
<li>Default Tags</li>
<li>Default Colors</li>
</ul>
<p>Here is a breakdown of how each of those tables are going to be structured in the database:</p>
<h2><a id="section-settings" href="#section-settings" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Settings</h2>
<ul>
<li>id</li>
<li>user_id</li>
<li>name</li>
<li>key</li>
<li>value</li>
<li>editable</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-categories" href="#section-categories" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Categories</h2>
<ul>
<li>id</li>
<li>user_id</li>
<li>parent_id</li>
<li>name</li>
<li>show_tags</li>
<li>show_ratings</li>
<li>show_colors</li>
<li>save_ratings</li>
<li>sort_order</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-shared-feeds" href="#section-shared-feeds" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Shared Feeds</h2>
<ul>
<li>id</li>
<li>real_url</li>
<li>last_updated_at</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-shared-items" href="#section-shared-items" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Shared Items</h2>
<ul>
<li>id</li>
<li>shared_feed_id</li>
<li>title</li>
<li>url</li>
<li>description</li>
<li>type</li>
<li>published_at</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-feeds" href="#section-feeds" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Feeds</h2>
<ul>
<li>id</li>
<li>user_id</li>
<li>category_id</li>
<li>shared_feed_id</li>
<li>original_url</li>
<li>real_url</li>
<li>title</li>
<li>last_updated_at</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-items" href="#section-items" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Items</h2>
<ul>
<li>id</li>
<li>user_id</li>
<li>feed_id</li>
<li>shared_item_id</li>
<li>auto_rating_int2</li>
<li>rating</li>
<li>archived</li>
<li>status</li>
<li>published_at</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-tags" href="#section-tags" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Tags</h2>
<ul>
<li>id</li>
<li>user_id</li>
<li>category_id</li>
<li>name</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-colors" href="#section-colors" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Colors</h2>
<ul>
<li>id</li>
<li>user_id</li>
<li>category_id</li>
<li>score</li>
<li>color</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-items-tags" href="#section-items-tags" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Items Tags</h2>
<ul>
<li>id</li>
<li>item_id</li>
<li>tag_id</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-auto-ratings" href="#section-auto-ratings" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Auto Ratings</h2>
<ul>
<li>id</li>
<li>category_id</li>
<li>word</li>
<li>use_count</li>
<li>sum_score</li>
<li>avg_score_int2</li>
<li>locked_score_int2</li>
<li>locked</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-default-tags" href="#section-default-tags" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Default Tags</h2>
<ul>
<li>id</li>
<li>user_id</li>
<li>name</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<h2><a id="section-default-colors" href="#section-default-colors" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Default Colors</h2>
<ul>
<li>id</li>
<li>user_id</li>
<li>score</li>
<li>color</li>
<li>created_at</li>
<li>updated_at</li>
</ul>
<p>If you take a look at the Github repository, you'll see that I've added a migration for each of those tables. A database migration is just a file that tells the database what tables or data needs to be added or set up.</p>
<p>Setting up the database structures is one of the most important parts of building an app so now that we have that in place, the next focus is going to be on connecting everything together.</p>
]]></description>
        </item>                
                <item>                 
            <title>Style The HTML Using CSS</title>
            <link>https://www.feedriv.com/blog/style-the-html-using-css</link>
            <guid>https://www.feedriv.com/blog/style-the-html-using-css</guid>
            <pubDate>Thu, 16 Feb 2023 00:00:00 +0000</pubDate> 
            <description><![CDATA[
<p>Once the basic HTML has been created, the next step is to provide styling for each of those pages. When building a site using <a href="https://www.agraddy.com/introducing-tace">TACE</a>, the HTML and CSS should be separated into different files. This allows for the design of the site to be updated without touching the HTML.</p>
<p>The design that I created for the site is pretty basic, but it focuses on making everything simple and easy to use. It basically consists of a header with a drop shadow, sidebars, and then important content raised up with drop shadows. The typography is just using the built in sans-serif font of the browser. I prefer to use standard fonts to minimize loading times. The font styling itself could definitely be improved but it is functional in its current form.</p>
<p>I tried to keep the interactive elements within CSS as much as possible. For example, the star rating system and tagging system both use checkboxes, labels, and CSS to achieve the custom styling. The mobile menu and refresh/archive modals uses simple javascript to turn HTML classes on and off. It uses a little javascript but tries to keep it as minimal as possible. There are also some CSS animations that will be used for when AJAX calls are processing that are not currently visible on these design pages.</p>
<p>Below is a list of each of the pages with a link to their hardcoded HTML pages and then next to those links are the styled pages which link to the styled version of the same HTML pages (a few minor HTML changes have been made from the original HTML to make certain items easier to style). The design pages should work both on desktop and mobile devices.</p>
<ul>
<li>Main Feed Page: <a href="/content/feed">HTML</a> | <a href="/design/feed">Styled</a>
</li>
<li>Categories List Page: <a href="/content/categories">HTML</a> | <a href="/design/categories">Styled</a>
</li>
<li>Add Category Page: <a href="/content/category-add">HTML</a> | <a href="/design/category-add">Styled</a>
</li>
<li>Edit Category Page: <a href="/content/category-edit">HTML</a> | <a href="/design/category-edit">Styled</a>
</li>
<li>Edit Color Page: <a href="/content/color-edit">HTML</a> | <a href="/design/color-edit">Styled</a>
</li>
<li>Add Feed Page: <a href="/content/feed-add">HTML</a> | <a href="/design/feed-add">Styled</a>
</li>
<li>Edit Feed Page: <a href="/content/feed-edit">HTML</a> | <a href="/design/feed-edit">Styled</a>
</li>
<li>Add Tag Page: <a href="/content/tag-add">HTML</a> | <a href="/design/tag-add">Styled</a>
</li>
<li>Edit Tag Page: <a href="/content/tag-edit">HTML</a> | <a href="/design/tag-edit">Styled</a>
</li>
<li>Add Word Page: <a href="/content/word-add">HTML</a> | <a href="/design/word-add">Styled</a>
</li>
<li>Edit Word Page: <a href="/content/word-edit">HTML</a> | <a href="/design/word-edit">Styled</a>
</li>
<li>Settings Page: <a href="/content/settings">HTML</a> | <a href="/design/settings">Styled</a>
</li>
<li>Settings Add Tag Page: <a href="/content/default-tag-add">HTML</a> | <a href="/design/default-tag-add">Styled</a>
</li>
<li>Settings Edit Tag Page: <a href="/content/default-tag-edit">HTML</a> | <a href="/design/default-tag-edit">Styled</a>
</li>
<li>Settings Color Edit Page: <a href="/content/default-color-edit">HTML</a> | <a href="/design/default-color-edit">Styled</a>
</li>
</ul>
<p>Now that the design is in place, the next step is to figure out the data structure for the app and build out the database. The building of the data structure for the app will be covered in the next post.</p>
]]></description>
        </item>                
                <item>                 
            <title>Create Hardcoded HTML App Pages</title>
            <link>https://www.feedriv.com/blog/create-hardcoded-html-app-pages</link>
            <guid>https://www.feedriv.com/blog/create-hardcoded-html-app-pages</guid>
            <pubDate>Tue, 31 Jan 2023 00:00:00 +0000</pubDate> 
            <description><![CDATA[
<p>After the pages are drawn out on paper, the next step is to start converting them to HTML. A basic website page consists of HTML (for content), CSS (for design), and JS (for interactivity). The website page will be delivered by the server where the data is saved and loaded. Different app frameworks have different structures, but typically for the apps that I build, all of the database code and HTML generation code is handled by the server.</p>
<p>Each of the pages mentioned in the previous post need to become an actual web page. I like to first create the HTML for these pages without having to think about the data and server behind these pages. So when writing the HTML, I &quot;hardcode&quot; the data in these initial page designs, meaning I fake the data for the initial pages so that I can see how it will look.</p>
<p>I also write the HTML without the design in mind. The HTML should be clear and use the most logical tags. Later the HTML may get some minor adjustments to make it easier to implement the CSS but the main goal right now is just to get the HTML written with fake data.</p>
<p>Normally I would build these hardcoded HTML pages in the same location on the site where they will be used and would eventually just switch out the hardcoded fake data with the real data. Because I'm documenting how I'm building this site publicly, I figured I would build the hardcoded HTML pages in a separate location so that they can be fully accessible to anybody reading this blog article in the future.</p>
<p>Below is a list of each of the pages (these pages were originally drawn out on paper) with a link to their hardcoded HTML pages (note that at this stage, the pages will be very ugly).</p>
<ul>
<li>Main Feed Page: <a href="/content/feed">HTML</a>
</li>
<li>Categories List Page: <a href="/content/categories">HTML</a>
</li>
<li>Add Category Page: <a href="/content/category-add">HTML</a>
</li>
<li>Edit Category Page: <a href="/content/category-edit">HTML</a>
</li>
<li>Edit Color Page: <a href="/content/color-edit">HTML</a>
</li>
<li>Add Feed Page: <a href="/content/feed-add">HTML</a>
</li>
<li>Edit Feed Page: <a href="/content/feed-edit">HTML</a>
</li>
<li>Add Tag Page: <a href="/content/tag-add">HTML</a>
</li>
<li>Edit Tag Page: <a href="/content/tag-edit">HTML</a>
</li>
<li>Add Word Page: <a href="/content/word-add">HTML</a>
</li>
<li>Edit Word Page: <a href="/content/word-edit">HTML</a>
</li>
<li>Settings Page: <a href="/content/settings">HTML</a>
</li>
<li>Settings Add Tag Page: <a href="/content/default-tag-add">HTML</a>
</li>
<li>Settings Edit Tag Page: <a href="/content/default-tag-edit">HTML</a>
</li>
<li>Settings Color Edit Page: <a href="/content/default-color-edit">HTML</a>
</li>
</ul>
<p>Now that the HTML is in place, the next step is adding styling to the pages so that they start to look like an actual app. The design stage will be covered in the next post.</p>
]]></description>
        </item>                
                <item>                 
            <title>Start With Paper</title>
            <link>https://www.feedriv.com/blog/start-with-paper</link>
            <guid>https://www.feedriv.com/blog/start-with-paper</guid>
            <pubDate>Wed, 18 Jan 2023 00:00:00 +0000</pubDate> 
            <description><![CDATA[
<p>I always find it helpful to draw out my ideas on paper. When planning out a site, I will take a stack of papers and draw out a rough outline of each page. Usually these drawings are very rough and messy because they are mainly just meant for me. You can see rough outlines of each of the main app pages below.</p>
<p>The initial page was fairly messy before I realized I wanted to blog about this process.</p>
<p><img src="https://www.feedriv.com/uploads/blog/start_with_paper_1.jpg" alt="Paper mockup 1" /></p>
<p>The last two pages I tried to draw everything a little cleaner since I knew I would be adding them to this blog post but even those started to get messy.</p>
<p><img src="https://www.feedriv.com/uploads/blog/start_with_paper_2.jpg" alt="Paper mockup 2" />
<img src="https://www.feedriv.com/uploads/blog/start_with_paper_3.jpg" alt="Paper mockup 3" /></p>
<p>Usually, when I'm drawing my initial pages and notes, they look a lot like that first page (a lot more messy with notes all over the pages that only I can read).</p>
<p>Now that I have the pages outlined, the next step is to start the process of converting those to code. In my next post, I'll discuss the step of turning these drawings into HTML code.</p>
]]></description>
        </item>                
                <item>                 
            <title>FeedRiv Introduction</title>
            <link>https://www.feedriv.com/blog/feedriv-introduction</link>
            <guid>https://www.feedriv.com/blog/feedriv-introduction</guid>
            <pubDate>Wed, 21 Dec 2022 00:00:00 +0000</pubDate> 
            <description><![CDATA[
<p>A long time ago I used to use <a href="https://en.wikipedia.org/wiki/Google_Reader">Google Reader</a> which was a free RSS feed reader during what I would describe as the peak of RSS popularity during 2005-2010. It was eventually shut down in 2013 coinciding with services starting to limit or eliminate their RSS feeds.</p>
<p>If you are not familiar with RSS, it is a way to distribute content to your users. For example, this blog has an RSS feed located here: <a href="https://www.feedriv.com/rss">https://www.feedriv.com/rss</a>. If you click on that, it will just look like code but if you copy that link to a feed reader, then you would be able to see the contents of this blog inside your feed reader and you would never need to actually visit this blog.</p>
<p>An easy way to think of RSS is that it is like email for news, media, or any other content that you want to stay updated on. When you check your email, you go to your email inbox and see all the different emails that people have sent you. With a feed reader, you open it up and see all the different content that you have subscribed to.</p>
<p>Although RSS for text is not as popular today as it used to be, one area that has significantly grown in popularity are podcasts. Podcasts are built on top of RSS feeds. Anytime you subscribe to a podcast in your podcast app, you are actually subscribing to an RSS feed.</p>
<p>As a freelance developer, I have often made use of RSS to track potential opportunities. Back when Craigslist was a popular place to post contract jobs, I would subscribe to the Craigslist RSS feed for every major city in the United States filtered for contract jobs. Whenever I had availability in my schedule, I would just open my feed reader and quickly see what opportunities were available.</p>
<p>Eventually Craigslist lost its prominence as a place to post contract jobs and I moved on to other job boards. Eventually, I started using Upwork which allows you to generate an RSS feed off of their job list (you can narrow the RSS feed down to specific search terms and filter criteria).</p>
<p>With Google Reader shut down, I could never find a feed reader that I was fully happy with so to track Upwork jobs I ended up creating my own custom feed reader (it was very ugly and very minimal stripped down for my usage). However, I built a number of helpful features that really gave me an advantage in looking for jobs. I built an automated rating system that would give a rating for each job based off my past ratings. Jobs would be highlighted in green, yellow, or red depending on how I had rated similar jobs in the past.</p>
<p>It also allowed me to track each job that I was bidding on. It was like a feed reader and a CRM (customer relationship management) tool combined together. I could track the status of each of my project bids in my feed reader.</p>
<p>I eventually needed to use the server where I built this tool for something else (and I wasn't using it because my schedule was packed with work). The idea for FeedRiv is to rebuild that tool but make it more user friendly for anyone to use it.</p>
]]></description>
        </item>                
                <item>                 
            <title>Blog Introduction</title>
            <link>https://www.feedriv.com/blog/blog-introduction</link>
            <guid>https://www.feedriv.com/blog/blog-introduction</guid>
            <pubDate>Tue, 20 Dec 2022 00:00:00 +0000</pubDate> 
            <description><![CDATA[
<p>Welcome to the FeedRiv blog! FeedRiv is a part of the <a href="https://www.agraddy.com/12-startups-in-12-months-open-source-edition">12 Startups in 12 Months (Open Source Edition)</a> challenge. All of the code for FeedRiv is open source and available in the <a href="https://github.com/dashboardq/feedriv">FeedRiv Github repository</a>.</p>
<p>For the first two startups of the challenge (<a href="https://www.numbersq.com">NumbersQ</a> and <a href="https://twitriv.com">TwitRiv</a>), I built them privately and then released everything publicly when they were ready. I wanted to do something different for FeedRiv and fully build it in public. Meaning anybody who wanted to could follow along as I build the site and document everything I'm doing.</p>
<p>Depending on when you are reading this, the site might be a mess because it is in the middle of development or it might be fully launched and operating. I will be updating the code on the live production site so during the initial development stage, any part of the site could break or change. Once everything is fully launched, I'll move back to a more traditional development style where initial updates will use a development server.</p>
<p>These blog posts will mostly be quick updates so there won't be a lot of polish or editing going on (they may contain typos, grammar mistakes, etc.). The main goal is to document and share a running list of updates that are happening with the site.</p>
<p>If you have any questions, suggestions, concerns, or feedback, feel free to get in touch with me on my <a href="https://twitter.com/agraddy">Anthony Graddy Twitter account</a> or by using the <a href="https://www.dashboardq.com">DashboardQ support system</a>.</p>
]]></description>
        </item>                
                <item>                 
            <title>Getting Started</title>
            <link>https://www.feedriv.com/blog/getting-started</link>
            <guid>https://www.feedriv.com/blog/getting-started</guid>
            <pubDate>Tue, 13 Dec 2022 00:00:00 +0000</pubDate> 
            <description><![CDATA[
<p>This is the first post of the blog. This post can be found in the open source repository, but all the other blog posts will be excluded to protect against duplicate content.</p>
<p>To create a new blog post, simply add a new file to the <code>/storage/markdown/blog</code> directory. The file name should follow a simple format: <code>YYYY-MM-DD_blog-post-titlel.md</code>. The format starts with the date first (<code>YYYY-MM-DD</code>), then an underscore, followed by the title in lowercase with spaces replaced by dashes, and then finally ending with the markdown extension (<code>.md</code>). For example, the file for this blog post is located at <code>/storage/markdown/blog/2022-12-13_getting-started.md</code>.</p>
<p>You can have a draft blog post by starting the filename with an underscore. For example, there is a draft blog post located at <code>/storage/markdown/blog/_2022-12-13_draft-example.md</code>.</p>
]]></description>
        </item>                
           
    
    </channel>                 
</rss>
