<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: PandaDEV</title>
    <description>The latest articles on DEV Community by PandaDEV (@pandadev_).</description>
    <link>https://dev.to/pandadev_</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%2F982066%2F0f7adfd7-e7a0-40ec-bfbc-efc1664277af.png</url>
      <title>DEV Community: PandaDEV</title>
      <link>https://dev.to/pandadev_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pandadev_"/>
    <language>en</language>
    <item>
      <title>Generate Beautiful Changelogs for Github!</title>
      <dc:creator>PandaDEV</dc:creator>
      <pubDate>Thu, 20 Feb 2025 21:15:53 +0000</pubDate>
      <link>https://dev.to/pandadev_/my-favorite-way-to-generate-beautiful-changelogs-2mpa</link>
      <guid>https://dev.to/pandadev_/my-favorite-way-to-generate-beautiful-changelogs-2mpa</guid>
      <description>&lt;p&gt;As a developer, I built a simple tool that transforms GitHub commits into beautiful changelogs instantly. Let me show you why I love it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's This Tool?
&lt;/h2&gt;

&lt;p&gt;It's a straightforward changelog generator that works with any GitHub repository. Just paste your repo URL and get perfectly formatted changelogs in seconds. You can choose between specific tags to compare, or simply leave it empty to get changes from the latest tag to the main branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Is it so good
&lt;/h2&gt;

&lt;p&gt;Here's what makes it amazing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Smart commit sorting&lt;/strong&gt;: Automatically organizes by conventional commit types (feat, fix, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detailed attribution&lt;/strong&gt;: Shows commit author and links directly to commit hash&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean formatting&lt;/strong&gt;: Generates well-structured markdown output&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complete history&lt;/strong&gt;: Captures full commit history in an organized way&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible comparison&lt;/strong&gt;: Compare any two tags or get latest changes to main&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Cool Features
&lt;/h2&gt;

&lt;p&gt;The tool comes packed with useful features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Beautiful emoji support&lt;/li&gt;
&lt;li&gt;Smart commit filtering&lt;/li&gt;
&lt;li&gt;Professional formatting&lt;/li&gt;
&lt;li&gt;Modern, sleek interface&lt;/li&gt;
&lt;li&gt;No account needed&lt;/li&gt;
&lt;li&gt;Completely free and open source&lt;/li&gt;
&lt;li&gt;Tag-to-tag comparison&lt;/li&gt;
&lt;li&gt;Latest changes view&lt;/li&gt;
&lt;li&gt;Works completely client-side&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Want to try it out? You can access it right here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://changelog.pandadev.net" rel="noopener noreferrer"&gt;Generate Your First Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/0pandaDEV/changelog" rel="noopener noreferrer"&gt;Check Out the Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Join The Community
&lt;/h2&gt;

&lt;p&gt;As this tool grows and evolves, I'd love your input! Whether you're an open source maintainer, part of a dev team, or a solo developer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give it a ⭐ if you find it useful&lt;/li&gt;
&lt;li&gt;Share your feedback&lt;/li&gt;
&lt;li&gt;Suggest new features&lt;/li&gt;
&lt;li&gt;Help make it even better&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's make changelog generation fun again! Feel free to reach out with your thoughts or feature requests.&lt;/p&gt;

</description>
      <category>github</category>
      <category>programming</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Supabase Alternative: Self-hosted</title>
      <dc:creator>PandaDEV</dc:creator>
      <pubDate>Mon, 13 May 2024 21:09:14 +0000</pubDate>
      <link>https://dev.to/pandadev_/how-to-install-appwrite-47fl</link>
      <guid>https://dev.to/pandadev_/how-to-install-appwrite-47fl</guid>
      <description>&lt;h2&gt;
  
  
  Not just another database
&lt;/h2&gt;

&lt;p&gt;Appwrite is one of the best ways to self-host a database, with the whole suite of tools and an SDK for every language. &lt;/p&gt;

&lt;p&gt;Appwrite has one of the cleanest UIs you can think of, very similar to Supabase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use it over cloud based databases
&lt;/h2&gt;

&lt;p&gt;I think by self-hosting, you can have full control over your data. Also, the single and most important thing, it's completely free, and you don't have to pay a subscription to host it. The only trade-off is that you need a server, but even then it does not have to be a big one because Appwrite is so lightweight.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to install on Ubuntu Server
&lt;/h2&gt;

&lt;p&gt;To install Appwrite you need docker installed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add Docker's official GPG key:&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;ca-certificates curl
&lt;span class="nb"&gt;sudo install&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; 0755 &lt;span class="nt"&gt;-d&lt;/span&gt; /etc/apt/keyrings
&lt;span class="nb"&gt;sudo &lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg &lt;span class="nt"&gt;-o&lt;/span&gt; /etc/apt/keyrings/docker.asc
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;a+r /etc/apt/keyrings/docker.asc

&lt;span class="c"&gt;# Add the repository to Apt sources:&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"deb [arch=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;dpkg &lt;span class="nt"&gt;--print-architecture&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
  &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; /etc/os-release &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VERSION_CODENAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; stable"&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this you have two options, either a normal docker container or manually with docker compose&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker container&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--volume&lt;/span&gt; /var/run/docker.sock:/var/run/docker.sock &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--volume&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/appwrite:/usr/src/code/appwrite:rw &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--entrypoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"install"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    appwrite/appwrite:1.5.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Docker compose&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# create a new directory for storing the docker compose file&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;appwrite

&lt;span class="c"&gt;# download the tow files docker-compose.yml and .env&lt;/span&gt;
curl &lt;span class="nt"&gt;-O&lt;/span&gt; https://appwrite.io/install/env
curl &lt;span class="nt"&gt;-O&lt;/span&gt; https://appwrite.io/install/compose

&lt;span class="c"&gt;# finally start appwrite&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--remove-orphans&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# to restart use&lt;/span&gt;
docker compose stop
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--remove-orphans&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;It's very useful if you make small side projects that need auth and a database in one and don't want to use old school SQL with MySQL. Now it's up to you what you do with it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appwrite.io/docs" rel="noopener noreferrer"&gt;https://appwrite.io/docs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
