TNI TOOLKIT

Contributing Guide

← Back to Toolkit

Thanks for your interest in contributing! This project thrives on community input.

🤝

Ways to Contribute

🐛 Report Issues

  • Data errors (wrong prices, specs)
  • Tool bugs or UI problems
  • Broken links or typos

📊 Add or Update Data

  • New equipment from updates
  • Missing programs or commands
  • Corrections to existing data

🛠️ Build Tools

📸 Contribute Assets

  • Equipment screenshots/icons
  • UI reference images
  • Workflow diagrams
📋

File Format Standards

JSON Structure

All data files use this header format in _meta:

{
  "_meta": {
    "game": "Tower Networking Inc.",
    "dataset": "dataset-name",
    "version": "1.0.0",
    "last_updated": "YYYY-MM-DD",
    "description": "What this dataset contains",
    "sources": [...],
    "contributors": [...],
    "corrections": [...],
    "future_additions": [...]
  }
}
Field Required Description
game Yes Always "Tower Networking Inc."
dataset Yes Identifier for the dataset (e.g., "programs", "store")
version Yes Semantic version (X.Y.Z)
last_updated Yes Last modified date (YYYY-MM-DD)
description Yes What this dataset contains
sources No Array of data sources (in-game, wiki, etc.)
contributors Yes Array of contributor names/handles
corrections No Array of data corrections made
future_additions No Array of planned additions

HTML Header Format

All HTML tools include a comment header before <!DOCTYPE html>:

<!--
╔══════════════════════════════════════════════════════════════════════════════╗
║  Tool Name                                                                   ║
╠══════════════════════════════════════════════════════════════════════════════╣
║  Version: X.Y.Z                                                              ║
║  Updated: YYYY-MM-DD                                                         ║
║  Part of: TNI Toolkit (https://github.com/salvo-praxis/tni-toolkit)          ║
╠══════════════════════════════════════════════════════════════════════════════╣
║  Description:                                                                ║
║    Brief description of what this tool does.                                 ║
║                                                                              ║
║  Contributors:                                                               ║
║    - Name (contribution type)                                                ║
║                                                                              ║
║  Changelog:                                                                  ║
║    X.Y.Z - Description of changes                                            ║
╚══════════════════════════════════════════════════════════════════════════════╝
-->
Field Required Description
Tool Name Yes Human-readable name of the tool
Version Yes Semantic version (X.Y.Z)
Updated Yes Last modified date (YYYY-MM-DD)
Part of Yes Always "TNI Toolkit" with GitHub URL
Description Yes What the tool does
Contributors Yes List of contributors with roles
Changelog Yes Version history with descriptions

YAML Header Format

YAML configuration files (GitHub Actions, CI/CD) use comment headers:

# ============================================================================
# TNI Toolkit - [File Type/Purpose]
# File: [path/to/file.yml]
# Name: [Workflow or Config Name]
# Version: X.Y.Z
# Updated: YYYY-MM-DD
# Part of: TNI Toolkit (https://github.com/salvo-praxis/tni-toolkit)
# Description:
#   Brief description of what this file does.
#   Can span multiple lines if needed.
# Contributors:
#   - Name (@handle) - contribution type
#   - Claude - contribution type
# Changelog:
#   X.Y.Z - Description of changes
# ============================================================================
Field Required Description
File Yes Path relative to repo root
Name Yes Human-readable name (matches workflow name: key)
Version Yes Semantic version (X.Y.Z)
Updated Yes Last modified date (YYYY-MM-DD)
Description Yes What the file does
Contributors Yes List of contributors with roles
Changelog Yes Version history with descriptions

Python Header Format

Python scripts use docstring headers:

#!/usr/bin/env python3
"""
TNI Toolkit - [Script Name]
File: [path/to/script.py]
Version: X.Y.Z
Updated: YYYY-MM-DD
Part of: TNI Toolkit (https://github.com/salvo-praxis/tni-toolkit)

Description:
    Brief description of what this script does.
    Can span multiple lines if needed.

Contributors:
    - Name (@handle) - contribution type
    - Claude - contribution type

Changelog:
    X.Y.Z - Description of changes
"""
Field Required Description
Shebang Yes #!/usr/bin/env python3
Script Name Yes Human-readable name of the script
File Yes Path relative to repo root
Version Yes Semantic version (X.Y.Z)
Updated Yes Last modified date (YYYY-MM-DD)
Description Yes What the script does
Contributors Yes List of contributors with @handles and roles
Changelog Yes Version history with descriptions

Shell Scripts (Bash/PowerShell)

Shell scripts use comment headers:

Bash:

#!/bin/bash
# ============================================================================
# TNI Toolkit - [Script Name]
# File: [path/to/script.sh]
# Version: X.Y.Z
# Updated: YYYY-MM-DD
# Part of: TNI Toolkit (https://github.com/salvo-praxis/tni-toolkit)
# Description:
#   Brief description of what this script does.
# Contributors:
#   - Name (@handle) - contribution type
# Changelog:
#   X.Y.Z - Description of changes
# ============================================================================

PowerShell:

<#
============================================================================
TNI Toolkit - [Script Name]
File: [path/to/script.ps1]
Version: X.Y.Z
Updated: YYYY-MM-DD
Part of: TNI Toolkit (https://github.com/salvo-praxis/tni-toolkit)
Description:
    Brief description of what this script does.
Contributors:
    - Name (@handle) - contribution type
Changelog:
    X.Y.Z - Description of changes
============================================================================
#>
Field Required Description
Shebang Yes #!/bin/bash for Bash; none for PowerShell
Script Name Yes Human-readable name of the script
File Yes Path relative to repo root
Version Yes Semantic version (X.Y.Z)
Updated Yes Last modified date (YYYY-MM-DD)
Description Yes What the script does
Contributors Yes List of contributors with @handles and roles
Changelog Yes Version history with descriptions

When Editing Data Files

Maintain structure — Don't change field names or nesting
Update metadata — Bump version, update date, add yourself to contributors
Add sources — Credit where data came from
Log corrections — Add to corrections array with version prefix
Track suggestions — Use future_additions for ideas not yet implemented

Version Numbering

1.0.0 → 1.0.1 Corrections, typo fixes
1.0.1 → 1.1.0 New data additions
1.1.0 → 2.0.0 Structure changes (rare, coordinate first)
🔧

Tool Development

Architecture

All tools are standalone HTML files:

  • Single .html file with embedded CSS and JS
  • No external dependencies (works offline)
  • Data embedded directly in the file
  • Follows the style guide

Before Building

Read CLAUDE.md for project context
Read the Style Guide for styling
Look at existing tools for patterns
Check if data files exist for what you need

Checklist

  • Single HTML file in tools/ directory
  • Includes file header comment (version, contributors, changelog)
  • Matches NOC theme (dark, green/blue accents)
  • Works offline (no fetch requests)
  • Includes standard footer with links
  • Mobile responsive
  • Tested in multiple browsers
📬

Pull Request Process

Fork the repository
Create a branchfeature/tool-name or data/update-store
Make changes following the guidelines above
Test your changes locally
Submit PR with a clear description of what changed

PR Title Format

data: add traffic types for firewall rules
tool: add power budget calculator
fix: correct Blade10 power draw in store.json
docs: update contributing guidelines
ci: add GitHub Actions workflow for deployment

Questions?

Open an issue for questions or discussion. Check existing issues for similar topics.

🏆

Recognition

Contributors are recognized in:

  • 📄 HTML/YAML file header comments
  • 📊 JSON file contributors arrays
  • 🌐 Credits page on the toolkit site
  • ❤️ This project's heart

Thank you for helping build tools for the TNI community!