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.

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.

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.
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.
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.
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.
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.
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.
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.


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.


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