Milemarker is a platform designed to provide financial / wealth management advisory companies with a powerful, centralized system for managing data and optimizing client engagement. Built with multi-tenancy at its core, Milemarker allows organizations to easily onboard and manage multiple firms, offices and teams, each with its own customized data and reporting needs. Using Milemarker's dynamic Page Builder functionality, financial advisors can visualize key data points through charts, tables, and overview widgets, all tailored to individual office requirements. This flexible setup enables advisory company management to enhance the overall decision-making process. Milemarker’s multi-tenancy solution simplifies tenant creation and management, making it easier than ever to scale.
We are responsible for
Scope:
Dedicated Agile Team
Team:
9 people
Duration:
15 months - ongoing
Challenge
Wealth management advisory firms often struggle with fragmented systems and siloed data. Milemarker set out to solve this by giving advisory companies true ownership of their data - aggregating it from multiple platforms into a single, accessible environment.
Our challenge was to design and build a scalable, secure multi-tenant platform that allowed firms to fully control and activate their data without requiring deep technical expertise. This meant:
At the same time, the platform had to handle complex user hierarchies, firm/office-level targeting, and operational workflows like trade requests or support ticket submissions - all while ensuring strict data isolation, security, and performance at scale.
Solution
We built Milemarker on a tenant-aware architecture in Laravel, with encrypted Snowflake credential handling and streamlined onboarding flows to ensure security and scalability from day one.
On the frontend, we used Vue.js and Nuxt to deliver fully dynamic, brand-aware interfaces where layouts, colors, and even domains are configurable per tenant. This allowed every firm to have a white-labeled experience that feels like their own product.
To give firms full control of their data, we developed a modular Page Builder. Advisors and admins can assemble dashboards from reusable components, each dynamically connected to Snowflake data and filtered by user roles, office, or firm context.
For data onboarding, we created a CSV ingestion module with automatic schema detection and asynchronous background processing. Non-technical users can upload and map files directly into their Snowflake environment without engineering support.
To handle day-to-day operations, we designed a flexible ticketing system powered by a dynamic form builder. Tenant admins can define custom request types - from trade approvals to data fix requests - and configure workflows without code changes. Together, these features turned Milemarker into a secure, scalable, fully white-labeled, and AI-ready data platform for modern wealth management firms.
Dynamic Data Representation & Page Builder
We built a flexible system that enables real-time data visualization directly from Snowflake, giving clients full control over how data is displayed and to whom.
Through a user-friendly Page Builder UI, clients can create custom dashboards by selecting datasets, visual components, and layout blocks. These dashboards are rendered dynamically and can be embedded anywhere - across internal tools, investor portals, or even public-facing sites.
The system supports advanced data targeting, allowing clients to:
Data access is isolated not only at the tenant level, but also within tenants - scoped down to specific offices and firms - ensuring precise visibility control.
At runtime, the system intelligently evaluates the viewer’s context and retrieves only the relevant subset of data from Snowflake, delivering a personalized, secure, and high-performance experience.
Self-Service File Ingestion Module
We developed an intuitive file ingestion system that allows clients to upload CSV files and feed data directly into their own Snowflake environment - no SQL or engineering support required.
When a file is uploaded, the module automatically parses its structure, detects the schema (columns, data types, formats), and presents a preview. Users are then guided to either:
A dynamic mapping interface helps users match CSV headers to existing Snowflake columns with ease. Large file uploads are handled through background jobs and queues, ensuring smooth, asynchronous processing without impacting overall system performance.
Ingestion is scoped strictly at the tenant level, meaning all data is stored within the tenant’s Snowflake context, without automatic segmentation by office or firm. It’s up to the Page Builder admin to define how and where this data is used within the tenant, including any targeting rules based on user roles or office structures.
Brand Customization & Domain Flexibility
We built a robust brand management system that allows tenant admins to fully customize the look and feel of their environment, no developer involvement needed. Admins can configure everything from color palettes, background images, and logo assets to typography and visual accents, creating a tailored, white-labeled experience that aligns with each client’s brand identity.
All branding configurations are stored at the tenant level and applied dynamically across the entire interface, ensuring consistency and flexibility for every deployment.
In parallel, we developed a powerful domain management feature. Unlike many multi-tenant SaaS platforms that restrict tenants to subdomains (e.g. client1.app.com
), our system allows each tenant to register and serve content from a completely custom domain (e.g. dashboard.clientfirm.com
). The system automatically handles domain-to-tenant resolution, SSL certificate generation, and secure routing, enabling true white-label deployments with minimal technical effort.
Ticket Submission & Request Handling System
We designed a flexible ticketing system to support a wide range of internal and client-facing workflows within each tenant environment. The module allows users across different roles - such as advisors, analysts, and assistants - to submit tickets tied to their specific permissions and responsibilities.
Supported ticket types include:
The system is powered by a dynamic form builder, enabling tenant admins to create custom forms for each request type. Admins can configure fields (text, select, checkbox, file upload, etc.), set validation rules, manage visibility conditions, and tailor the logic without deploying new code.
Built on a modular request architecture, the system supports adaptive form rendering, role-based routing, permission controls, and status lifecycle management (e.g. Open → In Review → Resolved). Each ticket can include comments, attachments, and internal notes to streamline collaboration.
Tickets are scoped to the tenant level, with the option to associate them with specific firms, offices, or users. Automated email notifications ensure timely updates and SLA-driven resolution workflows.
Discovery & Requirements Gathering
Our discovery phase brought together a delivery manager, product designer, and product manager to work hand-in-hand with the Milemarker team. We ran a series of workshops and interviews with key stakeholders - including the client, their product owner, and developers who knew the legacy system. These sessions gave us a clear picture of how the existing product worked, the technologies it relied on, and the third-party integrations in play.
Building on that understanding, we shaped the vision for the new multi-tenant platform. Through iterative discussions, both teams shared insights and aligned on priorities. By the end of discovery, we had a well-defined plan for the MVP: the essential features it needed, the legacy systems to integrate, and how the new platform would better support Milemarker’s growth and evolving needs.
Frontend development
The client-facing application was built using Vue.js with Nuxt, chosen for its modular architecture and flexibility to support tenant-specific customizations.
The frontend was designed to be fully dynamic, enabling white-labeled experiences across domains. Branding data - such as colors, logos, and background images - was fetched per tenant at runtime, allowing the UI to adapt in real time based on the active domain and configuration.
We implemented a component-driven architecture to power the Page Builder feature, allowing entire pages to be constructed dynamically using standalone, reusable Vue components. These components were hydrated with live Snowflake data at runtime, based on user context and targeting logic such as role, office, or firm affiliation.
To support ticket workflows and request submissions, we integrated Vueform, enabling tenant admins to create and manage fully dynamic forms, complete with custom validation and layout logic, without needing to push any new code. This gave non-technical users powerful tools to configure client-side interactions with full flexibility.
Backend development
On the backend, we used Laravel as the core framework, providing a stable foundation for a scalable, multi-tenant architecture with event-driven workflows and secure, context-aware data access.
To support dynamic data operations, we integrated Snowflake as the primary data source. Queries were wrapped to ensure they were always scoped to the correct tenant, firm, or user context - preserving data integrity and isolation across the platform.
We built the administrative interface using Filament, creating two distinct admin panels:
Both panels were built with role-based access control and custom Filament resources tailored to the specific needs of administrators.
To power the frontend, we also developed a REST API, ensuring seamless interaction between the client-side app and backend services.
DevOps
We adopted an Infrastructure as Code (IaC) approach to ensure consistency, repeatability, and scalability across environments.
Deployment ran on AWS Elastic Container Service (ECS), orchestrating containerized workloads in isolated, tenant-aware environments. Persistent data was handled with RDS (MySQL), file storage with S3, and caching/queue management with Elasticache (Redis) - which we configured not only for caching but also as the queue driver to handle background jobs, ingestion processes, and other async workloads at scale.
Configuration management and provisioning were automated via Ansible and CloudFormation, ensuring environment parity across staging and production. For CI/CD, GitHub Actions pipelines were set up to lint, test, build, and deploy containers into ECS clusters automatically.
We are a 200+ people agency and provide product design, software development, and creative growth marketing services to companies ranging from fresh startups to established enterprises. Our work has earned us 100+ international awards, partnerships with Laravel, Vue, Meta, and Google, and the title of Georgia’s agency of the year in 2019 and 2021.