Back to Work Samples
Portfolio workspaceLive market contextOptions trackingSecure integrations

Financial Portfolio Dashboard

A single place to understand accounts, positions, cash, option contracts, research, and what needs attention today.

PositionTracker turns scattered financial information into a calm working view, while keeping the complicated safeguards behind the scenes.

PositionTracker public demo showing the Today and After Hours command center with portfolio value, daily change, gain or loss, cash, and a portfolio briefing panel.
Shown in the product public demo mode: real app code running on sample data — not marketing mockups and not a real client portfolio. The demo banner and navigation are visible in the capture.

At a glance

A working product with room for real-world complexity

~230

small backend jobs

Around 230 separately deployable backend jobs keep individual responsibilities separate, so one problem does not have to take down the whole product.

31

scheduled routines

Thirty-one configured schedules keep updates, alerts, research, and housekeeping moving without a visitor leaving a tab open.

5

outside data sources

Market data, connected accounts, brokerage data, and public filings each have a clear role instead of being mixed together.

3

places to keep data

Fast temporary state, long-term records, and generated files each use storage designed for that particular job.

The problem

Important decisions get spread across too many screens.

A portfolio can live across brokerages, spreadsheets, quote sites, option chains, filing alerts, and an inbox. Switching between them takes time and makes it harder to tell which number is current, missing, or estimated.

The product answer

Give the person making the decision one honest, prepared view.

PositionTracker brings the useful pieces together, labels uncertainty, and protects the work around it. The result is less hunting for context and more confidence in what the screen can actually support.

PositionTracker public demo positions table grouped by Robinhood, Fidelity, and Crypto and Commodities, with 43 holdings and quote, profit or loss, and value columns.
The consolidated positions view groups accounts in one workspace while keeping their sources visible. This is public demo mode with synthetic sample data, not real holdings.

How it works

What happens when you open it

The visible experience stays simple because each part of the journey has a clear job and a safe response when something outside the product is slow or incomplete.

01

Open one private workspace

When it starts
Someone signs in and opens a portfolio view.
What it does
The product identifies the person, checks which parts of the product they can use, then loads only their saved workspace. If a saved portfolio is not ready yet, the page opens in a clean, usable empty state instead of showing an error.
What you get
A person lands in the right place with the right level of access, without seeing another account or being blocked by a missing saved result.
When something goes wrong
If the subscription check is unavailable, access becomes more limited rather than more open. That is safer than accidentally revealing a paid tool.
02

Bring account and market information together

When it starts
The dashboard needs a quote, an account balance, a transaction, a symbol search, or a chart.
What it does
The browser asks PositionTracker, and PositionTracker asks the outside service. It standardizes each response before the screen uses it, so the experience remains consistent even when providers return data in different formats.
What you get
Prices, holdings, cash, and activity can appear in one familiar layout instead of in a collection of unrelated vendor screens.
When something goes wrong
The product can use a recent value, label partial information, or show what is unavailable. It does not quietly present a guess as a confirmed live number.
How outside data stays under product controlshow

First-party API handlers sit between the browser and Financial Modeling Prep, Polygon, Plaid, SnapTrade, and SEC EDGAR. They validate inputs, attach provider credentials on the server, normalize responses, and controlCORS.

The source has roughly 230 deployable handlers across roughly 648 files under /api. That includes 18 Financial Modeling Prep handlers, 13 Plaid handlers, 6 SnapTrade handlers, 24 AI handlers, and 33 cron handlers.

03

Turn positions into a useful daily view

When it starts
New quotes, imported positions, manual entries, or cash changes affect the portfolio summary.
What it does
The dashboard combines quantities, cost basis, cash, option values, and standardized market data. It saves compact totals for faster returns while keeping the underlying position information available for context.
What you get
The home screen can show total value, day movement, gain or loss, cash, and a clear briefing without forcing the reader to reconcile several tabs.
When something goes wrong
Short waits and retry rules protect the fast-loading summary. When a saved total is not available, the product can calculate or display a clearly newly calculated state rather than pretending an old result is current.
04

Show option contracts with the right context

When it starts
Someone opens an options chain, checks a held contract, or looks at a scenario.
What it does
The product brings contract details, market marks, volume, and risk measures into one view. When a complete market mark is unavailable, it can calculate a clearly labeled estimate from the inputs that are available.
What you get
A user can distinguish a live market observation from a model estimate and understand the position without hand-building a spreadsheet.
When something goes wrong
Invalid inputs produce no estimate. Missing bid or ask values stay visibly missing, rather than being filled with a number that looks more certain than it is.
How option estimates avoid pretending to be quotesshow

The options adapter parses OCC contract symbols and maps bid, ask, last trade, implied volatility, volume, open interest, and available Greeks into a common contract model.

Chain pagination is capped at 20 pages. A 429 response can retry up to three times with a delay. When inputs are valid, a sharedBlack-Scholes calculation can produce a theoretical price and delta; invalid or non-finite inputs return null rather than a made-up value.

05

Keep saved views in step across devices

When it starts
Someone changes a layout, a tab, or a preference from another browser or device.
What it does
The screen responds immediately, then saves the change with a version number. Before accepting it, the server checks whether somebody else has already saved something newer.
What you get
The product feels fast while still protecting newer work from being silently replaced by an older screen.
When something goes wrong
If the saved version is newer, the product can flag the conflict and reload. If a network response disappears after a successful save, the same retry can be safely recognized instead of being treated as a second change.
How cross-device saves stay safeshow

Tabs and preferences update optimistically, then persist with a revision in Vercel KV. The server compares the incoming revision against the current revision at an explicit boundary before it accepts the update.

This is optimistic locking paired with an idempotent retry: a matching payload can be recognized as already committed after a response is lost, while a genuinely stale revision returns the server version for conflict handling.

06

Prepare useful context before anyone asks

When it starts
Timed background routines run during market windows and at planned intervals.
What it does
The product refreshes selected data, records snapshots, checks filings, prepares notifications, and performs cleanup away from the visitor experience.
What you get
Opening the dashboard can feel prepared rather than like the first person online has to start every update from scratch.
When something goes wrong
Each job is bounded and isolated. A temporary provider or storage problem is contained to that job, while the interactive dashboard remains available.
What runs in the backgroundshow

vercel.json defines 31 configured Vercel Cron schedules. That is separate from the 33 cron-handler routes in the codebase. Schedules cover market-window work, snapshots, brokerage sync, filing intake, notifications, research, and cleanup.

The routes authenticate scheduled invocations, keep work bounded, use provider-specific retries, and rely on storage wrappers and durable uniqueness constraints where a repeat insert would be a problem.

What that means day to day

You get a working view that is ready faster, clearer about uncertainty, and less likely to fail just because one outside service is having a bad moment.

How the pieces fit together

Each tool has a clear job

The product does not depend on one oversized system doing everything. It uses focused services for the interface, private decisions, fast state, durable records, incoming data, and delivery.

The screen people use

A fast, focused web interface

A responsive interface can handle dense financial information without making the reader move between disconnected tools.

The protected application layer

Small protected backend jobs

Small server-side jobs keep secrets and sensitive decisions away from the browser while allowing individual features to operate independently.

Sign-in and paid access

Identity and paid-feature checks

Identity and subscription access are checked on the server, not trusted to a button or a browser setting.

Fast and durable records

Fast state and long-term records

Fast state, long-term history, and cross-device coordination have distinct homes instead of competing for one storage system.

Market, account, and filing inputs

Market, account, and public filing inputs

Each source does one defined job, while the product keeps the user experience consistent across them.

Research, files, and messages

Assistance, generated files, and messages

AI-assisted analysis, generated files, and email delivery can be governed as product features instead of untracked add-ons.

The platform breakdown for technical reviewersshow

React 19 and a Vite multi-page build provide the interface, styled with Tailwind. Vercel hosts the application and its serverless functions. Vercel KV handles responsive application state, rate-limit counters, cached totals, and coordination; Neon serverless Postgres stores positions, snapshots, trades, recommendations, subscribers, and operational records. Financial Modeling Prep, Polygon, Plaid, SnapTrade, and SEC EDGAR provide defined market, account, brokerage, and public-filing inputs.

Clerk verifies identity. Stripe provides billing information. Resend handles email, Vercel Blob stores generated files, and the Vercel AI SDK supports metered AI requests. Database wrappers time out slow calls, retry selected cold-start-style connection failures, and rely on idempotent writes or unique constraints when durability matters.

18

market-data jobs

Financial Modeling Prep routes cover quotes, search, history, earnings, technical data, crypto, and after-hours context.

13 + 6

account-connection jobs

Plaid and SnapTrade jobs cover linking, imports, balances, holdings, transactions, reconciliation, and connection status.

24

AI jobs

Portfolio-aware chat, bounded analysis, filing intelligence, and research have separately controlled routes.

33

background routines

Scheduled functions cover snapshots, market updates, filings, notifications, sync work, and cleanup.

Make information easier to scan

A visual view of the market, not another wall of numbers

A market heatmap shows which stocks are moving and gives bigger companies more visual weight. It helps a reader orient themselves before opening a specific chart or position.

Why the visual layer matters

Good reporting does not make people study a table before they know where to look. It gives them an overview, then lets them drill into the details.

PositionTracker public demo market heatmap with stocks sized by market capitalization and colored by percent change.
The heatmap offers a fast visual read of market movement. The captured values are synthetic sample data in the public demo mode.
PositionTracker public demo AI assistant panel with a Needs attention portfolio briefing and a conversation history sidebar.
The AI area frames follow-up questions around the portfolio view. This screen is from the public demo and shows sample data.

Put the briefing in context

AI support that starts from the work already in front of you

The assistant is designed to help surface what needs attention and support a follow-up conversation. It sits beside the portfolio context instead of asking a person to move their question into an unrelated chat tool.

Usage controls and separate AI routes make it possible to treat this as a governed product feature, rather than an unlimited hidden cost.

Keep public information useful

Filings become a readable signal, not another inbox burden

SEC filing analysis gives a structured place to review important 10-Q and 8-K updates, read a summary, and subscribe to alerts. The public record is still available, but the product reduces the friction of finding and prioritizing it.

The broader pattern

When a team has too much incoming information, the valuable product is not just an alert. It is a repeatable way to decide what deserves attention.

PositionTracker public demo SEC filings analysis page listing AI-summarized 10-Q and 8-K filings with an email alert signup area.
The filing view combines a readable summary and alert signup. It is shown in the product public demo with sample data.
PositionTracker public demo TSLA options chain with calls and puts, strike prices, Greeks, implied volatility, volume, and open interest.
The options view makes contract detail available in one place. It is a public demo screenshot, so every figure shown is synthetic sample data.

Track option contracts with context

See the contract details that affect a decision

The options chain puts calls, puts, strikes, volume, open interest, implied volatility, and Greeks in one working view. It creates a clearer starting point for checking a contract than shifting between a broker screen and a separate calculator.

The product keeps real market marks and modeled estimates distinct, so a reader can make an informed judgment about the quality of the information.

Safeguards that keep the product dependable

Useful does not have to mean fragile

The hard part of a data-rich product is not only fetching information. It is setting rules for what happens when a provider is slow, a request repeats, an account changes, or a paid service cannot be confirmed.

Provider keys stay out of the browser

Outside services are reached through PositionTracker instead of directly from a visitor device. That keeps service credentials private and gives the product one place to validate requests and control who can call what.

External work has clear limits

The product limits repeated requests, saves appropriate recent results, and gives AI features scoped daily limits. Expensive or unreliable outside calls do not get an unlimited invitation to run.

Two edits do not quietly erase each other

Saved tabs and preferences have a clear version check. An older edit can be identified, and a repeat caused by a lost response can be accepted without creating an unwanted duplicate.

Incomplete data stays honest

Provider failures, rate limits, and absent fields are expected. The product uses bounded retries, safe empty results where appropriate, and visible distinctions between live values, cached values, and estimates.

Paid tools do not open during an outage

If the product cannot confirm access in the deployed environment, it restricts access. This protects paid features rather than granting them by accident.

Background work cannot hold up the dashboard

Updates and housekeeping run in protected scheduled jobs. The experience a visitor sees does not depend on a browser tab remaining open for maintenance to happen.

The value of these safeguards

Your team does not need to understand every rule behind the scenes. They need a product that does not expose secrets, overcharge on repeat work, erase a newer edit, or turn a temporary gap into a confident-looking answer.

What it replaced

Less manual reconciliation. More dependable context.

No invented time-saved claim is needed. The improvement is a controlled workflow where repeated switching, copy-and-paste, and uncertainty become visible parts of the product instead of invisible risks for the person using it.

Before

Jumping between brokers, spreadsheets, market sites, and alerts to form a picture of the day.

After

One private workspace that brings positions, quotes, cash, options, research, and saved views into a consistent working picture.

Before

Putting service credentials into browser code and translating every provider response inside the interface.

After

A protected application layer that keeps credentials private, standardizes inputs, and makes provider trouble manageable.

Before

Assuming a change saved because the screen updated, even when another device may have changed the same setting.

After

Clear save rules that protect newer work, surface conflicts, and safely handle a repeated request after a network interruption.

Before

Reading option chains in one place, calculating scenarios elsewhere, and not knowing whether a number is observed or estimated.

After

A structured contract view that separates market information from guarded theoretical estimates when the market data is incomplete.

What this means for your business

The reusable pattern is a client-facing system that stays honest under pressure.

A customer portal that combines live operational information from several vendors without exposing vendor secrets to customers.

A sales, inventory, or field-service workspace that feels quick to use while keeping shared views safely synchronized across offices and devices.

A subscription product with real server-enforced access levels, checkout workflows, and protected upgrades.

An analytics product that clearly says what is current, what is cached, what is estimated, and what is unavailable.

A recurring intelligence system that prepares useful context before a team logs in rather than making every person wait for background work.

Plain-language glossary

Every technical term used on this page, explained without jargon.

API handler
A small server-side job that receives a request and returns the specific result a feature needs.
Cache
A short-term saved copy that makes repeat views faster without replacing the durable record.
CORS
Browser rules that limit which websites can call another service directly.
Cron schedule
A timed instruction that starts a background job at planned intervals.
Entitlement
The server-checked record of which features a signed-in person is allowed to use.
Fail closed
When confirmation is missing, restrict access rather than accidentally allowing more access.
Greeks
Option risk measures that describe how a contract may react to price, time, and volatility changes.
Idempotent retry
A repeated request that safely produces the same outcome instead of duplicating a completed action.
Optimistic locking
A save check that prevents an older edit from silently replacing a newer one.
Serverless function
A small server-side task that runs when needed without maintaining a dedicated always-on server.
Black-Scholes
A financial model that estimates an option value from defined market and contract inputs.
Postgres database
A structured long-term database for records that need history, search, and reliable uniqueness rules.
Proxy route
A first-party server route that safely makes an outside-service request on behalf of the browser.
Vercel KV
Fast key-value storage used here for responsive saved state, caches, and coordination.

Build the layer between your business and its data

Need a dashboard that does more than display a spreadsheet?

I can help turn fragmented operational systems into a secure workflow with useful automation, clear safeguards, and an interface your team can trust.

Discuss your project