<?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: VHWorx</title>
    <description>The latest articles on DEV Community by VHWorx (@vhworx).</description>
    <link>https://dev.to/vhworx</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F800498%2Fbdfb5dfc-7001-4584-8bb1-4c5b81a860f8.png</url>
      <title>DEV Community: VHWorx</title>
      <link>https://dev.to/vhworx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vhworx"/>
    <language>en</language>
    <item>
      <title>I gave a trading bot $148 of real money even though my backtest says it loses. Week one</title>
      <dc:creator>VHWorx</dc:creator>
      <pubDate>Sat, 14 Nov 2026 22:43:04 +0000</pubDate>
      <link>https://dev.to/vhworx/i-gave-a-trading-bot-148-of-real-money-even-though-my-backtest-says-it-loses-week-one-1k2d</link>
      <guid>https://dev.to/vhworx/i-gave-a-trading-bot-148-of-real-money-even-though-my-backtest-says-it-loses-week-one-1k2d</guid>
      <description>&lt;p&gt;A week ago I started a small public experiment.&lt;/p&gt;

&lt;p&gt;A bot trades Bitcoin and Ethereum with $148 of my own money. Before launch I ran the same rules on 180 days of past prices, and the backtest said they lose over time. Instead of shelving the idea, I made every trade public. Live bot vs backtest: who's right?&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3i240ywnr0mom6wk540z.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3i240ywnr0mom6wk540z.png" alt="Robot vs Test, day 6: started with $148, total +$111" width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 6 in numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Start: $148&lt;/li&gt;
&lt;li&gt;Profit already taken out: $124&lt;/li&gt;
&lt;li&gt;Still on the account: $135&lt;/li&gt;
&lt;li&gt;Total since start: +$111 (+75%)&lt;/li&gt;
&lt;li&gt;34 trades: 29 won, 5 lost. Worst trade: −$18.56&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Six days prove nothing, and I still expect the backtest to win in the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it's built
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The bot&lt;/strong&gt;: a Python service checks Binance candles every 20 seconds. Entries and exits are plain rules, no AI making decisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The journal&lt;/strong&gt;: every closed trade goes into a log, and everything public is generated from it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The posts&lt;/strong&gt;: each trade goes to Telegram, X and Facebook. Daily summaries become 20-second vertical videos with a voice-over for TikTok and YouTube Shorts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The site&lt;/strong&gt;: plain static HTML rebuilt after every trade, with a page for each day.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/q4EWEziw2ew" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What brought viewers so far
&lt;/h2&gt;

&lt;p&gt;TikTok: about 1,000 views from 4 videos. Facebook, YouTube and X: close to zero. Short vertical videos with real numbers are the only thing strangers watch.&lt;/p&gt;

&lt;p&gt;Every trade and every day: &lt;a href="https://robotvstest.com" rel="noopener noreferrer"&gt;https://robotvstest.com&lt;/a&gt;&lt;br&gt;
Telegram channel with each trade: &lt;a href="https://t.me/robotvstest" rel="noopener noreferrer"&gt;https://t.me/robotvstest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not financial advice, just an experiment in public. What would make it more convincing, either way?&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>python</category>
      <category>buildinpublic</category>
      <category>crypto</category>
    </item>
    <item>
      <title>FinMan, 5 months later: an Android app, any bank's statements, an income PDF and more</title>
      <dc:creator>VHWorx</dc:creator>
      <pubDate>Tue, 10 Nov 2026 11:26:43 +0000</pubDate>
      <link>https://dev.to/vhworx/finman-5-months-later-an-android-app-any-banks-statements-an-income-pdf-and-more-3pnc</link>
      <guid>https://dev.to/vhworx/finman-5-months-later-an-android-app-any-banks-statements-an-income-pdf-and-more-3pnc</guid>
      <description>&lt;p&gt;In June I wrote here about FinMan, my app for expenses, utility bills and car costs (&lt;a href="https://dev.to/vhworx/i-got-tired-of-feeding-my-expense-tracker-so-i-spent-years-building-one-that-feeds-itself-146d"&gt;the first post&lt;/a&gt;). Here is what has shipped since.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phone first
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Android app on Google Play. Share a photo or a bank statement straight from your gallery or banking app into FinMan.&lt;/li&gt;
&lt;li&gt;iPhone: install the web app to the home screen. Dark theme, reminders.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Money
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Any bank's statement — CSV, Excel or PDF. Under the hood the AI runs only once per new bank format: it writes a parsing template, and every next file from that bank is parsed instantly without AI.&lt;/li&gt;
&lt;li&gt;Importing the same period twice, or the same operations from another file, creates no duplicates. One tap undoes an import.&lt;/li&gt;
&lt;li&gt;Income is a first-class part now: its own categories and rules, and a one-page PDF income statement (proof of income for a landlord, a visa or a loan) built from your imported statements.&lt;/li&gt;
&lt;li&gt;Trips: a tag with a date range marks every expense of the trip and shows its total by category.&lt;/li&gt;
&lt;li&gt;Switch the display currency with one tap.&lt;/li&gt;
&lt;li&gt;Family: the owner sees everyone's spending, and the same categories add up into one row.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Car and home
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fuel receipt and odometer photos give fuel use and the real cost per kilometre.&lt;/li&gt;
&lt;li&gt;Meter photos give the reading, usage and the bill at your own tariffs, several meters at once. Tenants can send their readings themselves. For some Ukrainian utility companies FinMan even submits the reading to the provider's website.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of it in 50+ languages, on the web and in Telegram and WhatsApp bots.&lt;/p&gt;

&lt;p&gt;What would make you switch from the tracker you use now? I read every comment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://finman.vhworx.com/?utm_source=devto" rel="noopener noreferrer"&gt;finman.vhworx.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>I got tired of feeding my expense tracker, so I spent years building one that feeds itself</title>
      <dc:creator>VHWorx</dc:creator>
      <pubDate>Fri, 12 Jun 2026 16:57:42 +0000</pubDate>
      <link>https://dev.to/vhworx/i-got-tired-of-feeding-my-expense-tracker-so-i-spent-years-building-one-that-feeds-itself-146d</link>
      <guid>https://dev.to/vhworx/i-got-tired-of-feeding-my-expense-tracker-so-i-spent-years-building-one-that-feeds-itself-146d</guid>
      <description>&lt;p&gt;TL;DR: I built &lt;a href="https://finman.vhworx.com" rel="noopener noreferrer"&gt;FinMan&lt;/a&gt; — a free personal finance app that imports any bank statement with AI, reads utility meters and fuel receipts from photos sent to a Telegram/WhatsApp bot, and tells me what one kilometer in my car actually costs. It started as a Perl script. Here is what I learned along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with every finance app I tried
&lt;/h2&gt;

&lt;p&gt;I just wanted to know where my money goes. Simple wish, right?&lt;/p&gt;

&lt;p&gt;I tried the popular trackers. Every single one failed me the same way: &lt;strong&gt;too much manual work&lt;/strong&gt;. Enter every expense by hand. Configure categories for an hour. And almost none of them could pick up online card payments automatically — which is where most of my money actually went.&lt;/p&gt;

&lt;p&gt;At some point I caught myself spending more time &lt;em&gt;feeding&lt;/em&gt; the tracker than &lt;em&gt;understanding&lt;/em&gt; my finances. So I did the developer thing: I wrote my own.&lt;/p&gt;

&lt;p&gt;The first version was gloriously unfashionable — &lt;strong&gt;Perl on the backend, plain HTML and JavaScript on the front&lt;/strong&gt;. Ugly, but mine. And it did one thing the polished apps didn't: it worked the way &lt;em&gt;I&lt;/em&gt; lived.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breakthrough #1: expenses that record themselves
&lt;/h2&gt;

&lt;p&gt;The first real win was integrating &lt;strong&gt;Monobank's webhook API&lt;/strong&gt;. Pay with the card — a second later the transaction is in my app: amount, merchant, category. No typing. No forgetting. For the first time my spending picture was complete &lt;em&gt;without me doing anything&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That became the design principle for everything after: if it requires discipline, it will eventually fail. Automate the input.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breakthrough #2: stop writing bank parsers, let AI read the statement
&lt;/h2&gt;

&lt;p&gt;Other banks meant statement imports. Each bank has its own format: CSV here, PDF there, different columns, different date conventions. I wrote parser after parser — Privatbank, PUMB, Raiffeisen, Revolut, Wise, Erste, N26...&lt;/p&gt;

&lt;p&gt;Eventually I got tired and built a different mechanism: a declarative extraction engine where &lt;strong&gt;AI recognizes the structure of a statement it has never seen before&lt;/strong&gt;. Today FinMan imports any statement. New bank? No new code.&lt;/p&gt;

&lt;p&gt;Technical lesson: the hard part wasn't the AI — it was stable payment IDs (so re-imports don't duplicate transactions) and currency handling per row. The boring parts are always the hard parts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breakthrough #3: the camera is the best input device
&lt;/h2&gt;

&lt;p&gt;Two monthly rituals quietly ate my evenings:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Utility meters.&lt;/strong&gt; Read the meter, subtract last month, multiply by tariff, repeat per service. Now: photo of the meter → bot → AI reads the digits, recognizes which utility service it belongs to, computes the difference and the amount due.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Car costs.&lt;/strong&gt; I always wanted the real number: how much per kilometer — fuel vs repairs vs maintenance separately. Now: photo of the fuel receipt + photo of the odometer → the app calculates consumption (L/100km or MPG) and cost per km/mile.&lt;/p&gt;

&lt;p&gt;The best part: the bot figures out what you sent it all by itself. Just drop a photo — no menus, no prompts, no explaining. It just knows what to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breakthrough #4: numbers that don't lie
&lt;/h2&gt;

&lt;p&gt;Two smaller features turned out to matter the most for honest analytics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-currency with stored exchange rates.&lt;/strong&gt; My local currency wasn't always stable, so comparing March to October in it was meaningless. Every payment keeps its rate; analytics can be viewed in a stable currency across any period.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excluded categories.&lt;/strong&gt; Business projects and investments don't mix into household totals — but can still be analyzed separately. Daily spending stays readable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  From personal tool to product
&lt;/h2&gt;

&lt;p&gt;Last year I rebuilt everything on a modern stack — &lt;strong&gt;FastAPI + SQLAlchemy 2.0 async on the backend, Vue 3 + TypeScript on the front&lt;/strong&gt; — added family groups (shared budgets with roles), a tenant mode for landlords (your tenant sends meter photos, you stay in control), and an AI-assisted translation pipeline that localized the product into 20+ languages.&lt;/p&gt;

&lt;p&gt;The core features are free. The tool was born free — I made it for myself first, and that's still how every feature gets tested.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://finman.vhworx.com" rel="noopener noreferrer"&gt;finman.vhworx.com&lt;/a&gt; · &lt;a href="https://finman.vhworx.com/story" rel="noopener noreferrer"&gt;the full story&lt;/a&gt; · &lt;a href="https://t.me/vikFinManBot" rel="noopener noreferrer"&gt;Telegram bot&lt;/a&gt; · &lt;a href="https://wa.me/4367764801396" rel="noopener noreferrer"&gt;WhatsApp bot&lt;/a&gt; · &lt;a href="https://github.com/vityah1/finman-feedback" rel="noopener noreferrer"&gt;feedback &amp;amp; roadmap on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What's the one manual routine in your life you'd most like to automate away? That question is where this whole project came from.&lt;/p&gt;

</description>
      <category>sideprojects</category>
      <category>ai</category>
      <category>webdev</category>
      <category>python</category>
    </item>
  </channel>
</rss>
