Traydner is a full-stack trading practice platform that helps users learn and test trading strategies across stocks, crypto, and forex in a risk-free environment. It combines real-time market data, simulated trades, and performance tracking with a modern web interface and a FastAPI-based backend, enabling users to analyze decisions, iterate on strategies, and build trading confidence without real financial exposure.
Users begin with $100,000 in simulated cash and can trade across stocks, cryptocurrencies, and forex markets using real-time pricing data. Through the Traydner web interface, users place paper trades, track portfolio performance, and refine strategies over time. For advanced workflows, Traydner also provides a personal API key, allowing users to programmatically execute simulated trades directly against their own paper wallet making it easy to test automated strategies and algorithmic trading systems in a safe, controlled environment.
The backend is primarily built with FastAPI and Python, leveraging async endpoints for high-performance API requests.
Firebase is used on the backend for user recognition and request verification. All authenticated actions require a valid Firebase user session established on the frontend. Once logged in, Firebase provides a trusted UID, which is passed to the backend and used as the authoritative identifier for accessing and mutating user data. Backend routes only interact with user data when a valid UID is present, ensuring requests are tied to an authenticated user. User records are created or updated using this UID and synchronized across MongoDB and Firestore for reliability and fallback access.
MongoDB serves as the primary data store for the entire platform, including users, account balances, trades, symbol prices, historical market data, and user API keys. Market price histories are stored in candlestick format and vary in granularity, with intervals ranging from 1 minute up to 1 week, allowing both short-term analysis and long-term trend evaluation. Centralizing all data in MongoDB enables consistent data models, fast access, and flexible, effectively unbounded data collection without outsourcing storage to third-party services.
The backend continuously retrieves real-time price data several times per minute for dozens of stock symbols directly from Finnhub, along with live pricing for a wide range of cryptocurrencies and additional market data sourced from Yahoo Finance. These prices are immediately written to MongoDB to keep current symbol data accurate and up to date.
At the top of every minute, the backend synchronizes stored price histories in MongoDB to reflect the latest real-time prices. Historical data is stored in candlestick format and maintained at multiple time resolutions. Initial historical datasets are collected from yfinance for stocks and forex and from Binance for crypto, after which all histories are manually updated and extended by the backend to ensure consistency with live market data.
Detailed definitions and implementation of all remote routes can be found in the backend services directory.
Traydner uses FastAPI to expose a RESTful JSON API that serves as the primary communication layer between the frontend and backend. The React frontend interacts with these endpoints to retrieve prices, histories, balances, and execute trades, while external users can interact with the same backend through the public API.
All remote requests are authenticated using either Firebase-backed user sessions or personal API keys, ensuring that every request is securely tied to a specific user. The API supports real-time price retrieval, historical candlestick data queries across multiple resolutions, balance lookups, trade execution, and market status checks for stocks, crypto, and forex. Administrative endpoints are also available for controlled maintenance tasks such as history reinitialization.
Detailed definitions and implementation of all remote routes can be found in the backend routes directory.
The frontend is primarily written in Typescript with Tailwind and is entirely React-based. Detailed backgrounds used can also be found on React Bits.
Before logging in, these are the pages available to the user.
The landing page simply allows for a quick introduction of Traydner and access to the other pre-login pages.
The "How It Works" page explains how Traydner works and elaborates on the details mentioned in the landing page. This is primarily intended to explain that Traydner is risk-free and operates with real-time histories and a paper wallet with no advertisements to any newcomers.
New users can create an account here. An account is required in order to trade and access the API. New users can create an account with an email and password or quickly sign in using Google. The latter accesses the information from the Google account to create an account with just as much information as the email and password option.
Returning users can log back in to their accounts in order to access their personal account and paper wallet. They can also log in with Google if they created their account through Google sign-in as well.
The home page is simply intended to allow for easy access to the main pages that a user would probably want to access.
Currently, users can only view their account information and log out through the profile page. In the future, users will be able to change account information here.
Users can view their current holdings here. All cash, stock shares, crypto holdings, and forex holdings can be seen here.

This is the main page for users to trade stocks through their paper wallets. There are dozens of stock symbols available to be traded on Traydner. Trades can only be made when the markets are open (9:30am - 4:00pm EST weekdays) and prices/histories consistently update throughout the day and keep up real-time price changes. Users are able to view price histories in increments from 1 minute up to 1 week, forming visible timespans of up to 5 years. The dynamic charts display the details of these price histories and the statuses of the market.
This is the main page for users to trade cryptocurrencies through their paper wallets. There are many crypto symbols available to be traded on Traydner. Trades can always be made on crypto since crypto markets are open 24/7 and prices/histories consistently update throughout the day and keep up real-time price changes. Users are able to view price histories in increments from 1 minute up to 1 week, forming visible timespans of up to 5 years. The dynamic charts display the details of these price histories.
This is the main page for users to trade stocks through their paper wallets. There are dozens of stock symbols available to be traded on Traydner. Trades can only be made when the markets are open (7:00pm Sun - 5:30am Fri EST) and prices/histories consistently update throughout the day and keep up real-time price changes. Users are able to view price histories in increments from 1 minute up to 1 week, forming visible timespans of up to 5 years. The dynamic charts display the details of these price histories and the statuses of the market.
Users can manage their API keys here. Full API keys that include the secret key can only be viewed upon creation, but details including the general key can be viewed at any other time.
The API documentation page details every available endpoint, request parameter, response format, and authentication requirement available with Traydner. This includes price histories, market statuses, symbol prices, balance details, and trades. It also details how to set up access to their account with their API key using both JavaScript as well as Python.







