Back

Intrinsic.

2023 Personal Project Finance Tool

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Intrinsic Platform

Motivation

The genesis of Intrinsic came from a personal frustration I experienced as a retail investor. While institutional analysts have access to Bloomberg terminals, proprietary valuation models, and teams of researchers, individual investors are often left making decisions based on surface-level metrics like P/E ratios or, worse, social media sentiment. I found myself wanting to understand what a stock was truly worth—not just what the market was pricing it at on any given day.

Intrinsic was born from the belief that every investor deserves access to institutional-grade valuation tools. The goal wasn't to replace human judgment, but to augment it—to give users a data-driven foundation upon which they could build their investment thesis. By automating the tedious calculations and presenting them in an intuitive interface, I hoped to empower retail investors to make more informed decisions and understand the true intrinsic value of the companies they're considering.

How It Works

At its core, Intrinsic is a comprehensive stock valuation platform that implements three distinct methodologies, each offering a unique lens through which to assess a company's worth. When a user searches for a stock ticker, the application fetches real-time financial data and runs all three models simultaneously, presenting a holistic view of the company's intrinsic value.

Discounted Cash Flow (DCF) Analysis: This model projects a company's future Free Cash Flow to the Firm (FCFF) and discounts it back to present value using the Weighted Average Cost of Capital (WACC). The implementation calculates the Cost of Equity using the Capital Asset Pricing Model (CAPM), factoring in the risk-free rate, market risk premium, and the company's beta. Users can see each component of the calculation—from the projected cash flows to the terminal value—giving them full transparency into how the final valuation is derived.

Residual Income Valuation: This approach values a company based on its ability to generate returns above its cost of equity. The model calculates economic profit by subtracting the equity charge (book value of equity multiplied by cost of equity) from net income. This method is particularly useful for companies with stable earnings and provides a different perspective from cash flow-based models.

Comparable Multiples Analysis: The third pillar uses relative valuation by comparing the target company against its industry peers. The application calculates the average P/E ratio of comparable companies and applies it to the target's earnings per share. This market-based approach serves as a reality check against the more theoretical DCF and Residual Income models.

Finally, Intrinsic consolidates all three valuations into a single weighted average, providing users with a balanced estimate that accounts for the strengths and limitations of each individual methodology. The platform displays the intrinsic value per share alongside the current market price, allowing investors to quickly identify potential undervaluation or overvaluation.

Tech Stack

Built as a modern, performant web application leveraging the latest advancements in React and Next.js, with real-time financial data integration and interactive data visualization.

Next.js 15 React 19 Tailwind CSS Yahoo Finance API Chart.js Recharts Axios GSAP Radix UI

Challenges

Data Reliability and API Limitations: One of the earliest and most persistent challenges was sourcing reliable financial data. Free financial APIs often have rate limits, inconsistent data formats, and gaps in coverage. I experimented with several providers before settling on Yahoo Finance, but even then, I had to build robust error handling to gracefully manage missing data points, null values, and API timeouts. Learning to work within these constraints taught me the importance of defensive programming and fallback mechanisms.

Translating Financial Theory into Code: While the valuation formulas look elegant in textbooks, implementing them in code revealed countless edge cases. What happens when a company has negative free cash flow? How do you handle a beta of zero or negative earnings? Each edge case required careful consideration and often sent me back to academic papers to understand how professional analysts handle these scenarios. I spent considerable time ensuring that the calculations not only worked mathematically but also made sense from a financial perspective.

State Management Complexity: With three valuation models running in parallel, each depending on shared financial data and user inputs, state management became increasingly complex. I had to carefully architect the data flow to ensure that changes in one component (like adjusting the cost of equity) would propagate correctly to all dependent calculations without causing race conditions or stale data issues. This pushed me to deeply understand React's state management patterns and the nuances of the useEffect hook.

Presenting Complex Information Clearly: Perhaps the biggest UX challenge was figuring out how to present dense financial calculations without overwhelming users. I wanted to provide full transparency into the valuation process, but not at the expense of usability. The solution was a progressive disclosure pattern—showing headline numbers by default while allowing users to expand sections to see underlying calculations. Balancing information density with visual clarity required numerous iterations and user feedback sessions.

Performance Optimization: Financial calculations can be computationally intensive, especially when projecting cash flows over multiple years. Early versions of the app suffered from noticeable lag when switching between stocks or updating assumptions. I had to optimize with useMemo and useCallback hooks, debounce user inputs, and carefully manage when calculations were triggered. This experience gave me a much deeper appreciation for React's rendering behavior and performance optimization techniques.

Reflections & Lessons Learned

The Gap Between Theory and Practice: Building Intrinsic reinforced a lesson I've encountered repeatedly in software development: there's always a gap between theoretical knowledge and practical implementation. I thought I understood DCF analysis from my finance courses, but actually building it forced me to confront details I had glossed over. This project made me a better developer and a more nuanced thinker about financial valuation.

The Value of Constraints: Working with limited API quotas and imperfect data initially felt like obstacles, but they ultimately pushed me toward better solutions. I built caching mechanisms, implemented smart data fetching strategies, and learned to design systems that degrade gracefully. Constraints, I've come to believe, are often the catalyst for creativity.

Simplicity is Hard: Making something simple for the end user requires absorbing enormous complexity on the development side. Every "simple" feature—like automatically calculating cost of equity—required understanding multiple financial concepts, sourcing the right data, handling edge cases, and presenting results clearly. I gained a new respect for products that feel effortless to use.

The Importance of Domain Knowledge: This project underscored how valuable it is to deeply understand the domain you're building for. My background in finance wasn't just helpful—it was essential. It informed every design decision, from what data to display to how calculations should flow. I'm now a strong advocate for developers investing time in understanding their users' domain, not just the technical requirements.

Iteration Over Perfection: Early versions of Intrinsic were rough. The UI was cluttered, calculations had bugs, and the user experience was confusing. But shipping early and iterating based on feedback—both my own and from others—led to dramatic improvements. This project reinforced my belief in the power of iterative development and the danger of waiting for perfection before launching.

Looking back, Intrinsic represents more than just a coding project—it's a synthesis of my interests in finance, technology, and design. It challenged me technically, deepened my financial knowledge, and taught me invaluable lessons about building products that solve real problems. While there's still much I want to add—more valuation models, international stock support, historical analysis—I'm proud of what it has become and excited about where it can go.