Skip to content

Repository files navigation

Jita Space

Cypress Tests Quality Gate Status Coverage Bugs License: MIT Discord Deploy with Vercel

An EVE Online companion app — mail, assets, market orders, wallet, killmails, and more, all in one place. Live at jita.space


Features

  • Sign in with your EVE Online account via OAuth2 PKCE
  • Read and send in-game mail
  • Browse assets, wallet, market orders, and contracts
  • Explore killmails via zKillboard integration
  • Rich text rendering of EVE's proprietary HTML format
  • Scheduled background sync of EVE universe data
  • Discord community integration

Tech Stack

Layer Technology
Runtime Node.js ≥ 24
Language TypeScript 5
Monorepo Turborepo + pnpm
Frontend Next.js 16 (App Router) + React 19
UI Mantine 8
Data fetching TanStack React Query 5
State Zustand
Database PostgreSQL + Prisma 7
Cache & queues Redis + Bull
Background jobs Trigger.dev
Auth Custom EVE Online SSO (OAuth2 + PKCE)
Rich text Tiptap + EVE HTML extensions
API codegen Kubb (OpenAPI → TypeScript)
Testing Jest + Cypress
Monitoring Sentry + Umami
Deployment Vercel

Repository Structure

apps/
  ├─ web/    Next.js web app — the main product
  └─ cli/    Developer CLI utilities

packages/
  ├─ auth/                    ├─ esi-metadata/
  ├─ auth-utils/              ├─ eve-data/
  ├─ db/                      ├─ eve-icons/
  ├─ kv/                      ├─ tiptap-eve/
  ├─ esi-client/              ├─ ui/
  ├─ sde-client/              ├─ hooks/
  ├─ evekill-client/          ├─ chat/
  ├─ fuzzworks-market-client/ ├─ background-jobs/
  └─ evetycoon-client/        └─ utils/

tooling/
  ├─ eslint/    ├─ prettier/    └─ tsconfig/

Packages

Core

Package Description
@jitaspace/auth Custom EVE Online SSO OAuth2 flow (PKCE + state), token sealing & refresh
@jitaspace/auth-utils Token helpers and SSO utilities
@jitaspace/db Prisma client and PostgreSQL schema
@jitaspace/kv Redis client and Bull job queues

EVE API Clients

All generated by Kubb from OpenAPI specs. Run pnpm kubb:generate to regenerate — do not edit these files directly.

Package API
@jitaspace/esi-client ESI — EVE Online's official REST API
@jitaspace/sde-client Self-hosted SDE API at sde.jita.space
@jitaspace/evekill-client EVE-KILL killmail data
@jitaspace/fuzzworks-market-client Fuzzwork market aggregates
@jitaspace/evetycoon-client EveTycoon market data (currently blocked by CORS)

Data & UI

Package Description
@jitaspace/esi-metadata ESI scope definitions, ID ranges, and endpoint→scope mappings
@jitaspace/eve-data Static EVE Online datasets (ships, skills, regions, …)
@jitaspace/ui Shared Mantine component library — forms, tables, modals, charts
@jitaspace/eve-icons EVE Online icons as React components
@jitaspace/tiptap-eve Tiptap extension for parsing and rendering EVE's HTML format

Utilities

Package Description
@jitaspace/hooks React Query hooks for high-level ESI and third-party API interactions
@jitaspace/chat Discord-backed in-app chat client
@jitaspace/background-jobs Platform-agnostic jobs for scheduled EVE data scraping and SDE imports (run by Trigger.dev)
@jitaspace/utils Shared utility functions

Getting Started

Prerequisites

  • Node.js ≥ 24
  • pnpm 11 (npm install -g pnpm)
  • PostgreSQL database
  • Redis instance
  • EVE Online developer app — register here

Setup

git clone https://github.com/joaomlneto/jitaspace.git
cd jitaspace
pnpm install
cp .env.example .env   # fill in your credentials
pnpm db:push           # apply schema (also runs db:generate)
pnpm kubb:generate     # generate API clients from OpenAPI specs
pnpm dev               # start all dev servers

Open http://localhost:3000.


Environment Variables

Variable Description
NEXTAUTH_SECRET Secret for signing session cookies (openssl rand -base64 32)
EVE_CLIENT_ID EVE Online SSO client ID
EVE_CLIENT_SECRET EVE Online SSO client secret
DATABASE_URL PostgreSQL connection string
REDIS_URL Redis URL (default: redis://127.0.0.1:6379)
CRON_SECRET Secret for Vercel Cron route protection
ESI_USER_AGENT User-agent for ESI API requests
ZKILLBOARD_USER_AGENT User-agent for zKillboard requests
NEXT_PUBLIC_DISCORD_INVITE_LINK Discord server invite URL
DISCORD_BOT_TOKEN Discord bot token
NEXT_PUBLIC_UMAMI_WEBSITE_ID Umami analytics site ID
NEXT_PUBLIC_GOOGLE_TAG_ID Google Tag Manager ID

Full reference: .env.example


Commands

pnpm dev              # Start all dev servers in parallel
pnpm build            # Build everything
pnpm test             # Run all tests (Jest)
pnpm lint             # ESLint + manypkg checks
pnpm lint:fix         # Auto-fix linting issues
pnpm type-check       # TypeScript across all packages
pnpm format           # Prettier

pnpm db:generate      # Regenerate Prisma client
pnpm db:push          # Push schema + regenerate client
pnpm kubb:generate    # Regenerate all API clients

pnpm cypress:run      # Run E2E tests headlessly
pnpm cypress:open     # Open Cypress runner
pnpm clean            # Remove root node_modules
pnpm clean:workspaces # Clean all workspace build output

Deployment

Click Deploy with Vercel at the top of this README — it will fork the repo, prompt for all required environment variables, and deploy. You'll need a PostgreSQL database and Redis instance ready beforehand (e.g. Neon + Upstash, Railway, or self-hosted). After the first deploy, run pnpm db:push against your database to apply the schema.

For manual setup: set apps/web as the Vercel root directory. Turborepo remote caching is supported out of the box. Background jobs run separately on Trigger.dev, deployed via its GitHub integration.


Contributing

  1. Fork and create a branch
  2. Make your changes — internal packages import as @jitaspace/* with workspace:*
  3. Run pnpm lint && pnpm type-check && pnpm test
  4. For package version bumps, run pnpm changeset

Questions or ideas? Join the Discord.


License

MIT — see LICENSE.

About

EVE Online tools and datasets

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

12 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages