<?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: Ioana Frincu</title>
    <description>The latest articles on DEV Community by Ioana Frincu (@frincuioana).</description>
    <link>https://dev.to/frincuioana</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%2F246778%2Fbdd3235d-3184-41e3-8346-89ed3a50fe18.jpg</url>
      <title>DEV Community: Ioana Frincu</title>
      <link>https://dev.to/frincuioana</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/frincuioana"/>
    <language>en</language>
    <item>
      <title>I automated my invoice admin with n8n (and you can copy it)</title>
      <dc:creator>Ioana Frincu</dc:creator>
      <pubDate>Mon, 19 Oct 2026 17:12:15 +0000</pubDate>
      <link>https://dev.to/frincuioana/i-automated-my-invoice-admin-with-n8nand-you-can-copy-it-5349</link>
      <guid>https://dev.to/frincuioana/i-automated-my-invoice-admin-with-n8nand-you-can-copy-it-5349</guid>
      <description>&lt;h2&gt;
  
  
  The monthly invoice scavenger hunt
&lt;/h2&gt;

&lt;p&gt;If you run a small business, you know the ritual. Once a month, your accountant asks for last month’s invoices, and you dig through your inbox for attachments, “view your invoice” links, and receipts from every tool you pay for.&lt;/p&gt;

&lt;p&gt;It’s not hard work, but it’s easy to miss one, and it always lands on a busy day. So I built a small n8n automation that does it for me, quietly, every time an invoice arrives.&lt;/p&gt;

&lt;p&gt;In this post, I’ll explain the logic behind it and why it’s worth it for any small business owner. The template will be available for download soon, so you can set up the same thing for your business.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Every invoice that reaches my inbox ends up in three places, without me touching it:&lt;/p&gt;

&lt;p&gt;The right folder. It’s saved as a PDF in Google Drive, in a folder for its year and month. Missing folders are created automatically.&lt;/p&gt;

&lt;p&gt;A monthly spreadsheet. I add a row with the supplier, their VAT code, the date, the amount, and the currency.&lt;/p&gt;

&lt;p&gt;Out of the way. The email gets a label, so nothing is filed twice.&lt;/p&gt;

&lt;p&gt;At the end of the month, nothing needs to be collected. I share the month’s folder with my accountant, and the spreadsheet is already inside.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;The logic is simple. Every 15 minutes, the workflow checks for new invoice emails and handles them one at a time:&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%2Fzqmla7f9klyhs5dlbl6i.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%2Fzqmla7f9klyhs5dlbl6i.png" alt=" " width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Work out the month.&lt;/strong&gt; The email's arrival date determines which year and month folder the invoice belongs in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get a PDF.&lt;/strong&gt; If the invoice is attached, use it as is. If the email has only a link, the workflow saves the invoice page as a PDF, like printing it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read it.&lt;/strong&gt; An AI assistant reads the invoice and picks out the five details an accountant needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File and log it.&lt;/strong&gt; The PDF goes into the month folder, and a new row goes into that month’s spreadsheet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mark it done.&lt;/strong&gt; Label the email so it’s never handled twice. If an email has nothing usable, skip it and note why.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two details that make it work
&lt;/h2&gt;

&lt;p&gt;Not every invoice is a PDF. Some suppliers, such as Paddle (which bills for n8n) or Stripe, only send a link to an invoice page. The workflow opens that page and saves it as a PDF, so these invoices end up in the folder like any other. It skips links that require a login instead of saving a sign-in screen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No rules to maintain.&lt;/strong&gt; Every supplier’s invoice looks different, and some are in various languages. Instead of setting up rules per supplier, an AI assistant (Claude or ChatGPT) reads each invoice and finds the supplier, VAT code, date, amount, and currency. If it can’t find a value, the cell stays empty, so nothing disappears without you noticing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it’s worth it for a small business
&lt;/h2&gt;

&lt;p&gt;You don’t need a finance team to keep your books tidy. For a small business owner, this kind of automation pays off in a few ways:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No month-end scramble.&lt;/strong&gt; File invoices as they arrive, not in a rush on the day your accountant asks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fewer missed invoices.&lt;/strong&gt; A forgotten receipt can mean VAT you can’t deduct or an expense you can’t claim. Here, every invoice email is either filed or labeled with why you skipped it.&lt;/p&gt;

&lt;p&gt;**An accountant-ready summary. **The monthly spreadsheet already has the details accountants ask for, and you can download it as Excel in one click.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools you already use.&lt;/strong&gt; It runs on Gmail, Google Drive, and Google Sheets, so you don’t need to learn a new system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The template
&lt;/h2&gt;

&lt;p&gt;This workflow is now a free n8n template available here: &lt;a href="https://n8n.io/workflows/21206-save-extract-and-log-email-invoices-with-gmail-drive-sheets-claude-and-pdfco/" rel="noopener noreferrer"&gt;https://n8n.io/workflows/21206-save-extract-and-log-email-invoices-with-gmail-drive-sheets-claude-and-pdfco/&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fftktq3rmpta33y4wit8o.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%2Fftktq3rmpta33y4wit8o.png" alt=" " width="799" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can connect your Gmail and Google Drive, point it at your invoices folder, and let it run.&lt;/p&gt;

&lt;p&gt;It isn’t magic. Invoices that sit behind a login still need a manual download, and it’s worth checking the first few spreadsheet rows against the PDFs. But for the steady stream of everyday invoices, it means one less thing on my plate.&lt;/p&gt;

&lt;p&gt;And if you have a supplier whose invoices always cause trouble, tell me in the comments, and I’ll make sure the template handles it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>n8n</category>
      <category>automation</category>
      <category>smallbusiness</category>
    </item>
    <item>
      <title>Publish your smart contracts without going bananas! [Part 1]</title>
      <dc:creator>Ioana Frincu</dc:creator>
      <pubDate>Thu, 10 Oct 2019 09:49:56 +0000</pubDate>
      <link>https://dev.to/frincuioana/publish-you-smart-contracts-without-going-bananas-part-1-4in9</link>
      <guid>https://dev.to/frincuioana/publish-you-smart-contracts-without-going-bananas-part-1-4in9</guid>
      <description>&lt;h1&gt;
  
  
  First things first, what is a blockchain?
&lt;/h1&gt;

&lt;p&gt;Some say it's a database, while others think it's a system. I believe that the correct definition is the one available on Wikipedia: &lt;em&gt;A blockchain, originally block chain, is a growing list of records, called blocks, which are linked using cryptography. Each block contains a cryptographic hash of the previous block a timestamp, and transaction data (generally represented as a Merkle tree root hash).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If a blockchain is used as a distributed ledger, effectively means that it's managed by a peer-to-peer network, collectively adhering to a protocol for inter-node communication and a consensus for transaction validation. Blockchains are considered to be secure by design as they exemplify a distributed computing system.&lt;/p&gt;

&lt;p&gt;In our three-year quest to offer premium blockchain development to all our clients at Udevoffice, we have tried and tested many workflows for this to happen. During this time, we ended up with a simple process to develop and launch smart contracts (both for crypto and for DApps). In this article, we are focusing on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the Ethereum blockchain and&lt;/li&gt;
&lt;li&gt;on developing a token using smart contracts.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;The focus of this article will be the ETHEREUM BLOCKCHAIN and how to develop a token using smart contracts. Before we dive in, let's take a little detour and explain more about the inner architecture of the Ethereum blockchain.&lt;br&gt;
Before diving in, we will take a little detour and explain more about the inner architecture of the Ethereum blockchain. You will need programming skills and terminal knowledge. We will develop publish and unit test a coin/token called PostCoin on the Ethereum Rinkeby testnet network. Further experimenting exercises are available at the end of the article.&lt;br&gt;
Propper blockchain knowledge is not required. We will walk you through all the terminology and point to the right resources whenever in-depth knowledge is necessary.&lt;/p&gt;




&lt;h1&gt;
  
  
  The EVM
&lt;/h1&gt;

&lt;p&gt;The Ethereum blockchain is composed of nodes that communicate with each other. Each node lays on a common piece of software that, in the case of Ethereum, is called the Ethereum Virtual Machine or simply EVM.&lt;/p&gt;

&lt;p&gt;Each node, that stores full or partial information about each block in the chain, verifies the authenticity and traceability of transactions.&lt;/p&gt;

&lt;p&gt;The EVM is a Turing complete machine; this means that it can compute almost anything, given the necessary amount of resources. Various implementations of the EVM can be found all over the Internet. Some examples of what we worked with here at Udevoffice include go-ethereum or simply (geth), an Ethereum client written in GO, Parity client written in Rust and EthereumJ written in Java.&lt;/p&gt;

&lt;p&gt;These are the go-to resources for whenever you want to install a local blockchain node or you want a custom setup for a private chain. If you are interested in private blockchains with custom logic for consensus algorithm, block rewards or custom Proof of Authority chains we recommend the Parity client because of their extensive documentation.&lt;/p&gt;

&lt;p&gt;On the other hand, for the purpose of writing smart contracts, there's no need to install or use them because the Truffle framework that we are using here will simulate a local blockchain for you with no hassle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Addresses
&lt;/h3&gt;

&lt;p&gt;Each blockchain entity is uniquely identified by an address. There are two types: contract address and user address.&lt;/p&gt;

&lt;p&gt;Syntactically they look the same, both use a 20 byte format which is a 40 character hex encoded string prefixed with 0x (example: 0xD52216266AC1EF883F3A13CDCD7C3F21523A3f7C).&lt;/p&gt;

&lt;p&gt;The fundamental difference between the two is that one can store code (smart contract addresses) while the other doesn't. Another difference is that the initiator of a transaction is always a user address. This is important to note because as a smart contract developer the initiator of a function(transaction) chain is always the user. Smart contracts don't do anything by themselves, they just alter the initial transaction the user sent. If you come from a web development background you can think of them as middlewares for the client requests.&lt;/p&gt;

&lt;h1&gt;
  
  
  Transactions
&lt;/h1&gt;

&lt;p&gt;Each mined block contains transactions that vary from a simple basic transaction (sending ether to another address) to complex transactions that are governed by the business requirements coded in the smart contracts. One special category of transactions is the token transactions that are governed by a Token developed over the ethereum network. The Tokens are actually smart contracts that encapsulate business logic specific to the DApp developed.&lt;/p&gt;

&lt;p&gt;Transactions may include subtransactions. When a user calls a contract and the contract interacts with other contracts or entities on the blockchain.&lt;/p&gt;

&lt;p&gt;There are two types of transactions that concern us smart contract developers and the main difference between them is that one is free and one costs ether. A read transaction (the free one) simply reads state from the blockchain (this can be getters or static functions) and the other are write transactions. The read transactions are never included in the mining pool (they are not mined). The read transactions are just requests that are executed on the local node that read state from the blockchain.&lt;/p&gt;

&lt;h1&gt;
  
  
  Consensus
&lt;/h1&gt;

&lt;p&gt;This is an algorithm that has multiple implementations and is used by all blockchains. It describes how the nodes agree on what information to permanently store on the blocks that form the blockchain.&lt;/p&gt;

&lt;p&gt;Multiple implementations of the blockchain consensus exist:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proof of Work (PoW) consensus.&lt;/strong&gt;&amp;nbsp;&lt;br&gt;
This is the algorithm used by the Bitcoin and Main Ethereum network and is tightly related to the way miners mine blocks. Mining is the process of solving mathematical equations in order to verify and include transactions.&lt;br&gt;
High computational power is required by the miners to solve the mathematical equations. Each block corresponds to a specific equation and whoever solves the problem first will get the right to generate the new block in the chain.&lt;br&gt;
We will relate to this consensus algorithm in this article because it is still the most spread algorithm used on the main blockchain networks. In-depth information can also be found on Cointelegraph.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proof of Authority (PoA) and Proof of Stake consensus algorithms.&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A problem with the PoW algorithm is that the difficulty of the mathematical equation increases on each block and in respect to that the computational power required increases also. So other algorithms emerged (like PoA, PoS or Delegate PoS).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;The Proof of Authority algorithm has a dedicated set of nodes called validators that validate transactions with respect to a set of rules. They usually have a dedicated type of node. The validator list is, in most blockchains, that implement PoA modified with a voting system that in most cases implemented directly on the chain. (Example Kovan test network)&amp;nbsp;
The Proof of Stake algorithm aims to achieve distributed consensus by using a staking system in which the participants stake a portion of their wealth (in tokens or the main network coin) and become responsible of the generation of the next block. In the case of misbehaviour, the participant loses his stake.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Delegated Proof of Stake is a hybrid of the PoA and PoS most importantly used in the EoS network.&lt;/p&gt;

&lt;h1&gt;
  
  
  Miners, gas and gas&amp;nbsp;price
&lt;/h1&gt;

&lt;p&gt;In a blockchain, most of the hard work is done by miners. They execute and put transactions in a block. On Ethereum, most of the resources needed for computation are guaranteed by those miners. They include the transactions in a mining pool then they order them using an algorithm for prioritization and finally, they generate a new block for the blockchain. The last block is linked with the one before it (hence the "chain" in the blockchain word) to achieve traceability.&lt;/p&gt;

&lt;p&gt;In this context, the Smart Contracts can be defined (in a very simple way) as a set of instructions for the miners on how to execute user-initiated transactions.&lt;br&gt;
But wait. Here you might have spotted a problem. There seems to be a lot of work for the miners! So how can we make sure that miners will want to mine our transactions?&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Some kind of reward must be introduced for the miners to incentivize their work. Also, this reward should be constant per each mined block. This means that the same amount of work needs to be done to mine, secure and generate two blocks of the same size. So we need to measure blocks, and in order to do that, we first need to think of a method to measure a transaction in a block.&lt;/p&gt;

&lt;p&gt;In order to solve this issue, some kind of variable has to be introduced that can measure the complexity of the code we write in our smart contracts. This concept will also help us determine how many transactions can fit in a block. And, finally, this should be directly dependant on the price the user pays for his transactions to be executed. On the Ethereum blockchain, this is called the gas.&lt;/p&gt;

&lt;p&gt;Usually, miners prioritize transactions by their gas amount and gas price. The gas price is a user set value that literally translates to how much money a user spends on 1 point of gas. Therefore, the actual cost of a transaction is the total gas that transaction consumes multiplied by the gasPrice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smart contract code and gas consumption correlation
&lt;/h3&gt;

&lt;p&gt;For a certain piece of code to be executed we, as smart contract developers, will always have to think about the amount of gas each operation will cost. This is the reason that most of the smart contract code out there is focused primarily on safety and then on gas consumption. Also, there is no point of making a super transaction that will resolve in theory our business logic without considering the gas amount that the transaction will consume. We can generate a transaction that requires more gas than a block can fit in and in consequence that transaction will never be executed on the blockchain. Also, don't think that a situation like this is far fetched. A simple iteration on a dynamic array can cause this.&lt;/p&gt;

&lt;p&gt;We must also bear in mind that high gas consumption literally translates to a higher price for the end-user. For more information on gas prices, a maintained repository with actual gas costs per operation can be found here on &lt;a href="https://github.com/djrtwo/evm-opcode-gas-costs/blob/master/opcode-gas-costs_EIP-150_revision-1e18248_2017-04-12.csv" rel="noopener noreferrer"&gt;Github&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smart contract code - privacy and security
&lt;/h3&gt;

&lt;p&gt;Another cause of concern when writing smart contracts is that your code is not private! You must be aware that, with every line of code you write, an "evil" eye is reading it and may try to break it. Also, there is no point of thinking your code is private because this is a decentralized technology and making your code public is an encouraged practice.&lt;/p&gt;

&lt;p&gt;Another practise of those that develop smart contracts is to audit other developers smart contract code this is to reduce the risk of a bug to end up in the final published code. And a bug, when considering the distributed nature of the blockchain can and will most certainly be exploited!&lt;br&gt;
The reason behind this is that smart contracts CAN'T be updated. Once the address is associated with the code you can consider the smart contract published and being in a totally immutable state.&lt;/p&gt;

&lt;p&gt;In fact, the action of publishing a smart contract is a transaction itself that is mined by miners and included in a block with a specific address.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>ethereum</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
