<?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: Heramb Chaudhari</title>
    <description>The latest articles on DEV Community by Heramb Chaudhari (@heramb1221).</description>
    <link>https://dev.to/heramb1221</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%2F2144403%2F82d2ab8d-093c-4593-b9cd-d4c05da25297.png</url>
      <title>DEV Community: Heramb Chaudhari</title>
      <link>https://dev.to/heramb1221</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/heramb1221"/>
    <language>en</language>
    <item>
      <title>Poolfolio: An Investment Tracker Built for My Friends</title>
      <dc:creator>Heramb Chaudhari</dc:creator>
      <pubDate>Sun, 04 Oct 2026 14:18:47 +0000</pubDate>
      <link>https://dev.to/heramb1221/poolfolio-an-investment-tracker-built-for-my-friends-3di7</link>
      <guid>https://dev.to/heramb1221/poolfolio-an-investment-tracker-built-for-my-friends-3di7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Poolfolio is a group investment management app I built for my friends who pool money together to invest in stocks and IPOs.  We were managing contributions, ownership, profit/loss, and eventual settlement manually. Different people could contribute different amounts, and every investment could involve a different set of members.  That created a simple but important accounting problem:  &lt;strong&gt;Who owns what?&lt;/strong&gt;  Poolfolio makes that calculation investment-specific and automatic.  For every investment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ownership percentage = member contribution / total contribution   
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Profit or loss is then allocated according to those ownership percentages.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A contributes ₹10,000&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;B contributes ₹20,000&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;C contributes ₹70,000&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;their ownership becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A → 10%&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;B → 20%&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;C → 70%&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the investment makes a ₹20,000 profit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A → ₹2,000 profit&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;B → ₹4,000 profit&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;C → ₹14,000 profit&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app also treats every stock/IPO investment as a separate investment instance, even when the same stock is purchased again later.&lt;/p&gt;

&lt;p&gt;Another important part of Poolfolio is the investment lifecycle:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;DRAFT → OPEN → LOCKED → ACTIVE → SETTLED&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;While an investment is OPEN, contribution amounts can be managed.&lt;/p&gt;

&lt;p&gt;Once it becomes LOCKED, the contribution basis becomes immutable so that ownership and historical accounting cannot be silently changed later.&lt;/p&gt;

&lt;p&gt;The goal isn't to replace Angel One, Groww, or another broker.&lt;/p&gt;

&lt;p&gt;It is to solve the messy accounting and coordination problem around investing together as a group.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Dashboard
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdrurw3dyfldthexv12xz.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%2Fdrurw3dyfldthexv12xz.png" width="256" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The dashboard provides an overview of the user's investment groups, investments, active investments, and portfolio information.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Create a Group
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsd9s0f9hyl1101d1pz4c.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%2Fsd9s0f9hyl1101d1pz4c.png" width="257" height="575"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Users can create an investment group. The creator is automatically assigned as the group LEADER.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Group &amp;amp; Members
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz1qsawdsrcsqw96ici29.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%2Fz1qsawdsrcsqw96ici29.png" width="258" height="575"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each group has its own members and investment history. Roles are used to control who can manage the group's investments and financial records.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Create Investment
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff5uwy2rsaco8xzylgrfn.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%2Ff5uwy2rsaco8xzylgrfn.png" width="256" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Poolfolio supports both stock and IPO investments.&lt;/p&gt;

&lt;p&gt;Each investment is treated as an independent investment instance with its own contribution, transaction, ownership, P&amp;amp;L, and settlement history.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Investment Overview
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl5i2axqde2292moppyrv.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%2Fl5i2axqde2292moppyrv.png" width="255" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The investment overview brings together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ownership&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Locked capital&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Current value&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Contributions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ledger&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;P&amp;amp;L&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AI audit&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PDF reporting&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application keeps the accounting logic on the backend so that the mobile UI is never the source of truth for financial calculations.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Profile
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjtecaw5145mz298yx3r6.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%2Fjtecaw5145mz298yx3r6.png" width="256" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The profile section provides account information and the user's Poolfolio activity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployed Backend
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://poolfolio-api.onrender.com" rel="noopener noreferrer"&gt;Poolfolio API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The backend API is deployed on Render.&lt;/p&gt;

&lt;h3&gt;
  
  
  Source Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Heramb1221/poolfolio" rel="noopener noreferrer"&gt;Poolfolio GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Poolfolio uses a backend-first architecture because financial calculations need a single source of truth.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technology Stack
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Mobile
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;React Native&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Expo&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Expo Router&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;NativeWind&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TanStack Query&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;React Hook Form&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Zod&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Expo SecureStore&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Backend
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Node.js&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Express&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prisma&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PostgreSQL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;JWT authentication&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Argon2 password hashing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  AI
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Gemma&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TabPFN&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Infrastructure
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Render&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sentry&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Backend-First Accounting
&lt;/h2&gt;

&lt;p&gt;One of the most important architectural decisions was keeping financial calculations out of the mobile application.&lt;/p&gt;

&lt;p&gt;The mobile app displays the results, but the backend is responsible for calculating and validating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ownership&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Profit/loss&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Settlement&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Transaction totals&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Investment state&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Contribution locking&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For every investment:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
member ownership  = member contribution / total investment contribution&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The investment-level profit or loss is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
profit/loss  = final investment value - total invested capital   &lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And each member's share is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
member profit/loss  = investment profit/loss × ownership percentage  &lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Finally:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
member settlement  = original contribution + member profit/loss &lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The accounting engine is deterministic.&lt;/p&gt;

&lt;p&gt;AI is never allowed to decide financial calculations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribution Locking
&lt;/h2&gt;

&lt;p&gt;A major business rule in Poolfolio is the OPEN → LOCKED boundary.&lt;/p&gt;

&lt;p&gt;While an investment is OPEN, members can manage their intended contribution.&lt;/p&gt;

&lt;p&gt;Once an investment becomes LOCKED, the contribution basis becomes immutable.&lt;/p&gt;

&lt;p&gt;This is important because changing a member's contribution after an investment has been executed could change their ownership percentage and therefore change historical profit/loss and settlement calculations.&lt;/p&gt;

&lt;p&gt;Poolfolio therefore treats the locked contribution as the ownership basis for that particular investment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Investment Lifecycle
&lt;/h2&gt;

&lt;p&gt;Every investment follows a controlled lifecycle:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;DRAFT    ↓  OPEN    ↓  LOCKED    ↓  ACTIVE    ↓  SETTLED&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Cancellation is allowed only before the investment becomes locked:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;DRAFT → CANCELLED  OPEN → CANCELLED&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once an investment reaches LOCKED, its financial basis is protected.&lt;/p&gt;

&lt;p&gt;This prevents arbitrary state changes from corrupting the accounting history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ledger-Based Financial History
&lt;/h2&gt;

&lt;p&gt;Poolfolio does not treat a single editable balance as the complete history of an investment.&lt;/p&gt;

&lt;p&gt;Instead, financial events are preserved as ledger transactions.&lt;/p&gt;

&lt;p&gt;The system supports transaction types such as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;CONTRIBUTION  WITHDRAWAL  BUY  SELL  ALLOTMENT  REFUND  DIVIDEND  FEE  TAX  ADJUSTMENT&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is particularly important for IPOs.&lt;/p&gt;

&lt;p&gt;For example, if a member applies for ₹20,000 but only ₹8,000 is allotted:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Applied amount   = ₹20,000  Allotted amount  = ₹8,000  Refund           = ₹12,000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The actual invested capital becomes ₹8,000 while the application and refund history remains preserved.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI at the Core
&lt;/h2&gt;

&lt;p&gt;==============&lt;/p&gt;

&lt;p&gt;Open-source AI is not just an optional chatbot feature in Poolfolio.&lt;/p&gt;

&lt;p&gt;It is integrated into the financial-data workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemma — Financial Document Extraction
&lt;/h2&gt;

&lt;p&gt;One of the core AI workflows is extracting structured transaction information from unstructured financial documents.&lt;/p&gt;

&lt;p&gt;A broker statement, transaction document, IPO allotment document, or similar record can contain information that would otherwise need to be manually entered.&lt;/p&gt;

&lt;p&gt;The workflow is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Financial Document         ↓  Preprocessing / OCR         ↓  Gemma         ↓  Structured JSON         ↓  Schema Validation         ↓  User Review         ↓  User Confirmation         ↓  Financial Ledger&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The important design decision is that Gemma does &lt;strong&gt;not&lt;/strong&gt; directly write financial information into the database.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Gemma extracts information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The backend validates the extracted structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The user reviews the result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The user confirms it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Only then is the financial record written to the ledger.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This provides the convenience of AI-assisted data entry without allowing a probabilistic model to silently alter financial records.&lt;/p&gt;

&lt;h2&gt;
  
  
  TabPFN — Transaction Anomaly Detection
&lt;/h2&gt;

&lt;p&gt;Poolfolio also uses TabPFN to analyze historical transaction data and surface potentially unusual transaction patterns.&lt;/p&gt;

&lt;p&gt;The intended relationship between the AI components is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;TabPFN     ↓  Detect potentially unusual patterns     ↓  Gemma     ↓  Explain the result&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The anomaly detection system is an investigation aid.&lt;/p&gt;

&lt;p&gt;It is not intended to make a definitive fraud determination.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Poolfolio deals with sensitive financial information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Transaction statements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Investment amounts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Member contributions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IPO applications&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allotments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refunds&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Settlement information&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That makes control over the AI layer particularly important.&lt;/p&gt;

&lt;p&gt;Using an open-weight model such as Gemma gives Poolfolio the ability to build the AI workflow around open/local inference rather than making the entire application dependent on a closed proprietary AI API.&lt;/p&gt;

&lt;p&gt;It also makes the AI layer more replaceable and adaptable.&lt;/p&gt;

&lt;p&gt;The application can evaluate different models and inference strategies without redesigning the entire financial system around one proprietary provider.&lt;/p&gt;

&lt;p&gt;But the most important reason is architectural control.&lt;/p&gt;

&lt;p&gt;Poolfolio deliberately separates AI from accounting.&lt;/p&gt;

&lt;p&gt;AI is used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Document interpretation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Structured information extraction&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Explanation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anomaly analysis&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deterministic backend code is responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ownership&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Profit/loss&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Settlement&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Transaction validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Financial state transitions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means the application gets the benefits of AI while keeping the actual financial calculations deterministic.&lt;/p&gt;

&lt;p&gt;For a financial application, I believe this separation is more important than simply adding an AI chatbot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and Data Integrity
&lt;/h2&gt;

&lt;p&gt;Because Poolfolio handles group financial information, authorization is enforced on the backend.&lt;/p&gt;

&lt;p&gt;The application has three roles:&lt;/p&gt;

&lt;h3&gt;
  
  
  LEADER
&lt;/h3&gt;

&lt;p&gt;Can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Manage the group&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manage members&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create investments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manage investment lifecycle&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manage transactions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generate reports&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CO_LEADER
&lt;/h3&gt;

&lt;p&gt;Can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Manage investments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manage transactions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generate reports&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  MEMBER
&lt;/h3&gt;

&lt;p&gt;Can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;View the group&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;View investments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;View their contributions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;View ownership&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;View P&amp;amp;L&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;View settlement information&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Members cannot modify other members' financial information.&lt;/p&gt;

&lt;p&gt;Poolfolio also enforces cross-group authorization.&lt;/p&gt;

&lt;p&gt;A user who is a leader of Group B cannot access or modify investments belonging to Group A simply by knowing the investment ID.&lt;/p&gt;

&lt;p&gt;All protected operations are validated against the authenticated user's identity and actual group membership.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing
&lt;/h2&gt;

&lt;p&gt;The backend was developed with automated tests covering authentication, groups, roles, investments, authorization, lifecycle transitions, and cross-group security.&lt;/p&gt;

&lt;p&gt;The investment module includes tests for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Investment creation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Role authorization&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cross-group access&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Duplicate-symbol investment instances&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Investment retrieval&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Filtering&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lifecycle transitions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Invalid lifecycle transitions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cancellation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Locking&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deletion protection&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project also includes type checking and production build verification.&lt;/p&gt;

&lt;p&gt;The goal was not just to make the UI work, but to enforce the important business rules at the backend level.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;The most interesting part of building Poolfolio was realizing that the difficult problem wasn't displaying portfolio numbers.&lt;/p&gt;

&lt;p&gt;It was defining exactly what those numbers meant.&lt;/p&gt;

&lt;p&gt;For example, changing a member's contribution after an investment has been executed sounds like a simple CRUD operation.&lt;/p&gt;

&lt;p&gt;It isn't.&lt;/p&gt;

&lt;p&gt;Once an investment is locked, changing that amount changes the ownership basis and potentially changes historical P&amp;amp;L and settlement.&lt;/p&gt;

&lt;p&gt;That led to one of the central rules in Poolfolio:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;OPEN  → contributions can change  LOCKED  → contribution basis is immutable&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Designing around this boundary forced me to think about Poolfolio as an accounting system rather than simply another CRUD application.&lt;/p&gt;

&lt;p&gt;I also learned that integrating AI into a financial application requires a different approach from simply putting an LLM behind an API endpoint.&lt;/p&gt;

&lt;p&gt;The model can assist with interpretation and explanation, but it should not become the source of truth for financial calculations.&lt;/p&gt;

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

&lt;p&gt;This project started from a real problem in my friend group.&lt;/p&gt;

&lt;p&gt;We wanted to invest together, but managing different contribution amounts, different investments, ownership percentages, profits, losses, and settlements manually becomes difficult very quickly.&lt;/p&gt;

&lt;p&gt;We didn't need another generic stock portfolio application.&lt;/p&gt;

&lt;p&gt;We needed an answer to a much more specific question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"How much did everyone put into this investment, what percentage does each person own, how much did we make or lose, and what does everyone get back?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Poolfolio is my attempt to solve exactly that problem.&lt;/p&gt;

&lt;p&gt;The application is designed around the way a real group investment pool operates rather than around a generic portfolio-tracking workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Use of Gemma
&lt;/h3&gt;

&lt;p&gt;Gemma is used as the open-weight AI model for extracting structured transaction information from financial documents.&lt;/p&gt;

&lt;p&gt;The model is integrated into the actual financial-data ingestion workflow rather than being used only as a conversational feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Use of TabPFN
&lt;/h3&gt;

&lt;p&gt;TabPFN is used to analyze historical transaction features and surface potentially anomalous transaction patterns for further review.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Use of Render
&lt;/h3&gt;

&lt;p&gt;The Poolfolio backend is deployed on Render.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt;&lt;a href="https://github.com/Heramb1221/poolfolio" rel="noopener noreferrer"&gt;https://github.com/Heramb1221/poolfolio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt;&lt;a href="https://poolfolio-api.onrender.com" rel="noopener noreferrer"&gt;https://poolfolio-api.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for a Friend
&lt;/h2&gt;

&lt;p&gt;Poolfolio was built for a real problem faced by my friends and me.&lt;/p&gt;

&lt;p&gt;The project started with a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who owns what?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It ended up becoming a much deeper engineering problem involving accounting rules, immutable financial history, lifecycle management, authorization, transaction ledgers, AI-assisted document processing, and anomaly detection.&lt;/p&gt;

&lt;p&gt;That is what made this project interesting to build.&lt;/p&gt;

&lt;p&gt;Instead of building something just to demonstrate a technology, I built something around a problem that actually existed.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built during the Hacktoberfest Weekend Challenge: Build for a Friend.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  devchallenge #weekendchallenge #hf26challenge #hacktoberfest
&lt;/h1&gt;

</description>
      <category>opensource</category>
      <category>devchallenge</category>
      <category>reactnative</category>
      <category>node</category>
    </item>
  </channel>
</rss>
