All projects

Project 01 / Full-stack engineering · Financial software

Private Markets Tracker

A private-markets management platform that brings customers, investment positions, and reporting into one workflow. Developed around a practical financial use case in collaboration with a stakeholder.

My role
Independent developer · Stakeholder collaboration
Status
Public source
Source code
View on GitHub
Private Markets Tracker dashboard with fictional investor commitment totals and allocation charts
Application dashboard · Fictional demo data from the public repository.

The problem

Customer records, investment commitments, and fund schedules need to stay connected for reporting to be useful. I developed this application for a practical financial use case, working with a stakeholder to translate business requirements into a usable management workflow.

What the application does

Users can create, edit, search, and delete customer and product records, associate investment positions with each customer, and review fund-level and cumulative reports. Positions distinguish primary commitments, follow-on investments, and secondary purchases.

The implementation records capital-call and distribution schedules, including projected cash flows. Dashboard charts summarise commitments and allocation; customer reports aggregate annual and cumulative cash flows. These are calculations from entered schedules and assumptions, rather than live market data.

Architecture

Next.js App Router and React provide the dashboard, with TypeScript across the application. React Server Actions authenticate changes through Clerk, validate form data with Zod, and persist it through parameterised mysql2 queries. Dashboard routes require a signed-in user.

MySQL/MariaDB stores customers and products in separate tables. Customer positions and product cash-flow schedules are stored as JSON text, with associations resolved by the application. The database layer also generates report data; Recharts presents the resulting time series and allocations. Tailwind CSS and shadcn/ui support the interface.

Engineering decisions

An investment position has its own commitment, purchase type, entry date, and optional secondary purchase price. Keeping that information separate from a shared fund schedule allows the same product to appear in different customer contexts.

Reports need to align different schedules to a shared year axis before aggregation. Product edits also need to preserve customer associations: the application updates embedded references when a product is renamed and removes them when it is deleted. These were useful challenges in connecting data management, calculations, and the interface.

A generated fund report with annual cash-flow charts and a fictional Northstar Growth Fund position
Generated fund report · Fictional demo positions and projections.

Scope and presentation

This is independent software development informed by a real use case. The public repository and screenshots use fictional demo data. No customer records or confidential financial positions are shown here.

Next projectLanguage Model Evaluation & Calibration