Back to Projects
Market Intelligence AI

Sibyl

Continuous Market Intelligence

Sibyl helps founders, marketers and analysts follow their markets without rebuilding the same research each week. Teams track a portfolio of topics, compare attention and momentum, investigate signals and related opportunities, and review geographic interest, search results and source evidence. Watchlists, market theses, alerts and briefs turn those observations into a recurring decision workflow; Ask Sibyl answers questions from workspace evidence. I conceived the product, its scoring and signal algorithms, and the asynchronous architecture behind collection, shared computation and historical monitoring.

Next.js React TypeScript NestJS PostgreSQL Drizzle Redis BullMQ AI integration Docker Payment integration

# Homepage Preview

Sibyl public homepage introducing market intelligence and monitoring

Problem

Market research becomes difficult to maintain when search demand, news, competitors and social activity are scattered across providers. One-off reports age quickly, while short-lived spikes and incomplete observations can distort the interpretation of a market.

Solution

Sibyl keeps a portfolio of markets under recurring observation, then turns available search, news, video and social evidence into comparable views and explainable signals. Teams can investigate what changed, follow an opportunity, assess a market thesis and share a brief. Deterministic algorithms compute market scores; AI helps explain persisted evidence through summaries and contextual answers.

# What You Can Do

Monitor a portfolio of markets

Choose niches, brands or topics and follow their attention, momentum and historical movement in a shared workspace. Compare tracked markets without repeating every search manually.

Review changes that deserve attention

Investigate signals and risk flags, work through a review queue, and configure monitoring rules and alerts to support a recurring review routine.

Follow related opportunities

Explore source-backed subtopics and adjacent markets, review why they relate to your topic, and keep promising candidates in an opportunity watchlist.

Investigate the underlying evidence

Inspect source coverage, geographic interest, search-result composition, actors and saturation indicators. Open the observations behind an interpretation.

Track a market thesis

Turn a business hypothesis into a monitored thesis, inspect its evidence and timeline, and revisit it as new observations become available.

Ask questions and share findings

Ask Sibyl about observed changes, comparisons or risks. Review AI-assisted answers with citations, prepare market and daily-review briefs, and share or export findings with your team.

# My Contribution

# Full Stack & Infrastructure

Frontend

Next.js React TypeScript Tailwind CSS Radix UI TanStack Query Recharts React Simple Maps Zod Managed hosting

Backend & Data

NestJS Node.js / Bun TypeScript Drizzle ORM PostgreSQL Managed authentication REST APIs

Workers & Reliability

BullMQ Redis / ioredis Provider I/O worker Materialization worker Reliability worker Database outbox Read-model invalidation

AI & Data Integration

LLM gateway External data sources Content ingestion Contextual analysis Source provenance

Infrastructure & Integrations

Docker Compose Nginx TLS certificate management Subscription billing Email delivery CRM integration Usage analytics Product analytics

# Technical Challenges

Combining provider data with different timestamps, formats, coverage and freshness without treating missing observations as zero.

Separating short-lived spikes from structural market movement while preserving the direction and timing of real changes.

Sharing collection and computation across users to control processing costs without mixing topic context or workspace access.

Recovering delayed postbacks and partial collection cycles while keeping published analytical views consistent.

Giving AI answers useful source citations while keeping scores, signals and market decisions tied to the deterministic analytical model.

Keeping contextual analysis relevant and traceable as the available evidence changes.

# System Architecture

Sibyl deploys Next.js on managed hosting and the NestJS backend on a separate Docker Compose host behind an edge gateway and Nginx. Redis/BullMQ transports work between dedicated provider I/O, materialization and reliability processes. Managed services supply identity and PostgreSQL; Drizzle persists observations, historical snapshots and read models. Provider postbacks return through the API origin. Redis update events and an SSE proxy refresh the UI without triggering provider collection on dashboard reads.

Key Features

  • Portfolio monitoring, market scores and historical timelines
  • Signals, review queue, monitoring rules and alerts
  • Related opportunities and durable watchlists
  • Geo interest, SERP composition, actors and saturation
  • Source coverage, evidence inspection and risk flags
  • Market thesis tracking and reports
  • Ask Sibyl, cited AI answers and shareable briefs
  • Collaborative workspaces, subscriptions and usage management
100%

A managed web runtime connects to the API origin through an edge gateway. Nginx fronts a private Docker network containing the NestJS API, Redis and three dedicated worker roles.

Request / responseQueued workPersistent dataEvents / callbacksControl / operations
Sibyl infrastructure · Deployment topology A managed web runtime connects to the API origin through an edge gateway. Nginx fronts a private Docker network containing the NestJS API, Redis and three dedicated worker roles. The connection table below provides a text equivalent of every arrow. WEB HOSTING Web deployment BACKEND HOST · DOCKER COMPOSE Private service network · only the proxy exposes host ports MANAGED DATA SERVICES Managed identity and PostgreSQL Analyst browser → Next.js application: HTTPS Next.js application → Identity service: Auth / JWT Next.js application → Edge gateway: HTTPS · API + SSE Edge gateway → Nginx: HTTPS · origin TLS Certificate services → Nginx: TLS files / reload Nginx → NestJS API: HTTP · private upstream NestJS API → Redis / BullMQ: Jobs / cache / events Redis / BullMQ → NestJS workers: BullMQ dispatch NestJS API → PostgreSQL: SQL / TLS · read projections NestJS workers → PostgreSQL: Persist observations / projections NestJS workers → Market data providers: Provider tasks / collection Market data providers → Nginx: Provider callbacks NestJS API → AI inference service: Evidence-grounded inference NestJS workers → Commercial services: Durable outbound effects Commercial services → Edge gateway: Billing webhooks CLIENT Analyst browser Workspace dashboard Queries + event stream SERVICE Next.js application React · Managed hosting Backend proxy + SSE proxy EXTERNAL Identity service Session / JWT Workspace authentication EXTERNAL Edge gateway Proxied API DNS Encrypted origin connection SERVICE Nginx Origin TLS · 80 / 443 Private upstream: api:4000 SERVICE Certificate services TLS renewal + proxy reloader ACME + persistent TLS files SERVICE NestJS API Node.js · role: api Read models / job producers DATA STORE Redis / BullMQ Queues + cache + pub/sub AOF volume: redis_data WORKER NestJS workers Three dedicated processes Collect · materialize · recover DATA STORE PostgreSQL Managed database · ORM Evidence, history, projections EXTERNAL Market data providers External source connectors Search / news / social / video EXTERNAL AI inference service Bounded LLM gateway Ask Sibyl + cited briefs EXTERNAL Commercial services External service integrations Billing, delivery and CRM HTTPS Auth / JWT HTTPS · API +SSE HTTPS · originTLS TLS files /reload HTTP · privateupstream Jobs / cache /events BullMQdispatch SQL / TLS ·readprojections Persistobservations /projections Provider tasks/ collection Providercallbacks Evidence-groundedinference Durableoutboundeffects Billingwebhooks
Scroll inside the canvas to explore. Zoom for detail, or fit the whole diagram.

API and workers have different ownership

The api process does not consume queues or run schedulers. Collection, projection building and recovery run in separately provisioned containers built from the same NestJS image.

Persisted read models

Dashboard reads use PostgreSQL projections and Redis caching. Workers publish update events through Redis; API instances invalidate cached views and relay updates over SSE.

Service boundaries

The browser reaches the application through web and API gateways. Data collection, analysis and publication remain backend responsibilities, separate from dashboard reads.

Read all connections (15)
FromToProtocol / responsibilityFlow
Analyst browserNext.js applicationHTTPSRequest / response
Next.js applicationIdentity serviceAuth / JWTRequest / response
Next.js applicationEdge gatewayHTTPS · API + SSERequest / response
Edge gatewayNginxHTTPS · origin TLSRequest / response
Certificate servicesNginxTLS files / reloadControl / operations
NginxNestJS APIHTTP · private upstreamRequest / response
NestJS APIRedis / BullMQJobs / cache / eventsQueued work
Redis / BullMQNestJS workersBullMQ dispatchQueued work
NestJS APIPostgreSQLSQL / TLS · read projectionsPersistent data
NestJS workersPostgreSQLPersist observations / projectionsPersistent data
NestJS workersMarket data providersProvider tasks / collectionRequest / response
Market data providersNginxProvider callbacksEvents / callbacks
NestJS APIAI inference serviceEvidence-grounded inferenceRequest / response
NestJS workersCommercial servicesDurable outbound effectsRequest / response
Commercial servicesEdge gatewayBilling webhooksEvents / callbacks

Keep reads responsive

Dashboard requests consume persisted projections; provider work and expensive recomputation run outside the HTTP request.

Preserve evidence

Observations retain their source, context and timestamp. Algorithms compute scores from that evidence; AI explains it. Missing history remains unknown rather than becoming an invented growth value.

Separate worker ownership

Provider collection, materialization and recovery have dedicated process roles so scaling one workload does not change the API's responsibilities.

# User Flow & Journey

Define a topic

Step 01

Add the market or opportunity to investigate, with context relevant to the research.

Collect evidence

Step 02

Follow collection activity as Sibyl gathers observations from configured providers.

Investigate & compare

Step 03

Review scores, geographic interest and sources; explore related opportunities and ask contextual questions.

Monitor & review

Step 04

Follow signals, watchlists and market theses over time; review alerts and evidence as observations change.

Share & act

Step 05

Prepare a cited market brief or report and share findings to support the team's next decision.

Flow Analysis

Move from a research topic to an ongoing view of the market and its changes.

Discuss this Project
← Back to Projects Contact Me →