<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Shreya's blogs]]></title><description><![CDATA[Shreya's blogs]]></description><link>https://blogs.shreyaporwal.tech</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 17:28:34 GMT</lastBuildDate><atom:link href="https://blogs.shreyaporwal.tech/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How Twitter stores Articles in Database]]></title><description><![CDATA[In this image (and even in this blog), how do you think the images and texts are being stored together? Not just together, but placed at custom positions instead of being dumped on separate sides.


T]]></description><link>https://blogs.shreyaporwal.tech/how-twitter-stores-articles-in-database</link><guid isPermaLink="true">https://blogs.shreyaporwal.tech/how-twitter-stores-articles-in-database</guid><category><![CDATA[Databases]]></category><category><![CDATA[Twitter]]></category><category><![CDATA[database design]]></category><category><![CDATA[System Design]]></category><dc:creator><![CDATA[Shreya Porwal]]></dc:creator><pubDate>Thu, 09 Apr 2026 00:34:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/64a1856b0f2d85d07506b243/37ef7ac9-f5d5-455b-9476-1c17e59c43a0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In this image (and even in this blog), how do you think the images and texts are being stored together? Not just together, but placed at custom positions instead of being dumped on separate sides.</p>
<img src="https://cdn.hashnode.com/uploads/covers/64a1856b0f2d85d07506b243/d9cb7240-60bc-4e42-bcff-e0cd22a34f87.png" alt="" style="display:block;margin:0 auto" />

<p>This is not the typical post/entity type we design while learning. When we usually study about designing database for a social media app, the first db design comes to our mind is this:</p>
<img src="https://cdn.hashnode.com/uploads/covers/64a1856b0f2d85d07506b243/c92caa3a-119e-4bf6-b39c-b23b3c8720ba.png" alt="" style="display:block;margin:0 auto" />

<p>But twitter also has an entity called 'Articles' that has it's own way of dictating how content should be shown to users, and that is - however user wants!</p>
<p>Which means user decides if the image 1 should go on top or bottom if text should be placed 2nd or 3rd or 5th and where should heading be added. Everything is so custom that it cannot be dumped simply as text and media classification.</p>
<p><strong>What unique does twitter and blogging platforms do internally to store this kind of content on their database?</strong></p>
<p>I was watching a video on database design which was creating a simple database for Twitter and explaining why we should have a separate media table... as a tweet can have multiple media. Which got me thinking that articles have multiple media at multiple positions, if I were to add that table in the model, how would I have done it? I asked AI about it and here is what I learned-</p>
<p>They simply break that one single post into blocks. Blocks that can be assigned position (1, 2, 3...) to dictate what would be the order of their placement. Something like this:</p>
<img src="https://cdn.hashnode.com/uploads/covers/64a1856b0f2d85d07506b243/e7c4d0f4-5b5e-4ed7-9ed0-6e540e0d0359.png" alt="" style="display:block;margin:0 auto" />

<p>And NoSQL can do the same thing in document model, like this:</p>
<img src="https://cdn.hashnode.com/uploads/covers/64a1856b0f2d85d07506b243/ce1b31c0-59e7-40b7-ab90-2fa2e3fc462c.png" alt="" style="display:block;margin:0 auto" />

<p>Pretty interesting, right?</p>
<p>Our database knows that our post has multiple blocks, and it knows what the type is (for e.g, paragraph, image, heading, quote), it also knows what the position would be, each content block has a unique identity linking it to id and also a foreign key to link it to the actual article . So when you ask for a specific article it looks up for the content blocks with the same id and arranges it in order according to their positions.</p>
<img src="https://cdn.hashnode.com/uploads/covers/64a1856b0f2d85d07506b243/fe34915a-1fb4-4707-be0a-90f6a8580064.png" alt="" style="display:block;margin:0 auto" />

<p>So, this is the design came up with on top of the same twitter like app design I watched in the tutorial, ofc I avoided tables like Follow, Repost, Share, etc here to avoid adding to the complexity and distracting focus from Articles and Content Blocks.</p>
<p>Hope this was a good read, it was my attempt to document my learning. See you again with some other interesting topic.</p>
]]></content:encoded></item><item><title><![CDATA[Serving Web Pages the right Way: SSR vs CSR]]></title><description><![CDATA[When I first learned Flask, I was serving Jinja templates/html pages directly from my Backend. Later I learned to keep Frontend and Backend seperate, and serve APIs and use them from my frontend to fetch data and show it on the web page with JavaScri...]]></description><link>https://blogs.shreyaporwal.tech/serving-web-pages-the-right-way-ssr-vs-csr</link><guid isPermaLink="true">https://blogs.shreyaporwal.tech/serving-web-pages-the-right-way-ssr-vs-csr</guid><category><![CDATA[SEO]]></category><category><![CDATA[SSR]]></category><category><![CDATA[best practices]]></category><category><![CDATA[csr]]></category><category><![CDATA[Python]]></category><category><![CDATA[Python 3]]></category><category><![CDATA[Flask Framework]]></category><category><![CDATA[Server side rendering]]></category><category><![CDATA[Client-side rendering]]></category><dc:creator><![CDATA[Shreya Porwal]]></dc:creator><pubDate>Wed, 05 Nov 2025 15:58:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1762357942004/04877cee-27d9-4eca-bbd4-28fa5ccae2c7.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first learned Flask, I was serving Jinja templates/html pages directly from my Backend. Later I learned to keep Frontend and Backend seperate, and serve APIs and use them from my frontend to fetch data and show it on the web page with JavaScript. The previous way felt wrong, I started thinking that this is the right way and that was wrong way.</p>
<p><strong>There is no only right way when it comes to tech. Whatever maximizes performance and minimizes cost is the best way to go.</strong></p>
<p>There are four rendering strategies I know about, we will discuss two here and leave the rest 2 for later parts.</p>
<h2 id="heading-client-side-rendering-csr">Client Side Rendering (CSR):</h2>
<p>You might have created weather apps that utilize weather Apis. If not then also you might have used openiAI/Youtube/Spotify Apis? Well, they definitely have more complex structure, but similar to that, if your server sends API responses and your javascript frontend uses the json data and renders everything in browser then that is your client side rendering. Because the process of rendering a page happens on the client side after the data has come to the browser.</p>
<p>Let us see code for it-</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> flask <span class="hljs-keyword">import</span> Flask, jsonify

app = Flask(__name__)

data = {<span class="hljs-string">"usersData"</span>: [{<span class="hljs-string">"id"</span>: <span class="hljs-string">"08696"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Priya"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Paytm"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"Marketing"</span>}, {<span class="hljs-string">"id"</span>: <span class="hljs-string">"55296"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Pratap"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Myntra"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"IT"</span>}, {<span class="hljs-string">"id"</span>: <span class="hljs-string">"86506"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Ruchi"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Nike"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"Finance"</span>}, {<span class="hljs-string">"id"</span>: <span class="hljs-string">"056996"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Veer"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Toyota"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"Human Resource"</span>}]}

<span class="hljs-meta">@app.route("/users", methods=['GET'])</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">allUsers</span>():</span>
    <span class="hljs-keyword">return</span> jsonify(data)
</code></pre>
<p>Here, the data is sent to client in json format and now is upto him, how he wants to handle it. This is how it looks on my FireFox browser when I try to open this url-</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762352375814/47cab696-81d4-473f-80cc-2abf8e3ae50f.png" alt class="image--center mx-auto" /></p>
<p>Let us create a simple html and we’ll also have to tweak this python server a bit, because there is this CORS policy that won’t let cross origin server interact easily.</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> flask <span class="hljs-keyword">import</span> Flask, jsonify
<span class="hljs-keyword">from</span> flask_cors <span class="hljs-keyword">import</span> CORS

app = Flask(__name__)
CORS(app, resources={<span class="hljs-string">r"/*"</span>: {<span class="hljs-string">"origins"</span>: [<span class="hljs-string">"http://127.0.0.1:5500"</span>, <span class="hljs-string">"http://localhost:5500"</span>]}})

data = {<span class="hljs-string">"usersData"</span>: [{<span class="hljs-string">"id"</span>: <span class="hljs-string">"08696"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Priya"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Paytm"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"Marketing"</span>}, {<span class="hljs-string">"id"</span>: <span class="hljs-string">"55296"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Pratap"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Myntra"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"IT"</span>}, {<span class="hljs-string">"id"</span>: <span class="hljs-string">"86506"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Ruchi"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Nike"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"Finance"</span>}, {<span class="hljs-string">"id"</span>: <span class="hljs-string">"056996"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Veer"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Toyota"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"Human Resource"</span>}]}

<span class="hljs-meta">@app.route("/users", methods=['GET'])</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">allUsers</span>():</span>
    <span class="hljs-keyword">return</span> jsonify(data)

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    app.run(debug=<span class="hljs-literal">True</span>)
</code></pre>
<p>and my html file goes like-</p>
<pre><code class="lang-xml"><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"en"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"viewport"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"width=device-width, initial-scale=1.0"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Users Data<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Users data<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">ol</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"usersList"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">ol</span>&gt;</span>

  <span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    <span class="hljs-comment">// Fetch data from Flask backend</span>
    fetch(<span class="hljs-string">"http://127.0.0.1:5000/users"</span>, {
      <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>,
      <span class="hljs-attr">mode</span>: <span class="hljs-string">'cors'</span>
    })
    .then(<span class="hljs-function"><span class="hljs-params">response</span> =&gt;</span> {
      <span class="hljs-keyword">if</span> (!response.ok) {
        <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">`HTTP error! status: <span class="hljs-subst">${response.status}</span>`</span>);
      }
      <span class="hljs-keyword">return</span> response.json();
    })
    .then(<span class="hljs-function"><span class="hljs-params">data</span> =&gt;</span> {
      <span class="hljs-keyword">const</span> list = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"usersList"</span>);
      data.usersData.forEach(<span class="hljs-function"><span class="hljs-params">user</span> =&gt;</span> {
        <span class="hljs-keyword">const</span> li = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"li"</span>);
        li.textContent = <span class="hljs-string">`<span class="hljs-subst">${user.username}</span> (<span class="hljs-subst">${user.company}</span> - <span class="hljs-subst">${user.department}</span>)`</span>;
        list.appendChild(li);
      });
    })
    .catch(<span class="hljs-function"><span class="hljs-params">error</span> =&gt;</span> {
      <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'Fetch error:'</span>, error);
    });
  </span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<p>The fetch method, here, calls my backend to ‘GET‘ the response in Json format, which then I add into ‘list’ and for each user in user data we append a ‘li‘ tag. And the result is-</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762354875851/d4805db5-ee77-48ff-8805-781420695b59.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-server-side-rendering-ssr">Server Side Rendering (SSR):</h2>
<p>Server side rendering is a bit more simpler than that according to me. When the backend serves html directly, without needing to setup a separate frontend that would talk to it through API calls. Then that is Server Side Rendering. It is called so because the html is already build, data is already there on it because it even goes to browser, now as it reaches client it gets painted on the browser for user to see.</p>
<p>Code for it-</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> flask <span class="hljs-keyword">import</span> Flask, render_template
<span class="hljs-keyword">from</span> flask_cors <span class="hljs-keyword">import</span> CORS

app = Flask(__name__)
CORS(app, resources={<span class="hljs-string">r"/*"</span>: {<span class="hljs-string">"origins"</span>: [<span class="hljs-string">"http://127.0.0.1:5500"</span>, <span class="hljs-string">"http://localhost:5500"</span>]}})

data = {<span class="hljs-string">"usersData"</span>: [{<span class="hljs-string">"id"</span>: <span class="hljs-string">"08696"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Priya"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Paytm"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"Marketing"</span>}, {<span class="hljs-string">"id"</span>: <span class="hljs-string">"55296"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Pratap"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Myntra"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"IT"</span>}, {<span class="hljs-string">"id"</span>: <span class="hljs-string">"86506"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Ruchi"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Nike"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"Finance"</span>}, {<span class="hljs-string">"id"</span>: <span class="hljs-string">"056996"</span>, <span class="hljs-string">"username"</span>: <span class="hljs-string">"Veer"</span>, <span class="hljs-string">"age"</span>: <span class="hljs-string">"24"</span>, <span class="hljs-string">"company"</span>: <span class="hljs-string">"Toyota"</span>, <span class="hljs-string">"department"</span>: <span class="hljs-string">"Human Resource"</span>}]}

<span class="hljs-meta">@app.route("/users", methods=['GET'])</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">allUsers</span>():</span>
    <span class="hljs-keyword">return</span> render_template(<span class="hljs-string">'index.html'</span>, users=data[<span class="hljs-string">"usersData"</span>])

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    app.run(debug=<span class="hljs-literal">True</span>)
</code></pre>
<p>Our Jinja-Html code-</p>
<pre><code class="lang-xml"><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"en"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"viewport"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"width=device-width, initial-scale=1.0"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Users Data<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Users data<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">ol</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"usersList"</span>&gt;</span>
  {% for user in users %}
  <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>{{ user.username }} - ({{ user.company }} - {{user.department}})<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
{% endfor %}
<span class="hljs-tag">&lt;/<span class="hljs-name">ol</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<p>And here is our result-</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762356088268/d2e50686-b706-4ab5-a257-20b380be5a9d.png" alt class="image--center mx-auto" /></p>
<p>Here is out file structure for both-</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762357123399/0c58cee5-57aa-423f-b45c-31b20ea0c7b0.png" alt class="image--center mx-auto" /></p>
<p>Although the output looks pretty much the same, these are two different styles of writing code, rendering web pages and also makes a difference in terms of SEO (search engine optimization), interactivity and speed!</p>
<hr />
<h2 id="heading-summary"><strong>Summary</strong></h2>
<h2 id="heading-csr">CSR</h2>
<h3 id="heading-what-happens">What happens:</h3>
<ul>
<li><p>The browser downloads a mostly-empty HTML file.</p>
</li>
<li><p>JavaScript fetches data from APIs.</p>
</li>
<li><p>The browser builds the UI dynamically.</p>
</li>
</ul>
<h3 id="heading-pros">Pros:</h3>
<ul>
<li><p>Excellent for single-page apps (SPAs).</p>
</li>
<li><p>Faster page transitions once loaded.</p>
</li>
<li><p>Easy separation of frontend (React/Vue/JS) and backend (Flask, Django REST, etc.).</p>
</li>
</ul>
<h3 id="heading-cons">Cons:</h3>
<ul>
<li><p>Slower <em>first load</em> (user would see a blank screen until JS fetches data. - rarely happens but - the concept)</p>
</li>
<li><p>SEO is trickier because search engines prefer pre-rendered HTML.</p>
</li>
<li><p>Requires more browser resources.</p>
</li>
</ul>
<h2 id="heading-ssr">SSR</h2>
<h3 id="heading-what-happens-1">What happens:</h3>
<ul>
<li><p>The server prepares and sends a complete HTML page (with data already inside).</p>
</li>
<li><p>The browser just paints it (no fetch or JS required to view it.)</p>
</li>
</ul>
<h3 id="heading-pros-1">Pros:</h3>
<ul>
<li><p>Faster first contentful paint (page appears immediately).</p>
</li>
<li><p>Better for SEO (search bots see complete HTML).</p>
</li>
<li><p>Simpler to build and host (just Flask + templates).</p>
</li>
</ul>
<h3 id="heading-cons-1"><strong>Cons:</strong></h3>
<ul>
<li><p>Every interaction usually needs a new request/response cycle.</p>
</li>
<li><p>Harder to make dynamic, real-time UI updates.</p>
</li>
<li><p>Mixing logic and HTML can grow messy for large apps.</p>
</li>
</ul>
<h3 id="heading-there-are-two-more-strategies-left">There are two more strategies left:</h3>
<ol>
<li><p>Incremental Static Regeneration</p>
</li>
<li><p>Static Site Generation</p>
</li>
</ol>
<hr />
<p><strong>I haven’t tried them yet. But I’ll try them and we might discuss them in next Part.</strong></p>
<p><a target="_blank" href="https://github.com/porwalshreyaa/PageRendering">Source code if you want :)</a></p>
<p>Thanks for reading. Seeya!</p>
<p>resources:<br /><a target="_blank" href="https://www.educative.io/answers/ssr-vs-csr-vs-isr-vs-ssg">https://www.educative.io/answers/ssr-vs-csr-vs-isr-vs-ssg</a><br /><a target="_blank" href="https://www.geeksforgeeks.org/websites-apps/cross-origin-resource-sharing-cors/">https://www.geeksforgeeks.org/websites-apps/cross-origin-resource-sharing-cors/</a><br /><a target="_blank" href="https://flask.palletsprojects.com/en/stable/">https://flask.palletsprojects.com/en/stable/</a></p>
]]></content:encoded></item></channel></rss>