<?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: Jasur Yusupov</title>
    <description>The latest articles on DEV Community by Jasur Yusupov (@jzr-supove).</description>
    <link>https://dev.to/jzr-supove</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%2F1023914%2F993e2ad4-0c11-4299-a5f6-f4aaace273f5.jpeg</url>
      <title>DEV Community: Jasur Yusupov</title>
      <link>https://dev.to/jzr-supove</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jzr-supove"/>
    <language>en</language>
    <item>
      <title>Earnflo: A Salary Dashboard That Shows Your Earnings in Real Time</title>
      <dc:creator>Jasur Yusupov</dc:creator>
      <pubDate>Sat, 14 Mar 2026 19:05:58 +0000</pubDate>
      <link>https://dev.to/jzr-supove/earnflo-a-salary-dashboard-that-shows-your-earnings-in-real-time-50m8</link>
      <guid>https://dev.to/jzr-supove/earnflo-a-salary-dashboard-that-shows-your-earnings-in-real-time-50m8</guid>
      <description>&lt;p&gt;Most salary calculators show &lt;strong&gt;static numbers&lt;/strong&gt;.&lt;br&gt;
Monthly salary.&lt;br&gt;
Hourly rate.&lt;br&gt;
Maybe yearly projection.&lt;br&gt;
But real life doesn’t feel static.&lt;/p&gt;

&lt;p&gt;You wake up, start working, take breaks, sleep, and your salary is quietly accumulating somewhere in the background.&lt;br&gt;
I wanted to &lt;strong&gt;visualize that flow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Earnflo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A small web dashboard that turns a raw salary figure into &lt;strong&gt;live, time-aware income widgets&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://earnflo.jzr.uz" rel="noopener noreferrer"&gt;https://earnflo.jzr.uz&lt;/a&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%2F6uirj4lr7m88y6jgxemb.jpeg" 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%2F6uirj4lr7m88y6jgxemb.jpeg" alt="Main dashboard: Live counter" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 The Idea
&lt;/h2&gt;

&lt;p&gt;Most people know their monthly salary.&lt;/p&gt;

&lt;p&gt;But very few know things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how much they earned &lt;strong&gt;today&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;what one &lt;strong&gt;working second&lt;/strong&gt; is worth&lt;/li&gt;
&lt;li&gt;how much they earn &lt;strong&gt;while sleeping&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;how much a &lt;strong&gt;paid day off&lt;/strong&gt; is worth
&lt;/li&gt;
&lt;li&gt;how their salary spreads across the &lt;strong&gt;actual workdays of the month&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those numbers become interesting when you &lt;strong&gt;connect salary with time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Earnflo does exactly that.&lt;/p&gt;

&lt;p&gt;It spreads your salary across the &lt;strong&gt;effective working time of the current month&lt;/strong&gt; and visualizes it through different widgets.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 What the Dashboard Shows
&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%2F2mrfr2pqcl8oqf5i7yk0.jpeg" 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%2F2mrfr2pqcl8oqf5i7yk0.jpeg" alt="Various Dashboards" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of a single salary number, Earnflo produces &lt;strong&gt;time-aware income metrics&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;earnings this month
&lt;/li&gt;
&lt;li&gt;income per working hour
&lt;/li&gt;
&lt;li&gt;income per week
&lt;/li&gt;
&lt;li&gt;income per working second&lt;/li&gt;
&lt;li&gt;value of a paid day off
&lt;/li&gt;
&lt;li&gt;value of a full night of sleep
&lt;/li&gt;
&lt;li&gt;projected quarterly / half-year / yearly income&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;salary is not just a number — it's a &lt;strong&gt;rate flowing through time&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🗓 The Calendar Problem
&lt;/h3&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%2Ffha1gz4x3qcdcavgjm8q.jpeg" 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%2Ffha1gz4x3qcdcavgjm8q.jpeg" alt="Calendar UI" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A simple salary ÷ 30 days calculation would be wrong.&lt;/p&gt;

&lt;p&gt;Real months contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;weekends&lt;/li&gt;
&lt;li&gt;public holidays&lt;/li&gt;
&lt;li&gt;varying numbers of workdays&lt;/li&gt;
&lt;li&gt;different working schedules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Earnflo solves this by building a &lt;strong&gt;month model&lt;/strong&gt; based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workdays per week&lt;/li&gt;
&lt;li&gt;working hours per day&lt;/li&gt;
&lt;li&gt;shift start time&lt;/li&gt;
&lt;li&gt;extra days off&lt;/li&gt;
&lt;li&gt;regional holidays&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This produces a realistic &lt;strong&gt;effective work calendar&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Example snapshot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;public holidays: 2&lt;/li&gt;
&lt;li&gt;effective workdays: 25&lt;/li&gt;
&lt;li&gt;weekends: 4&lt;/li&gt;
&lt;li&gt;scheduled hours: 250&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That data drives all the calculations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Holiday Awareness
&lt;/h3&gt;

&lt;p&gt;One interesting part was &lt;strong&gt;holiday support&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Currently supported calendars:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uzbekistan&lt;/li&gt;
&lt;li&gt;United States&lt;/li&gt;
&lt;li&gt;Russia&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Public holidays are excluded from the effective work schedule.&lt;/p&gt;

&lt;p&gt;This allows the dashboard to reflect &lt;strong&gt;actual regional work rhythms&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  💵 Salary Normalization
&lt;/h2&gt;

&lt;p&gt;People get paid in different ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hourly&lt;/li&gt;
&lt;li&gt;weekly&lt;/li&gt;
&lt;li&gt;monthly&lt;/li&gt;
&lt;li&gt;yearly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Earnflo normalizes all of them into a &lt;strong&gt;single internal monthly representation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Once normalized, it can derive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hourly rate&lt;/li&gt;
&lt;li&gt;per-second rate&lt;/li&gt;
&lt;li&gt;per-week earnings&lt;/li&gt;
&lt;li&gt;calendar-based projections&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎛 Configurable Work Rhythm
&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%2Fh42kw9kzb5v3onrv8qid.jpeg" 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%2Fh42kw9kzb5v3onrv8qid.jpeg" alt="Control Panel" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The dashboard adapts instantly to user configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;salary amount&lt;/li&gt;
&lt;li&gt;currency&lt;/li&gt;
&lt;li&gt;pay period&lt;/li&gt;
&lt;li&gt;holiday calendar&lt;/li&gt;
&lt;li&gt;workdays per week&lt;/li&gt;
&lt;li&gt;work hours per day&lt;/li&gt;
&lt;li&gt;shift start time&lt;/li&gt;
&lt;li&gt;extra days off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once configured, everything updates &lt;strong&gt;live&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🇺🇿 Multilingual Support
&lt;/h2&gt;

&lt;p&gt;Earnflo supports three languages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;English&lt;/li&gt;
&lt;li&gt;Russian&lt;/li&gt;
&lt;li&gt;Uzbek&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;UI language can be switched instantly and is persisted locally.&lt;/p&gt;




&lt;h2&gt;
  
  
  💱 Supported Currencies
&lt;/h2&gt;

&lt;p&gt;Currently supported currencies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UZS&lt;/li&gt;
&lt;li&gt;USD&lt;/li&gt;
&lt;li&gt;RUB&lt;/li&gt;
&lt;li&gt;EUR&lt;/li&gt;
&lt;li&gt;GBP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All widgets automatically adapt to the selected currency.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧑‍💻 Why I Built This
&lt;/h2&gt;

&lt;p&gt;I like building tools that make &lt;strong&gt;abstract things visible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Time and money are two of the most abstract resources we deal with every day.&lt;/p&gt;

&lt;p&gt;When you connect them, interesting insights appear.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the value of a weekend&lt;/li&gt;
&lt;li&gt;the value of a vacation day&lt;/li&gt;
&lt;li&gt;the value of one focused working hour&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Earnflo tries to make those relationships &lt;strong&gt;visible at a glance&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🖥 Tech Stack
&lt;/h2&gt;

&lt;p&gt;Earnflo intentionally uses a &lt;strong&gt;minimal modern stack&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React 19&lt;/li&gt;
&lt;li&gt;Vite 7&lt;/li&gt;
&lt;li&gt;Plain CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No backend.&lt;br&gt;
All settings persist locally using &lt;strong&gt;localStorage&lt;/strong&gt;, which makes the app fast and privacy-friendly.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡️ Live Demo
&lt;/h2&gt;

&lt;p&gt;You can try it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://earnflo.jzr.uz" rel="noopener noreferrer"&gt;earnflo.jzr.uz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No signup required.&lt;/p&gt;




&lt;h2&gt;
  
  
  📩 Feedback Welcome
&lt;/h2&gt;

&lt;p&gt;This project started as a small experiment.&lt;/p&gt;

&lt;p&gt;If you have ideas for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;new widgets&lt;/li&gt;
&lt;li&gt;additional currencies&lt;/li&gt;
&lt;li&gt;more holiday calendars&lt;/li&gt;
&lt;li&gt;productivity metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd love to hear them.&lt;/p&gt;

</description>
      <category>saas</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🚀 Just Launched AiogramX: Prebuilt Widgets for Telegram Bots Using Aiogram (Open Source)</title>
      <dc:creator>Jasur Yusupov</dc:creator>
      <pubDate>Thu, 29 May 2025 13:05:13 +0000</pubDate>
      <link>https://dev.to/jzr-supove/just-launched-aiogramx-prebuilt-widgets-for-telegram-bots-using-aiogram-open-source-5h75</link>
      <guid>https://dev.to/jzr-supove/just-launched-aiogramx-prebuilt-widgets-for-telegram-bots-using-aiogram-open-source-5h75</guid>
      <description>&lt;p&gt;Hey Everyone! 👋&lt;/p&gt;

&lt;p&gt;I just released an open-source project I’ve been building: &lt;a href="https://github.com/jzr-supove/aiogramx" rel="noopener noreferrer"&gt;&lt;strong&gt;AiogramX&lt;/strong&gt;&lt;/a&gt; — a collection of &lt;strong&gt;modular, ready-to-use widgets&lt;/strong&gt; for building rich Telegram bot UIs using &lt;a href="https://github.com/aiogram/aiogram" rel="noopener noreferrer"&gt;Aiogram&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🧱 What It Is&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AiogramX simplifies the process of building interactive Telegram bots by giving you clean, high-level components — no more managing raw &lt;code&gt;callback_data&lt;/code&gt; or building inline keyboards by hand.&lt;/p&gt;

&lt;p&gt;It currently includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📚 &lt;code&gt;Paginator&lt;/code&gt; — page navigation&lt;/li&gt;
&lt;li&gt;🗓️ &lt;code&gt;Calendar&lt;/code&gt; — date selection&lt;/li&gt;
&lt;li&gt;🧩 &lt;code&gt;CheckboxGroup&lt;/code&gt; — multi-select options&lt;/li&gt;
&lt;li&gt;🕓 &lt;code&gt;TimeSelector&lt;/code&gt; — choose hour/minute&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each widget handles both &lt;strong&gt;rendering&lt;/strong&gt; and &lt;strong&gt;interaction logic&lt;/strong&gt;, so you can focus on user experience — not boilerplate.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🛠️ More Widgets Coming Soon&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I plan to add more components like dropdowns, multi-step forms, tabs, and toggle switches.&lt;br&gt;
If you have ideas, I’d love to hear them — or better yet, contribute!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🧪 Try It Live&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Check out the &lt;a href="https://t.me/aiogramx_demobot?start=devTo" rel="noopener noreferrer"&gt;demo bot&lt;/a&gt; on Telegram&lt;br&gt;
(The full demo source is in the repo under &lt;code&gt;/demo&lt;/code&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;💡 Why I Built It&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Working with Telegram bots usually means dealing with callback data, inline keyboards, and routing mess. AiogramX gives you &lt;strong&gt;declarative-like building blocks&lt;/strong&gt;: drop in a widget, hook a callback, done.&lt;/p&gt;

&lt;p&gt;Think of it as reusable UI components for Telegram bots — like a mini toolkit for clean user flows.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;👐 Looking for Feedback &amp;amp; Support&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Would love to hear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feature suggestions&lt;/li&gt;
&lt;li&gt;Widget ideas&lt;/li&gt;
&lt;li&gt;Real-world use cases&lt;/li&gt;
&lt;li&gt;Bug reports or PRs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you find it useful, &lt;strong&gt;please give the project a ⭐ on GitHub&lt;/strong&gt; — it really helps!&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 &lt;strong&gt;Links&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/jzr-supove/aiogramx" rel="noopener noreferrer"&gt;https://github.com/jzr-supove/aiogramx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Demo Bot: &lt;a href="https://t.me/aiogramx_demobot?start=devTo" rel="noopener noreferrer"&gt;https://t.me/aiogramx_demobot&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading! Hope this helps you build better Telegram bots 🙌&lt;br&gt;&lt;br&gt;
Feedback is super welcome 👇&lt;/p&gt;

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