AI-powered investment platform with intelligent automation
Lacoda Capital Holdings needed a private, full-stack operating system for asset management, advisory, education, and client relationships. The platform needed to match the capabilities of enterprise business dashboards—not startup software, but a professional firm OS with role-based access, client portals, assistant management, and optional crypto visibility.
Build a complete business operating system modeled after T Creative Studio's dashboard, but translated for asset management and advisory services. The platform needs a full role hierarchy (Admin, Assistant, Client), core modules (Dashboard, Engagements, Calendar, Messages, CRM, Analytics, Financial, Documents), and an asset management layer with crypto API integration.
Analyzed T Creative Studio's dashboard architecture to translate each module for asset management context
Designed complete role hierarchy: Admin (full access), Assistant (assigned clients, drafting, scheduling), Client (portal access, documents, asset summaries)
Built core platform modules: Dashboard with AUM metrics, Engagements booking system, Calendar with availability management
Implemented messaging system with AI summaries and follow-up task generation
Created CRM with asset-specific fields: status, engagement history, lifetime value, asset category tags, risk tier
Developed Documents vault for reports, decks, statements, contracts, and compliance docs
Built Financial module for invoices, payments, subscriptions, and retainers
Architected asset management layer with client-linked profiles and read-only monitoring
Integrated crypto APIs for persisted snapshots, history views, and alerts
Professional firm OS established—not startup software, but enterprise-grade operations
Complete role-based access control with Admin, Assistant, and Client permissions
Assistant portal enables scaling without risk—assigned clients only, read-only portfolios
Crypto monitoring integrated as optional advanced feature, not required for onboarding
Professional intake flow replaces generic sign-up with multi-step engagement process
MVP, stretch goals, and future vision
Development phases and milestones
Auth, roles, client management, engagements, and essential business operations
Complete authentication system with role-based access control
Professional intake flow replacing generic sign-up
Booking system for advisory services with availability management
Inbox for booking requests, inquiries, and client communication
Secure document management for reports, contracts, and compliance
Financial module for billing and payment tracking
Central command with key business metrics
Assistant portal, crypto visibility, offerings catalog, training, and AI copilots
Delegated access for analysts to handle assigned clients
Expanded crypto API integration with persistence and monitoring
Marketplace for advisory packages and services
Educational content for investor education
OpenAI-powered assistants for analysis and automation
Mapbox-powered event and meeting visualization
Quick answers to 'Why did you choose X?' questions
Off-the-shelf investment platforms are expensive, inflexible, and don't offer the AI capabilities the client envisions. A custom solution gives full control over features, data ownership, and the ability to integrate cutting-edge AI that differentiates the firm from competitors.
Planning to use OpenAI's API to build an intelligent assistant that can answer investor questions, summarize portfolio performance, generate reports, and potentially automate routine communications. The agent will have access to the firm's data through secure API endpoints.
Investment data requires ACID compliance, complex queries for reporting, and strong data integrity. PostgreSQL handles financial data reliably and scales well. Combined with Prisma ORM, it provides type-safe database access.
Evaluated all three for tracking user behavior in the client portal. Amplitude: powerful cohort analysis but expensive at scale, best for product teams with dedicated analysts. Mixpanel: strong event tracking and funnels, good pricing, but vendor lock-in. PostHog: open-source, self-hostable, EU hosting available, includes session replay and feature flags. For a financial firm with data sensitivity concerns, PostHog won—we can self-host to keep client behavior data on our own infrastructure, and the all-in-one platform (analytics + session replay + feature flags) reduces vendor complexity.
The founder's sister built a comprehensive business OS for her creative agency. Rather than reinvent the wheel, we translated her proven module structure (Dashboard, Engagements, Calendar, Messages, CRM, Analytics, Financial, Documents) into asset management context. Same architecture, different domain—this accelerated design decisions and provided a tested UX pattern.
For a client who needs to manage marketing content without developer intervention, Storyblok's visual editor is unmatched. Unlike Sanity (code-heavy content modeling) or Contentful (JSON-focused), Storyblok lets non-technical users drag and drop components visually. The real-time preview shows exactly how content will appear. For a financial firm where the founder needs to update investor materials quickly, this WYSIWYG approach reduces friction. Plus, Storyblok's built-in asset management handles PDFs and images for investor decks. The tradeoff: less flexible than Sanity for complex data modeling, but for marketing pages and blog content, visual editing wins.
Chose Server Actions with Supabase client for most operations. GraphQL adds complexity (schema definitions, resolvers, client setup) that's overkill for a single-client app where I control both frontend and backend. Server Actions give type-safe, co-located data fetching with zero API boilerplate. For complex queries like portfolio aggregations, Supabase's query builder handles joins and aggregations directly. GraphQL would shine if multiple clients consumed the API differently, but here, Server Actions are simpler and faster to iterate on.
Decided against adding Prisma/Drizzle on top of Supabase. Supabase already provides a typed client generated from the database schema (via CLI), giving type-safe queries without the ORM abstraction layer. Adding Prisma would mean: (1) duplicate type definitions, (2) two migration systems to manage, (3) losing Supabase's real-time subscriptions and RLS integration. Drizzle is lighter but still adds complexity. The Supabase JS client with generated types gives 90% of ORM benefits without the overhead. For raw SQL needs, Supabase's postgres.js connection handles it.
Every decision has costs — here's how I thought through them
For a financial firm handling sensitive client data, controlling where analytics data lives is critical. PostHog's self-hosting option means client portal behavior never leaves our infrastructure. The all-in-one platform also reduces vendor sprawl.
Off-the-shelf platforms charge $500-2000/month and can't do AI. A custom build costs more upfront but provides unlimited flexibility and becomes a competitive advantage. The firm owns the IP.
The founder explicitly asked: 'Do I have assistants?' This role enables hiring analysts who can draft reports and handle scheduling without seeing firm financials or other clients. It's how professional firms scale.
Not all advisory clients have crypto. Making wallet connect optional means the platform serves traditional asset management clients while offering crypto monitoring for those who want it. Business-correct positioning.
For a solo developer building a complex platform, Supabase eliminates weeks of auth and infrastructure work. RLS means security is enforced at the database level—even if I make a mistake in API code, unauthorized data access is blocked.
The founder needs to update investor materials and marketing pages without calling me. Storyblok's visual editor means he can make changes in real-time with live preview. For a busy firm, this self-service capability is worth the tradeoff in flexibility.
For a single-client application where I control both ends, Server Actions eliminate entire categories of work (API routes, schema definitions, client setup). If Lacoda ever needs a public API, we can add GraphQL endpoints for specific use cases without rewriting the core app.
Supabase's typed client (generated via `supabase gen types`) provides 90% of what an ORM offers. The remaining 10% (relation loading, query building) isn't worth adding another abstraction layer and maintaining duplicate type systems. When I need complex queries, raw SQL with Supabase's postgres.js is more powerful than ORM abstractions.
Playwright powers the AI research features—extracting content from investment news, SEC filings, and market reports. Unlike API-based scrapers, we control the entire browser session, can authenticate with any site, and handle complex JavaScript-heavy pages. The clean text output feeds directly into OpenAI for analysis. Since we already use Playwright for testing, the scraping logic shares infrastructure.
The hardest problems I solved on this project
Designed the architecture to be modular - the current marketing site and CMS work standalone, while the database and API layer are built to support the upcoming investor portal and AI features.
Created a clear separation between the public-facing site (Next.js + Sanity) and the application layer (API routes + PostgreSQL), making it easy to add AI capabilities without disrupting existing functionality.
Lesson: When building for evolving requirements, invest in clean architecture early - it pays off when adding complex features later.
Working closely with the client to understand what tasks are most valuable to automate and what investor interactions could benefit from AI assistance.
Starting with clearly defined use cases: portfolio summaries, Q&A about investment opportunities, and report generation. Will expand based on what provides the most value.
Lesson: AI features should solve real problems, not just be impressive demos. Start with high-value use cases.
Want to discuss this project?