<?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[Rikology]]></title><description><![CDATA[Rikology by Riko Prasetyo: A tech blog sharing tutorials, coding tips, AI tips, and technical insights for developers. Learn, grow, and build with clear, action]]></description><link>https://blog.rikology.com</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 20:00:31 GMT</lastBuildDate><atom:link href="https://blog.rikology.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Using AdonisJS: A Laravel-Like Framework for Node.js]]></title><description><![CDATA[If you're a Node.js developer, you've likely played the "backend builder" game. You start with Express or Fastify. Then you need an ORM. You pull in Prisma or TypeORM. Then you need validation, so you grab Zod or Joi. You need auth, a logging system,...]]></description><link>https://blog.rikology.com/using-adonisjs-a-laravel-like-framework-for-nodejs</link><guid isPermaLink="true">https://blog.rikology.com/using-adonisjs-a-laravel-like-framework-for-nodejs</guid><category><![CDATA[AdonisJS]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[TypeScript]]></category><category><![CDATA[backend]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[Riko Riswandha Fahmi Prasetyo]]></dc:creator><pubDate>Mon, 27 Oct 2025 11:33:25 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/a4X1cdC1QAc/upload/93b1e7f06851e38c19c7038baf179cb6.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you're a Node.js developer, you've likely played the "backend builder" game. You start with Express or Fastify. Then you need an ORM. You pull in Prisma or TypeORM. Then you need validation, so you grab Zod or Joi. You need auth, a logging system, email, and CSRF protection.</p>
<p>Before you've written a single line of business logic, you've spent hours, maybe days, stitching together a dozen different libraries, wrestling with configurations, and hoping they all play nice together.</p>
<p>This is the "un-opinionated" world of Node.js. It's powerful, but it's also a fast track to decision fatigue.</p>
<p>What if there was another way? What if you could have the raw power and async performance of Node.js, but with the elegant structure, developer joy, and "batteries-included" philosophy of a framework like Laravel?</p>
<h3 id="heading-meet-adonisjshttpsadonisjscom"><strong>Meet</strong> <a target="_blank" href="https://adonisjs.com"><strong>AdonisJS</strong></a><strong>.</strong></h3>
<p>AdonisJS is a TypeScript-first, full-stack web framework for Node.js. But that's a boring definition. The <em>real</em> definition, the one that makes sense to developers who value productivity and sanity, is this:</p>
<p><a target="_blank" href="https://adonisjs.com"><strong>AdonisJS</strong></a> <strong>is the Laravel for the Node.js ecosystem.</strong></p>
<p>This isn't just a catchy marketing slogan. The comparison is deep, intentional, and baked into the framework's DNA. Let's break down why.</p>
<hr />
<h3 id="heading-the-batteries-included-philosophy">The "Batteries-Included" Philosophy</h3>
<p>The core philosophy of AdonisJS is the same as Laravel's: a web framework should provide you with <em>everything you need</em> to build a modern, secure, and scalable application. It's an "opinionated" framework, which isn't a bad word. It means the core team has already made the hard decisions on the best-in-class tooling and integrated it seamlessly.</p>
<p>When you install AdonisJS, you get:</p>
<ul>
<li><p>A powerful routing layer</p>
</li>
<li><p>A built-in ORM (Lucid)</p>
</li>
<li><p>A template engine (Edge)</p>
</li>
<li><p>Authentication and authorization</p>
</li>
<li><p>A DI container and service providers</p>
</li>
<li><p>Form validation</p>
</li>
<li><p>Security (hashing, CSRF protection, etc.)</p>
</li>
<li><p>A testing suite</p>
</li>
</ul>
<p>...and so much more. You're not building a framework; you're <em>using</em> one.</p>
<hr />
<h3 id="heading-a-familiar-powerful-orm-lucid-vs-eloquent">A Familiar, Powerful ORM: Lucid vs. Eloquent</h3>
<p>If you love Laravel's <strong>Eloquent</strong>, you will feel right at home with Adonis's <strong>Lucid</strong>. Both are implementations of the "Active Record" pattern, which means your models are powerful, expressive, and directly linked to your database tables.</p>
<p><strong>Sound familiar?</strong></p>
<p>TypeScript</p>
<pre><code class="lang-typescript"><span class="hljs-comment">// Find a user by their ID</span>
<span class="hljs-keyword">const</span> user = <span class="hljs-keyword">await</span> User.findOrFail(<span class="hljs-number">1</span>)

<span class="hljs-comment">// Access a relationship</span>
<span class="hljs-keyword">const</span> posts = <span class="hljs-keyword">await</span> user.related(<span class="hljs-string">'posts'</span>).query().limit(<span class="hljs-number">10</span>)

<span class="hljs-comment">// Create and save a new post for the user</span>
<span class="hljs-keyword">const</span> post = <span class="hljs-keyword">new</span> Post()
post.title = <span class="hljs-string">'My First Post'</span>
<span class="hljs-keyword">await</span> user.related(<span class="hljs-string">'posts'</span>).save(post)
</code></pre>
<p>This is clean, readable, and removes the boilerplate of writing complex SQL queries by hand. Lucid also provides a first-class query builder and a powerful migration system, just like its PHP counterpart.</p>
<hr />
<h3 id="heading-a-command-line-swiss-army-knife-ace-vs-artisan">A Command-Line Swiss Army Knife: Ace vs. Artisan</h3>
<p>Laravel developers live and breathe by the <code>php artisan</code> command. AdonisJS gives you <code>node ace</code>.</p>
<p><strong>Ace</strong> is the command-line interface for every AdonisJS project. It's your scaffolding tool, your migration runner, and your development server, all rolled into one.</p>
<p>Want to create a new controller? <code>node ace make:controller PostController</code></p>
<p>Need a new model and its migration file? <code>node ace make:model Post -m</code></p>
<p>Want to run your tests? <code>node ace test</code></p>
<p>This tight integration between the CLI and the framework structure makes development incredibly fast and consistent.</p>
<hr />
<h3 id="heading-a-structure-you-can-actually-read">A Structure You Can Actually Read</h3>
<p>While many Node.js projects end up as a chaotic collection of files, an AdonisJS application is a beacon of organization. Its directory structure is logical, predictable, and heavily inspired by frameworks like Laravel.</p>
<pre><code class="lang-plaintext">├── app
│   ├── controllers
│   ├── models
│   ├── middleware
│   └── validators
├── config
├── database
│   ├── migrations
│   └── seeders
├── start
│   ├── routes.ts
│   └── kernel.ts
└── ...
</code></pre>
<p>Anyone (even a non-Node.js developer) can look at this structure and instantly understand where to find routes, database models, and business logic.</p>
<hr />
<h3 id="heading-but-its-not-just-a-clone">But It's Not Just a Clone</h3>
<p>While the parallels are strong, AdonisJS isn't just a port of Laravel. It's a modern framework built to leverage the best parts of its own ecosystem.</p>
<p>The biggest difference? <strong>It's TypeScript-first.</strong></p>
<p>This isn't just a "nice-to-have" feature; it's the foundation of the framework. You get best-in-class autocompletion, compile-time error checking, and a level of type-safety that's simply not available in traditional PHP. The framework uses this to its advantage, providing an incredible Developer Experience (DX) where your editor <em>knows</em> about your routes, your model properties, and your environment variables.</p>
<hr />
<h3 id="heading-the-takeaway">The Takeaway</h3>
<p>AdonisJS offers a compelling path for building robust, scalable applications in Node.js. By providing a structured, full-stack, and TypeScript-first environment, it solves the "decision fatigue" problem and lets developers focus on what truly matters: building great features.</p>
<p>If you're a Laravel developer looking for a home in the Node.js world, or a Node.js developer craving structure and productivity, AdonisJS is an answer worth exploring.</p>
]]></content:encoded></item><item><title><![CDATA[The Developer's Guide to Cost-Effective AI: Using Claude Code with the GLM Coding Plan]]></title><description><![CDATA[When the GLM Coding Plan first launched, I was skeptical. The promise was "Claude-level performance at 1/7th the price." It sounded like a marketing gimmick. But for a few bucks, I decided to try it.
Then, they automatically upgraded everyone on the ...]]></description><link>https://blog.rikology.com/the-developers-guide-to-cost-effective-ai-using-claude-code-with-the-glm-coding-plan</link><guid isPermaLink="true">https://blog.rikology.com/the-developers-guide-to-cost-effective-ai-using-claude-code-with-the-glm-coding-plan</guid><category><![CDATA[GLM-4.6]]></category><category><![CDATA[AI Coding Assistant]]></category><category><![CDATA[claude-code]]></category><category><![CDATA[Cost savings]]></category><category><![CDATA[developer productivity]]></category><dc:creator><![CDATA[Riko Riswandha Fahmi Prasetyo]]></dc:creator><pubDate>Mon, 27 Oct 2025 08:51:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/v7xiSfj6mGI/upload/d293e2d1dc9ccdc9e956fc675825e7b6.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When the <a target="_blank" href="https://z.ai/subscribe?ic=4P7QHSOQBB">GLM Coding Plan</a> <a target="_blank" href="https://z.ai/subscribe?ic=4P7QHSOQBB">first launched</a>, I was skeptical. The promise was "Claude-level performance at 1/7th the price." It sounded like a marketing gimmick. But for a few bucks, I decided to try it.</p>
<p>Then, they automatically upgraded everyone on the plan to their new flagship model, <strong>GLM-4.6</strong>.</p>
<h3 id="heading-first-what-is-glm-and-glm-coding-plan"><strong>First, What is GLM and GLM Coding Plan?</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761554868550/e1066491-922d-460c-96cd-2314a65e8d58.png" alt="LLM Performance Evaluation of GLM-4.6" class="image--center mx-auto" /></p>
<p>This is the most important part to understand. The <strong>GLM Coding Plan</strong> is the <em>subscription</em> (the "how you buy"). <strong>GLM-4.6</strong> is the <em>engine</em> (the "what you get").</p>
<p>And this new engine is a beast. The <a target="_blank" href="https://z.ai/blog/glm-4.6">official announcement</a> listed the specs, but here's what they <em>feel</em> like in practice:</p>
<ul>
<li><p><strong>The 200K Context Window is No Gimmick:</strong> This is the biggest upgrade for me. 128K was good, but 200K is massive. I can now open my terminal, pipe in <em>multiple</em> instructions, my database schema, and my new feature requirements and just say, "Refactor these pages to use the new translation files." And it <em>actually works</em>.</p>
</li>
<li><p><strong>The Coding is Just... Better:</strong> I've found it's not just a simple autocompleter. It's a real reasoning engine. It's fantastic at writing plan and refactoring the tedious tasks of writing the same page structure into something maintainable.</p>
</li>
</ul>
<h3 id="heading-my-honest-take-is-it-really-as-good-as-claude"><strong>My Honest Take: Is It <em>Really</em> as Good as Claude?</strong></h3>
<p>This is the question everyone asks. The short answer: <strong>It's so close that the price difference becomes impossible to justify.</strong></p>
<p>The GLM-4.6 blog post was surprisingly honest about this. They published benchmarks showing that GLM-4.6 "reaches <strong>near parity with Claude Sonnet 4</strong>" but also noted that it "still lags behind Claude Sonnet 4.5 in coding ability."</p>
<p>My personal experience lines up perfectly with this.</p>
<p>For 95% of my daily tasks—writing tests, debugging, refactoring, generating boilerplate, explaining code—it is <strong>indistinguishable</strong> from the premium models I was paying for by the token. It's fast, it's accurate, and it follows my complex instructions.</p>
<p>Will it invent a completely novel algorithm from scratch? Maybe not. But will it save me 2-3 hours of grunt work every single day? <strong>Absolutely.</strong></p>
<h3 id="heading-how-i-set-it-up-it-took-3-minutes"><strong>How I Set It Up (It Took 3 Minutes)</strong></h3>
<p>This was the best part. I didn't have to change my workflow at all. I live in my terminal and use <strong>Claude Code</strong> as my main coding assistant.</p>
<p>Here’s exactly what I did:</p>
<ol>
<li><p>Install <a target="_blank" href="https://github.com/anthropics/claude-code"><strong>Claude Code</strong></a><strong>:</strong> <code>npm install -g @anthropic-ai/claude-code</code><strong>.</strong></p>
</li>
<li><p><strong>Signed up:</strong> <a target="_blank" href="https://z.ai/subscribe?ic=4P7QHSOQBB">Subscribed</a> and grabbed the Lite/Pro plan.</p>
</li>
<li><p><strong>Got my API key:</strong> I went to my Z.ai dashboard and generated a new API key.</p>
</li>
<li><p><strong>Configured my tool:</strong> This is the key. I just created a <code>settings.json</code> file in my user directory (at <code>~/.claude</code> on my Mac) and added this:</p>
<pre><code class="lang-json"> {
   <span class="hljs-attr">"env"</span>: {
     <span class="hljs-attr">"ANTHROPIC_BASE_URL"</span>: <span class="hljs-string">"https://api.z.ai/api/anthropic"</span>,
     <span class="hljs-attr">"ANTHROPIC_AUTH_TOKEN"</span>: <span class="hljs-string">"&lt;paste-your-z.ai-api-key-here&gt;"</span>,
     <span class="hljs-attr">"API_TIMEOUT_MS"</span>: <span class="hljs-string">"3000000"</span>,
     <span class="hljs-attr">"ANTHROPIC_DEFAULT_HAIKU_MODEL"</span>: <span class="hljs-string">"glm-4.5-air"</span>,
     <span class="hljs-attr">"ANTHROPIC_DEFAULT_SONNET_MODEL"</span>: <span class="hljs-string">"glm-4.6"</span>,
     <span class="hljs-attr">"ANTHROPIC_DEFAULT_OPUS_MODEL"</span>: <span class="hljs-string">"glm-4.6"</span>
   }
 }
</code></pre>
</li>
</ol>
<p>I restarted Claude Code, and... that was it. My favorite tool was now powered by the GLM-4.6 model, and my API token meter stopped spinning.</p>
<h3 id="heading-conclusion-stop-overpaying-start-building"><strong>Conclusion: Stop Overpaying. Start Building.</strong></h3>
<p>Stop choosing between a cutting-edge coding partner and a predictable budget. The GLM Coding Plan, now supercharged by GLM-4.6, gives you both.</p>
<p>You get "near-parity" performance to top-tier models, compatibility with your favorite tools, and a massive 200K context window—all for a low, flat fee that lets you finally use your AI assistant without wincing.</p>
<p><strong>Your next steps:</strong></p>
<ol>
<li><p>See the evidence for yourself on the <a target="_blank" href="https://z.ai/blog/glm-4.6"><strong>GLM-4.6 announcement page</strong></a>.</p>
</li>
<li><p>Grab your plan and <a target="_blank" href="https://z.ai/subscribe?ic=4P7QHSOQBB"><strong>subscribe now</strong></a>.</p>
</li>
</ol>
]]></content:encoded></item></channel></rss>