Skip to content

FTMManager/JackalMarket

Repository files navigation

JackalMarket

A desktop stock market tracker and predictor built with React Router, Vite, and Electron. Tracks live quotes, manages portfolios, and generates AI-powered price predictions using technical analysis.

![Dark theme UI with markets, portfolio, and predictions pages]

Features

  • Live Markets — Real-time quotes for stocks, crypto, and indices (via Yahoo Finance). Add/remove any symbol, auto-refreshes every 60 seconds. Click any row for a detailed side panel with a 90-day price chart, OHLC stats, and predictions.
  • Predictions — Statistical price projections using Linear Regression, Bollinger Bands, RSI, and MACD. Shows bear/base/bull price targets with a confidence score.
  • Portfolio Manager — Track holdings across multiple portfolios. Shows market value, cost basis, and unrealized P&L per holding. Requires a PostgreSQL database (see setup below).

Tech Stack

Getting Started

Prerequisites

Install

cd apps/web
npm install

Run as a desktop app

npm run electron:dev

This starts the Vite dev server on port 4000 and opens it in an Electron window automatically.

Run in the browser only

npm run dev

Then open http://localhost:4000.

Environment Variables

Create a .env file in apps/web/ (one already exists with a placeholder token):

Variable Required Description
DATABASE_URL Optional Neon PostgreSQL connection string. Only needed for the Portfolio feature.

Without DATABASE_URL, the Markets and Predictions pages work fully — only Portfolio will show an error.

Setting up the Portfolio database

If you want the Portfolio feature, create a free database at neon.tech, then run this SQL to set up the tables:

CREATE TABLE portfolios (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE holdings (
  id SERIAL PRIMARY KEY,
  portfolio_id INTEGER REFERENCES portfolios(id) ON DELETE CASCADE,
  symbol TEXT NOT NULL,
  shares NUMERIC NOT NULL,
  average_cost NUMERIC NOT NULL
);

Then add your connection string to .env:

DATABASE_URL=postgres://...

Project Structure

apps/web/
├── electron/
│   └── main.cjs          # Electron main process
├── src/
│   ├── app/
│   │   ├── markets/      # Live quotes page
│   │   ├── portfolio/    # Portfolio manager page
│   │   ├── predictions/  # Price predictions page
│   │   ├── api/
│   │   │   ├── quotes/   # GET /api/quotes
│   │   │   ├── history/  # GET /api/history
│   │   │   ├── predict/  # GET /api/predict
│   │   │   └── portfolios/ # CRUD /api/portfolios
│   │   └── layout.jsx
│   └── components/
│       └── Navigation.jsx
└── package.json

Prediction Methodology

Predictions are purely statistical — not financial advice.

Indicator Usage
Linear Regression Projects 90-day price trend forward
Bollinger Bands Sets bear/bull volatility envelope
RSI (14-period) Detects overbought/oversold conditions
MACD Identifies momentum shifts
Confidence Score Weighted by trend strength, RSI extremes, and volatility

Scripts

Command Description
npm run electron:dev Run as desktop app (starts dev server + Electron)
npm run dev Run in browser only
npm run build Build for production
npm run typecheck Type check with TypeScript

Disclaimer

Price predictions are statistical projections based on historical data and technical indicators. They are not financial advice. Past performance does not guarantee future results.

About

This is an experimental Stock Market/Crypto project that implements AI to show live numbers as well as predict future movements. Can also view and manage portfolios.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors