<?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: NaDerevo</title>
    <description>The latest articles on Forem by NaDerevo (@naderevo).</description>
    <link>https://forem.com/naderevo</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%2F3834147%2Fae73c335-fcb2-482a-b79c-30ff75a0fd8e.jpg</url>
      <title>Forem: NaDerevo</title>
      <link>https://forem.com/naderevo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/naderevo"/>
    <language>en</language>
    <item>
      <title>Why I Built My Own Site and Stopped Publishing Only on Other Platforms. The POSSE Principle</title>
      <dc:creator>NaDerevo</dc:creator>
      <pubDate>Thu, 02 Apr 2026 12:39:50 +0000</pubDate>
      <link>https://forem.com/naderevo/why-i-built-my-own-site-and-stopped-publishing-only-on-other-platforms-the-posse-principle-3pkg</link>
      <guid>https://forem.com/naderevo/why-i-built-my-own-site-and-stopped-publishing-only-on-other-platforms-the-posse-principle-3pkg</guid>
      <description>&lt;p&gt;At some point I started thinking: where does my content actually live? A post in Telegram lives on Telegram’s servers. An article on Habr lives on Habr’s servers. A thread on X lives with Elon. If tomorrow any of these platforms decides to change the rules, ban my account, or simply shuts down — I’ll be left with nothing.&lt;/p&gt;

&lt;p&gt;That’s when I came across a principle that the IndieWeb community has been promoting for many years. It’s called &lt;strong&gt;POSSE&lt;/strong&gt;. It sounds simple, but it completely changes how you think about publishing content.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is POSSE
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;POSSE&lt;/strong&gt; stands for &lt;strong&gt;Publish (on your) Own Site, Syndicate Elsewhere&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In plain terms: publish on your own site first, then spread it to other platforms.&lt;/p&gt;

&lt;p&gt;The idea is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You write a post and publish it on your own website — this becomes the canonical version.&lt;/li&gt;
&lt;li&gt;Then you distribute copies or links to third-party platforms — Habr, Telegram, X, Medium, whatever.&lt;/li&gt;
&lt;li&gt;Every copy links back to the original on your domain.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it. That’s the whole principle.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why you need it
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ownership of your content
&lt;/h3&gt;

&lt;p&gt;When you publish on someone else’s platform, the canonical URL belongs to them. Your content lives on their domain, under their rules and their Terms of Service. POSSE flips this around: the canonical URL lives on your domain. You own the entire publishing chain from start to finish.&lt;/p&gt;

&lt;h3&gt;
  
  
  Independence from third parties
&lt;/h3&gt;

&lt;p&gt;A platform can go down, ban your account, or change its algorithms. If your content only exists there, you’re completely dependent on them. With your own site, you can always publish, even if everything else is unavailable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Better search visibility
&lt;/h3&gt;

&lt;p&gt;Finding your public content through any search engine is much easier and more reliable when it lives on your own domain. Anyone who has tried to find their old tweet via X search knows how painful that can be.&lt;/p&gt;

&lt;h3&gt;
  
  
  Links to the original strengthen it
&lt;/h3&gt;

&lt;p&gt;When copies on other platforms link back to your original, several good things happen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discovery.&lt;/strong&gt; People on any platform can click through to the original and interact with it directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protection against copying.&lt;/strong&gt; If someone mindlessly copies your post, the link to the original travels with it. This works like “internet aikido” — other people’s copying actually promotes your original.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO.&lt;/strong&gt; Search engines see that multiple copies point to one source and rank the original higher.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Friends are more important than architecture
&lt;/h3&gt;

&lt;p&gt;Your readers are scattered across different places. Some are in Telegram, some on Habr, some use RSS. POSSE doesn’t force them to go anywhere — they can keep reading where they’re comfortable. But the canonical version is always on your site.&lt;/p&gt;

&lt;p&gt;The IndieWeb community puts it this way: “Friends are more important than federation.” You don’t have to wait for everyone to move to the perfect platform. Publish on your site and syndicate where your audience already is.&lt;/p&gt;




&lt;h2&gt;
  
  
  How POSSE is different from “just having a blog”
&lt;/h2&gt;

&lt;p&gt;POSSE is not just “start a blog.” Creating a blog and waiting for people to come doesn’t work. POSSE is active syndication: you publish on your site first, then deliberately bring the content to where the people are.&lt;/p&gt;

&lt;p&gt;And it’s not “install WordPress and you’re done.” The approach isn’t tied to any specific technology. You can use a static site built with Astro, Hugo, Next.js — anything. The important things are your own domain and canonical URLs.&lt;/p&gt;




&lt;h2&gt;
  
  
  The opposite approach: PESOS
&lt;/h2&gt;

&lt;p&gt;The opposite is called &lt;strong&gt;PESOS&lt;/strong&gt; — Publish Elsewhere, Syndicate (to your) Own Site. This is when you publish first on a third-party platform and only then copy it to your own site.&lt;/p&gt;

&lt;p&gt;The problem with PESOS: if the platform is down, you can’t publish. Your content first appears under someone else’s Terms of Service, and only later (maybe) ends up with you. The ownership chain is broken.&lt;/p&gt;

&lt;p&gt;POSSE solves this: the original is always with you, and the copies are wherever they need to be.&lt;/p&gt;




&lt;h2&gt;
  
  
  How it looks in practice
&lt;/h2&gt;

&lt;p&gt;Let’s say I’m writing an article. My POSSE workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I write and publish the article on my own website — it gets a canonical URL on my domain.&lt;/li&gt;
&lt;li&gt;I publish a version on Habr — with a link to the original.&lt;/li&gt;
&lt;li&gt;I make a post in my Telegram channel — with a link.&lt;/li&gt;
&lt;li&gt;I publish a thread or link on X — with a link.&lt;/li&gt;
&lt;li&gt;If there’s engagement on the platforms, I can pull reactions back to my site (this is called backfeed).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There’s one canonical version. There can be as many copies as you want. All of them point to the original.&lt;/p&gt;




&lt;h2&gt;
  
  
  My experience
&lt;/h2&gt;

&lt;p&gt;I created my own website specifically with this idea in mind. I wanted everything I write to have a permanent home — a place that doesn’t depend on decisions made by any platform. Articles, notes, projects — everything lives on my domain. Habr, Telegram, and other platforms become distribution channels that link back to the original.&lt;/p&gt;

&lt;p&gt;This doesn’t mean the platforms aren’t important. Habr is the community and discussions. Telegram is direct contact with readers. But if something changes tomorrow, my content isn’t going anywhere.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This material is based on the IndieWeb documentation: &lt;a href="https://indieweb.org/POSSE" rel="noopener noreferrer"&gt;IndieWeb POSSE&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Support
&lt;/h3&gt;

&lt;p&gt;If you want to support the author — subscribe to my &lt;a href="https://t.me/+EBXb0iZHMas2NzAy" rel="noopener noreferrer"&gt;Telegram channel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://naderevo.com/en/blog/posse-publish-on-your-own-site-syndicate-elsewhere/" rel="noopener noreferrer"&gt;Original&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>socialmedia</category>
      <category>webdev</category>
      <category>writing</category>
    </item>
    <item>
      <title>npm, March 31: RAT in Axios and Half a Million Lines of Claude Code on GitHub</title>
      <dc:creator>NaDerevo</dc:creator>
      <pubDate>Thu, 02 Apr 2026 07:35:47 +0000</pubDate>
      <link>https://forem.com/naderevo/npm-march-31-rat-in-axios-and-half-a-million-lines-of-claude-code-on-github-26k4</link>
      <guid>https://forem.com/naderevo/npm-march-31-rat-in-axios-and-half-a-million-lines-of-claude-code-on-github-26k4</guid>
      <description>&lt;p&gt;I wake up in the morning, open my feed — and right away, two incidents. Both about npm. Both serious. And both happened on the same day.&lt;/p&gt;

&lt;p&gt;The first one — in Axios (yes, the one that's everywhere) — spread a RAT trojan for three hours. The second — Anthropic accidentally published the full source code of Claude Code in a public npm package. Half a million lines with prompts and architecture.&lt;/p&gt;

&lt;p&gt;Good morning, indeed :)&lt;/p&gt;




&lt;h2&gt;
  
  
  Axios: 3 hours was more than enough
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What happened
&lt;/h3&gt;

&lt;p&gt;Someone hijacked the npm account of Jason Saayman (jasonsaayman) — the main maintainer of Axios. They changed the linked email and manually published two versions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"&lt;a href="mailto:axios@1.14.1"&gt;axios@1.14.1&lt;/a&gt;" — to the latest branch&lt;/li&gt;
&lt;li&gt;"&lt;a href="mailto:axios@0.30.4"&gt;axios@0.30.4&lt;/a&gt;" — to the legacy branch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The versions were live in the public registry from about 00:21 to 03:15 UTC on March 31. Three hours. For a package with over 100 million weekly downloads, that's more than enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  How the attack worked
&lt;/h3&gt;

&lt;p&gt;The nastiest part: the Axios code itself wasn't touched. Not a single line. Open the sources — everything looks clean. The trick was in &lt;code&gt;package.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;They added a dependency: &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt;. The package was created the day before, on March 30. The name looks innocent — just some crypto utility, who would look twice? It's never imported anywhere in the Axios code. Not once.&lt;/p&gt;

&lt;p&gt;So why was it there?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;npm install&lt;/code&gt; pulls in all dependencies from &lt;code&gt;package.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;plain-crypto-js&lt;/code&gt; contains a &lt;code&gt;postinstall&lt;/code&gt; script&lt;/li&gt;
&lt;li&gt;The script downloads the second-stage payload from a C2 server&lt;/li&gt;
&lt;li&gt;It deploys a cross-platform RAT trojan (for macOS, Windows, Linux)&lt;/li&gt;
&lt;li&gt;After installation, the script cleans up after itself — it replaces &lt;code&gt;package.json&lt;/code&gt; with a clean version&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last point is especially nasty. The trojan is already running, but when you check &lt;code&gt;package.json&lt;/code&gt;, everything looks normal. No trace of &lt;code&gt;plain-crypto-js&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phantom dependency
&lt;/h3&gt;

&lt;p&gt;This is called a phantom dependency — a ghost dependency. It's not used in the code, not imported, and exists only for the side effect during installation. Normal code review won't catch it because the &lt;code&gt;.js&lt;/code&gt; files are clean.&lt;/p&gt;

&lt;p&gt;You scan the sources for suspicious code? Good. But do you check &lt;code&gt;package.json&lt;/code&gt; for new dependencies? Or &lt;code&gt;postinstall&lt;/code&gt; scripts in transitive dependencies?&lt;/p&gt;

&lt;h3&gt;
  
  
  What to do right now
&lt;/h3&gt;

&lt;p&gt;Safe versions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Branch&lt;/th&gt;
&lt;th&gt;Malicious&lt;/th&gt;
&lt;th&gt;Safe&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;latest&lt;/td&gt;
&lt;td&gt;1.14.1&lt;/td&gt;
&lt;td&gt;1.14.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;legacy&lt;/td&gt;
&lt;td&gt;0.30.4&lt;/td&gt;
&lt;td&gt;0.30.3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If your project installed exactly those versions in the window from 00:21 to 03:15 UTC on March 31 — treat the system as compromised. Not "possibly". Compromised.&lt;/p&gt;

&lt;p&gt;You need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;code&gt;package-lock.json&lt;/code&gt; / &lt;code&gt;yarn.lock&lt;/code&gt; for "&lt;a href="mailto:axios@1.14.1"&gt;axios@1.14.1&lt;/a&gt;" or "&lt;a href="mailto:axios@0.30.4"&gt;axios@0.30.4&lt;/a&gt;"&lt;/li&gt;
&lt;li&gt;Search for "plain-crypto-js" in the dependency tree&lt;/li&gt;
&lt;li&gt;If you find it — the machine where &lt;code&gt;npm install&lt;/code&gt; ran is infected&lt;/li&gt;
&lt;li&gt;Rotate all keys, secrets, and tokens — the full set&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;StepSecurity, Socket, Endor Labs, Aikido, and Huntress have confirmed the details and published IOCs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who was behind the attack
&lt;/h3&gt;

&lt;p&gt;Several sources — including Google and Reuters — point to the North Korean group UNC1069 / Lazarus. Supply-chain attacks via maintainer account takeover are their classic playbook.&lt;/p&gt;

&lt;p&gt;Important note: the npm registry itself wasn't hacked. The infrastructure wasn't affected. The attackers simply logged in under a real account and ran &lt;code&gt;npm publish&lt;/code&gt;. From the system's point of view, it was completely legitimate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Claude Code: when someone forgot about .npmignore
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What happened
&lt;/h3&gt;

&lt;p&gt;On the same day, Anthropic released a new version of their CLI agent to npm — "@anthropic-ai/&lt;a href="mailto:claude-code@2.1.88"&gt;claude-code@2.1.88&lt;/a&gt;". A routine release. But the package included a &lt;code&gt;cli.js.map&lt;/code&gt; file weighing 59.8 MB.&lt;/p&gt;

&lt;p&gt;That's a sourcemap. And through it, you can restore the entire original source code of the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  The scale
&lt;/h3&gt;

&lt;p&gt;From that one file they recovered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;~512,000 lines of TypeScript&lt;/li&gt;
&lt;li&gt;~1,900 files&lt;/li&gt;
&lt;li&gt;The agent's internal logic&lt;/li&gt;
&lt;li&gt;System prompts&lt;/li&gt;
&lt;li&gt;Memory and planning mechanisms, tool handling&lt;/li&gt;
&lt;li&gt;Unannounced features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The sourcemap also pointed to a ZIP archive in Anthropic's public R2 bucket. Security researcher Chaofan Shou was the first to post about it on X. The code was mirrored on GitHub almost instantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  The cause
&lt;/h3&gt;

&lt;p&gt;Anthropic confirmed it: a mistake in the build process. They forgot to exclude the source maps via &lt;code&gt;.npmignore&lt;/code&gt;. That's it.&lt;/p&gt;

&lt;p&gt;No hack. No user data leak. Just a missing line in the build config.&lt;/p&gt;

&lt;p&gt;The version was quickly removed and a fix was released. But the code had already spread.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Korean developer at 4 AM and 50,000 stars in two hours
&lt;/h2&gt;

&lt;p&gt;While Anthropic was sending DMCA takedowns to mirrors of the leaked code, one person in Korea took a different route.&lt;/p&gt;

&lt;p&gt;Sigrid Jin (Sigrid Jin, GitHub: instructkr) — a well-known power user of Claude Code. How well-known? According to the Wall Street Journal, in the past year he generated more than 25 billion tokens through the tool. Twenty-five billion. The guy clearly knew the architecture inside out.&lt;/p&gt;

&lt;p&gt;On the morning of April 1, around 4 AM local time, Jin woke up to notifications about the leak. He saw Anthropic taking down mirrors of the original code and made a decision: don't copy — rewrite.&lt;/p&gt;

&lt;h3&gt;
  
  
  Clean room
&lt;/h3&gt;

&lt;p&gt;Jin didn't fork the leaked TypeScript. That would have been taken down by DMCA in a day. Instead, he did a clean-room reimplementation — rewriting the key patterns and architecture from scratch, this time in Python:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent harness&lt;/li&gt;
&lt;li&gt;Tools&lt;/li&gt;
&lt;li&gt;Memory and planning&lt;/li&gt;
&lt;li&gt;Swarms of sub-agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To speed things up, he used the AI tool oh-my-codex (OmX). The repository &lt;a href="https://github.com/instructkr/claw-code" rel="noopener noreferrer"&gt;claw-code&lt;/a&gt; was live before sunrise.&lt;/p&gt;

&lt;p&gt;Different language, different code, no copy-paste — legally, this is a new creative work. Gergely Orosz from Pragmatic Engineer and other lawyers/developers confirmed: such a "clean rewrite" is legally solid.&lt;/p&gt;

&lt;p&gt;Anthropic couldn't take the repo down via DMCA. It's still alive.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub record
&lt;/h3&gt;

&lt;p&gt;Then the madness began.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time after publication&lt;/th&gt;
&lt;th&gt;Stars&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;~2 hours&lt;/td&gt;
&lt;td&gt;50,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;~24 hours&lt;/td&gt;
&lt;td&gt;100,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forks in the first day&lt;/td&gt;
&lt;td&gt;50,000 - 58,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;50,000 stars in two hours. According to the author and several media outlets — the fastest-growing repository in GitHub history.&lt;/p&gt;

&lt;p&gt;Later, Jin started porting the same architecture to Rust — that version also quickly gained tens of thousands of stars.&lt;/p&gt;

&lt;p&gt;In essence, the community turned a corporate leak into a fully open clone of an AI agent in just a few hours. Jin himself later described the project's goal simply: "Better Harness Tools" — better tools that actually get things done.&lt;/p&gt;

&lt;p&gt;You can argue whether it's ethical to build on someone else's leak. But legally — it's clean. And 100,000 stars in a day show that demand for an open alternative was huge long before March 31.&lt;/p&gt;

&lt;h2&gt;
  
  
  POSSE:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://naderevo.com/en/blog/npm-31-march-rat-in-axios-and-claude-code-source-leak/" rel="noopener noreferrer"&gt;Na Derevo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to Promote a Website in 2026: SEO and GEO</title>
      <dc:creator>NaDerevo</dc:creator>
      <pubDate>Wed, 01 Apr 2026 14:20:00 +0000</pubDate>
      <link>https://forem.com/naderevo/how-to-promote-a-website-in-2026-seo-and-geo-4hap</link>
      <guid>https://forem.com/naderevo/how-to-promote-a-website-in-2026-seo-and-geo-4hap</guid>
      <description>&lt;p&gt;I launched a website. Not a template on Tilda, not a one-pager on Notion — a full-fledged static site built with Astro, featuring a blog, a product landing page, and support for two languages. Before writing a single blog post, I spent a disproportionately large amount of time making sure this site would be properly visible to search engines — and, more importantly, to large language models.&lt;/p&gt;

&lt;p&gt;This article is about what I set up, why I did it, and why in 2026 SEO alone is no longer enough.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Have Your Own Website?
&lt;/h2&gt;

&lt;p&gt;I have a project called “Na Derevo” (On the Tree). I create digital tools and write about development. My main product right now is the Telegram bot MENO for task management. Before this, everything lived on third-party platforms: articles on Habr, posts on dev.to, updates in my Telegram channel.&lt;/p&gt;

&lt;p&gt;The problem: the content was scattered, nothing was connected, and if tomorrow any platform changed its rules — I would lose everything.&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%2Fwpuwv4u0v5lowrepftm1.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%2Fwpuwv4u0v5lowrepftm1.png" alt="Main page" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s why I built a website that solves three main tasks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;MENO landing page&lt;/strong&gt; — a place to send people who want to understand what this bot is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blog&lt;/strong&gt; — so my articles live with me, not only on someone else’s platforms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Central hub&lt;/strong&gt; — so everything I do is in one place.&lt;/li&gt;
&lt;/ol&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%2Fvrcyafif6b4n5pfv29gu.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%2Fvrcyafif6b4n5pfv29gu.png" alt="Landing" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And there’s one more, less obvious reason.&lt;/p&gt;

&lt;h3&gt;
  
  
  POSSE: Publish on Your Own Site, Syndicate Elsewhere
&lt;/h3&gt;

&lt;p&gt;There’s an approach called &lt;strong&gt;POSSE&lt;/strong&gt; — Publish on Own Site, Syndicate Elsewhere. The idea is simple: the original version of the content always lives on your own website, while you publish copies on Habr, dev.to, Reddit, or anywhere else.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why do this:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You retain the rights.&lt;/strong&gt; You are the author, you have the canonical URL, you control the text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You don’t depend on platforms.&lt;/strong&gt; A platform can shut down, ban you, or change its algorithms — your content remains safely on your own domain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You can connect any tools.&lt;/strong&gt; RSS, newsletters, auto-posting — anything you want, without platform restrictions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article, by the way, was also written following the POSSE principle — the original lives in my blog, and what you’re reading now is the syndicated version.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technical Foundation: Astro and Two Languages
&lt;/h2&gt;

&lt;p&gt;The site is built with &lt;strong&gt;Astro&lt;/strong&gt; — a framework for static websites. No client-side JavaScript for content; everything is rendered into clean HTML during the build process. For search engines and AI crawlers, this is ideal: they see a ready-made page, not an empty &lt;code&gt;&amp;lt;div id="app"&amp;gt;&lt;/code&gt; that still needs to be executed.&lt;/p&gt;

&lt;p&gt;The site is bilingual:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/ru/&lt;/code&gt; — Russian version&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/en/&lt;/code&gt; — English version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Blog posts are stored in Markdown using Astro Content Collections — one file per language. This allows me to maintain one blog in two languages, while each article knows about its alternative language version.&lt;/p&gt;

&lt;p&gt;The root of the site (&lt;code&gt;/&lt;/code&gt;) is not a content page. It’s a redirect entry: a script detects the browser language or the user’s saved preference and redirects to &lt;code&gt;/ru/&lt;/code&gt; or &lt;code&gt;/en/&lt;/code&gt;. This is convenient for UX. For SEO — it’s a compromise, which I’ll mention below.&lt;/p&gt;




&lt;h2&gt;
  
  
  SEO: What I Set Up and Why
&lt;/h2&gt;

&lt;p&gt;SEO in 2026 is no longer about “stuffing keywords into the text.” It’s a set of technical signals that help search engines understand what the page is about, what language it’s in, and which version to show the user.&lt;/p&gt;

&lt;p&gt;Here’s what I configured.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic Meta Tags
&lt;/h3&gt;

&lt;p&gt;Every page has its own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; — the title visible in search results&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;meta name="description"&amp;gt;&lt;/code&gt; — the description shown under the title in search results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It sounds obvious, but the number of sites where every page has the same title is surprising. My titles and descriptions are unique for each page: homepage, MENO landing page, and every blog article.&lt;/p&gt;

&lt;h3&gt;
  
  
  Canonical
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://naderevo.com/ru/blog/my-article/"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The canonical tag tells search engines: “this is the original version of this page.” If content is available under multiple URLs (for example, with and without parameters), canonical indicates which URL should be indexed. Without it, search engines may treat duplicates as different pages and split the ranking.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hreflang
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"alternate"&lt;/span&gt; &lt;span class="na"&gt;hreflang=&lt;/span&gt;&lt;span class="s"&gt;"ru"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://naderevo.com/ru/blog/my-article/"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"alternate"&lt;/span&gt; &lt;span class="na"&gt;hreflang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://naderevo.com/en/blog/my-article/"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hreflang is a way to tell search engines: “this page has a version in another language, here it is.” Google uses hreflang to show users the correct language version in search results.&lt;/p&gt;

&lt;p&gt;I have hreflang set up for all pages, including blog posts. Alternative links are built using the &lt;code&gt;routeSlug&lt;/code&gt; field in the frontmatter — a special field that explicitly defines the URL. This is more reliable than relying on automatic slugs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Graph and Twitter Cards
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:card"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"summary_large_image"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are what people see when someone shares a link on social media or messengers — title, description, and image. Without OG tags, the link looks like a bare URL. With them — it appears as a nice card.&lt;/p&gt;

&lt;p&gt;For now, I’m using universal OG images: one for the site, one for the blog, and one for MENO. Not ideal for CTR, but sufficient at the current stage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Robots.txt and Sitemap
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User-agent: *
Allow: /
Sitemap: https://naderevo.com/sitemap-index.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;robots.txt&lt;/code&gt; is open to everyone — both search engine bots and AI crawlers. No blocks.&lt;/p&gt;

&lt;p&gt;The sitemap is generated automatically during the build and includes all indexable pages. I removed junk URLs and the root &lt;code&gt;/&lt;/code&gt; (because it’s a redirect, not content).&lt;/p&gt;

&lt;h3&gt;
  
  
  Structured Data (JSON-LD)
&lt;/h3&gt;

&lt;p&gt;This is markup that helps search engines not just read the page, but &lt;strong&gt;understand&lt;/strong&gt; what’s on it. Not “text about a bot,” but “this is a software product, here’s its name, here’s the author, here’s the rating.”&lt;/p&gt;

&lt;p&gt;The site has three types of structured data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;WebSite&lt;/code&gt;&lt;/strong&gt; on the homepage — description of the site as an entity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;SoftwareApplication&lt;/code&gt;&lt;/strong&gt; on the MENO landing page — description of the product&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;BlogPosting&lt;/code&gt;&lt;/strong&gt; on articles — description of each article with author, date, and headline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example for an article:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BlogPosting"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"headline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"How I Stopped Losing Tasks in Telegram"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Person"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Nikita"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"datePublished"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-10"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search engines see this and can use it for rich snippets — enhanced cards in search results.&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%2Fqbmkr148a4jbxc4ez0dr.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%2Fqbmkr148a4jbxc4ez0dr.png" alt="Author element" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  GEO: What It Is and Why It Matters
&lt;/h2&gt;

&lt;p&gt;Now for something many people still don’t take into account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GEO — Generative Engine Optimization&lt;/strong&gt; — is the optimization of a website not for search engine robots, but for large language models. ChatGPT, Perplexity, Gemini, Claude — they all know how to crawl websites, read content, and cite it in their answers. The question is: will your site be among the sources they quote?&lt;/p&gt;

&lt;p&gt;If SEO is “how to get into Google’s search results,” then GEO is “how to get into ChatGPT’s answers.”&lt;/p&gt;

&lt;p&gt;It may sound like something from the distant future, but it’s already working. People are increasingly searching not in Google, but by asking AI. And AI takes information from somewhere. If your content is clean, well-structured, and accessible for crawling — your chances of being cited increase.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Matters for GEO
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Content in clean HTML, not client-side JavaScript.&lt;/strong&gt; AI crawlers don’t always execute JavaScript. If your content is rendered on the client — the model may see an empty page. Astro renders everything to HTML during build — the crawler sees ready text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don’t block AI crawlers.&lt;/strong&gt; Some sites block ChatGPT, Anthropic, and other bots in &lt;code&gt;robots.txt&lt;/code&gt;. I deliberately left everything open. If a model wants to read my content and reference it — be my guest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured data.&lt;/strong&gt; JSON-LD helps not only Google but also language models. When a page has &lt;code&gt;BlogPosting&lt;/code&gt; markup with author, date, and description — it’s easier for models to understand the context and decide whether to cite it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Author layer.&lt;/strong&gt; This is a less obvious but important point. Content without an author looks impersonal. The model cannot attribute it, and therefore is less likely to cite it. I added a visible author block to every article and mapped the &lt;code&gt;author&lt;/code&gt; in the schema to a &lt;code&gt;Person&lt;/code&gt; type with a name.&lt;/p&gt;

&lt;h3&gt;
  
  
  What GEO Doesn’t Cover (Yet)
&lt;/h3&gt;

&lt;p&gt;The root of the site remains a redirect entry — for a language model, this is a weak page. If someone asks AI “what is naderevo.com,” the model may not get an answer from the root because there’s no content there — only a redirect script.&lt;/p&gt;

&lt;p&gt;Comparative articles in the blog can be strengthened with links to primary sources — this increases the model’s trust in the content.&lt;/p&gt;

&lt;p&gt;The homepage is brand-oriented but not answer-first — it doesn’t answer the question directly in the first paragraph. For GEO, it’s better when the page starts with a direct answer and then expands on the details.&lt;/p&gt;

&lt;p&gt;None of this is critical, but it remains on the to-do list.&lt;/p&gt;




&lt;h2&gt;
  
  
  Google Search Console and Yandex.Webmaster
&lt;/h2&gt;

&lt;p&gt;On the day I wrote this article, I registered the site in &lt;strong&gt;Google Search Console&lt;/strong&gt; and &lt;strong&gt;Yandex.Webmaster&lt;/strong&gt;. There’s no statistics yet — both need time to process.&lt;/p&gt;

&lt;p&gt;Why do this even if you have a brand-new site with zero traffic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You tell the search engine about your existence.&lt;/strong&gt; Without registration, Google might find your site on its own — or it might not. Search Console is a guarantee.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You can submit the sitemap manually.&lt;/strong&gt; The search engine will start crawling pages faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You can see indexing errors.&lt;/strong&gt; If something is broken — hreflang, canonical, redirect — Console will show it. Better to find out now than in three months.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Query data.&lt;/strong&gt; When traffic appears, you’ll see which queries people find your site with, which pages are shown, and with what CTR.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For Yandex, everything is similar, only through Webmaster. If you target a Russian-speaking audience — this is mandatory.&lt;/p&gt;

&lt;p&gt;I registered in both. In a couple of weeks I’ll check what they found and share the results.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lighthouse: Making Sure It Wasn’t in Vain
&lt;/h2&gt;

&lt;p&gt;Another tool worth knowing about is &lt;strong&gt;Lighthouse&lt;/strong&gt;. It’s a built-in audit in Chrome DevTools that evaluates a page on four parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt; — how fast the page loads and becomes interactive&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility&lt;/strong&gt; — how accessible the site is: contrast, alt texts, keyboard navigation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Practices&lt;/strong&gt; — adherence to web standards: HTTPS, correct headers, no deprecated APIs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO&lt;/strong&gt; — basic technical SEO hygiene: meta tags, canonical, readability for crawlers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each parameter is scored from 0 to 100. The green zone is 90+. This is not a guarantee of success in search results. I ran the audit on my site. Results:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Homepage:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Performance&lt;/th&gt;
&lt;th&gt;Accessibility&lt;/th&gt;
&lt;th&gt;Best Practices&lt;/th&gt;
&lt;th&gt;SEO&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;MENO Landing Page:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Performance&lt;/th&gt;
&lt;th&gt;Accessibility&lt;/th&gt;
&lt;th&gt;Best Practices&lt;/th&gt;
&lt;th&gt;SEO&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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%2Fo9v5p7zficturhu3u2lr.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%2Fo9v5p7zficturhu3u2lr.png" alt="Main page" width="800" height="301"&gt;&lt;/a&gt;&lt;br&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%2F9z4d3p66l50g0onqhyc7.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%2F9z4d3p66l50g0onqhyc7.png" alt="Landing" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The homepage scores almost maximum across all parameters. This is thanks to Astro: static HTML without client-side JavaScript loads instantly.&lt;/p&gt;

&lt;p&gt;The landing page is slightly lower in Performance (93) and Accessibility (95) — it has more content, product screenshots, and interactive sections. That’s normal. 93 is still in the green zone, and I know where to dig if I want to push it further.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why run Lighthouse at all:&lt;/strong&gt; it’s a free “idiot check.” A couple of minutes — and you see if you forgot alt text on an image, if a font is loading in a blocking way, or if the meta description is empty. Better to hear it from Lighthouse than from a user who left the site after half a second.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The site was launched yesterday. Traffic is still zero. But the technical foundation so that both search engines and AI models can see the content is ready.&lt;/p&gt;

&lt;p&gt;What has been done:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static site on Astro, two languages, clean HTML&lt;/li&gt;
&lt;li&gt;SEO: canonical, hreflang, OG, structured data, sitemap, unique meta tags&lt;/li&gt;
&lt;li&gt;GEO: open robots.txt, author layer, Person schema, content without client-side JS&lt;/li&gt;
&lt;li&gt;POSSE: original content on my own site, syndication to other platforms&lt;/li&gt;
&lt;li&gt;Google Search Console and Yandex.Webmaster connected&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SEO and GEO are marathons. GEO rules are still evolving. But if you don’t start now — catching up later will be much harder.&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="https://naderevo.com/en" rel="noopener noreferrer"&gt;naderevo.com&lt;/a&gt;&lt;br&gt;
MENO Bot: &lt;a href="https://t.me/menoapp_bot?start=devto" rel="noopener noreferrer"&gt;@menoapp_bot&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>4 Telegram Bots for Task Management Right in the Messenger: Comparison in 2026</title>
      <dc:creator>NaDerevo</dc:creator>
      <pubDate>Mon, 23 Mar 2026 10:00:00 +0000</pubDate>
      <link>https://forem.com/naderevo/4-telegram-bots-for-task-management-right-in-the-messenger-comparison-in-2026-498</link>
      <guid>https://forem.com/naderevo/4-telegram-bots-for-task-management-right-in-the-messenger-comparison-in-2026-498</guid>
      <description>&lt;p&gt;Tasks in Telegram arise faster than you can write them down. "Buy milk after work," "call with the client on Monday at 3 PM," a one-minute voice message with three instructions inside — all this flies by in the feed and sinks after twenty messages. Bookmarks help save a link, but won't extract the date from the text or remind you on time. Chat search will find a word, but won't group tasks by deadlines or priorities.&lt;/p&gt;

&lt;p&gt;The standard approach is to transfer the task to a separate planner: Todoist, Notion, Trello. But each such transfer is a context switch. Open the app, create a card, fill in fields, return to the chat. On one task, it's thirty seconds; on twenty a day — a separate routine that most people abandon after a few days.&lt;/p&gt;

&lt;p&gt;An alternative is to solve the problem inside the messenger itself. I reviewed four Telegram bots for tasks that are actively maintained in 2025 and regularly mentioned in reviews: &lt;strong&gt;@SkeddyBot&lt;/strong&gt;, &lt;strong&gt;@RemindMegaBot&lt;/strong&gt;, &lt;strong&gt;@SmartScheduler_bot&lt;/strong&gt;, and &lt;strong&gt;@menoapp_bot&lt;/strong&gt;. Each extracts tasks from text, but does so differently and for different scenarios.&lt;/p&gt;

&lt;p&gt;Disclaimer: @menoapp_bot is my own project. I won't pretend to be conducting an impartial study. But I'll try to break down each bot honestly — with pros and cons, including my own.&lt;/p&gt;




&lt;h3&gt;
  
  
  How the Comparison is Structured
&lt;/h3&gt;

&lt;p&gt;The analysis is based on the bots' official descriptions, documentation, and public reviews. I didn't conduct blind testing with accuracy measurements on a thousand examples — that would require a separate methodology and article. Instead, I focused on the stated capabilities and architectural differences that determine which scenarios each bot suits best.&lt;/p&gt;

&lt;p&gt;Key questions I sought answers to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How does the bot receive a task — via commands, natural language, voice?&lt;/li&gt;
&lt;li&gt;Is there an interface for viewing and managing tasks?&lt;/li&gt;
&lt;li&gt;How are recurring reminders handled?&lt;/li&gt;
&lt;li&gt;What's free, and what's paid?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Summary Table of Telegram Task Bot Features
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;@SkeddyBot&lt;/th&gt;
&lt;th&gt;@RemindMegaBot&lt;/th&gt;
&lt;th&gt;@SmartScheduler_bot&lt;/th&gt;
&lt;th&gt;@menoapp_bot&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Text Parsing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Natural language&lt;/td&gt;
&lt;td&gt;Natural language&lt;/td&gt;
&lt;td&gt;Natural language&lt;/td&gt;
&lt;td&gt;AI extraction from arbitrary messages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Voice Messages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reminder Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Push in Telegram&lt;/td&gt;
&lt;td&gt;Push + snooze + defer&lt;/td&gt;
&lt;td&gt;Push&lt;/td&gt;
&lt;td&gt;Auto-detect time + push&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Viewing Interface&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Web app skeddy.me&lt;/td&gt;
&lt;td&gt;Inline chat buttons&lt;/td&gt;
&lt;td&gt;Inline chat buttons&lt;/td&gt;
&lt;td&gt;Telegram Mini App&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recurring Tasks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Via web interface&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;From message context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Languages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Russian&lt;/td&gt;
&lt;td&gt;Russian, English&lt;/td&gt;
&lt;td&gt;Russian&lt;/td&gt;
&lt;td&gt;Russian, English&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Freemium&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Freemium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The table shows stated capabilities. The quality of each implementation is a separate question, which I'll partially address below.&lt;/p&gt;




&lt;h3&gt;
  
  
  @menoapp_bot — AI Task Planner in Telegram with Voice Input
&lt;/h3&gt;

&lt;p&gt;This is my project, so I know it inside out — and its weaknesses as well as its strengths.&lt;/p&gt;

&lt;p&gt;The key difference from the previous three bots is the approach to receiving a task. SkeddyBot, RemindMegaBot, and SmartScheduler_bot expect you to write a specific phrase to the bot: "remind me X at Y." Menoapp_bot tries to extract tasks from regular messages. You write "demo tomorrow at 6 PM, don't forget to prepare slides" — the bot parses the text, identifies the task, determines the date, and sets a reminder if needed. The same works with voice messages: the bot transcribes the audio and applies the same AI parsing to the transcript.&lt;/p&gt;

&lt;p&gt;The second difference is the Telegram Mini App for viewing and editing tasks. Instead of scrolling through the chat for past reminders, you can open the mini-app and see all tasks with dates and statuses. This solves a common problem for all chat bots: in conversation format, it's hard to overview a list of twenty tasks.&lt;/p&gt;

&lt;p&gt;The bot supports Russian and English.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's missing, and what doesn't work perfectly.&lt;/strong&gt; AI parsing isn't deterministic. The phrase "after lunch" might turn into 2 PM or 3 PM depending on context, though I'm working on deterministic post-processing for such cases. Complex constructions like "sometime next week, closer to Thursday, maybe" stump any model. No snooze mechanic like RemindMegaBot. Recurring tasks are supported, but the implementation is basic so far.&lt;/p&gt;

&lt;p&gt;Additionally, the project has a small audience yet — about 120 users. This means it's tested on a limited number of real scenarios, and edge cases will surely surface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; those who want to create tasks via voice or free-form text and need a visual interface for viewing. Especially for Russian speakers — as of writing, it's the only bot of the four with full Russian support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link: &lt;a href="https://t.me/menoapp_bot?start=devto" rel="noopener noreferrer"&gt;@menoapp_bot&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  @SkeddyBot — Time-Tested Reminder Bot in Telegram
&lt;/h3&gt;

&lt;p&gt;SkeddyBot has been running since 2016 and has built a stable audience — about 13 thousand active monthly users per open data. It's one of the oldest Telegram reminder bots, and its main advantage is predictability.&lt;/p&gt;

&lt;p&gt;The principle is simple: you write a phrase in natural language to the bot, it recognizes the date and time, creates a reminder. "Check email tomorrow at 10am" — and tomorrow at ten you'll get a notification. For one-off reminders, it works flawlessly.&lt;/p&gt;

&lt;p&gt;Recurring tasks are set via a separate web interface at skeddy.me. This is both a pro and a con: on one hand, the web gives more flexibility for complex schedules; on the other, it breaks the "everything inside Telegram" idea. If you wanted to avoid app switching, opening a browser for recurring reminders might disappoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's missing.&lt;/strong&gt; No voice messages. Doesn't extract tasks from conversation context: you need to consciously write a specific phrase with time to the bot. So it's a tool for people who already formulated the task in their head and want a reliable reminder. No more, no less.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; those needing a reliable, simple reminder in Telegram without extras. Proven over years, doesn't break, does one thing well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link: &lt;a href="https://t.me/SkeddyBot" rel="noopener noreferrer"&gt;@SkeddyBot&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  @RemindMegaBot — Flexible Reminders with Deadline Deferral
&lt;/h3&gt;

&lt;p&gt;RemindMegaBot solves the same base task as SkeddyBot — reminders from text messages — but adds handy mechanics for task management that make daily use more comfortable.&lt;/p&gt;

&lt;p&gt;The main one is snooze and deferral. When a reminder arrives, you see buttons: mark as done, defer to another time, or postpone. It's a small thing, but in practice, it changes a lot. Reminder "call the doctor" comes, but you're in a meeting — tap "in an hour" instead of re-remembering. SkeddyBot lacks this: reminder came, and it's gone.&lt;/p&gt;

&lt;p&gt;Recurring tasks are set right in the chat, no browser needed. "Workout every Wednesday at 6 PM" — bot creates a series. After /start, it asks for timezone, avoiding time shift issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's missing.&lt;/strong&gt; Like SkeddyBot, no voice messages. No task lists or interface to view all scheduled items — just a stream of reminders in chat. If you accumulate twenty reminders a week, you can't overview them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; those prioritizing reminder flexibility — defer, snooze, repeats. Great for routine tasks that often shift.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link: &lt;a href="https://t.me/RemindMegaBot" rel="noopener noreferrer"&gt;@RemindMegaBot&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  @SmartScheduler_bot — Bot for Voice Reminders in Telegram
&lt;/h3&gt;

&lt;p&gt;SmartScheduler_bot stands out with one key feature absent in SkeddyBot and RemindMegaBot: voice message recognition. You dictate "meeting tomorrow at 2 PM" — bot transcribes, finds the date, creates a reminder.&lt;/p&gt;

&lt;p&gt;For people who dictate more than type — and there are many Telegram users like that — this is a big plus. No need to stop, switch to keyboard, formulate text. Said — done.&lt;/p&gt;

&lt;p&gt;Text input works on natural language too, like the previous two. Bot is free, no complex setup — /start and go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's missing.&lt;/strong&gt; No snooze or deferral. No web or mini-app for task viewing — all management via bot chat. Recurring tasks basic.&lt;/p&gt;

&lt;p&gt;Essentially, SmartScheduler_bot is the same "simple reminder" approach, but with voice added. If voice input is critical and other features secondary — solid choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; those used to dictating messages and wanting voice reminders without extra steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link: &lt;a href="https://t.me/SmartScheduler_bot" rel="noopener noreferrer"&gt;@SmartScheduler_bot&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Which Telegram Task Bot to Choose for Your Scenario
&lt;/h3&gt;

&lt;p&gt;All four bots solve one problem — tasks get lost in chats — but at different levels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For a simple reliable reminder&lt;/strong&gt; — SkeddyBot. Time-tested, predictable, no surprises. Ideal for those who know exactly what and when to remind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For reminder flexibility&lt;/strong&gt; — RemindMegaBot. Snooze, defer, repeats out of the box. For tasks that often shift: call back later, reschedule workout, postpone till tomorrow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you dictate more than type&lt;/strong&gt; — @menoapp_bot or SmartScheduler_bot. Both handle voice. SmartScheduler simpler and more predictable; menoapp_bot additionally extracts structure from voice: task, date, priority.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If tasks arise in conversation context&lt;/strong&gt; — @menoapp_bot. For cases where a task isn't a separate "write command to bot" action, but a regular message from which to auto-extract essence, date, priority.&lt;/p&gt;




&lt;p&gt;*If you've used any of these bots or know others worth mentioning, happy to discuss in comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I kept losing tasks in Telegram chats. So I built a bot.</title>
      <dc:creator>NaDerevo</dc:creator>
      <pubDate>Fri, 20 Mar 2026 14:00:00 +0000</pubDate>
      <link>https://forem.com/naderevo/i-kept-losing-tasks-in-telegram-chats-so-i-built-a-bot-1do4</link>
      <guid>https://forem.com/naderevo/i-kept-losing-tasks-in-telegram-chats-so-i-built-a-bot-1do4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;TL;DR: All my work-related communication happens on Telegram, but traditional task planners require manual data transfer and a separate routine. I spent a long time looking for a way to organize the chaos right within the messenger, couldn’t find anything suitable—so I ended up building my own bot. Here’s how I went from problem to solution.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Context: Why Telegram Is Both My Office and My Notebook
&lt;/h2&gt;

&lt;p&gt;I spend almost the entire day on Telegram. It’s where client requests pour in, team updates come through, sudden ideas strike at 3 a.m., and I jot down quick “don’t forget” notes. The messenger has long been the main hub for all my work.&lt;br&gt;
But there’s a problem: information in chats is a stream, not a system. In the evening, I open a chat—hundreds of messages—and frantically search for that one single phrase about a deadline. Once, I missed a meeting because I missed a forwarded message—the client called, furious, and I blushed and made excuses.&lt;br&gt;
That’s when I first started wondering: how do people actually solve this &lt;/p&gt;




&lt;h2&gt;
  
  
  What I Tried and Why I Stopped
&lt;/h2&gt;

&lt;p&gt;First, I took the standard approach—third-party task managers.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What I tried&lt;/th&gt;
&lt;th&gt;Where it fell short&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Todoist&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manually transferred tasks from chats&lt;/td&gt;
&lt;td&gt;Stopped after 3 days—too much switching back and forth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Notion&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Created a task database, sent myself links&lt;/td&gt;
&lt;td&gt;Quick tasks got lost in the clunky interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Trello&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Created cards based on chat threads&lt;/td&gt;
&lt;td&gt;The board turned into a graveyard—I opened it once a week&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Keep&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Copied messages into notes&lt;/td&gt;
&lt;td&gt;Unstructured notes—same chaos, just in a different place&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern is always the same: c*&lt;em&gt;opy text → switch to the app → create a task → set a date → return to the chat&lt;/em&gt;*. Each task takes 30–60 seconds of manual work. With dozens of tasks a day, this turns into a separate chore that no one wants to do.&lt;br&gt;
I realized that the problem isn’t with any specific app, but with the approach itself: any external task planner creates friction because it requires you to leave the context in which the task originated.&lt;/p&gt;




&lt;h2&gt;
  
  
  The idea: if the mountain won’t come to Muhammad
&lt;/h2&gt;

&lt;p&gt;At some point, I flipped the question around. Instead of asking, “Where should I move tasks from Telegram?” I asked myself, “&lt;strong&gt;Why move them anywhere at all?&lt;/strong&gt;”&lt;/p&gt;

&lt;p&gt;The logic is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;All tasks, agreements, and deadlines already come into Telegram as messages.&lt;/li&gt;
&lt;li&gt;I spend my entire workday here anyway.&lt;/li&gt;
&lt;li&gt;So task management should live right here—without switching contexts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I started looking for Telegram bots that could turn messages into tasks. I found a few, but something was always off: one required strict command syntax, another couldn’t parse dates from natural text, and a third looked like a prototype abandoned two years ago.&lt;/p&gt;

&lt;p&gt;In the end, I decided to write my own.&lt;/p&gt;




&lt;h2&gt;
  
  
  The result: the MENO bot
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3lr5bni0d59fmmhgj7n8.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%2F3lr5bni0d59fmmhgj7n8.PNG" alt="Chat" width="800" height="577"&gt;&lt;/a&gt;&lt;br&gt;
The concept is as simple as &lt;strong&gt;it gets—you type or speak to the bot just as you would in a chat, and it automatically extracts the task.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No special syntax, no slash commands for basic scenarios—just natural language.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Create tasks from regular messages—type or speak, and the bot will parse the content and date&lt;/li&gt;
&lt;li&gt;Reminders—the bot determines the time from the context and sends a notification via Telegram&lt;/li&gt;
&lt;li&gt;Lists and priorities—a minimalist structure without complex boards or nested projects&lt;/li&gt;
&lt;li&gt;Everything within the messenger—no switching between apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essentially, this is an attempt to create a task manager that doesn’t feel like a task manager. You simply type in the chat—and order emerges on its own.&lt;/p&gt;




&lt;h2&gt;
  
  
  What problem does this actually solve?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi1emzheb11bs8jtasm01.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%2Fi1emzheb11bs8jtasm01.PNG" alt="UI" width="800" height="1448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Messengers are fast and chaotic. Planners are structured, but they require discipline. All the work happens in the former, but it needs to be stored in the latter. And this disconnect between “where tasks are created” and “where they should live” is the main source of waste.&lt;/p&gt;

&lt;p&gt;Traditional tools try to drag you into their ecosystem: open the app, create a card, fill in the fields. My idea was the opposite—to bring structure to where you already are. You don’t go to the planner; the planner comes to your chat.&lt;/p&gt;

&lt;p&gt;That said, I’m not trying to replace Notion or Jira for complex project management. This is a solution for those whose tasks are born in conversations and quietly die there, never making it to any task manager.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The bot is live and I use it daily for my own workflow.&lt;/p&gt;

&lt;p&gt;If you spend most of your workday in Telegram, I'd genuinely &lt;br&gt;
like to know: &lt;strong&gt;how do you handle tasks that come from chats?&lt;/strong&gt; &lt;br&gt;
Do you have a system?&lt;/p&gt;

&lt;p&gt;Bot: &lt;a href="https://t.me/menoapp_bot?start=devto" rel="noopener noreferrer"&gt;@menoapp_bot&lt;/a&gt;&lt;/p&gt;




</description>
      <category>productivity</category>
      <category>beginners</category>
      <category>startup</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
