<?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>Forem: Levsky</title>
    <description>The latest articles on Forem by Levsky (@levskiy).</description>
    <link>https://forem.com/levskiy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3403396%2F11bf75c2-62a0-4ce9-be1c-107f7bbf6b96.jpg</url>
      <title>Forem: Levsky</title>
      <link>https://forem.com/levskiy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/levskiy"/>
    <language>en</language>
    <item>
      <title>Take beautiful screenshots instantly on Mac</title>
      <dc:creator>Levsky</dc:creator>
      <pubDate>Wed, 11 Feb 2026 20:20:04 +0000</pubDate>
      <link>https://forem.com/levskiy/take-beautiful-screenshots-instantly-on-mac-3m3b</link>
      <guid>https://forem.com/levskiy/take-beautiful-screenshots-instantly-on-mac-3m3b</guid>
      <description>&lt;p&gt;Hey everyone! 👋&lt;/p&gt;

&lt;p&gt;I’ve been working on a small utility called &lt;strong&gt;Skreen[me]&lt;/strong&gt; for a while now. It’s a native macOS app for taking screenshots and making quick annotations.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Why"
&lt;/h3&gt;

&lt;p&gt;I was looking for a tool that is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; No Electron, no heavy resource usage.&lt;/li&gt;
&lt;li&gt; Clean UI (Mac-like experience).&lt;/li&gt;
&lt;li&gt; Subscription-free (I just wanted to take a screenshot, not marry the app).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I couldn't find exactly what I wanted, so I decided to build it myself using Swift and SwiftUI.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does currently:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Instant Capture: Fast screenshots.&lt;/li&gt;
&lt;li&gt;Annotations: Arrows, text, shapes, and easy step counters.&lt;/li&gt;
&lt;li&gt;Privacy Blur: Quickly hide sensitive data like API keys, emails, or faces.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Is it Open Source?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;No.&lt;/strong&gt; Currently, it is a free utility (freeware), but the source code is closed. I built it for fun to solve my own problem, and I'm sharing the build for free for anyone who needs it.&lt;/p&gt;

&lt;h3&gt;
  
  
  I need your feedback!
&lt;/h3&gt;

&lt;p&gt;I'm releasing this as a free beta, and I'm really curious what you guys think about the UI/UX.&lt;/p&gt;

&lt;p&gt;Check it out here:&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://github.com/levskiy0/skreenme" rel="noopener noreferrer"&gt;Download on GitHub (Releases)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me know in the comments what you think!&lt;/p&gt;

&lt;p&gt;Thank you!&lt;/p&gt;

</description>
      <category>macos</category>
      <category>buildinpublic</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Stop Containerizing Your 50-Line Scripts</title>
      <dc:creator>Levsky</dc:creator>
      <pubDate>Thu, 25 Dec 2025 10:00:49 +0000</pubDate>
      <link>https://forem.com/levskiy/stop-containerizing-your-50-line-scripts-ak2</link>
      <guid>https://forem.com/levskiy/stop-containerizing-your-50-line-scripts-ak2</guid>
      <description>&lt;h1&gt;
  
  
  Stop Wrapping 50 Lines of Code in a 500MB Container: Why I Built M3M
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;We’ve all been there.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You need to deploy a simple webhook handler. It’s maybe 50 lines of code. You open your editor, write the logic in 15 minutes, and then the &lt;em&gt;real&lt;/em&gt; work begins:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a &lt;code&gt;Dockerfile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set up &lt;code&gt;docker-compose.yml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Pull a 500MB Node.js base image.&lt;/li&gt;
&lt;li&gt;Wait for &lt;code&gt;npm install&lt;/code&gt; to finish.&lt;/li&gt;
&lt;li&gt;Configure environment variables.&lt;/li&gt;
&lt;li&gt;Set up a reverse proxy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;All of this for 50 lines of code?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I got tired of it. My $5 VPS was bloating with container layers. Every micro-task I deployed ran in its own isolated Node.js process, eating up RAM I didn't have. Updating a single line of code felt like a deployment ritual.&lt;/p&gt;

&lt;p&gt;I wanted to write code, hit "Save", and have it run. No build steps, no containers, no overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, I built &lt;a href="https://github.com/levskiy0/m3m.git" rel="noopener noreferrer"&gt;M3M&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What is M3M?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;M3M (Mini Services Manager)&lt;/strong&gt; is a single Go binary that acts as a private runtime for your JavaScript services.&lt;/p&gt;

&lt;p&gt;Think of it as a lightweight application server. You don't need containers. You don't need &lt;code&gt;package.json&lt;/code&gt;. You don't get stuck in npm dependency hell. It’s designed specifically to run the small utility scripts that power your infrastructure without &lt;em&gt;becoming&lt;/em&gt; the infrastructure itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Show Me the Code
&lt;/h2&gt;

&lt;p&gt;Here is a complete, working service. It has an API endpoint, database persistence, and a scheduled background task.&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="nx"&gt;$service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;boot&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$database&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// 1. HTTP Endpoint&lt;/span&gt;
  &lt;span class="nx"&gt;$router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&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;span class="nx"&gt;$router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// 2. Cron Task (Runs every hour)&lt;/span&gt;
  &lt;span class="nx"&gt;$schedule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1h&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;$logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Total users:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&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;span class="nx"&gt;$service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;$logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Service is ready!&lt;/span&gt;&lt;span class="dl"&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;p&gt;&lt;strong&gt;That's it.&lt;/strong&gt; No imports. No boilerplate. You write this in the browser-based UI, hit Save, and it’s live.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Batteries Included" (No npm required)
&lt;/h2&gt;

&lt;p&gt;One of my main goals was to avoid &lt;code&gt;npm install&lt;/code&gt;. M3M exposes a powerful standard library via the &lt;code&gt;$&lt;/code&gt; prefix. Everything you typically need for micro-services is already there:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Modules&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;$service&lt;/code&gt;, &lt;code&gt;$router&lt;/code&gt;, &lt;code&gt;$schedule&lt;/code&gt;, &lt;code&gt;$logger&lt;/code&gt;, &lt;code&gt;$env&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;$database&lt;/code&gt;, &lt;code&gt;$storage&lt;/code&gt;, &lt;code&gt;$goals&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;$http&lt;/code&gt;, &lt;code&gt;$mail&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Utils&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;$crypto&lt;/code&gt;, &lt;code&gt;$encoding&lt;/code&gt;, &lt;code&gt;$utils&lt;/code&gt;, &lt;code&gt;$validator&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Media&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;$image&lt;/code&gt;, &lt;code&gt;$draw&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1. Routing with Middleware
&lt;/h3&gt;

&lt;p&gt;Need authentication? It's just a function.&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="nx"&gt;$service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;boot&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Simple Auth Middleware&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;401&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Unauthorized&lt;/span&gt;&lt;span class="dl"&gt;'&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;span class="c1"&gt;// Protected routes&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/profile&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&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;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Built-in Database
&lt;/h3&gt;

&lt;p&gt;M3M includes a persistent document store with MongoDB-style syntax. No external DB required.&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$database&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Query with operators&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;popular&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;views&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;$gte&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;$contains&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;featured&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Update&lt;/span&gt;
&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_id&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;$inc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;views&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&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;h3&gt;
  
  
  3. Scheduling
&lt;/h3&gt;

&lt;p&gt;Forget &lt;code&gt;crontab&lt;/code&gt;. Handle your recurring tasks right alongside your API logic.&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="c1"&gt;// Simple interval&lt;/span&gt;
&lt;span class="nx"&gt;$schedule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5m&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;$logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Checking for updates...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Complex Cron expression (Every day at 9 AM)&lt;/span&gt;
&lt;span class="nx"&gt;$schedule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0 9 * * *&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;sendDailyReport&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;
  
  
  Performance That Makes Sense
&lt;/h2&gt;

&lt;p&gt;This is why I built it.&lt;/p&gt;

&lt;p&gt;M3M runs comfortably on a &lt;strong&gt;$5/month VPS&lt;/strong&gt; with 512MB RAM. I currently have &lt;strong&gt;20+ active services&lt;/strong&gt; running inside a single M3M instance.&lt;/p&gt;

&lt;p&gt;The entire binary (including the web UI) is ~30MB.&lt;br&gt;
Compare that to a typical Docker setup where &lt;em&gt;each&lt;/em&gt; Node.js container takes 100-200MB minimum.&lt;/p&gt;
&lt;h2&gt;
  
  
  AI Integration (Claude MCP)
&lt;/h2&gt;

&lt;p&gt;We live in the AI era, so I made sure M3M plays nice with LLMs. M3M includes an &lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt; server.&lt;/p&gt;

&lt;p&gt;If you use Claude Code, you can connect it directly to M3M:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;make build-mcp
claude mcp add m3m-api ./build/m3m-mcp

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can simply ask Claude:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Write me an M3M service that monitors a website and sends alerts via email when it's down"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude knows the M3M API context (&lt;code&gt;$http&lt;/code&gt;, &lt;code&gt;$mail&lt;/code&gt;, &lt;code&gt;$schedule&lt;/code&gt;) and will generate working code instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is this for?
&lt;/h2&gt;

&lt;p&gt;I didn't build M3M to replace Kubernetes or compete with AWS Lambda. I built it for practical developers who have better things to do than debug Docker networks.&lt;/p&gt;

&lt;p&gt;It shines for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Webhook handlers&lt;/strong&gt; (Stripe, GitHub, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram/Discord bots&lt;/strong&gt; (Self-hosted without the container tax)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal APIs&lt;/strong&gt; &amp;amp; Tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cron jobs&lt;/strong&gt; with a nice UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data scrapers&lt;/strong&gt; and ETL pipelines&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;If you're tired of the bloat, give it a try.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone&lt;/span&gt;
git clone https://github.com/levskiy0/m3m.git
&lt;span class="nb"&gt;cd &lt;/span&gt;m3m

&lt;span class="c"&gt;# Build (Go 1.24+ required)&lt;/span&gt;
make build

&lt;span class="c"&gt;# Create admin and run&lt;/span&gt;
./build/m3m new-admin admin@example.com yourpassword
./build/m3m serve

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Star the repo if you hate writing Dockerfiles as much as I do: &lt;strong&gt;&lt;a href="https://github.com/levskiy0/m3m.git" rel="noopener noreferrer"&gt;github.com/levskiy0/m3m&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>tooling</category>
      <category>javascript</category>
      <category>docker</category>
      <category>go</category>
    </item>
  </channel>
</rss>
