<?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: Imam Ali Mustofa</title>
    <description>The latest articles on DEV Community by Imam Ali Mustofa (@darkterminal).</description>
    <link>https://dev.to/darkterminal</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F136120%2Fed7babf2-9a8d-4438-86ca-ade82955f85e.png</url>
      <title>DEV Community: Imam Ali Mustofa</title>
      <link>https://dev.to/darkterminal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/darkterminal"/>
    <language>en</language>
    <item>
      <title>AI Can Write the Code. So What Are You Actually Good At?</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Wed, 02 Sep 2026 18:02:34 +0000</pubDate>
      <link>https://dev.to/darkterminal/ai-can-write-the-code-so-what-are-you-actually-good-at-220e</link>
      <guid>https://dev.to/darkterminal/ai-can-write-the-code-so-what-are-you-actually-good-at-220e</guid>
      <description>&lt;p&gt;There is a strange thing happening in software engineering.&lt;/p&gt;

&lt;p&gt;We have AI that can generate functions, explain stack traces, write SQL queries, scaffold APIs, refactor code, write tests, and even build entire applications from a single prompt.&lt;/p&gt;

&lt;p&gt;And somehow, this makes me more convinced than ever that &lt;strong&gt;software engineers need strong fundamentals&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Not less.&lt;/p&gt;

&lt;p&gt;More.&lt;/p&gt;

&lt;p&gt;Because when writing code becomes cheap, &lt;strong&gt;understanding code becomes expensive&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The uncomfortable part about AI-assisted development
&lt;/h2&gt;

&lt;p&gt;Let's say you ask an AI:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Build me a REST API for managing users."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Five seconds later, you have controllers, models, routes, validation, authentication, tests, and probably a Docker configuration.&lt;/p&gt;

&lt;p&gt;Nice.&lt;/p&gt;

&lt;p&gt;But then something breaks.&lt;/p&gt;

&lt;p&gt;The database starts timing out.&lt;/p&gt;

&lt;p&gt;Your queue keeps retrying the same job.&lt;/p&gt;

&lt;p&gt;Memory usage slowly climbs.&lt;/p&gt;

&lt;p&gt;A race condition appears only under production traffic.&lt;/p&gt;

&lt;p&gt;Your API returns inconsistent data.&lt;/p&gt;

&lt;p&gt;The AI gives you three possible fixes.&lt;/p&gt;

&lt;p&gt;All three sound reasonable.&lt;/p&gt;

&lt;p&gt;Now what?&lt;/p&gt;

&lt;p&gt;This is where fundamentals suddenly become very expensive.&lt;/p&gt;

&lt;p&gt;If you don't understand HTTP, databases, concurrency, operating systems, networking, data structures, algorithms, application architecture, and the runtime you're working with, you don't really have an AI-assisted development workflow.&lt;/p&gt;

&lt;p&gt;You have an &lt;strong&gt;AI dependency&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that's a very different thing.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI is very good at generating code
&lt;/h2&gt;

&lt;p&gt;We should acknowledge this.&lt;/p&gt;

&lt;p&gt;AI is incredibly useful.&lt;/p&gt;

&lt;p&gt;I use it.&lt;/p&gt;

&lt;p&gt;I experiment with it.&lt;/p&gt;

&lt;p&gt;I ask it stupid questions.&lt;/p&gt;

&lt;p&gt;I let it generate boring code.&lt;/p&gt;

&lt;p&gt;I let it explain unfamiliar APIs.&lt;/p&gt;

&lt;p&gt;I use it as a second pair of eyes.&lt;/p&gt;

&lt;p&gt;Sometimes I even let it write the first ugly version of something.&lt;/p&gt;

&lt;p&gt;That's fine.&lt;/p&gt;

&lt;p&gt;Software engineering has always been about using tools.&lt;/p&gt;

&lt;p&gt;Compilers replaced handwritten machine code.&lt;/p&gt;

&lt;p&gt;Frameworks replaced enormous amounts of boilerplate.&lt;/p&gt;

&lt;p&gt;Libraries replaced reinventing common algorithms.&lt;/p&gt;

&lt;p&gt;Cloud platforms replaced maintaining physical servers.&lt;/p&gt;

&lt;p&gt;AI is simply another abstraction layer.&lt;/p&gt;

&lt;p&gt;But abstraction has a price.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can only safely abstract away something you understand well enough to debug when the abstraction fails.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the part people often forget.&lt;/p&gt;




&lt;h2&gt;
  
  
  The code is not the software
&lt;/h2&gt;

&lt;p&gt;This is probably one of the most important distinctions for new engineers.&lt;/p&gt;

&lt;p&gt;A software system is not just source code.&lt;/p&gt;

&lt;p&gt;A system is a combination of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;requirements&lt;/li&gt;
&lt;li&gt;data&lt;/li&gt;
&lt;li&gt;algorithms&lt;/li&gt;
&lt;li&gt;state&lt;/li&gt;
&lt;li&gt;interfaces&lt;/li&gt;
&lt;li&gt;networks&lt;/li&gt;
&lt;li&gt;databases&lt;/li&gt;
&lt;li&gt;operating systems&lt;/li&gt;
&lt;li&gt;infrastructure&lt;/li&gt;
&lt;li&gt;security&lt;/li&gt;
&lt;li&gt;humans&lt;/li&gt;
&lt;li&gt;and a lot of assumptions nobody documented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can generate the code.&lt;/p&gt;

&lt;p&gt;It cannot magically remove the complexity underneath it.&lt;/p&gt;

&lt;p&gt;You still need to understand what the generated code is doing.&lt;/p&gt;

&lt;p&gt;Otherwise, you're basically driving a race car while asking the passenger which pedal is the brake.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fundamentals give you a mental debugger
&lt;/h2&gt;

&lt;p&gt;One of the biggest advantages of learning fundamentals is that they give you a way to reason.&lt;/p&gt;

&lt;p&gt;Suppose an API suddenly becomes slow.&lt;/p&gt;

&lt;p&gt;A beginner might ask an AI:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why is my API slow?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An engineer starts breaking the problem apart.&lt;/p&gt;

&lt;p&gt;Is the application slow?&lt;/p&gt;

&lt;p&gt;Is the database slow?&lt;/p&gt;

&lt;p&gt;Is the network slow?&lt;/p&gt;

&lt;p&gt;Are we making too many queries?&lt;/p&gt;

&lt;p&gt;Is there an N+1 query problem?&lt;/p&gt;

&lt;p&gt;Are we waiting on an external service?&lt;/p&gt;

&lt;p&gt;Is the CPU saturated?&lt;/p&gt;

&lt;p&gt;Is memory under pressure?&lt;/p&gt;

&lt;p&gt;Are connections exhausted?&lt;/p&gt;

&lt;p&gt;Is the queue backed up?&lt;/p&gt;

&lt;p&gt;Is the algorithm doing unnecessary work?&lt;/p&gt;

&lt;p&gt;This is not about memorizing solutions.&lt;/p&gt;

&lt;p&gt;It's about knowing &lt;strong&gt;where to look&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Fundamentals turn debugging from guessing into investigation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Learn algorithms even if AI can write them
&lt;/h2&gt;

&lt;p&gt;"But I don't need to learn algorithms anymore. AI can generate them."&lt;/p&gt;

&lt;p&gt;Sure.&lt;/p&gt;

&lt;p&gt;And a calculator can calculate 927 × 381.&lt;/p&gt;

&lt;p&gt;You should still understand multiplication.&lt;/p&gt;

&lt;p&gt;The point of learning algorithms isn't to prove that you can manually implement a sorting algorithm during an interview.&lt;/p&gt;

&lt;p&gt;The deeper value is learning how to think about computational problems.&lt;/p&gt;

&lt;p&gt;You start asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What happens when the dataset becomes 10x larger?&lt;/p&gt;

&lt;p&gt;What is the time complexity?&lt;/p&gt;

&lt;p&gt;What is the memory cost?&lt;/p&gt;

&lt;p&gt;Can this operation be indexed?&lt;/p&gt;

&lt;p&gt;Can this process be parallelized?&lt;/p&gt;

&lt;p&gt;Do I actually need to process all of this data?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These questions matter even when AI writes the implementation.&lt;/p&gt;

&lt;p&gt;In fact, they matter &lt;strong&gt;more&lt;/strong&gt; when AI writes the implementation.&lt;/p&gt;

&lt;p&gt;Because AI can produce code that is perfectly valid and completely unreasonable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Learn databases before letting AI design your database
&lt;/h2&gt;

&lt;p&gt;This one hurts because I've seen it too many times.&lt;/p&gt;

&lt;p&gt;Someone asks AI to create a database schema.&lt;/p&gt;

&lt;p&gt;AI happily generates seventeen tables, twelve relationships, several indexes, some JSON columns, and a migration nobody understands.&lt;/p&gt;

&lt;p&gt;Everything works.&lt;/p&gt;

&lt;p&gt;Until production.&lt;/p&gt;

&lt;p&gt;Now suddenly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is running across millions of rows.&lt;/p&gt;

&lt;p&gt;The ORM is generating hundreds of queries.&lt;/p&gt;

&lt;p&gt;An index is missing.&lt;/p&gt;

&lt;p&gt;A transaction boundary is wrong.&lt;/p&gt;

&lt;p&gt;A foreign key relationship doesn't represent the actual business rule.&lt;/p&gt;

&lt;p&gt;The database becomes the bottleneck.&lt;/p&gt;

&lt;p&gt;The solution isn't another prompt.&lt;/p&gt;

&lt;p&gt;The solution is understanding databases.&lt;/p&gt;

&lt;p&gt;You don't need to become a database researcher.&lt;/p&gt;

&lt;p&gt;But you should understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;indexes&lt;/li&gt;
&lt;li&gt;primary keys&lt;/li&gt;
&lt;li&gt;foreign keys&lt;/li&gt;
&lt;li&gt;joins&lt;/li&gt;
&lt;li&gt;transactions&lt;/li&gt;
&lt;li&gt;isolation&lt;/li&gt;
&lt;li&gt;normalization&lt;/li&gt;
&lt;li&gt;query plans&lt;/li&gt;
&lt;li&gt;constraints&lt;/li&gt;
&lt;li&gt;locking&lt;/li&gt;
&lt;li&gt;pagination&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can help you write SQL.&lt;/p&gt;

&lt;p&gt;You still need to understand &lt;strong&gt;why the SQL is correct&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Learn networking
&lt;/h2&gt;

&lt;p&gt;Modern software is distributed by default.&lt;/p&gt;

&lt;p&gt;Your application talks to something.&lt;/p&gt;

&lt;p&gt;Maybe it's a database.&lt;/p&gt;

&lt;p&gt;Maybe it's Redis.&lt;/p&gt;

&lt;p&gt;Maybe it's an external API.&lt;/p&gt;

&lt;p&gt;Maybe it's object storage.&lt;/p&gt;

&lt;p&gt;Maybe it's another microservice.&lt;/p&gt;

&lt;p&gt;Maybe it's some random service running on a server you forgot existed.&lt;/p&gt;

&lt;p&gt;At some point, something goes through a network.&lt;/p&gt;

&lt;p&gt;Understanding basic networking gives you an entirely different perspective on software.&lt;/p&gt;

&lt;p&gt;HTTP isn't magic.&lt;/p&gt;

&lt;p&gt;DNS isn't magic.&lt;/p&gt;

&lt;p&gt;TCP isn't magic.&lt;/p&gt;

&lt;p&gt;TLS isn't magic.&lt;/p&gt;

&lt;p&gt;A timeout isn't just "the server is broken."&lt;/p&gt;

&lt;p&gt;Latency exists.&lt;/p&gt;

&lt;p&gt;Packets get lost.&lt;/p&gt;

&lt;p&gt;Connections get reused.&lt;/p&gt;

&lt;p&gt;Proxies exist.&lt;/p&gt;

&lt;p&gt;Load balancers exist.&lt;/p&gt;

&lt;p&gt;Caches exist.&lt;/p&gt;

&lt;p&gt;Once you understand these things, production errors become less mysterious.&lt;/p&gt;




&lt;h2&gt;
  
  
  Learn your operating system
&lt;/h2&gt;

&lt;p&gt;You don't need to become a kernel developer.&lt;/p&gt;

&lt;p&gt;But please learn what happens outside your editor.&lt;/p&gt;

&lt;p&gt;Processes.&lt;/p&gt;

&lt;p&gt;Threads.&lt;/p&gt;

&lt;p&gt;Memory.&lt;/p&gt;

&lt;p&gt;File descriptors.&lt;/p&gt;

&lt;p&gt;Signals.&lt;/p&gt;

&lt;p&gt;Permissions.&lt;/p&gt;

&lt;p&gt;Sockets.&lt;/p&gt;

&lt;p&gt;Environment variables.&lt;/p&gt;

&lt;p&gt;Processes getting killed.&lt;/p&gt;

&lt;p&gt;Logs.&lt;/p&gt;

&lt;p&gt;CPU usage.&lt;/p&gt;

&lt;p&gt;Memory pressure.&lt;/p&gt;

&lt;p&gt;Disk I/O.&lt;/p&gt;

&lt;p&gt;This knowledge becomes extremely useful the first time your application works perfectly on your laptop and behaves like a haunted machine in production.&lt;/p&gt;

&lt;p&gt;Your framework is not the operating system.&lt;/p&gt;

&lt;p&gt;Your framework is a layer on top of reality.&lt;/p&gt;

&lt;p&gt;And reality doesn't care how elegant your abstractions are.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI makes shallow knowledge more dangerous
&lt;/h2&gt;

&lt;p&gt;This is the part I worry about the most.&lt;/p&gt;

&lt;p&gt;AI makes it incredibly easy to appear productive.&lt;/p&gt;

&lt;p&gt;You can generate a lot of code without understanding much of it.&lt;/p&gt;

&lt;p&gt;That's dangerous because productivity can become an illusion.&lt;/p&gt;

&lt;p&gt;You create a repository.&lt;/p&gt;

&lt;p&gt;There are thousands of lines of code.&lt;/p&gt;

&lt;p&gt;The README looks beautiful.&lt;/p&gt;

&lt;p&gt;The tests are green.&lt;/p&gt;

&lt;p&gt;The UI works.&lt;/p&gt;

&lt;p&gt;Everything feels like engineering.&lt;/p&gt;

&lt;p&gt;Until someone asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why did you design it this way?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the answer is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Because the AI suggested it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's not engineering.&lt;/p&gt;

&lt;p&gt;That's delegation without accountability.&lt;/p&gt;

&lt;p&gt;An engineer can delegate implementation.&lt;/p&gt;

&lt;p&gt;An engineer cannot delegate responsibility for understanding the system.&lt;/p&gt;




&lt;h2&gt;
  
  
  The new skill isn't "prompt engineering"
&lt;/h2&gt;

&lt;p&gt;Prompting is useful.&lt;/p&gt;

&lt;p&gt;But I don't believe prompt engineering is the foundation of AI-era software engineering.&lt;/p&gt;

&lt;p&gt;The real skill is &lt;strong&gt;context engineering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Can you understand the problem?&lt;/p&gt;

&lt;p&gt;Can you define constraints?&lt;/p&gt;

&lt;p&gt;Can you provide the right context?&lt;/p&gt;

&lt;p&gt;Can you recognize incorrect assumptions?&lt;/p&gt;

&lt;p&gt;Can you evaluate the generated result?&lt;/p&gt;

&lt;p&gt;Can you test it?&lt;/p&gt;

&lt;p&gt;Can you observe it in production?&lt;/p&gt;

&lt;p&gt;Can you explain the trade-offs?&lt;/p&gt;

&lt;p&gt;Can you throw the generated solution away when it's wrong?&lt;/p&gt;

&lt;p&gt;That requires knowledge.&lt;/p&gt;

&lt;p&gt;A better prompt cannot compensate for a missing mental model.&lt;/p&gt;




&lt;h2&gt;
  
  
  The fundamentals become your filter
&lt;/h2&gt;

&lt;p&gt;Think of AI as an extremely fast junior engineer who has read an absurd amount of documentation but doesn't actually have your production environment inside its head.&lt;/p&gt;

&lt;p&gt;It can be brilliant.&lt;/p&gt;

&lt;p&gt;It can also confidently produce nonsense.&lt;/p&gt;

&lt;p&gt;Your job is to build the filter.&lt;/p&gt;

&lt;p&gt;When AI gives you an answer, you should be able to think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"That sounds wrong because..."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"That's technically correct, but the trade-off is..."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This works for 10,000 records, but it will become a problem at 100 million."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This abstraction hides the exact thing I need to control."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That little voice is engineering judgment.&lt;/p&gt;

&lt;p&gt;And engineering judgment comes from fundamentals plus experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  Don't become a code typist
&lt;/h2&gt;

&lt;p&gt;I think the role of the software engineer is changing.&lt;/p&gt;

&lt;p&gt;The ability to type syntax quickly is becoming less valuable.&lt;/p&gt;

&lt;p&gt;The ability to &lt;strong&gt;understand systems&lt;/strong&gt; is becoming more valuable.&lt;/p&gt;

&lt;p&gt;The engineer of the future doesn't necessarily write more code.&lt;/p&gt;

&lt;p&gt;They might write less.&lt;/p&gt;

&lt;p&gt;They might spend more time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;defining problems&lt;/li&gt;
&lt;li&gt;designing systems&lt;/li&gt;
&lt;li&gt;investigating failures&lt;/li&gt;
&lt;li&gt;validating assumptions&lt;/li&gt;
&lt;li&gt;reviewing generated code&lt;/li&gt;
&lt;li&gt;designing experiments&lt;/li&gt;
&lt;li&gt;analyzing data&lt;/li&gt;
&lt;li&gt;improving developer experience&lt;/li&gt;
&lt;li&gt;simplifying architecture&lt;/li&gt;
&lt;li&gt;removing unnecessary code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ironically, AI might make good engineers look less productive on GitHub.&lt;/p&gt;

&lt;p&gt;Because sometimes the best engineering decision is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Don't build it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Learn the boring stuff
&lt;/h2&gt;

&lt;p&gt;If you're starting your software engineering journey today, here's my unpopular advice:&lt;/p&gt;

&lt;p&gt;Don't spend all your time chasing the newest AI framework.&lt;/p&gt;

&lt;p&gt;Learn the boring stuff.&lt;/p&gt;

&lt;p&gt;Learn how a CPU executes instructions.&lt;/p&gt;

&lt;p&gt;Learn how memory works.&lt;/p&gt;

&lt;p&gt;Learn Linux.&lt;/p&gt;

&lt;p&gt;Learn networking.&lt;/p&gt;

&lt;p&gt;Learn HTTP.&lt;/p&gt;

&lt;p&gt;Learn databases.&lt;/p&gt;

&lt;p&gt;Learn algorithms.&lt;/p&gt;

&lt;p&gt;Learn data structures.&lt;/p&gt;

&lt;p&gt;Learn Git.&lt;/p&gt;

&lt;p&gt;Learn testing.&lt;/p&gt;

&lt;p&gt;Learn debugging.&lt;/p&gt;

&lt;p&gt;Learn how to read documentation.&lt;/p&gt;

&lt;p&gt;Learn how to read source code.&lt;/p&gt;

&lt;p&gt;Learn how to design an API.&lt;/p&gt;

&lt;p&gt;Learn how to model data.&lt;/p&gt;

&lt;p&gt;Learn how to observe a running system.&lt;/p&gt;

&lt;p&gt;Then use AI.&lt;/p&gt;

&lt;p&gt;Use it aggressively.&lt;/p&gt;

&lt;p&gt;Use it as a pair programmer.&lt;/p&gt;

&lt;p&gt;Use it as a teacher.&lt;/p&gt;

&lt;p&gt;Use it as a reviewer.&lt;/p&gt;

&lt;p&gt;Use it to generate the boring parts.&lt;/p&gt;

&lt;p&gt;Use it to challenge your assumptions.&lt;/p&gt;

&lt;p&gt;Just don't let it replace your ability to think.&lt;/p&gt;




&lt;h2&gt;
  
  
  The paradox of AI
&lt;/h2&gt;

&lt;p&gt;Here is the paradox I keep coming back to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The better AI becomes at writing software, the more important it becomes to understand software.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because generated code increases the amount of code we can produce.&lt;/p&gt;

&lt;p&gt;It doesn't automatically increase our ability to judge that code.&lt;/p&gt;

&lt;p&gt;And when the cost of producing code approaches zero, the bottleneck moves somewhere else.&lt;/p&gt;

&lt;p&gt;The bottleneck becomes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;judgment.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What should we build?&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;What should we not build?&lt;/p&gt;

&lt;p&gt;Is this architecture appropriate?&lt;/p&gt;

&lt;p&gt;Is this data model correct?&lt;/p&gt;

&lt;p&gt;Is this secure?&lt;/p&gt;

&lt;p&gt;Is this maintainable?&lt;/p&gt;

&lt;p&gt;What happens when it fails?&lt;/p&gt;

&lt;p&gt;What happens when traffic grows?&lt;/p&gt;

&lt;p&gt;What happens when the assumptions change?&lt;/p&gt;

&lt;p&gt;Those are not syntax questions.&lt;/p&gt;

&lt;p&gt;They're engineering questions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Go beyond the code
&lt;/h2&gt;

&lt;p&gt;I'm not anti-AI.&lt;/p&gt;

&lt;p&gt;Quite the opposite.&lt;/p&gt;

&lt;p&gt;I'm interested in what happens when we combine human curiosity with machines that can generate software at ridiculous speed.&lt;/p&gt;

&lt;p&gt;But I don't want a generation of developers who know how to ask an AI for code but don't know how that code interacts with reality.&lt;/p&gt;

&lt;p&gt;That's backwards.&lt;/p&gt;

&lt;p&gt;Learn to think.&lt;/p&gt;

&lt;p&gt;Learn to investigate.&lt;/p&gt;

&lt;p&gt;Learn to build things from first principles.&lt;/p&gt;

&lt;p&gt;Break things.&lt;/p&gt;

&lt;p&gt;Read the error messages.&lt;/p&gt;

&lt;p&gt;Read the source code.&lt;/p&gt;

&lt;p&gt;Build the weird little tool nobody asked for.&lt;/p&gt;

&lt;p&gt;Build it again when you realize your first architecture was terrible.&lt;/p&gt;

&lt;p&gt;That's how you develop engineering intuition.&lt;/p&gt;

&lt;p&gt;AI can accelerate that journey.&lt;/p&gt;

&lt;p&gt;It cannot walk it for you.&lt;/p&gt;

&lt;p&gt;And maybe that's the most important thing to remember in this new era:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't compete with AI at writing code. Become the person who knows what code should exist in the first place.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>softwareengineering</category>
      <category>programming</category>
    </item>
    <item>
      <title>I Build libSQL Server Web GUI - MylibSQLAdmin</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Fri, 20 Jun 2025 19:39:59 +0000</pubDate>
      <link>https://dev.to/darkterminal/i-build-libsql-server-web-gui-mylibsqladmin-2ahk</link>
      <guid>https://dev.to/darkterminal/i-build-libsql-server-web-gui-mylibsqladmin-2ahk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;MylibSQLAdmin - A Modern libSQL Database Management Platform&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hello Punk! If you’ve ever wrestled with SQLite databases, felt buried under clunky UIs, or just wished your database tools were as sleek as your favorite apps—say hello to &lt;strong&gt;MylibSQLAdmin&lt;/strong&gt;. It’s like giving your &lt;em&gt;SQLite workflow a double shot of espresso ☕️, but without the jitters&lt;/em&gt;. That's it no punchline!&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s the Big Deal?
&lt;/h2&gt;

&lt;p&gt;First off, &lt;strong&gt;MylibSQLAdmin&lt;/strong&gt; isn’t just &lt;em&gt;another&lt;/em&gt; SQLite manager. It’s built for libSQL—a turbocharged fork of SQLite designed for modern apps (think serverless mode, granular permissions, and even database share schema 🌿). And guess what? &lt;strong&gt;MylibSQLAdmin&lt;/strong&gt; wraps all that power into a smooth, web-based UI. &lt;em&gt;No PhD in CLI required&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Here’s the vibe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stats That Don’t Suck&lt;/strong&gt;: Get instant database insights without drowning in spreadsheets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token &amp;amp; Team Management&lt;/strong&gt;: Secure your DB like a VIP club 🕶️—tokens, groups, user roles, all in one place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Fuss Collaboration&lt;/strong&gt;: Invite teammates, manage permissions, and keep everyone rowing in the same boat 🚣.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;libSQL’s Superpowers&lt;/strong&gt;: Play with serverless or server mode, shared schema databases, and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Oh, and it’s &lt;em&gt;open-source&lt;/em&gt;. Because sharing is caring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why did I build MylibSQLAdmin?
&lt;/h2&gt;

&lt;p&gt;Simple — I love a good challenge.&lt;/p&gt;

&lt;p&gt;Managing databases with &lt;code&gt;sqld&lt;/code&gt; (&lt;a href="https://github.com/tursodatabase/libsql" rel="noopener noreferrer"&gt;libsql-server&lt;/a&gt;) wasn’t as smooth as I wanted it to be. Sure, Turso (the company behind it) already offers a platform for database management.&lt;/p&gt;

&lt;p&gt;But here's the thing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I wanted something I could run myself.&lt;/li&gt;
&lt;li&gt;On my own server.&lt;/li&gt;
&lt;li&gt;With full control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, I built my own platform — MylibSQLAdmin — to make managing libSQL easier and more accessible for folks like me.&lt;/p&gt;

&lt;p&gt;Sure, it’s not on the same level as what Turso’s platform offers — and that’s okay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;br&gt;
Because what I’ve built already covers what &lt;em&gt;I&lt;/em&gt; need. And honestly, that’s enough for me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, what makes it “enough”?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User Management:&lt;/strong&gt; I needed a way to let multiple users access the platform. Now it can.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Management:&lt;/strong&gt; Working with a team gets way easier when you can assign roles, group access, and keep things organized.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group Database Management:&lt;/strong&gt; This lets smaller teams work only with the databases meant for them. No more clutter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Management:&lt;/strong&gt; For remote connections to libSQL (like in serverless setups), token-based access is a must — and now it’s built in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And a bunch of other small things that just make managing libSQL databases smoother and less of a headache.&lt;/p&gt;




&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/darkterminal" rel="noopener noreferrer"&gt;
        darkterminal
      &lt;/a&gt; / &lt;a href="https://github.com/darkterminal/mylibsqladmin" rel="noopener noreferrer"&gt;
        mylibsqladmin
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      MylibSQLAdmin - A Modern libSQL Database Management Platform
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&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%2Fraw.githubusercontent.com%2Fdarkterminal%2Fdarkterminal%2Fmaster%2Fprojects%2Fdark-mode.png" class="article-body-image-wrapper"&gt;&lt;img alt="Shows a black logo in light color mode and a white one in dark color mode." src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fdarkterminal%2Fdarkterminal%2Fmaster%2Fprojects%2Fdark-mode.png"&gt;&lt;/a&gt;
  
&lt;/p&gt;

&lt;p&gt;A Modern SQLite Database Management System&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://deepwiki.com/darkterminal/mylibsqladmin" rel="nofollow noopener noreferrer"&gt;
    &lt;img alt="Static Badge" src="https://camo.githubusercontent.com/791e6b6302d89f12c82f8e407cb542a6becec3fd8052833efde6705cd9d31d5f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465657057696b692d446f63733f6c6f676f3d77696b69626f6f6b73266c6162656c3d446f6373"&gt;
  &lt;/a&gt;
  &lt;a href="https://github,com/sponsors/darkterminal" rel="nofollow noopener noreferrer"&gt;
    &lt;img alt="GitHub Sponsors" src="https://camo.githubusercontent.com/8d3e7c45cf2a7f3debea1fef325de51888adf73b04dd94c2a0b15418f81ef7ab/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73706f6e736f72732f6461726b7465726d696e616c3f6c6f676f3d67697468756273706f6e736f7273"&gt;
  &lt;/a&gt;
  &lt;a href="https://discord.gg/wWDzy5Nt44" rel="nofollow noopener noreferrer"&gt;
    &lt;img alt="Discord" src="https://camo.githubusercontent.com/6b0c7c8c8b12bb708aa4faf0d0708e04961718d6a3337786de06772f8467187f/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f313336313738383233383536313238303130313f6c6f676f3d646973636f7264"&gt;
  &lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/50980523ac40f6b1bebccaf62a3247f05cbd29234a7d1bfbcced301e682c7c37/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f772f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;img alt="GitHub commit activity" src="https://camo.githubusercontent.com/50980523ac40f6b1bebccaf62a3247f05cbd29234a7d1bfbcced301e682c7c37/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f772f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/66b1f5aa01894b51ec54a51628b5f3ff38a0485c7c7562383f7622b0ffaa3476/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;img alt="GitHub License" src="https://camo.githubusercontent.com/66b1f5aa01894b51ec54a51628b5f3ff38a0485c7c7562383f7622b0ffaa3476/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ef57d386715d9cb7cb14c26decb25771ecd01de12e847ab5e3c6b0bac6c29bef/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;img alt="GitHub contributors" src="https://camo.githubusercontent.com/ef57d386715d9cb7cb14c26decb25771ecd01de12e847ab5e3c6b0bac6c29bef/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;In the age of data-driven applications, the demand for lightweight, scalable, and modern database solutions has never been greater. &lt;strong&gt;libSQL&lt;/strong&gt; is a powerful fork of SQLite designed for the modern era, offering advanced features such as serverless and server-based modes, fine-grained access control, and native branching capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MylibSQLAdmin&lt;/strong&gt; is an open-source web GUI built specifically for managing libSQL databases. By harnessing the full potential of libSQL-server functionalities, this project provides an intuitive and comprehensive platform for database administration, making it easier than ever to manage your database systems through an accessible web interface. You can connect with &lt;code&gt;libsql-server&lt;/code&gt; from &lt;strong&gt;Docker Service&lt;/strong&gt; or use your existing &lt;code&gt;libsql-server&lt;/code&gt; instance.&lt;/p&gt;

&lt;p&gt;
    &lt;a href="https://www.youtube.com/watch?v=dntNiEYA4mU" rel="nofollow noopener noreferrer"&gt;
        &lt;img width="100%" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F32319439%2F452616614-bfc06ec7-6265-481b-a493-ce5a0d440b05.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODgzNzI2MjksIm5iZiI6MTc4ODM3MjMyOSwicGF0aCI6Ii8zMjMxOTQzOS80NTI2MTY2MTQtYmZjMDZlYzctNjI2NS00ODFiLWE0OTMtY2U1YTBkNDQwYjA1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA5MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwOTAyVDE4MDUyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI5YWNlNWNjZDk4MTRiZjcxMmVmZmU5MTRjNTNkZmJlMGE0YjI4MDc2OGQzYzA2MzI5YjFlM2Y5ODZmOWFhNTMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.wv6ESzzWhR-3d3ba4ntRzqkBomG_ZWpVdhE8ydHKZSM"&gt;
    &lt;/a&gt;
    &lt;a href="https://www.youtube.com/watch?v=dntNiEYA4mU" rel="nofollow noopener noreferrer"&gt;View on YouTube&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What Does MylibSQLAdmin Offer?&lt;/h2&gt;
&lt;/div&gt;


&lt;ul&gt;

&lt;li&gt;

&lt;strong&gt;Simple Database Statistics&lt;/strong&gt; - Get quick insights into your database performance with easy-to-understand stats.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Database Management&lt;/strong&gt; - Create, edit, and manage your databases with intuitive tools.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Token Management&lt;/strong&gt; - Secure…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/darkterminal/mylibsqladmin" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>webdev</category>
      <category>programming</category>
      <category>database</category>
      <category>laravel</category>
    </item>
    <item>
      <title>From Fun to Frustration: A Lone Wolf in the Open Source World</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Thu, 27 Feb 2025 18:56:09 +0000</pubDate>
      <link>https://dev.to/darkterminal/from-fun-to-frustration-a-lone-wolf-in-the-open-source-world-57p1</link>
      <guid>https://dev.to/darkterminal/from-fun-to-frustration-a-lone-wolf-in-the-open-source-world-57p1</guid>
      <description>&lt;p&gt;Hello Punk! I am &lt;strong&gt;darkterminal&lt;/strong&gt; a &lt;strong&gt;Software Freestyle Engineer&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Someone who has forgotten how to sleep.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  A Day after Having Fun
&lt;/h2&gt;

&lt;p&gt;After dancing with &lt;strong&gt;&lt;a href="https://github.com/darkterminal/whatsback-web" rel="noopener noreferrer"&gt;Whatsback Web&lt;/a&gt;&lt;/strong&gt; for almost three weeks, I’ve finally poured out every distraction in my mind. I feel relieved—and even more handsome and charming!  &lt;/p&gt;

&lt;p&gt;As an &lt;strong&gt;S.F.E&lt;/strong&gt;, I’m incredibly proud to be part of the &lt;strong&gt;Open Source&lt;/strong&gt; community and this digital-ephemeral world. After all, expression and innovation should always be channeled and released in the right place.&lt;/p&gt;




&lt;h2&gt;
  
  
  Back To Open Source Work
&lt;/h2&gt;

&lt;p&gt;“Work”? Sure, let’s call it that—even though “work” usually comes with some kind of financial reward. But in all the chaos I’ve stirred up in this digital world, I haven’t gotten much support, let alone compensation. Sometimes, I wonder—can someone like me, a troublemaker, ever really find a place in this fleeting online existence?  &lt;/p&gt;

&lt;p&gt;At the end of the day, I’ve realized that nothing is impossible in this ever-changing digital space. Hard work and a bit of madness always seem to bring some kind of response from the universe. Maybe it just hasn’t happened for me yet. Or maybe I’m just too unconventional—so much so that I come off as weird or even completely out of place. Who knows?&lt;/p&gt;




&lt;h2&gt;
  
  
  What I've Done Before?
&lt;/h2&gt;

&lt;p&gt;If you visit my &lt;strong&gt;&lt;a href="https://github.com/darkterminal" rel="noopener noreferrer"&gt;GitHub profile&lt;/a&gt;&lt;/strong&gt;, you’ll probably feel a bit weirded out and think to yourself, &lt;strong&gt;“What kind of crazy person is this?”&lt;/strong&gt; And you’d be right! &lt;strong&gt;What kind of crazy person am I?&lt;/strong&gt; That’s something I hear all the time from people around me. But that’s okay—this is the path I’ve chosen. What most people don’t realize, though, is that deep down, I’m lonely and could really use some support.  &lt;/p&gt;

&lt;p&gt;In my non-technical life, I’m doing just fine. But in the &lt;strong&gt;Open Source&lt;/strong&gt; world, I’m a &lt;strong&gt;lone wolf&lt;/strong&gt;. Why? Just take a look at my projects—you’ll see how solitary this journey has been. I’m not looking for pity. What I dream of is &lt;strong&gt;collaboration&lt;/strong&gt;—a little &lt;strong&gt;toxic&lt;/strong&gt;, a little fun, just mischievous enough to talk about silly, pointless things in this fleeting digital world.&lt;/p&gt;




&lt;p&gt;Let's talk!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>programming</category>
      <category>devjournal</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I created Whatsback Web with simple features and made it free and open source. So, what did I get in return? What I got was the realization of how and who truly appreciates the hard work behind a creation.</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Wed, 26 Feb 2025 11:08:13 +0000</pubDate>
      <link>https://dev.to/darkterminal/i-created-whatsback-web-with-simple-features-and-made-it-free-and-open-source-so-what-did-i-get-2e8f</link>
      <guid>https://dev.to/darkterminal/i-created-whatsback-web-with-simple-features-and-made-it-free-and-open-source-so-what-did-i-get-2e8f</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6" class="crayons-story__hidden-navigation-link"&gt;Whatsback Web: Automate WhatsApp with Power &amp;amp; Responsibility&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/darkterminal" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F136120%2Fed7babf2-9a8d-4438-86ca-ade82955f85e.png" alt="darkterminal profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/darkterminal" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Imam Ali Mustofa
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Imam Ali Mustofa
                
                
              
              &lt;div id="story-author-preview-content-2295153" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/darkterminal" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F136120%2Fed7babf2-9a8d-4438-86ca-ade82955f85e.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Imam Ali Mustofa&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 24 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6" id="article-link-2295153"&gt;
          Whatsback Web: Automate WhatsApp with Power &amp;amp; Responsibility
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/api"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;api&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>api</category>
      <category>programming</category>
    </item>
    <item>
      <title>It's Free and Open Source!</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Tue, 25 Feb 2025 09:19:34 +0000</pubDate>
      <link>https://dev.to/darkterminal/its-free-and-open-source-4pe2</link>
      <guid>https://dev.to/darkterminal/its-free-and-open-source-4pe2</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6" class="crayons-story__hidden-navigation-link"&gt;Whatsback Web: Automate WhatsApp with Power &amp;amp; Responsibility&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/darkterminal" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F136120%2Fed7babf2-9a8d-4438-86ca-ade82955f85e.png" alt="darkterminal profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/darkterminal" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Imam Ali Mustofa
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Imam Ali Mustofa
                
                
              
              &lt;div id="story-author-preview-content-2295153" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/darkterminal" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F136120%2Fed7babf2-9a8d-4438-86ca-ade82955f85e.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Imam Ali Mustofa&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 24 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6" id="article-link-2295153"&gt;
          Whatsback Web: Automate WhatsApp with Power &amp;amp; Responsibility
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/api"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;api&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>api</category>
      <category>programming</category>
    </item>
    <item>
      <title>Whatsback Web: Automate WhatsApp with Power &amp; Responsibility</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Mon, 24 Feb 2025 18:30:00 +0000</pubDate>
      <link>https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6</link>
      <guid>https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6</guid>
      <description>&lt;p&gt;Hello Punk! I am &lt;strong&gt;darkterminal&lt;/strong&gt; a &lt;strong&gt;Software Freestyle Engineer&lt;/strong&gt;. Let’s cut to the chase: WhatsApp automation is a double-edged sword. We all crave tools to streamline messaging, but dancing with unofficial APIs is risky business. Today, I’m pulling back the curtain on Whatsback Web—a project born from late-night coding sessions and a stubborn refusal to accept "impossible." But first: this isn’t a fairy tale. Use it wisely, or face the wrath of WhatsApp’s banhammer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built Whatsback Web?
&lt;/h2&gt;

&lt;p&gt;You Can Dive Deeper in My Previous Blog. This project has been my playground ever since &lt;strong&gt;&lt;a href="https://github.com/pedroslopez/whatsapp-web.js" rel="noopener noreferrer"&gt;whatsapp-web.js&lt;/a&gt;&lt;/strong&gt; first hit the scene. It’s been a wild, fun ride—like a high-stakes game of cat and mouse. Sure, I’ve sacrificed &lt;em&gt;a lot&lt;/em&gt; of phone numbers along the way (RIP to those brave souls). But here’s the thing: I’ve learned, observed, adapted, and most importantly—&lt;strong&gt;I’ve survived&lt;/strong&gt;.&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0" class="crayons-story__hidden-navigation-link"&gt;Why I Built Whatsback Web—And Why It’s Different From Other Tools&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/darkterminal" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F136120%2Fed7babf2-9a8d-4438-86ca-ade82955f85e.png" alt="darkterminal profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/darkterminal" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Imam Ali Mustofa
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Imam Ali Mustofa
                
                
              
              &lt;div id="story-author-preview-content-2290682" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/darkterminal" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F136120%2Fed7babf2-9a8d-4438-86ca-ade82955f85e.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Imam Ali Mustofa&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 21 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0" id="article-link-2290682"&gt;
          Why I Built Whatsback Web—And Why It’s Different From Other Tools
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/automation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;automation&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/whatsapp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;whatsapp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;This isn’t just a project; it’s a testament to stubbornness and curiosity. Every ban, every roadblock, every “this shouldn’t work” moment has been a lesson. And now, I’m here to share the spoils of that battle with you.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It’s gonna be a bumpy ride—but hey, that’s where the fun is.&lt;br&gt;
&lt;em&gt;darkterminal - The guy who refuses to quit.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Who Likes Spam?!
&lt;/h2&gt;

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

&lt;p&gt;Let me be clear: &lt;strong&gt;I hate spam&lt;/strong&gt;. It’s annoying, disruptive, and downright infuriating. No wonder WhatsApp comes down hard with those permanent bans. Imagine this: a brand-new number with zero interaction history suddenly blasting out a flood of messages and hammering the server with requests. &lt;em&gt;Damn, that’s just unfair&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Spam isn’t just a nuisance—it’s a violation of trust. It clogs up the system, ruins the experience for everyone. That’s why I’ve built this project with &lt;em&gt;restraint&lt;/em&gt; in mind. It’s not about spamming; it’s about &lt;strong&gt;smart&lt;/strong&gt;, &lt;strong&gt;responsible automation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So, if you’re thinking of using this tool to flood people’s chats, think again. Play nice, or face the consequences. WhatsApp doesn’t mess around, and neither should you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using WhatsApp Web
&lt;/h2&gt;

&lt;p&gt;This project is built on top of &lt;strong&gt;whatsapp-web.js&lt;/strong&gt;—a library that gives you &lt;em&gt;superpowers&lt;/em&gt; to interact with WhatsApp Web programmatically. No heads, no hassle. But don’t expect a ton of crazy features here. Why? Because &lt;em&gt;I’ve already gone crazy enough building this thing&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The whole point of &lt;strong&gt;Whatsback Web&lt;/strong&gt; is to give you a &lt;strong&gt;useful tool&lt;/strong&gt; to save time in your business. It’s about efficiency, not overcomplication. With its REST API, you can forward messages, send automated texts, and integrate it seamlessly into your website or app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;WHATSBACK_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/api/message/send-message`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;post&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;job&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;There is 2 way to install and use Whatsback Web&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker (The Easy Way)
&lt;/h3&gt;

&lt;p&gt;When using docker installation you've 2 options, using Docker CLI or Docker Compose.&lt;/p&gt;

&lt;h4&gt;
  
  
  Docker CLI
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pull the image:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker pull ghcr.io/darkterminal/whatsback-web:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create Network&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  docker network create whatsback-net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create Volume&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  docker volume create whatsback-db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run Whatsback Application Container&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&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;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt; whatsback-app-provider &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--network&lt;/span&gt; whatsback-net &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-p&lt;/span&gt; 8169:5001 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;NODE_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;APP_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5001 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/data/database.sqlite &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-v&lt;/span&gt; whatsback-db:/data &lt;span class="se"&gt;\&lt;/span&gt;
    ghcr.io/darkterminal/whatsback-web:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run Whatsback Cronjob Container&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&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;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt; whatsback-app-cronjob &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--network&lt;/span&gt; whatsback-net &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;NODE_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;APP_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;whatsback-app-provider &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/data/database.sqlite &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-v&lt;/span&gt; whatsback-db:/data &lt;span class="se"&gt;\&lt;/span&gt;
    ghcr.io/darkterminal/whatsback-web:latest &lt;span class="se"&gt;\&lt;/span&gt;
    sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"./wait-for whatsback-app-provider:5001 -t 120 -- node cronjob.js"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Docker Compose
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# docker-compose.yml or compose.yml&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/darkterminal/whatsback-web:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;whatsback-app-provider&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${UI_PORT:-8169}:5001"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NODE_ENV=production&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;APP_PORT=${APP_PORT:-5001}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_PATH=/data/database.sqlite&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db-data:/data&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;app_net&lt;/span&gt;
    &lt;span class="na"&gt;healthcheck&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CMD-SHELL"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;curl&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-f&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;http://localhost:$$APP_PORT/health&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;||&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;exit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;15s&lt;/span&gt;
      &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10s&lt;/span&gt;
      &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;

  &lt;span class="na"&gt;cronjob&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/darkterminal/whatsback-web:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;whatsback-app-cronjob&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NODE_ENV=production&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;APP_HOST=app&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_PATH=/data/database.sqlite&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db-data:/data&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sh -c "./wait-for app:5001 -t 120 -- node cronjob.js"&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;app_net&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;service_healthy&lt;/span&gt;

&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app_net&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bridge&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;db-data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Source Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/darkterminal/whatsback-web.git  
&lt;span class="nb"&gt;cd &lt;/span&gt;whatsback-web  
npm &lt;span class="nb"&gt;install  
&lt;/span&gt;&lt;span class="nv"&gt;NODE_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production node server.js  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔐 The Elephant in the Room: Security &amp;amp; Risks
&lt;/h2&gt;

&lt;p&gt;Let’s be blunt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp hates bots&lt;/strong&gt; (Me too). Using this could get your account banned.&lt;/li&gt;
&lt;li&gt;We’ve added armor (Helmet, rate-limiting), but &lt;strong&gt;no guarantees&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This project isn’t affiliated with WhatsApp&lt;/strong&gt;. Use at your own risk.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ☕ Support the Madness
&lt;/h2&gt;

&lt;p&gt;Building tools like this burns caffeine and sanity. If &lt;strong&gt;Whatsback Web&lt;/strong&gt; saves you time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/sponsors/darkterminal" rel="noopener noreferrer"&gt;GitHub Sponsors&lt;/a&gt; - International Supporter&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://saweria.co/darkterminal" rel="noopener noreferrer"&gt;Saweria&lt;/a&gt; - Indonesian Supporter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/darkterminal/whatsback-web" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Checkout The Whatsback Web - GitHub Repository&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  🚨 Final Warning
&lt;/h2&gt;

&lt;p&gt;This isn’t a toy. It’s a &lt;strong&gt;proof-of-concept&lt;/strong&gt; for developers who understand the risks. If you’re looking for a “safe” solution, walk away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔥 Tips to Survive the WhatsApp Jungle&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Let’s keep it real: using &lt;strong&gt;Whatsback Web&lt;/strong&gt; isn’t a free pass to go wild. WhatsApp’s algorithms are watching, and they don’t play nice. Here’s how to stay under the radar and keep your account alive:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Age Matters:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Make sure the number you’re using is &lt;em&gt;at least 2 weeks old&lt;/em&gt; (my personal sweet spot is &lt;strong&gt;1 month&lt;/strong&gt;). Fresh numbers scream “bot” and get slapped with bans faster than you can say “Oops.”  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Keep It Active:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use a number that’s &lt;strong&gt;actively used for daily interactions&lt;/strong&gt;. Dormant numbers are red flags. WhatsApp loves activity—so give it what it wants.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API Etiquette:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use the REST API wisely. Don’t bombard the server with endless requests. Space them out, be patient, and &lt;em&gt;don’t whine&lt;/em&gt; when things don’t go your way.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No Spam, Ever:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This can’t be stressed enough. &lt;strong&gt;Avoid spam like the plague.&lt;/strong&gt; It’s not just annoying—it’s a one-way ticket to Bannedville.  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Remember:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This isn’t about gaming the system—it’s about working smarter. Play by the rules, and &lt;strong&gt;Whatsback Web&lt;/strong&gt; will be your best friend. Break them, and well… good luck explaining to your boss why your WhatsApp account got nuked.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Stay smart,&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;darkterminal&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;The guy who’s been there, done that, and lived to tell the tale.&lt;/em&gt;  &lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Disclaimer: Follow these tips, or prepare to face the consequences. Your call.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>api</category>
      <category>programming</category>
    </item>
    <item>
      <title>Did you know about this?</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Fri, 21 Feb 2025 17:18:24 +0000</pubDate>
      <link>https://dev.to/darkterminal/did-you-know-about-this-4mh8</link>
      <guid>https://dev.to/darkterminal/did-you-know-about-this-4mh8</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0" class="crayons-story__hidden-navigation-link"&gt;Why I Built Whatsback Web—And Why It’s Different From Other Tools&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/darkterminal" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F136120%2Fed7babf2-9a8d-4438-86ca-ade82955f85e.png" alt="darkterminal profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/darkterminal" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Imam Ali Mustofa
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Imam Ali Mustofa
                
                
              
              &lt;div id="story-author-preview-content-2290682" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/darkterminal" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F136120%2Fed7babf2-9a8d-4438-86ca-ade82955f85e.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Imam Ali Mustofa&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 21 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0" id="article-link-2290682"&gt;
          Why I Built Whatsback Web—And Why It’s Different From Other Tools
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/automation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;automation&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/whatsapp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;whatsapp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>automation</category>
      <category>whatsapp</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why I Built Whatsback Web—And Why It’s Different From Other Tools</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Fri, 21 Feb 2025 04:11:11 +0000</pubDate>
      <link>https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0</link>
      <guid>https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0</guid>
      <description>&lt;p&gt;I built &lt;strong&gt;Whatsback Web&lt;/strong&gt; out of frustration—frustration with endless WhatsApp notifications, manual reports, and missed deadlines. As a Software Freestyle Engineer, I needed a way to automate routine tasks like sending daily updates, rotating team passwords, and managing group announcements without being tied to expensive platforms or complex coding. Other solutions demanded steep subscriptions, locked me into proprietary systems, or required technical know-how I simply didn’t have time to master (too lazy). That’s when I decided: &lt;em&gt;why not build my own tool and share it with everyone?&lt;/em&gt; (look very kind and nice idea!)&lt;/p&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%2Fnay7xaunyscjs2gbj5rf.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%2Fnay7xaunyscjs2gbj5rf.png" alt="Whatsback Image 1" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Breaking Point: “There Has to Be a Better Way”
&lt;/h3&gt;

&lt;p&gt;Every day, my workflow looked like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manually forwarding &lt;strong&gt;booking forms&lt;/strong&gt; from clients.&lt;/li&gt;
&lt;li&gt;Copy-pasting &lt;strong&gt;daily reports&lt;/strong&gt; into multiple group chats.&lt;/li&gt;
&lt;li&gt;Resetting &lt;strong&gt;weekly passwords&lt;/strong&gt; for team accounts (and praying I didn’t forget).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wasn’t alone. Many businesses, freelancers, and community admins face the same chaos. In my search for solutions, I found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise tools&lt;/strong&gt; (like Twilio’s API): Powerful, yet expensive and code-heavy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No-code platforms&lt;/strong&gt; (such as WATI or Chatfuel): User-friendly, but their subscription fees quickly add up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DIY scripts&lt;/strong&gt;: Customizable but time-consuming to maintain and fragile against WhatsApp updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I asked myself: &lt;em&gt;What if there was a free, open-source backend that anyone could adapt—no strings attached?&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Building Whatsback Web: A Tool for Myself (and You)
&lt;/h3&gt;

&lt;p&gt;I’m building Whatsback Web with whatsapp-web.js—a robust library that allows me to interact seamlessly with WhatsApp Web. This lets me harness powerful automation features without reinventing the wheel. I built Whatsback Web around three core principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple-Straightforward UI&lt;/strong&gt;: Let User find and configure they needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complete Ownership&lt;/strong&gt;: Host it yourself, control your data, and avoid vendor lock-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Cost&lt;/strong&gt;: Free forever, with no hidden fees or tiered pricing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For instance, I automated my team’s &lt;strong&gt;weekly password rotations&lt;/strong&gt; by connecting Whatsback API (built-in) that integrated into another application script. &lt;strong&gt;Booking forms&lt;/strong&gt; now &lt;em&gt;auto-forward&lt;/em&gt; to responsible accounts, and &lt;strong&gt;scheduled group announcements&lt;/strong&gt; go out—even if I’m offline. It’s like having a personal assistant that works 24/7 without costing a dime.&lt;/p&gt;




&lt;h3&gt;
  
  
  How It Stacks Up Against Other Tools
&lt;/h3&gt;

&lt;p&gt;Here’s a practical comparison:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Whatsback Web&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Twilio API&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;WATI / Chatfuel&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free (self-hosted)&lt;/td&gt;
&lt;td&gt;Pay-per-message + API fees&lt;/td&gt;
&lt;td&gt;Monthly subscription&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Customization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full control (open-source)&lt;/td&gt;
&lt;td&gt;Requires coding&lt;/td&gt;
&lt;td&gt;Limited by platform features&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Ownership&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Your server, your rules&lt;/td&gt;
&lt;td&gt;Third-party servers&lt;/td&gt;
&lt;td&gt;Third-party servers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ease of Setup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic tech skills needed&lt;/td&gt;
&lt;td&gt;Developer expertise needed&lt;/td&gt;
&lt;td&gt;Drag-and-drop interface&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The trade-off?&lt;/strong&gt; Whatsback Web might not be as flashy as some paid tools, but it’s infinitely adaptable. Need to integrate with a niche app? You can do it. Concerned about privacy? Host it on your own hardware. It’s a toolkit designed to empower you, not a black box that dictates your workflow.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why I Open-Sourced It (And Why That Matters)
&lt;/h3&gt;

&lt;p&gt;I chose to open-source Whatsback Web for two key reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Community-Driven Innovation&lt;/strong&gt;: Open-source projects thrive on collaboration. Developers can improve security, add integrations, or fix bugs that I might overlook.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: With no hidden trackers or data harvesting, you can review and audit the code yourself. Trust comes from openness.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There’s also a personal side: sharing this project has connected me with developers around the globe, inspiring innovative use cases—like nonprofits using it to coordinate disaster relief updates.&lt;/p&gt;




&lt;h3&gt;
  
  
  Your Turn: Automate Without Limits
&lt;/h3&gt;

&lt;p&gt;Whatsback Web isn’t about being “the best” tool on the market—it’s about being the &lt;strong&gt;most flexible&lt;/strong&gt;. It’s perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small businesses tired of paying for unnecessary features.&lt;/li&gt;
&lt;li&gt;Tech-curious users eager to explore self-hosted solutions.&lt;/li&gt;
&lt;li&gt;Developers looking for a customizable foundation to build upon.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’ve ever thought, “I wish WhatsApp could just &lt;em&gt;do this&lt;/em&gt;,” then Whatsback Web is the tool for you. No permissions, no barriers—just endless possibilities.&lt;/p&gt;




&lt;h3&gt;
  
  
  Support the Project
&lt;/h3&gt;

&lt;p&gt;If you find Whatsback Web valuable, consider supporting its ongoing development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Worldwide&lt;/strong&gt;: &lt;a href="https://github.com/sponsors/darkterminal" rel="noopener noreferrer"&gt;GitHub Sponsors&lt;/a&gt; (darkterminal)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indonesian Supporters&lt;/strong&gt;: &lt;a href="https://saweria.co/darkterminal" rel="noopener noreferrer"&gt;Saweria&lt;/a&gt; (darkterminal)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your contributions help fuel new features, continuous improvements, and a vibrant community of contributors.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Ready to take control?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/darkterminal/whatsback-web" rel="noopener noreferrer"&gt;Grab the code on GitHub&lt;/a&gt; and make it your own.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;— A man who wanted fewer notifications and more sleep&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;P.S. This isn’t a “launch”—it’s an invitation to build something better, together.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>automation</category>
      <category>whatsapp</category>
      <category>opensource</category>
    </item>
    <item>
      <title>From Express to Laravel: My Journey of Rewriting a 5-Year-Old REST API (and Surviving the Chaos)</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Sun, 26 Jan 2025 05:06:08 +0000</pubDate>
      <link>https://dev.to/darkterminal/from-express-to-laravel-my-journey-of-rewriting-a-5-year-old-rest-api-and-surviving-the-chaos-3da7</link>
      <guid>https://dev.to/darkterminal/from-express-to-laravel-my-journey-of-rewriting-a-5-year-old-rest-api-and-surviving-the-chaos-3da7</guid>
      <description>&lt;p&gt;If you’ve ever been handed the task of rewriting a legacy system, you know &lt;em&gt;it’s like being asked to rebuild a plane while it’s still in the air&lt;/em&gt;. For the past four days, I’ve been knee-deep in the trenches, converting a 5-year-old Express REST API into a shiny new Laravel 11 REST API. And let me tell you—it’s been a wild ride.&lt;/p&gt;

&lt;h3&gt;
  
  
  Starting with the Hard Things First
&lt;/h3&gt;

&lt;p&gt;As &lt;strong&gt;Taylor Otwell&lt;/strong&gt;, the creator of Laravel, wisely said, &lt;em&gt;“Start with the hard things first!”&lt;/em&gt; And boy, did I take that advice to heart. The first hurdle? Creating &lt;strong&gt;64 table schemas&lt;/strong&gt; in Laravel from an existing database. If that doesn’t sound like a nightmare, you’ve probably never had to manually map out decades of database decisions made by someone who clearly didn’t believe in documentation.&lt;/p&gt;

&lt;p&gt;It was a pain in the ass, but oddly satisfying. There’s something therapeutic about taking chaos and turning it into order. And thanks to my new assistant, &lt;em&gt;Deepseek AI&lt;/em&gt;, the process felt a little less like pulling teeth and a little more like solving a puzzle.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Real Challenge: Controllers and Models
&lt;/h3&gt;

&lt;p&gt;Now that the database schemas are done, the next mountain to climb is converting all the controllers and models from Express to Laravel. If you’ve ever worked with both frameworks, you know they’re like two different languages—Express is the wild west, and Laravel is the well-organized city with traffic lights and sidewalks.&lt;/p&gt;

&lt;p&gt;This part is going to be intense. But hey, if I survived creating 64 table schemas, &lt;em&gt;I can survive this too, right?&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Fun Part: Backup Script Magic
&lt;/h3&gt;

&lt;p&gt;Amidst all the chaos, there’s been one bright spot: converting the Backup Script from native PHP to Laravel. This little gem takes a database dump, transforms it into an image, and stores it in &lt;em&gt;Cloudflare R2 Object Storage&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Why? Because I’m a poor man. Let’s be real—Cloudflare’s 10GB of free storage isn’t exactly a bottomless pit. So, I had to get creative. By minimizing the size of the database dumps, I can stretch that 10GB as far as possible. It’s like playing Tetris with data, and honestly, it’s been the most enjoyable part of this whole process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lessons Learned (So Far)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with the hard things.&lt;/strong&gt; It’s tempting to tackle the easy tasks first, but getting the tough stuff out of the way early makes the rest of the project feel like a downhill sprint.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document everything.&lt;/strong&gt; If you’re working with a legacy system, chances are the original developers didn’t leave you much to work with. Don’t make the same mistake—document your process as you go.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage AI tools.&lt;/strong&gt; Tools like Deepseek AI have been a game-changer for me. They don’t replace the need for human intuition, but they sure make the grind a lot easier.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Celebrate the small wins.&lt;/strong&gt; Whether it’s successfully converting a backup script or finally getting that one stubborn table schema to work, take a moment to appreciate your progress.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What’s Next?
&lt;/h3&gt;

&lt;p&gt;The journey isn’t over yet. Converting the controllers and models is going to be a beast, but I’m ready for it. And who knows? Maybe by the end of this, I’ll have a few more war stories to share.&lt;/p&gt;

&lt;p&gt;If you’ve ever gone through a similar rewrite, I’d love to hear about your experience. And if you’re just starting one, buckle up—it’s going to be a bumpy ride, but it’s worth it.&lt;/p&gt;

&lt;p&gt;Until next time, happy dancing!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What’s the most challenging rewrite or migration project you’ve tackled? Let me know in the comments below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>laravel</category>
      <category>php</category>
    </item>
    <item>
      <title>Lil Story about libSQL Extension in PHP</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Sat, 25 Jan 2025 05:31:03 +0000</pubDate>
      <link>https://dev.to/darkterminal/lil-story-about-libsql-extension-in-php-4757</link>
      <guid>https://dev.to/darkterminal/lil-story-about-libsql-extension-in-php-4757</guid>
      <description>&lt;p&gt;&lt;strong&gt;Who's the Creator of the libSQL Extension in PHP? Spoiler: It's Me!&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Let me share a quick story. The other day, someone messaged me on social media. They sent a screenshot asking, &lt;em&gt;“Who’s the creator of the libSQL extension in PHP?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Well, guess what? &lt;strong&gt;It’s me.&lt;/strong&gt;&lt;/p&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%2F17yz0crfcl6ffm2cdqqx.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%2F17yz0crfcl6ffm2cdqqx.png" alt="screenshot" width="598" height="918"&gt;&lt;/a&gt;   &lt;/p&gt;

&lt;p&gt;Yep, &lt;em&gt;me&lt;/em&gt;. The same person who talks about libSQL and &lt;strong&gt;&lt;a href="https://turso.tech" rel="noopener noreferrer"&gt;Turso Database&lt;/a&gt;&lt;/strong&gt; everywhere. Why not? It's my work (even though I'm not Turso Internal). If that sounds a bit full of myself, I’ll admit it. That’s just how I roll.  &lt;/p&gt;

&lt;p&gt;Now, about this &lt;strong&gt;Software Freestyle Engineer (SFE)&lt;/strong&gt; title. Sounds fancy, right? But really, it’s a bit of a joke. I mean, it’s true, but still a joke. I don’t fit into the typical mold. I’m the guy who bends the rules, writes some code, and laughs about it later.  &lt;/p&gt;

&lt;p&gt;Being an SFE is all about embracing the wild side. It takes guts to try what others won't. And sure, I like to think I make it look easy. I’m not here to follow the crowd—I’m here to change the game.  &lt;/p&gt;

&lt;p&gt;So, when people ask about the &lt;strong&gt;libSQL extension&lt;/strong&gt;, I don’t just give them a boring answer. I show them &lt;em&gt;me&lt;/em&gt;. This extension wouldn't exist without my mix of boldness and a bit of charm. I’m someone who takes risks, makes mistakes, and then shares it online.  &lt;/p&gt;

&lt;p&gt;So there you have it. If you've wondered who's behind the &lt;strong&gt;libSQL extension in PHP&lt;/strong&gt;, it's me. The SFE. A mix of humor and smarts. The one who makes things happen.  &lt;/p&gt;

&lt;p&gt;Honestly? I wouldn’t change a thing.  &lt;/p&gt;

&lt;p&gt;Catch you later, folks!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/darkterminal" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;☕️ Support My Work at GitHub&lt;/a&gt;
&lt;/p&gt;





&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tursodatabase" rel="noopener noreferrer"&gt;
        tursodatabase
      &lt;/a&gt; / &lt;a href="https://github.com/tursodatabase/turso-client-php" rel="noopener noreferrer"&gt;
        turso-client-php
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Turso + PHP - libSQL Extension for PHP (Community SDK)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/3dc2b9e139af9e14bce953bb7aa0d191589827f4eaeff3dcc09f3bdc2280ec4a/68747470733a2f2f692e696d6775722e636f6d2f7a525666574c332e706e67"&gt;&lt;img alt="Turso + PHP" src="https://camo.githubusercontent.com/3dc2b9e139af9e14bce953bb7aa0d191589827f4eaeff3dcc09f3bdc2280ec4a/68747470733a2f2f692e696d6775722e636f6d2f7a525666574c332e706e67" width="800"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Turso Client PHP&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;
  A community-driven PHP SDK for &lt;a href="https://turso.tech/libsql" rel="nofollow noopener noreferrer"&gt;libSQL&lt;/a&gt; — the SQLite fork designed for the edge, replication, and production workloads
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/tursodatabase/turso-client-php/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d00cb6cac171394e1a621877a96696a46eaa66781a2a11941a848203f0a2f1e1/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f747572736f64617461626173652f747572736f2d636c69656e742d7068703f636f6c6f723d303163336230" alt="MIT License"&gt;&lt;/a&gt;
  &lt;a href="https://tur.so/discord-php" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/475c230b6b66877fe70e64cf2b8f7ddaf2b17bebb6558363872e19715d142c2d/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f3933333037313136323638303935383938363f636f6c6f723d303163336230" alt="Discord"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/tursodatabase/turso-client-php#contributors" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/86d9f3e83626aaabcea731107e44a61c8bc4040fe05d065d8f3e0d979fb16261/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f747572736f64617461626173652f747572736f2d636c69656e742d7068703f636f6c6f723d303163336230" alt="Contributors"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/tursodatabase/turso-client-php/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5278bdc1ee0442a06f3a7dc63a35a5b3474485706545b8740a77b1822a2c095f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f646f776e6c6f6164732f747572736f64617461626173652f747572736f2d636c69656e742d7068702f746f74616c2e7376673f636f6c6f723d303163336230" alt="Downloads"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/tursodatabase/turso-client-php/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/57c37f237a371323f223adf778a74d70522ca1c2f2a6a79cba69c852078c48e2/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f747572736f64617461626173652f747572736f2d636c69656e742d7068703f636f6c6f723d303163336230" alt="Release"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;turso-client-php&lt;/strong&gt; (libSQL Extension) brings the power of &lt;a href="https://turso.tech/libsql" rel="nofollow noopener noreferrer"&gt;libSQL&lt;/a&gt; to PHP applications. It’s more than just SQLite — with built-in support for &lt;strong&gt;remote connections, replicas, sync, offline writes, and transactions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;✨ Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚀 Works with &lt;strong&gt;SQLite&lt;/strong&gt; and &lt;strong&gt;libSQL&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🔌 Multiple connection modes
&lt;ul&gt;
&lt;li&gt;local&lt;/li&gt;
&lt;li&gt;in-memory&lt;/li&gt;
&lt;li&gt;remote&lt;/li&gt;
&lt;li&gt;remote replica&lt;/li&gt;
&lt;li&gt;offline-writes also support for libsql-server (sqld)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;🔒 Transactions, prepared statements, and batch execution&lt;/li&gt;

&lt;li&gt;🐘 Native PHP extension built in &lt;strong&gt;Rust&lt;/strong&gt; for speed&lt;/li&gt;

&lt;li&gt;🐳 Easy setup with &lt;code&gt;turso-php-installer&lt;/code&gt;
&lt;/li&gt;

&lt;/ul&gt;
&lt;br&gt;


&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Supported Versions&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;PHP Versions&lt;/th&gt;

&lt;th&gt;Build Versions&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;8.1&lt;/td&gt;

&lt;td&gt;TS / NTS&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;8.2&lt;/td&gt;

&lt;td&gt;TS / NTS&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;8.3&lt;/td&gt;

&lt;td&gt;TS / NTS&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;8.4&lt;/td&gt;

&lt;td&gt;TS / NTS&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;8.5&lt;/td&gt;

&lt;td&gt;TS / NTS&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TS&lt;/strong&gt; = Thread Safe, &lt;strong&gt;NTS&lt;/strong&gt; = Non Thread Safe&lt;br&gt;
✅ Supported on Linux, macOS, Windows, WSL&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick Start&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-text-html-php notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="pl-s1"&gt;&lt;span class="pl-c1"&gt;$&lt;/span&gt;libsql&lt;/span&gt; = &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;LibSQL&lt;/span&gt;(&lt;span class="pl-s"&gt;"&lt;span class="pl-s"&gt;file:example.db&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/tursodatabase/turso-client-php" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>php</category>
      <category>laravel</category>
      <category>database</category>
    </item>
    <item>
      <title>Seeking Support for Something Useful</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Thu, 23 Jan 2025 21:32:45 +0000</pubDate>
      <link>https://dev.to/darkterminal/seeking-support-for-something-useful-4ile</link>
      <guid>https://dev.to/darkterminal/seeking-support-for-something-useful-4ile</guid>
      <description>&lt;p&gt;Hello Punk, I am back!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;After gaining significant attention and a glimmer of hope, the clouds slowly began to roll in.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Thought
&lt;/h2&gt;

&lt;p&gt;As a Full-time Open Source contributor, this &lt;em&gt;is not just a hobby&lt;/em&gt;. What I do is a passion that I continue to learn and grow in every day. Although I am not an expert and do not know everything, I have mastered the skills I possess. I choose not to be a 'Swiss Army knife' but instead to keep learning, sharpening myself, and dreaming of becoming a "Samurai".&lt;/p&gt;

&lt;p&gt;Indeed, sometimes my &lt;em&gt;Sufistic&lt;/em&gt; side fortifies (not hinders) my mind from being consumed by the pursuit of wealth, because I believe that God is neither foolish nor neglectful toward His creations. That is why I always strive to do things not solely based on 'money,' but rather on &lt;strong&gt;personal fulfillment&lt;/strong&gt;, knowing that what I have done can be useful and beneficial to others.&lt;/p&gt;

&lt;p&gt;For 10 years, I have been immersed in the world of programming, and for the past 6 years, I have lived with my small family, including a beautiful daughter who has become the energy and inspiration for my freestyle approach to everything. They (my wife and daughter) are the best and strongest people I have in my life.&lt;/p&gt;

&lt;p&gt;Choosing to be a Full-time Open Source contributor in Indonesia is considered a 'CRAZY' decision. Unlike in other countries, where knowledge and creative work are valued appropriately, I am constrained by my own &lt;em&gt;Sufistic&lt;/em&gt; mindset. I cannot resist the magic of one simple word that can come from someone's mouth: 'Thank you.' This often creates ambiguity when it clashes with financial realities. Yes, this is the irony I face.&lt;/p&gt;

&lt;p&gt;But once again, it all comes back to God, the All-Knowing and the All-Providing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Idea
&lt;/h2&gt;

&lt;p&gt;This year, I am going to create something big, and it will undoubtedly require a lot of time, energy, and thought. Since this idea is still being developed and will later be revealed to the public, you can try to guess for now what it might be. As a clue, you can check out my &lt;a href="https://github.com/darkterminal" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; profile. From there, you’ll get an idea of what I’m likely working on—everything is interconnected between what’s on my GitHub and the news surrounding it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Support
&lt;/h2&gt;

&lt;p&gt;If you appreciate someone 'crazy' like me, who supports their family through the passion I have, you can support what I do on &lt;a href="https://github.com/darkterminal" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. It would mean the world to me, as there are no words to fully express my gratitude and appreciation for those who use the tools I’ve created over the years.&lt;/p&gt;

&lt;p&gt;See you...&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>sponsor</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Turso libSQL Installer</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Sat, 22 Jun 2024 20:10:03 +0000</pubDate>
      <link>https://dev.to/darkterminal/turso-libsql-installer-29mj</link>
      <guid>https://dev.to/darkterminal/turso-libsql-installer-29mj</guid>
      <description>&lt;p&gt;Hello Punk! Yes I am, in this journal I want to share with you how to install &lt;a href="//turso.tech/libsql"&gt;libSQL&lt;/a&gt; in your PHP Environment without worry to configure &lt;code&gt;php.ini&lt;/code&gt; file in your current PHP Version.&lt;/p&gt;

&lt;p&gt;Install the libSQL extension for PHP it's like install a composer package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require vendor/package
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to install libSQL extension for PHP&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;turso-php-installer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fnifadv8ox1kkpo7yu211.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%2Fnifadv8ox1kkpo7yu211.png" alt="Turso PHP Installer" width="701" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anyway... I want you to know how the punk'in single file installer script work and setup it for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;help&lt;/code&gt; command
&lt;/h2&gt;

&lt;p&gt;You already see in the image above. That's the &lt;code&gt;help&lt;/code&gt; command does.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;install&lt;/code&gt; command
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;install&lt;/code&gt; command will do some necessary checks before installing the libSQL Extension for PHP, what a questions will ask for? (checking in the background)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are You Using Windows?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even though &lt;a href="https://github.com/tursodatabase/turso-client-php" rel="noopener noreferrer"&gt;Turso Client PHP&lt;/a&gt; has an extension built for Windows MSVC 2022. However, the installation process using this installer script will not work for Windows. WSL will work or you can use &lt;a href="https://github.com/darkterminal/turso-docker-php" rel="noopener noreferrer"&gt;Turso Docker PHP&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;If you're using Windows then you will get this message:&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="o"&gt;&amp;gt;&lt;/span&gt; turso-php-installer &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="c"&gt;# In Windows&lt;/span&gt;
Sorry, Turso PHP Installer is only support &lt;span class="k"&gt;for &lt;/span&gt;Linux and MacOS.

You are using Windows, you can try our alternative using Dev Containers
visit: https://github.com/darkterminal/turso-docker-php

Thank you!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Are You Using Laravel Herd?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dang yeah... the installer is not support yet for Laravel Herd. But I will support soon, and you can follow up this discussion on &lt;a href="https://github.com/beyondcode/herd-community/discussions/804" rel="noopener noreferrer"&gt;Herd Community GitHub Disccussion&lt;/a&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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;You are using Laravel Herd
Sorry, Laravel Herd is not supported yet.
You can try our alternative using Dev Containers
visit: https://github.com/darkterminal/turso-docker-php

Thank you!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Is Already Installed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes I forgot when it's already 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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;Turso Client PHP is already installed and configured!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Which PHP Version?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Turso Client PHP / libSQL Extension for PHP need minimal PHP 8.0 and later. You see it at &lt;a href="https://github.com/tursodatabase/turso-client-php/releases" rel="noopener noreferrer"&gt;Turso Client PHP - Release page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have PHP below the minimum requirement, then it will failed&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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;Oops! Your PHP version environment does not meet the requirements.
Need a minimal PHP 8.0 installed on your environment.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check &lt;code&gt;php.ini&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The installer script need to lookup&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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;You don&lt;span class="s1"&gt;'t have PHP install globaly in your environment
Turso Client PHP lookup php.ini file and it'&lt;/span&gt;s not found
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check The Functions Requiered&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The installer script also need a &lt;code&gt;shell_exec&lt;/code&gt; and &lt;code&gt;curl&lt;/code&gt; function&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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;It looks like the &lt;span class="s1"&gt;'shell_exec'&lt;/span&gt; and &lt;span class="s1"&gt;'curl_version'&lt;/span&gt; functions are disabled &lt;span class="k"&gt;in &lt;/span&gt;your PHP environment. These functions are essential &lt;span class="k"&gt;for &lt;/span&gt;this script to work properly.
To &lt;span class="nb"&gt;enable &lt;/span&gt;them, follow these steps:
1. Open your &lt;span class="s1"&gt;'php.ini'&lt;/span&gt; file. You can find the location of your &lt;span class="s1"&gt;'php.ini'&lt;/span&gt; file by running the &lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="s1"&gt;'php --ini'&lt;/span&gt; &lt;span class="k"&gt;in &lt;/span&gt;your terminal or &lt;span class="nb"&gt;command &lt;/span&gt;prompt.
2. Search &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="s1"&gt;'disable_functions'&lt;/span&gt; directive. It might look something like this:
disable_functions &lt;span class="o"&gt;=&lt;/span&gt; shell_exec, curl_version
3. Remove &lt;span class="s1"&gt;'shell_exec'&lt;/span&gt; and &lt;span class="s1"&gt;'curl_version'&lt;/span&gt; from this list. It should look like:
disable_functions &lt;span class="o"&gt;=&lt;/span&gt;
4. Save the &lt;span class="s1"&gt;'php.ini'&lt;/span&gt; file.
5. Restart your web server &lt;span class="k"&gt;for &lt;/span&gt;the changes to take effect. If you are using Apache, you can restart it with:
&lt;span class="nb"&gt;sudo &lt;/span&gt;service apache2 restart
or &lt;span class="k"&gt;for &lt;/span&gt;Nginx:
&lt;span class="nb"&gt;sudo &lt;/span&gt;service nginx restart
If you are using a web hosting service, you might need to contact your hosting provider to &lt;span class="nb"&gt;enable &lt;/span&gt;these functions &lt;span class="k"&gt;for &lt;/span&gt;you.
For more information on &lt;span class="s1"&gt;'shell_exec'&lt;/span&gt;, visit: https://www.php.net/manual/en/function.shell-exec.php
For more information on &lt;span class="s1"&gt;'curl_version'&lt;/span&gt;, visit: https://www.php.net/manual/en/function.curl-version.php
Thank you!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Asking Permission&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The installer need to run with &lt;strong&gt;sudo&lt;/strong&gt; role, because the installer will need to write &lt;code&gt;php.ini&lt;/code&gt; file in your environment.&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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;Turso need to &lt;span class="nb"&gt;install &lt;/span&gt;the client extension &lt;span class="k"&gt;in &lt;/span&gt;your PHP environment.
This script will ask your &lt;span class="nb"&gt;sudo &lt;/span&gt;password to modify your php.ini file:
Are you ok? &lt;span class="o"&gt;[&lt;/span&gt;y/N]: 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Download and Extract&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After all requirements is meet, then installer will download and extract the libSQL Extension for PHP based on Current PHP version that used in your environment and store it at &lt;code&gt;$HOME/.turso-client-php&lt;/code&gt;&lt;/p&gt;




&lt;p&gt;The extension is required before you used &lt;a href="https://github.com/tursodatabase/turso-driver-laravel" rel="noopener noreferrer"&gt;Turso Driver Laravel&lt;/a&gt; and &lt;a href="https://github.com/tursodatabase/turso-doctrine-dbal" rel="noopener noreferrer"&gt;Turso Doctrine DBAL&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>database</category>
      <category>php</category>
      <category>laravel</category>
    </item>
  </channel>
</rss>
