Skip to main content

Alliance Auth Industry Plugin

PyPI version Python versions Tests

A powerful plugin for Alliance Auth to help corporation and alliance members track their EVE Online industry operations. This app utilizes the EVE Swagger Interface (ESI) to synchronize industry jobs directly into your Alliance Auth environment.

Features

  • Personal Dashboard: Users can easily track their active, completed, and delivered manufacturing jobs. Includes a dedicated "Research & Invention" tab for tracking ME/TE/Copying and Invention jobs grouped by character.
  • Blueprint Library: Unified corporate blueprint library with powerful category and group filtering. Members can view available corp blueprints and submit copy requests directly.
  • Corporate Dashboard: Directors and Managers can monitor all corporate industry jobs, discover and explicitly configure Production Facilities, set Default Corporate Structures, and auto-sync installed structure rigs from a centralized overview.
  • Member Portal (Self-Service): Members can request hulls, structures, or components, paste EFT fits directly to automatically parse requirements, and go through a professional quoting flow featuring Exact EVE Math for material calculations (Director approval -> User acceptance).
  • Industrialist Dashboard (Job Market): Corp builders can claim automated production tasks, track their history, compete on Gamification Leaderboards, and view real-time industry statistics via the Dynamic MOTD. Claimed task lists are flattened for clean oversight, and Material Progress badges accurately deduct EVE-consumed components.
  • Recursive BOM Drilldown & Shopping List Treeview: Builders and Directors can interactively drill down through complex order Bills of Materials to the base raw materials, generating customized EVE Multibuy shopping lists for specific intermediate components, and view fully interactive Production Trees with Modifier Badges (ME, Rigs, Structure) directly within the Consolidated Shopping Lists.
  • Director Control Panel: Complete ERP solution for directors to manage orders, provide custom quotes, prioritize tasks, manage blueprint requests, analyze missing stock, and set rules for Material Efficiency and Prices entirely from the front-end. Includes easy copy-to-clipboard icons for payout amounts and references to streamline in-game payments.
  • Corporate Wallets: Track ISK balances and journal transactions across all 7 corporate wallet divisions. Directors can set custom Warning Thresholds per wallet division to trigger Discord alerts when balances drop too low.
  • Smart ISK Formatting: Features a built-in abbreviation engine that automatically formats large ISK values and displays precise tooltip translations (e.g., K, M, B, T) when hovered.
  • Core Engine & Automation: Automated Celery tasks to synchronize Corporate ESI Hangars, calculate complex Bills of Materials (SDE vs Fuzzwork API), and trigger jobs based on Target Thresholds.
  • Planetary Interaction (PI): Monitor PI planets (including exact System and Planet names), extractor pins, production facilities, storage capacities (utilization tracking for Launchpads/Storage), and countdown timers for active extraction. Includes automatic Alliance Auth and Discord DM notifications for expired extractors and full storage facilities (with a personal configurable warning threshold).
  • Discord Integration:
    • Direct Messages: Receive automatic DMs via Discord when a personal industry job finishes or when PI extractors expire / storage fills up.
    • Corporate Webhooks: Send alerts to a designated Discord channel when new orders are placed, quotes are updated, or orders are fully built and ready for delivery.
  • Automated Payment Tracking: Generate unique references for member orders and builder payouts. The background ESI Wallet Sync task automatically reads the corporate wallet journal, accumulates partial payments, logs them as order notes, and marks orders as "Paid" once the full amount is reached. Supports upfront payment requirements (downpayments).
  • Transaction Ledger: View a comprehensive history of all internal payments and payouts on the Director Dashboard.
  • System Health Monitor: A dedicated tab in the Director Configurations page that provides real-time logging and status updates for all Celery background tasks, including exact execution duration and Python error stack traces.
  • Multilingual Support (i18n): Fully translatable UI using Django gettext (django.po). Prepare custom translations for your community (e.g., English, Dutch, etc.).
  • DataTables: Clean, sortable, and searchable tables for quick insights.
  • Modern UI: Consistent, tab-based layouts integrating natively with standard Alliance Auth themes.
  • SDE Integration: Resolves blueprint and product Type IDs into readable names and official EVE Online icons automatically by typing item names.

Prerequisites

Before installing this plugin, ensure your Alliance Auth instance meets the following requirements:

  • Alliance Auth v5.x
  • django-esi v4.0.0+ (Included by default in Alliance Auth v5.x)
  • django-eveuniverse: Used for resolving Type IDs to Item Names and Icons.
  • Alliance Auth Discord Bot (aadiscordbot): Required if you want users to receive Direct Messages upon job completion or if you intend to use Corporate Webhooks.
  • A working Celery setup (standard in Alliance Auth) for background synchronization tasks.

Installation

  1. Activate your virtual environment:

    source /path/to/venv/bin/activate
    
  2. Install the App: From your application directory (or via PyPI if published):

    pip install -e /path/to/aa-industry-reforged
    
  3. Configure Settings: Add the app and its dependencies to your INSTALLED_APPS inside myauth/settings/local.py:

    INSTALLED_APPS += [
        "eveuniverse",
        "industry_reforged",
    ]
    
  4. Load Industry Data: To ensure the app can calculate Bills of Materials for both Manufacturing and Reactions without relying on third-party APIs, you must load the EVE Online Industry Activities into your local database:

    python manage.py eveuniverse_load_data types --types-enabled-sections industry_activities
    

    (Note: This creates background tasks. Depending on your Celery workers, it may take a few minutes to fully populate the database).

  5. Run Migrations: Update your database to include the new models.

    python manage.py migrate
    
  6. Restart Services: Restart your Gunicorn/Supervisor and Celery worker so the changes take effect.

    sudo systemctl restart myauth
    sudo systemctl restart myauth-celery
    

Configuration & Usage

1. Load EveUniverse Data

Since this plugin relies on django-eveuniverse to resolve Item Types, make sure the basic EVE universe data is loaded. You may need to run the standard EveUniverse load commands to pull the latest SDE types if you haven't already.

2. Permissions

Assign the following permissions in the Django Admin panel:

  • industry.basic_access: Grants access to the Personal Dashboard (intended for all members).
  • industry.industrialist_access: Grants access to the Industrialist Dashboard, allowing users to view the job market and claim production tasks (intended for corporate builders).
  • industry.corp_access: Grants access to the Corporate Dashboard and Director Control Panel (intended for Directors or Industry Managers).

3. Required ESI Scopes (SSO Grants)

This plugin requires specific ESI scopes depending on the features you want to use. Make sure these are configured in your Alliance Auth Eve Online SSO settings:

  • esi-industry.read_character_jobs.v1: Required for Personal Dashboard. Users grant this via the "Add Personal Token" button.
  • esi-industry.read_corporation_jobs.v1: Required for Corporate Dashboard. Directors grant this via the "Add Corporate Token" button.
  • esi-planets.manage_planets.v1: Required for Planetary Interaction tracking. Users grant this via the AA Tokens page.
  • esi-assets.read_corporation_assets.v1: Required for the Core Engine to synchronize Corporate Inventory Hangars. Directors grant this via the "Add Corporate Token" button.
  • esi-universe.read_structures.v1: Required to resolve public Upwell structure names in EVE. Directors grant this via the "Add Corporate Token" button.
  • esi-corporations.read_structures.v1: Required for the Director Control Panel to discover and resolve names for structures owned by the corporation. Directors grant this via the "Add Corporate Token" button.
  • esi-wallet.read_corporation_wallets.v1: Required to track corporate wallet balances and journal transactions. Directors grant this via the "Add Corporate Token" button.

Automating Scopes for all Users

To prevent members from having to manually authorize additional PI or Industry tokens, you can configure Alliance Auth to automatically request these scopes during the standard "Add Character" login flow. Add the following to your myauth/settings/local.py:

LOGIN_TOKEN_SCOPES = [
    'publicData',
    'esi-planets.manage_planets.v1',
    'esi-industry.read_character_jobs.v1',
]

(This ensures every character added to your Auth natively supports the personal dashboards without requiring a separate "Grant Token" button click).

4. Corporate Inventory Setup

To track your corporate inventory, you must explicitly configure which hangars to track (to avoid syncing thousands of irrelevant items and hitting ESI rate limits):

  1. Navigate to the Director Dashboard and click Configurations.
  2. Click the Discover Hangars button to scan your corporation's assets via ESI.
  3. Add the specific hangars (e.g. "Corp Hangar 1") that you want to track.
  4. Go to the Director Inventory page and click the Sync Inventory button to manually force an initial sync. After that, the background Celery task will keep it updated.

Note: Corporate Sync Configuration is automatically created when a Director clicks the 'Add Corporate Token' button.

5. Pricing & Builder Rewards

By default, the Industry Reforged quote engine uses raw Jita prices (and 0% builder rewards). To customize this:

  1. Navigate to the Director Dashboard and click Configurations.
  2. Under the Global Pricing tab, you can set:
    • Default Discount: A global discount applied to raw materials (e.g., 10.0 for 10% off Jita for alliance members).
    • Builder Reward Percent: The percentage of the total ship/item value that should be calculated and presented as a direct ISK payout for the industrialist who builds it.

6. Background Syncing

The app relies on Celery tasks to periodically fetch data from EVE Online. To run these tasks automatically, add the following to your myauth/settings/local.py:

from celery.schedules import crontab

if "CELERYBEAT_SCHEDULE" not in locals():
    CELERYBEAT_SCHEDULE = {}

CELERYBEAT_SCHEDULE["industry_reforged_update_character_jobs"] = {
    "task": "industry_reforged.tasks.update_character_jobs",
    "schedule": crontab(minute="*/30"),
}

CELERYBEAT_SCHEDULE["industry_reforged_update_corporation_jobs"] = {
    "task": "industry_reforged.tasks.update_corporation_jobs",
    "schedule": crontab(minute="*/30"),
}

CELERYBEAT_SCHEDULE["industry_reforged_update_character_pi"] = {
    "task": "industry_reforged.tasks.update_character_pi",
    "schedule": crontab(minute="0"),
}

CELERYBEAT_SCHEDULE["industry_sync_corp_inventory"] = {
    "task": "industry_reforged.tasks.task_sync_corp_inventory",
    "schedule": crontab(minute="*/15"),
}

CELERYBEAT_SCHEDULE["industry_sync_corp_blueprints"] = {
    "task": "industry_reforged.tasks.task_sync_corp_blueprints",
    "schedule": crontab(minute="0", hour="*/2"),  # Every 2 hours
}

CELERYBEAT_SCHEDULE["industry_pull_market_data"] = {
    "task": "industry_reforged.tasks.task_pull_market_data",
    "schedule": crontab(hour="11", minute="30"),  # Around EVE Downtime
}

CELERYBEAT_SCHEDULE["industry_sync_corp_wallets"] = {
    "task": "industry_reforged.tasks.task_sync_corp_wallets",
    "schedule": crontab(minute="*/30"),
}

CELERYBEAT_SCHEDULE["industry_notify_pi_extractors"] = {
    "task": "industry_reforged.tasks.task_notify_expired_extractors",
    "schedule": crontab(minute="15,45"),  # Twice an hour
}

CELERYBEAT_SCHEDULE["industry_update_facilities"] = {
    "task": "industry_reforged.tasks.update_industry_facilities",
    "schedule": crontab(minute="0", hour="*/4"),  # Every 4 hours
}

CELERYBEAT_SCHEDULE["industry_evaluate_ai_baskets"] = {
    "task": "industry_reforged.tasks.run_all_active_baskets",
    "schedule": crontab(minute="0"),  # Every hour
}

CELERYBEAT_SCHEDULE["industry_evaluate_ai_scanners"] = {
    "task": "industry_reforged.tasks.run_all_active_scanners",
    "schedule": crontab(minute="0"),  # Every hour
}

CELERYBEAT_SCHEDULE["industry_sync_ml_market_data"] = {
    "task": "industry_reforged.tasks.sync_market_data_to_ml_service",
    "schedule": crontab(minute="0", hour="*/12"),  # Twice a day
}

CELERYBEAT_SCHEDULE["industry_sync_all_rigs"] = {
    "task": "industry_reforged.tasks.task_sync_all_rigs",
    "schedule": crontab(minute="0", hour="*/6"),  # Every 6 hours
}

CELERYBEAT_SCHEDULE["industry_link_orphaned_jobs"] = {
    "task": "industry_reforged.tasks.link_orphaned_jobs_to_tasks",
    "schedule": crontab(minute="*/30"),
}

After updating local.py, be sure to restart your Celery worker and Celery Beat services.

Note: First-run after fresh install

Celery Beat only triggers tasks at their configured schedule intervals — it does not run tasks immediately on first start. After a fresh install the System Health tab (/industry/director/config/#health) will appear empty until each task has run at least once.

As of v0.12.3, manage.py migrate automatically queues all main tasks once when no prior run history exists (via Django's post_migrate signal). As long as a Celery worker is running, the health tab will populate within minutes of completing the initial migration.

If you need to trigger tasks manually (e.g. after a Celery restart), run:

python manage.py shell -c "
from industry_reforged.tasks.jobs import update_character_jobs, update_corporation_jobs
from industry_reforged.tasks.blueprints import task_sync_corp_blueprints
from industry_reforged.tasks.inventory import task_sync_corp_inventory
from industry_reforged.tasks.wallets import task_sync_corp_wallets
from industry_reforged.tasks.facilities import update_industry_facilities

update_character_jobs.delay()
update_corporation_jobs.delay()
task_sync_corp_blueprints.delay()
task_sync_corp_inventory.delay()
task_sync_corp_wallets.delay()
update_industry_facilities.delay()
print('All tasks queued!')
"

7. AI Market Manager & Forecasting Service

The AI Market Manager can automatically evaluate item profitability and create Production Tasks for your corporation based on minimum margin floors. It is backed by a dedicated AI Forecasting Microservice that predicts market demand using Machine Learning (LightGBM).

Deploying the AI Forecasting Microservice

Because Machine Learning models require specific data science libraries that are heavy on CPU and Memory, the AI forecasting engine runs as an isolated microservice.

  1. Navigate to the ai-forecasting directory inside the repository.
  2. Build the container image using Podman (or Docker):
    podman build -t aa-industry-ai-forecasting .
    
  3. Run the container on port 8050:
    podman run -d --name ai-forecasting -p 127.0.0.1:8050:8000 aa-industry-ai-forecasting
    

(Note: If the microservice is not running, the Market Manager will gracefully fall back to using static 30-day historical averages instead of AI predictions).

Using the Market Manager

To utilize this feature:

  1. Define Baskets in the Admin panel and add Basket Items.
  2. Configure your CorporationPricingConfig to set the minimum_margin_floor.
  3. Optionally, configure an ai_jobs_webhook in your CorporationWebhookConfig to receive Discord notifications when new jobs are automatically generated.

License

Copyright (c) 2026 Maddog Broekman. All rights reserved. Licensed under the MIT License.

Release files for aa-industry-reforged 0.13.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aa-industry-reforged 0.13.0
File Size Uploaded
aa_industry_reforged-0.13.0.tar.gz 260.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aa-industry-reforged 0.13.0
File Interpreter ABI Platform
aa_industry_reforged-0.13.0-py3-none-any.whl Python 3 none any Details

Total release size: 639.9 kB

Release files / aa_industry_reforged-0.13.0.tar.gz

Download URL aa_industry_reforged-0.13.0.tar.gz
Size 260.8 kB
Tags Source
SHA-256 checksum
How to use checksums
2e7fb5cbf240001420373b40e07762a40d04724db84090b7baa700933b990ec3
BLAKE2b-256 checksum
How to use checksums
702ddeb92feb7e5f02790171a0bb345b1463cbe660951cdc9d864a71384aff49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.

Transparency log

Release files / aa_industry_reforged-0.13.0-py3-none-any.whl

Download URL aa_industry_reforged-0.13.0-py3-none-any.whl
Size 379.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b89aea904ade7a58426e39ca497843decce194c7f9609cb7b86035eb7c45ae30
BLAKE2b-256 checksum
How to use checksums
7fcd87dde617e5f6a97ecd2c3f565a4ba46fe11a9a0801355cf9bc6d0868e9af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.13.0 This release

2 release files

0.9.0

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.13

2 release files

0.3.12

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page