← Selected work

FULL-STACK APPLICATION · MACHINE LEARNING · AI

02

Olmem Market Intelligence

A decision-support platform that organizes market conditions, company signals, IPO activity, portfolio context, and optional AI explanations.

Olmem Market Intelligence dashboard showing market conditions and stock opportunities

Investment research is fragmented across price feeds, index performance, sector conditions, company fundamentals, news, IPO calendars, and portfolio positions. Raw information is abundant, but understanding what deserves attention—and why—requires repeated comparison across disconnected sources.

I wanted a research experience that reduces information overload without pretending uncertainty can be removed. The product is designed to help a user understand market context, compare opportunities, and investigate evidence before making a decision. It intentionally separates research guidance from trade execution.

The application collects market and business data, normalizes it into a PostgreSQL-backed domain model, applies rule-based scoring and Python model workflows, and presents the results in a Next.js dashboard. Optional AI providers can translate structured evidence into plain-language explanations. Authentication, portfolio input, alerts, preferences, subscription state, and IPO monitoring create a complete research workflow.

A simplified view of how information moves through the solution.

Technology choices were made around operating constraints, maintainability, integration boundaries, and the people using the system.

Framework

Next.js

The App Router supports a fast dashboard experience, server-rendered public surfaces, protected application routes, and API endpoints in one deployable codebase.

Language

TypeScript

Typed contracts reduce errors across market payloads, scoring results, database records, and UI components where field mismatches are costly.

Database

PostgreSQL / Prisma

Relational storage fits users, holdings, alerts, subscription state, research preferences, and repeatable market snapshots; Prisma keeps application queries explicit and type-safe.

Machine Learning

Python

Python provides the strongest ecosystem for feature engineering, model experimentation, validation, and future model-serving workflows.

AI

AI provider APIs

A provider-agnostic layer lets users request explanations without making the core scoring engine dependent on a single model vendor.

Cloud

Vercel

It provides low-friction Next.js deployment, managed build previews, and environment configuration while the product is iterating quickly.

Languages

TypeScript · Python

Frameworks

Next.js · React · Prisma

Databases

PostgreSQL

Cloud

Vercel

Machine Learning

Feature pipelines · Scoring models

AI

Provider-agnostic explanations

APIs

Market data · News · AI providers

Deployment

Vercel CI/CD

HARDEST CHALLENGE

The hardest challenge was turning conflicting signals into understandable guidance. Momentum, pullback quality, valuation, market breadth, company quality, and news can point in different directions.

HOW I SOLVED IT

I kept the deterministic scoring layer separate from AI narration. Structured scores and reason codes remain inspectable; AI is optional and explains the evidence rather than silently replacing it.

LESSON LEARNED

Decision-support systems are more trustworthy when users can see why a result exists. Explainability and clear boundaries matter more than adding another opaque score.

Concise implementation patterns that show the engineering beneath the interface.

typescriptExplainable opportunity scoring

Representative implementation pattern · private source protected

The scoring pattern returns both a numeric result and reason codes. That makes the dashboard explainable and gives the optional AI layer structured evidence to discuss.

type Signal = {
  score: number;
  reasons: string[];
};

export function scoreOpportunity(stock: Snapshot): Signal {
  let score = 50;
  const reasons: string[] = [];

  if (stock.trend > 80) {
    score += 15;
    reasons.push("long-term uptrend");
  }
  if (stock.pullbackQuality > 75) {
    score += 15;
    reasons.push("high-quality pullback");
  }
  if (stock.risk > 70) {
    score -= 20;
    reasons.push("elevated risk");
  }

  return { score: Math.max(0, Math.min(100, score)), reasons };
}
  • Centralizes market, company, sector, portfolio, news, and IPO research.
  • Improves visibility into why a stock is ranked as an opportunity, watch item, or risk.
  • Reduces repeated comparison across disconnected research screens.
  • Supports configurable research preferences and portfolio-aware insights.
  • Keeps AI optional while maintaining a functional rule-based decision layer.

Source remains private to protect business logic, credentials, customer information, and proprietary workflows.