<?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: Corix RID</title>
    <description>The latest articles on DEV Community by Corix RID (@ridcorix).</description>
    <link>https://dev.to/ridcorix</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%2F3477016%2F961864e6-7d7e-4f62-a50f-55e0904aae85.png</url>
      <title>DEV Community: Corix RID</title>
      <link>https://dev.to/ridcorix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ridcorix"/>
    <language>en</language>
    <item>
      <title>I built an initial data syncing system for Django projects</title>
      <dc:creator>Corix RID</dc:creator>
      <pubDate>Wed, 24 Sep 2025 16:07:51 +0000</pubDate>
      <link>https://dev.to/ridcorix/i-built-an-initial-data-syncing-system-for-django-projects-l36</link>
      <guid>https://dev.to/ridcorix/i-built-an-initial-data-syncing-system-for-django-projects-l36</guid>
      <description>&lt;p&gt;One recurring headache in Django projects is &lt;strong&gt;keeping seed data consistent across environments&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You add reference data (categories, roles, settings) in development… and forget to sync it to staging or production.&lt;/li&gt;
&lt;li&gt;Different environments drift apart, leading to version conflicts or missing records.&lt;/li&gt;
&lt;li&gt;Deployment scripts end up with ad-hoc JSON fixtures or SQL patches that are hard to maintain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I got tired of that. So I built &lt;strong&gt;&lt;a href="https://github.com/Starscribers/django-synced-seeders" rel="noopener noreferrer"&gt;django-synced-seeders&lt;/a&gt;&lt;/strong&gt; — a simple, ORM-friendly way to version and sync your seed data.&lt;/p&gt;




&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Versioned seeds&lt;/strong&gt;: Every export is tracked so you don’t re-import the same data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment sync&lt;/strong&gt;: Run &lt;code&gt;syncseeds&lt;/code&gt; in staging or production to automatically bring them up to date.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export / Import commands&lt;/strong&gt;: Seamlessly move reference data between environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selective loading&lt;/strong&gt;: Only load the seeds you need by defining exporting QuerySets.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;django-synced-seeders
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or use uv&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv add django-synced-seeders
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add it to &lt;code&gt;INSTALLED_APPS&lt;/code&gt; in &lt;code&gt;settings.py&lt;/code&gt;, then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Define your seeders (e.g. &lt;code&gt;seeders.py&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;seeds.registries&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;seeder_registry&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;seeds.seeders&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Seeder&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Tag&lt;/span&gt;

&lt;span class="nd"&gt;@seeder_registry.register&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CategorySeeder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Seeder&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;seed_slug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;categories&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;exporting_querysets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(),)&lt;/span&gt;
    &lt;span class="n"&gt;delete_existing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;

&lt;span class="nd"&gt;@seeder_registry.register&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TagSeeder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Seeder&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;seed_slug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tags&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;exporting_querysets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Tag&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(),)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Export locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py exportseed categories
python manage.py exportseed tags
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sync on another environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py syncseeds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your development, staging, and production stay aligned — without manual JSON juggling.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Prevents “works on my machine” seed data issues.&lt;/li&gt;
&lt;li&gt;Keeps environments aligned in CI/CD pipelines.&lt;/li&gt;
&lt;li&gt;Easier to maintain than fixtures or raw SQL.&lt;/li&gt;
&lt;li&gt;Open source (MIT license) and ready for contributions.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you’ve ever wrestled with fixtures or forgotten to copy seed data between environments, I think you’ll find this useful.&lt;/p&gt;

&lt;p&gt;👉 Check it out here: &lt;a href="https://github.com/Starscribers/django-synced-seeders" rel="noopener noreferrer"&gt;github.com/Starscribers/django-synced-seeders&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 Join my Discord Server: &lt;a href="https://discord.gg/ngE8JxjDx7" rel="noopener noreferrer"&gt;https://discord.gg/ngE8JxjDx7&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Skellar Dev Log #2: Backpack System</title>
      <dc:creator>Corix RID</dc:creator>
      <pubDate>Fri, 05 Sep 2025 08:54:38 +0000</pubDate>
      <link>https://dev.to/ridcorix/skellar-dev-log-2-backpack-system-494e</link>
      <guid>https://dev.to/ridcorix/skellar-dev-log-2-backpack-system-494e</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faq80kp61a0fakblv7wxq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faq80kp61a0fakblv7wxq.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why an Inventory System?
&lt;/h1&gt;

&lt;p&gt;Let's be direct. Making the process of learning inherently fun is a near-impossible task. Our solution is to use extensive gamification to wrap and enhance the entire learning behavior cycle. When selecting these auxiliary systems, we set a few core principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight: Avoid requiring players to invest excessive energy in the game itself.&lt;/li&gt;
&lt;li&gt;Low Complexity: The system design must be intuitive and easy to use, without adding to the learning curve.&lt;/li&gt;
&lt;li&gt;A Sense of Home: Create a familiar and comfortable virtual environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Based on these considerations, we ruled out heavy-duty competitive, strategy, or management-style systems. After two days of rigorous market research, I've narrowed down the most suitable systems for integration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inventory &amp;amp; Items&lt;/li&gt;
&lt;li&gt;Crafting&lt;/li&gt;
&lt;li&gt;Pets&lt;/li&gt;
&lt;li&gt;Gacha&lt;/li&gt;
&lt;li&gt;Monopoly&lt;/li&gt;
&lt;li&gt;Quests&lt;/li&gt;
&lt;li&gt;Levels&lt;/li&gt;
&lt;li&gt;Leaderboards&lt;/li&gt;
&lt;li&gt;Companions &amp;amp; Guilds&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Inventory Limits: A Design Feature, Not a Flaw
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudpizakzxkgcl36vnuvh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudpizakzxkgcl36vnuvh.png" alt=" " width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As players, we often want maximum convenience and unlimited resources. However, this very desire stems from an initial state of inconvenience and resource scarcity.&lt;/p&gt;

&lt;p&gt;This is the key element of gamified design: Engineered Scarcity.&lt;/p&gt;

&lt;p&gt;A good game design must be "appropriately troublesome" or "lack human-friendliness" to spark player engagement. Limiting inventory space forces players to make choices and prioritize what's truly important.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Stamina System: Why Restrict the Player?
&lt;/h1&gt;

&lt;p&gt;The stamina system is often a point of frustration for players, but its underlying design logic is based on several psychological considerations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regulating the Dopamine Loop: By intermittently limiting rewards, we can effectively increase a player's desire for the next action.&lt;/li&gt;
&lt;li&gt;Preventing Player Burnout: We don't want players to exhaust all content in a short period, leading to content droughts and player churn. The stamina system distributes content over time, maintaining long-term player retention.&lt;/li&gt;
&lt;li&gt;Extending Product Lifespan: With daily or regular stamina replenishment, we ensure players consistently return, keeping the community active.&lt;/li&gt;
&lt;li&gt;Balancing Player Equity: Stamina limits the playtime of heavy users, giving casual players a chance to catch up and helping maintain a healthy ecosystem.&lt;/li&gt;
&lt;li&gt;Promoting Knowledge Digestion: This is especially crucial for our product. Learning is an intense cognitive activity, and prolonged sessions can lead to fatigue. Forced breaks help players genuinely digest knowledge and prevent "one-time complete fatigue."&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Guiding Stars: An Investment in Personal Growth
&lt;/h1&gt;

&lt;p&gt;Guiding Stars are, in my opinion, the most creative highlight of our item system. They represent a visual learning objective. It's a scarce item that players can "deploy" on an unachieved goal by spending in-game currency. Upon completion, the system grants additional currency based on how quickly they finished. This process is like having players "invest in their own learning journey to receive a significant return."&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Fueling Your Passion for the Work
&lt;/h2&gt;

&lt;p&gt;During the prototyping phase, I spent a lot of time on technical roadblocks—iterating to validate PRs and waiting for GitHub Actions and Ngrok. These unseen efforts took a toll on my initial enthusiasm.&lt;/p&gt;

&lt;p&gt;That's precisely why I decided to pivot from the core learning flow and develop these auxiliary systems first. I needed to see the tangible possibilities of gamification to re-energize myself and the project.&lt;/p&gt;

&lt;p&gt;When building a product, validating your own work is paramount. Most side projects fail because the creator loses interest. Find what keeps your passion alive and push forward.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Starscribers Discord Server: &lt;a href="https://discord.gg/KURmknGA" rel="noopener noreferrer"&gt;https://discord.gg/KURmknGA&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Skellar Open Beta: &lt;a href="https://skellar.rn-ws.com/" rel="noopener noreferrer"&gt;https://skellar.rn-ws.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Skellar: Sky of Skills Dev Log #1</title>
      <dc:creator>Corix RID</dc:creator>
      <pubDate>Wed, 03 Sep 2025 09:07:47 +0000</pubDate>
      <link>https://dev.to/ridcorix/skellar-sky-of-skills-dev-log-1-4bl6</link>
      <guid>https://dev.to/ridcorix/skellar-sky-of-skills-dev-log-1-4bl6</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcc0iy6swgydvi0irb118.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcc0iy6swgydvi0irb118.png" alt=" " width="720" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Skellar
&lt;/h2&gt;

&lt;p&gt;I’ve always been fascinated by the idea of a &lt;strong&gt;gamified&lt;/strong&gt; learning platform. For a long time, it was just a thought due to the technical challenges. But recent advancements in AI have broken down many of those barriers. With a break between jobs, I finally decided to make this project a reality.&lt;/p&gt;

&lt;p&gt;The core concept of Skellar is simple: transform learning into a skill map.&lt;/p&gt;

&lt;p&gt;Imagine this: you complete tasks, unlock skills, and see your progress laid out clearly. You know exactly what you’ve learned and what’s next. You can even connect these achievements directly to your resume or portfolio.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Learn and How
&lt;/h2&gt;

&lt;p&gt;My initial idea for Skellar was a huge skill tree where you could learn “everything.” I quickly realized this was too ambitious. I learned a key lesson about product development: constraints are a source of power. Just like how Duolingo focuses on languages and Brilliant on STEM, Skellar needs to start with a specific field to get the gamification right.&lt;/p&gt;

&lt;p&gt;But I also didn’t want to compromise my vision. So, I split the platform into two parts:&lt;/p&gt;

&lt;p&gt;The Skill Map: This is your personal skill tree, showing your progress and path.&lt;br&gt;
The Playground: This is where you actually learn by doing. When you unlock a skill on the map, you’re taken to an environment to “learn by doing, playing.”&lt;br&gt;
The map and the playground are separate experiences, but they’re linked together, creating a clear and engaging journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  A New Approach to Coding
&lt;/h2&gt;

&lt;p&gt;The first version of Skellar will launch with a coding course. People often ask, “How is this different from Codecademy or LeetCode?”&lt;/p&gt;

&lt;p&gt;I thought back to my own learning experience. The most effective way I learned wasn’t by doing one exercise after another. It was by: starting with a completed project, trying to add new features, and then testing them. This forces you to understand the existing code and build something new at the same time.&lt;/p&gt;

&lt;p&gt;This led me to design a unique learning model for Skellar:&lt;/p&gt;

&lt;p&gt;The system provides a realistic codebase.&lt;br&gt;
The content is broken into missions.&lt;br&gt;
You develop a feature, test it, and submit a pull request (PR).&lt;br&gt;
The system automatically verifies your PR with unit tests.&lt;br&gt;
This experience is designed to feel as real as possible. The main challenge is making sure the learning curve is smooth and the interface is clear enough to prevent learners from getting stuck and quitting.&lt;/p&gt;

&lt;p&gt;The platform will also be open to third-party creators, whom we call Starscribers, who can upload their own courses. The goal is to build a community based on two-way knowledge sharing. In the future, we could expand to all kinds of knowledge, even linking with real-world classes.&lt;/p&gt;

&lt;p&gt;The MVP and the Future&lt;br&gt;
Before the official launch, I’ve created a minimum viable product (MVP). You can check it out and give me feedback, or join the Starscribers Discord community.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: Next.js + Shadcn UI&lt;/li&gt;
&lt;li&gt;Backend: Django + DRF&lt;/li&gt;
&lt;li&gt;Database: PostgreSQL&lt;/li&gt;
&lt;li&gt;The graph layout is created with ReactFlow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I chose these technologies because they are mature, widely supported, and work well with AI tools like GitHub Copilot — which will be doing a lot of the work!&lt;/p&gt;

&lt;p&gt;For me, Skellar is an experiment. I’m not focused on building the next “unicorn” product. I’m simply trying to answer one question: can learning truly feel like a game? I’m putting my idea out there and seeing what happens.&lt;/p&gt;

&lt;p&gt;I don’t know what the final answer will be, but I know the journey will be fun. If this idea resonates with you, or if you’re curious about how a learning platform is built from scratch, I invite you to join the Discord and witness the growth of this skill constellation.&lt;/p&gt;

&lt;p&gt;Starscribers Discord Server: &lt;a href="https://discord.gg/KURmknGA" rel="noopener noreferrer"&gt;https://discord.gg/KURmknGA&lt;/a&gt;&lt;br&gt;
Skellar Open Beta: &lt;a href="https://skellar.rn-ws.com/" rel="noopener noreferrer"&gt;https://skellar.rn-ws.com/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
