Back to works Case Study
Prop FirmMetaTrader APIFintech Platform

Trading Firm (GoFTMA)

Automated proprietary trading challenge platform. Integrates Laravel 10 Octane, React (Inertia.js), and Filament admin with external MetaTrader 4/5 API bridges to audit trades, track drawdowns, and manage trader evaluations.

Visit Live Website
Trading Firm (GoFTMA) Interface Showcase

01 — Overview

Overview

a. Trading Platform Concept

GoFTMA was designed as a modern proprietary trading (prop firm) application to manage evaluation challenges. Retail traders purchase entry packages (e.g. $10k, $50k, or $100k starting accounts) to prove their skills. The platform operates on a three-stage progression structure: Step 1 (first evaluation phase), Step 2 (second verification phase), and Step 3 / Live (funded account phase with profit splits).

We built the system to automate trader evaluations. When a user registers and pays, the platform dynamically contacts the external MetaTrader API bridge, provisions the account with the correct starting balance, and emails the trader their credentials. The platform then listens to trade updates and monitors performance against strict rules.

b. High-Level System Architecture

Our team engineered a decoupled system architecture. The trader frontend is a React single-page interface powered by Inertia.js for smooth page transitions. The backend core is built on Laravel 10 and optimized with Laravel Octane to ensure high performance under heavy transaction loads.

The system integrates with a dedicated MetaTrader API bridge. The integration uses a Bearer token authentication flow. When provisioning an account, MetaTraderService first calls /auth/token with admin credentials to fetch the token, then issues a POST request to /api/accounts with registration parameters. Trade data is synced via scheduled workers, while the local rules engine audits daily loss metrics against the PostgreSQL database.

Timeline Jun 2023 – Apr 2024
Role Full-Stack Development & FinTech Integration
Technologies
Laravel 10Laravel OctaneReactInertia.jsFilament v2PostgreSQLMetaTrader REST APITailwind CSSSentryAWS S3
Tools
VS CodeDBeaverPostmanGitRedis
Responsibilities
  • Architected multi-step proprietary trading evaluation logic (Step 1, Step 2, Live)
  • Coded MetaTrader 4/5 REST API bridge connector (MetaTraderService)
  • Built database-driven rules evaluator checking max daily loss and max drawdown
  • Developed Inertia.js React real-time trader metric dashboard
  • Implemented Filament v2 administrative account review and verification pipeline
  • Configured Laravel Octane and Horizon queue processors for high-throughput trade syncing
  • Integrated multi-channel payment gateway and billing ledger

02 — Problems & Challenges

Problems & Challenges

a. Secure Payment Routing

Prop firm registrations involve high-volume transaction packages. If a client payment fails to route correctly or the callback is delayed, the user experience breaks and challenge credentials are not issued.

We resolved this by writing a robust billing transaction handler (BillingService). Every payment request creates a unique ledger record in the billings table, tracking payment currency codes, amounts, and statuses. The payment callback webhook updates billing states within database-level locks, ensuring credentials provisioning is triggered only after full payment is validated.

b. Real-Time Data Handling / API Rate Limits

Syncing thousands of trade tickets from MT4/MT5 servers across active client accounts poses a major backend challenge. Fetching trades synchronously during web visits causes database contention and slow page load times.

We solved this bottleneck by implementing an asynchronous background queue system. When trade events or sync requests are triggered, they are delegated to Laravel Horizon queue workers. The AccountCalculation job processes account syncing by calling AccountSyncService. The service queries open and closed trades, updates the local trades table, and calculates account metrics in the background, keeping the web dashboard latency-free.

c. Security & User Authentication

Ensuring that traders cannot manipulate account statistics or access other users' trading credentials is critical in financial environments. The platform must also manage live server credentials with high security.

We secured the platform by storing passwords using strong hashing and encrypting the MetaTrader master and investor passwords in transit. User sessions are validated via Laravel's web auth guard, while API bridge calls are restricted to server-side services (MetaTraderService) with restricted IP access.

03 — Project Goals

Project Goals

a. Trader Experience Optimization

We aimed to deliver a premium user interface where traders can monitor their metrics in real time. Floating balance, equity fluctuations, and current drawdown markers need to load instantly to prevent traders from accidentally violating limits.

By building the interface with React and Inertia.js, and caching calculated metrics in Redis, we reduced dashboard page rendering times to under 15ms.

b. Scalable Backend Infrastructure

Our engineering goal was to design an audit engine that can process millions of historical trades and thousands of daily active accounts without database lag.

We targeted a processing speed of under 500ms per account validation audit, enabling the rules engine to check drawdown limits multiple times a day.

04 — Design Process

Design Process

a. Financial Database Modeling

We designed a relational schema optimized for auditing. The database includes: challenges (representing user evaluations), challenge_accounts (mapping server IDs, account numbers, and status properties like on progress, passed, failed), account_balance_steps (defining step_code, max_daily_loss, max_loss, and profit_target), and account_statistics (capturing daily balance, equity, total closed trades, and drawdown).

By establishing these tables, the auditing code can run query comparisons instantly, comparing the trader's negative profit directly against the step rules.

b. Trader Dashboard Architecture

We designed a dark UI trader dashboard layout focused on high readability of financial metrics. The main screen displays big KPI cards for Equity, Balance, Max Daily Loss, and Profit Target progress.

We built interactive line charts using Tailwind CSS to trace balance and equity trends, letting traders review historical growth curves and track how close they are to passing the phase target.

c. Admin Dashboard Architecture

For the back-office team, we developed administrative resources in Filament v2. We built review pages for account verification requests (verification-account-requests) where admins can review trades and approve Step 3 conversions.

The admin workspace provides options to ban users, audit billing logs, adjust balance settings, and view the global platform leaderboard.

05 — Usability Testing

Usability Testing

a. Transaction Flow Validation

We verified the billing and registration sequence. We wrote integration tests to simulate successful billing webhooks, checking that the system correctly provisions MetaTrader accounts, assigns the default step code (1), and emails credentials, preventing duplicate accounts or orphan records.

b. API Error & Exception Handling

We tested the platform's behavior when the external MetaTrader API experiences downtime. Inside MetaTraderService, we implemented HTTP client timeouts and retry boundaries.

If the bridge is unreachable, the system catches exceptions, logs the error details via Sentry, and queues the account creation for retries, keeping customer dashboards stable.

05 — Usability Testing

Usability Testing

a. Objective Auditor Validation

We verified the rules engine (ObjectiveCheckerService) by simulating trade values. We tested boundary conditions for daily loss: if an account's max daily loss drops below the limit, the service immediately updates the status to failed and locks the account.

We also tested passing criteria: when an account reaches the profit target, completes the min trading days, and does not violate drawdown limits, the system sets the status to passed and triggers the ChallengeAccountPassed event.

06 — Prototyping & Handoff

Prototyping & Handoff

a. Security Measures

To protect the system, we encrypted sensitive variables (such as MetaTrader server passwords and API credentials) using Laravel's encryption features. Database connections are configured via strict SSL protocols.

We restricted public access, placing the MetaTrader bridge server inside a private VPC and setting up firewall rules to accept incoming REST calls only from the Laravel backend IP.

b. Deployment Strategy

We deployed the web application on Dockerized containers. We set up Laravel Octane on top of Swoole, utilizing Roadrunner as a backup to achieve fast response latencies.

We configured Redis to manage rate-limiting and session caching, with Laravel Horizon running persistent queues to sync trade tickets, ensuring the platform scales during heavy marketing campaigns.

07 — Key Takeaways

Key Takeaways

a. Building High-Stakes Financial Applications

Developing a prop firm system highlights the need for absolute rules enforcement. Using atomic transactions and auditing statistics inside background jobs ensures that drawdown violations are detected immediately, preventing platform losses.

b. Seamless API Integrations

Decoupling the client dashboard from the MetaTrader server using a REST bridge is an excellent design choice. It insulates the frontend application from trade processing delays and guarantees system stability during high network activity.