{"slug": "remembering-why-i-invested-i-built-investment-memory-for-my-dad", "title": "Remembering Why I Invested — I Built Investment Memory for My Dad", "summary": "A developer built Investment Memory, a personal investment decision journal for his father that records the reasoning behind each investment rather than generating buy or sell recommendations. The app accepts text or voice input, using faster-whisper for transcription and Gemma 3 4B via Ollama for structured extraction, with every AI output validated by Pydantic and requiring human review before saving. The same codebase runs in a local mode (Ollama, local Whisper, SQLite) and a hosted mode (Hugging Face inference, Neon PostgreSQL) deployed on Render.", "body_md": "*This is a submission for the [Hacktoberfest Weekend Challenge: Build for a Friend](https://dev.to/challenges/hacktoberfest-weekend-2026-10-01)*\n\n*This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend.*\n\nMy dad invests regularly, but there is a simple problem that becomes more noticeable over time:\n\n**You can remember that you bought something without remembering exactly why you bought it.**\n\nThe original reason might have been a piece of news, a personal observation, a long-term plan, or a price at which he wanted to review his thinking.\n\nMonths later, that context can be difficult to reconstruct.\n\nSo instead of building another app that tells someone what to buy or sell, I built something much simpler:\n\n**Investment Memory — a personal journal for remembering the reasoning behind an investment decision.**\n\nInvestment Memory is a personal investment decision journal that I built for my dad.\n\nHe can record an investment using either text or voice.\n\nFor a voice note, the application first transcribes the recording. The resulting text is shown to the user so it can be edited before anything is saved.\n\nThe AI then extracts structured information from the note:\n\nThe extracted information is always editable before saving.\n\nAfter an investment is recorded, the application provides:\n\nThe most important design choice is that the application records **the user's own decision and reasoning** rather than generating investment recommendations.\n\nNothing is saved from the AI output until the user reviews and confirms it.\n\n**Live Demo:** [https://investment-memory-frontend.onrender.com](https://investment-memory-frontend.onrender.com)\n\nThe public demo uses fictional/demo investment records rather than private family financial information.\n\nThe complete workflow is available:\n\n```\nText\n  ↓\nGemma extraction\n  ↓\nHuman review and correction\n  ↓\nSave\n```\n\nAND\n\n```\nVoice\n  ↓\nWhisper transcription\n  ↓\nEditable transcript\n  ↓\nGemma extraction\n  ↓\nHuman review and correction\n  ↓\nSave\n```\n\nThe deployed application also includes search, review reminders, review history, saved-record editing, and light/dark mode.\n\n**Code**\n\nGitHub: [https://github.com/Bhavya4523/Investment-Memory](https://github.com/Bhavya4523/Investment-Memory)\n\nThe repository contains the React frontend, FastAPI backend, SQLAlchemy models, AI integration, and deployment configuration.\n\n**How I Built It**\n\nI built Investment Memory with a React/Vite frontend, a FastAPI backend, SQLAlchemy, and a relational database.\n\nThe AI is at the center of the workflow.\n\nLocal-first version\n\nFor local use, the architecture is:\n\n```\nVoice / Text\n     ↓\nWhisper\n     ↓\nGemma 3 4B\n     ↓\nHuman review\n     ↓\nFastAPI\n     ↓\nSQLite\n```\n\nFor voice input, the browser records audio and the backend uses faster-whisper to create the transcript.\n\nFor text extraction, I use Gemma 3 4B through Ollama.\n\nThe extraction prompt is deliberately constrained. The model is instructed to:\n\nextract only information explicitly stated by the user\n\nleave missing fields blank\n\navoid inventing information\n\navoid giving financial advice\n\ntreat a review price as a review point rather than a buy or sell instruction\n\nThe model output is then validated with Pydantic before it reaches the user interface.\n\nPublic deployment\n\nFor the public demo, I separated the infrastructure from the local setup:\n\n```\nReact frontend\n      ↓\nFastAPI backend\n      ↓\nHugging Face inference\n   ┌───────────────┐\n   │ Gemma         │\n   │ Whisper       │\n   └───────────────┘\n      ↓\nNeon PostgreSQL\n```\n\nThe frontend and backend are deployed on Render, while Neon PostgreSQL stores the public demo records.\n\nThe same codebase supports both local and hosted AI through environment variables.\n\nThis gives the application two modes:\n\nLocal mode\n\n→ Ollama\n\n→ local Whisper\n\n→ SQLite\n\nand:\n\nHosted mode\n\n→ Hugging Face\n\n→ hosted Whisper\n\n→ Neon PostgreSQL\n\nHuman-in-the-loop design\n\nI did not want the model to silently turn a natural-language note into a permanent record.\n\nThe workflow is:\n\n```\nCapture\n   ↓\nAI extraction\n   ↓\nHuman checks the fields\n   ↓\nHuman corrects anything necessary\n   ↓\nConfirm & save\n```\n\nThe user remains the source of truth.\n\nReview memory\n\nI also wanted an investment record to remain useful after the day it was created.\n\nA user can set a review date.\n\nWhen that date arrives, the application displays a due or overdue reminder.\n\nAfter reviewing the investment, the user can:\n\nrecord what they noticed\n\nset another review date\n\nsave the review\n\nview previous reviews later\n\nPrevious reviews are preserved in history instead of being overwritten.\n\nEditing saved records\n\nThe user can also edit an existing investment record later.\n\nThis is useful when something was entered incorrectly because correcting the original record should not require creating another duplicate investment.\n\nA deployment problem I encountered\n\nThe first Render deployment exceeded the available memory limit.\n\nThe reason was that the backend was importing the local faster-whisper dependency even though the hosted deployment did not need local Whisper.\n\nI fixed this by loading faster-whisper only when the application is running in local mode.\n\nThat allowed the hosted backend to start without loading the unnecessary local speech-recognition stack.\n\nThis was a useful lesson for me: deployment is not just about getting the code to run. The application should only load the components that its current environment actually needs.\n\n**Why Does Open Innovation Matter?**\n\nFor this project, open innovation mattered because I wanted the AI layer to be something I could control and adapt.\n\nThe local version uses Gemma 3 4B and Whisper with local inference.\n\nGemma 3 4B\n\n     +\n\nWhisper\n\n     ↓\n\nLocal processing\n\nThat makes the local version possible without building the entire application around a proprietary closed AI API.\n\nIt also gave me flexibility during development.\n\nI could decide:\n\nwhat information should be extracted\n\nwhich fields mattered to the user\n\nhow missing information should be handled\n\nhow the output should be validated\n\nwhat the application should do with the model's output\n\nThe AI model is not the final authority. It is one component in a larger system.\n\nAnother important benefit was portability.\n\nI originally built the application around local inference, but a hackathon project also needs a way to demonstrate the result publicly.\n\nBecause the AI layer uses open models and a replaceable inference setup, I could move the public demo to hosted inference without redesigning the entire application.\n\nThat resulted in two useful configurations:\n\nLocal: a local-first personal version.\n\nHosted: a shareable demonstration version.\n\nOpen innovation therefore affected the architecture itself.\n\nIt allowed me to experiment with the AI locally, keep the model layer replaceable, and then move the application to a public deployment when I needed a shareable demo.\n\n**Built for My Dad**\n\nThe most important part of this project is that it was built around a real person rather than a hypothetical user.\n\nMy dad was the reason I chose this problem.\n\nI did not start by asking:\n\n\"What AI application can I build?\"\n\nI started with:\n\n\"What small problem does someone I know actually have?\"\n\nThat led to a much narrower product.\n\nInvestment Memory is not trying to become a trading platform, a portfolio-management system, or an investment advisor.\n\nIt is a memory tool.\n\nThe goal is simple:\n\nremember what you decided, remember why you decided it, and remember when you wanted to revisit that thinking.\n\nWhat I Learned\n\nThe biggest lesson was that a useful AI application does not need to give the user more decisions.\n\nSometimes it is more useful to help the user remember their own decisions.\n\nI also learned that making AI useful is as much about application design as it is about the model.\n\nThe model can extract information, but the surrounding system determines whether that extraction is trustworthy and useful.\n\nThat is why I added:\n\nEditable extraction\n\n        +\n\nHuman confirmation\n\n        +\n\nPersistent memory\n\n        +\n\nReview history\n\nrather than simply showing an AI-generated answer.\n\nPrize Categories\n\nI am entering the following partner categories because the project genuinely uses these technologies:\n\nBest Use of Gemma\n\nBest Use of Render\n\nGemma is used as the core language model for structuring investment notes, while Render hosts the deployed frontend and backend.\n\n**\n\nFinal Thoughts**\n\nI started with one small problem:\n\nMy dad remembers the investment, but over time the reasoning behind it can be forgotten.\n\nThe result became a small system for preserving that context.\n\nThere is no \"What should I buy?\" button.\n\nThere is no prediction engine.\n\nThere is no AI pretending to know what someone should do with their money.\n\nInstead, there is a voice note, a memory, a structured record, and a future reminder to look back at the decision.\n\nThat was the application I wanted to build for one person I actually know.", "url": "https://wpnews.pro/news/remembering-why-i-invested-i-built-investment-memory-for-my-dad", "canonical_source": "https://dev.to/bhavya_gothi_d9713c43c20b/remembering-why-i-invested-i-built-investment-memory-for-my-dad-2i89", "published_at": "2026-10-03 07:00:41+00:00", "updated_at": "2026-10-03 07:08:00.617668+00:00", "lang": "en", "topics": ["ai-tools", "large-language-models", "ai-products", "natural-language-processing"], "entities": ["Investment Memory", "Gemma 3 4B", "Whisper", "Ollama", "Hugging Face", "FastAPI", "React", "Neon PostgreSQL"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/remembering-why-i-invested-i-built-investment-memory-for-my-dad", "markdown": "https://wpnews.pro/news/remembering-why-i-invested-i-built-investment-memory-for-my-dad.md", "text": "https://wpnews.pro/news/remembering-why-i-invested-i-built-investment-memory-for-my-dad.txt", "jsonld": "https://wpnews.pro/news/remembering-why-i-invested-i-built-investment-memory-for-my-dad.jsonld"}}