feat: initial itpp-docs setup with MkDocs Material
Publish Docs Site / build (push) Failing after 5s
Publish Docs Site / build (push) Failing after 5s
- mkdocs.yml with dark slate theme, nav for 12 ITPP projects - build-docs.sh aggregates docs from all project repos - .gitea/workflows/docs-publish.yml for nightly rebuild+deploy - README and CHANGELOG for the itpp-docs repo itself - docs-source/ populated from all 12 repos - site/ ready for deployment to docs.itpropartner.com
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
name: Publish Docs Site
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
schedule:
|
||||
- cron: '0 5 * * *'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build MkDocs site
|
||||
run: |
|
||||
pip install mkdocs mkdocs-material
|
||||
bash build-docs.sh
|
||||
mkdocs build
|
||||
- name: Deploy to app3
|
||||
run: |
|
||||
rsync -avz site/ root@152.53.241.111:/var/www/docs.itpropartner.com/
|
||||
@@ -0,0 +1,8 @@
|
||||
# ITPP Docs — CHANGELOG
|
||||
|
||||
## 2026-08-09 — Initial
|
||||
|
||||
- Created itpp-docs repository with MkDocs Material build pipeline.
|
||||
- Aggregated docs from 12 ITPP projects into unified documentation site.
|
||||
- Added nightly Gitea Actions build + deploy workflow.
|
||||
- Deployed to docs.itpropartner.com on app3.
|
||||
@@ -1,3 +1,43 @@
|
||||
# itpp-docs
|
||||
# ITPP Docs
|
||||
|
||||
Aggregated MkDocs documentation site for all IT Pro Partner projects
|
||||
> **Owner:** Germaine | **Status:** LIVE
|
||||
> **Last Updated:** 2026-08-09
|
||||
|
||||
Aggregated MkDocs documentation site for all IT Pro Partner projects. Pulls READMEs, CHANGELOGs, and `docs/` directories from every project repo and builds a unified Material-for-MkDocs site served at [docs.itpropartner.com](https://docs.itpropartner.com/).
|
||||
|
||||
## How It Works
|
||||
|
||||
1. `build-docs.sh` clones/fetches every project repo listed in `REPOS`
|
||||
2. Copies each repo's `docs/`, `README.md`, and `CHANGELOG.md` into `docs-source/<project>/`
|
||||
3. `mkdocs build` renders the entire site to `site/`
|
||||
4. Gitea Actions (nightly) or manual rsync deploys to app3
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Site generator:** MkDocs + Material for MkDocs theme
|
||||
- **CI/CD:** Gitea Actions (`.gitea/workflows/docs-publish.yml`)
|
||||
- **Hosting:** Nginx on app3 (152.53.241.111)
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
git clone https://git.itpropartner.com/ippadmin/itpp-docs.git
|
||||
cd itpp-docs
|
||||
pip install mkdocs mkdocs-material
|
||||
bash build-docs.sh
|
||||
mkdocs serve
|
||||
```
|
||||
|
||||
## Deploy
|
||||
|
||||
```bash
|
||||
# Manual deploy
|
||||
bash build-docs.sh && mkdocs build && rsync -avz site/ root@152.53.241.111:/home/ippadmin/htdocs/docs.itpropartner.com/
|
||||
|
||||
# Or push to main — Gitea Actions handles rebuild + deploy nightly
|
||||
```
|
||||
|
||||
## Related
|
||||
|
||||
- [itpp-infrastructure](https://git.itpropartner.com/ippadmin/itpp-infrastructure) — server inventory, DNS
|
||||
- [itpp-standards](https://git.itpropartner.com/ippadmin/itpp-standards) — docs standards and templates
|
||||
|
||||
Executable
+113
@@ -0,0 +1,113 @@
|
||||
#!/bin/bash
|
||||
# build-docs.sh — Aggregate docs from all ITPP projects into docs-source/
|
||||
# Run: bash build-docs.sh
|
||||
set -euo pipefail
|
||||
|
||||
DOCS_SOURCE="docs-source"
|
||||
REPO_BASE="https://git.itpropartner.com/ippadmin"
|
||||
TOKEN="1761daa2c537fb72b365e54619208329d8e3ad33"
|
||||
|
||||
# List of repos to pull docs from
|
||||
REPOS=(
|
||||
"itpp-infrastructure"
|
||||
"itpp-standards"
|
||||
"transitpin"
|
||||
"homelab"
|
||||
"scripts"
|
||||
"fleettracker360"
|
||||
"shark-game"
|
||||
"verdicttank"
|
||||
"apex-track"
|
||||
"boxpilot"
|
||||
"osint-tool"
|
||||
"launchcheck"
|
||||
)
|
||||
|
||||
# Clean previous build
|
||||
rm -rf "$DOCS_SOURCE"
|
||||
mkdir -p "$DOCS_SOURCE"
|
||||
|
||||
for repo in "${REPOS[@]}"; do
|
||||
echo "=== Pulling docs from $repo ==="
|
||||
REPO_DIR="/tmp/itpp-docs-build/$repo"
|
||||
DOC_DIR="$DOCS_SOURCE/$repo"
|
||||
|
||||
if [ -d "$REPO_DIR" ]; then
|
||||
# Fetch latest if already cloned
|
||||
git -C "$REPO_DIR" fetch origin 2>/dev/null || true
|
||||
git -C "$REPO_DIR" reset --hard origin/main 2>/dev/null || true
|
||||
else
|
||||
mkdir -p "$(dirname "$REPO_DIR")"
|
||||
git clone --depth 1 "https://ippadmin:${TOKEN}@git.itpropartner.com/ippadmin/${repo}.git" "$REPO_DIR" 2>&1 || {
|
||||
echo "WARNING: Failed to clone $repo — skipping"
|
||||
continue
|
||||
}
|
||||
fi
|
||||
|
||||
mkdir -p "$DOC_DIR"
|
||||
|
||||
# Copy docs/ directory if it exists
|
||||
if [ -d "$REPO_DIR/docs" ]; then
|
||||
cp -r "$REPO_DIR/docs/"* "$DOC_DIR/" 2>/dev/null || true
|
||||
echo " Copied docs/ directory"
|
||||
fi
|
||||
|
||||
# Copy README.md as index.md if no docs/index.md exists
|
||||
if [ ! -f "$DOC_DIR/index.md" ] && [ -f "$REPO_DIR/README.md" ]; then
|
||||
# Convert README.md to index.md: strip first H1 line, prefix repo name
|
||||
{
|
||||
echo "# ${repo}"
|
||||
echo
|
||||
tail -n +2 "$REPO_DIR/README.md"
|
||||
} > "$DOC_DIR/index.md"
|
||||
echo " Created index.md from README.md"
|
||||
fi
|
||||
|
||||
# Copy CHANGELOG.md
|
||||
if [ -f "$REPO_DIR/CHANGELOG.md" ]; then
|
||||
cp "$REPO_DIR/CHANGELOG.md" "$DOC_DIR/"
|
||||
echo " Copied CHANGELOG.md"
|
||||
fi
|
||||
|
||||
# Copy CONTRIBUTING.md if it exists
|
||||
if [ -f "$REPO_DIR/CONTRIBUTING.md" ]; then
|
||||
cp "$REPO_DIR/CONTRIBUTING.md" "$DOC_DIR/"
|
||||
echo " Copied CONTRIBUTING.md"
|
||||
fi
|
||||
|
||||
echo " Done with $repo"
|
||||
done
|
||||
|
||||
# Create top-level index.md
|
||||
cat > "$DOCS_SOURCE/index.md" << 'INDEXEOF'
|
||||
# IT Pro Partner Documentation
|
||||
|
||||
Welcome to the IT Pro Partner centralized documentation site.
|
||||
|
||||
## Projects
|
||||
|
||||
| Project | Description | Repo |
|
||||
|---|---|---|
|
||||
| [ITPP Infrastructure](itpp-infrastructure/) | Server inventory, DNS, architecture | [Repo](https://git.itpropartner.com/ippadmin/itpp-infrastructure) |
|
||||
| [ITPP Standards](itpp-standards/) | Documentation standards & templates | [Repo](https://git.itpropartner.com/ippadmin/itpp-standards) |
|
||||
| [TransitPin](transitpin/) | White-label transportation portal | [Repo](https://git.itpropartner.com/ippadmin/transitpin) |
|
||||
| [HomeLab](homelab/) | Home lab infrastructure automation | [Repo](https://git.itpropartner.com/ippadmin/homelab) |
|
||||
| [Scripts](scripts/) | Operations and automation scripts | [Repo](https://git.itpropartner.com/ippadmin/scripts) |
|
||||
| [FleetTracker360](fleettracker360/) | GPS fleet tracking platform | [Repo](https://git.itpropartner.com/ippadmin/fleettracker360) |
|
||||
| [Shark Game](shark-game/) | Shark Attack Fantasy League | [Repo](https://git.itpropartner.com/ippadmin/shark-game) |
|
||||
| [VerdictTank](verdicttank/) | Product review and validation platform | [Repo](https://git.itpropartner.com/ippadmin/verdicttank) |
|
||||
| [Apex Track](apex-track/) | Track event management | [Repo](https://git.itpropartner.com/ippadmin/apex-track) |
|
||||
| [BoxPilot](boxpilot/) | Logistics operations platform | [Repo](https://git.itpropartner.com/ippadmin/boxpilot) |
|
||||
| [OSINT Tool](osint-tool/) | OSINT people search & skip tracing | [Repo](https://git.itpropartner.com/ippadmin/osint-tool) |
|
||||
| [LaunchCheck](launchcheck/) | Startup validation SaaS | [Repo](https://git.itpropartner.com/ippadmin/launchcheck) |
|
||||
|
||||
## About
|
||||
|
||||
This site is auto-generated by [mkdocs-material](https://squidfunk.github.io/mkdocs-material/)
|
||||
from source repositories hosted on [Gitea](https://git.itpropartner.com/).
|
||||
Rebuilt nightly via Gitea Actions.
|
||||
INDEXEOF
|
||||
|
||||
echo "=== Build complete ==="
|
||||
echo "Source files in: $DOCS_SOURCE/"
|
||||
ls -la "$DOCS_SOURCE/" | head -20
|
||||
@@ -0,0 +1,5 @@
|
||||
# Apex Track Experience — CHANGELOG
|
||||
|
||||
## 2026-07-10 — Initial
|
||||
|
||||
- Created project repository and directory structure.
|
||||
@@ -0,0 +1,24 @@
|
||||
# apex-track
|
||||
|
||||
|
||||
> **Owner:** Germaine | **Status:** PLANNED
|
||||
> **Last Updated:** 2026-08-09
|
||||
|
||||
Apex Track is a track event and racing experience management platform. Designed for track day organizers, racing clubs, and motorsport venues to manage event scheduling, participant registration, timing and scoring, and live results publishing.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- TBD — architecture and stack decisions pending
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
git clone https://git.itpropartner.com/ippadmin/apex-track.git
|
||||
cd apex-track
|
||||
# Project in early planning phase — implementation to follow
|
||||
```
|
||||
|
||||
## Related
|
||||
|
||||
- [itpp-infrastructure](https://git.itpropartner.com/ippadmin/itpp-infrastructure) — server inventory, DNS
|
||||
- [itpp-standards](https://git.itpropartner.com/ippadmin/itpp-standards) — docs standards and templates
|
||||
@@ -0,0 +1,5 @@
|
||||
# BoxPilot Logistics — CHANGELOG
|
||||
|
||||
## 2026-07-10 — Initial
|
||||
|
||||
- Created project repository and directory structure.
|
||||
@@ -0,0 +1,24 @@
|
||||
# boxpilot
|
||||
|
||||
|
||||
> **Owner:** Germaine | **Status:** PLANNED
|
||||
> **Last Updated:** 2026-08-09
|
||||
|
||||
BoxPilot is a logistics operations platform for freight, shipping, and delivery management. Designed to streamline dispatch, route optimization, carrier management, and shipment tracking for logistics operations.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- TBD — architecture and stack decisions pending
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
git clone https://git.itpropartner.com/ippadmin/boxpilot.git
|
||||
cd boxpilot
|
||||
# Project in early planning phase — implementation to follow
|
||||
```
|
||||
|
||||
## Related
|
||||
|
||||
- [itpp-infrastructure](https://git.itpropartner.com/ippadmin/itpp-infrastructure) — server inventory, DNS
|
||||
- [itpp-standards](https://git.itpropartner.com/ippadmin/itpp-standards) — docs standards and templates
|
||||
@@ -0,0 +1,23 @@
|
||||
# FleetTracker360 — CHANGELOG
|
||||
|
||||
## 2026-07-16 — Branding & GPS Accuracy
|
||||
|
||||
### Branding
|
||||
- Replaced Traccar logo SVG with FleetTracker360 (GPS dot + signal waves + gradient text)
|
||||
- Created custom branded login page at `/login.html` — dark navy theme, animated grid background
|
||||
- HTTPS proxy: Caddy on Core (gps.fleettracker360.com) → Traccar on app2 (152.53.39.202:8082)
|
||||
- DNS: gps.fleettracker360.com moved from app2 direct to Core proxy (Cloudflare proxied)
|
||||
|
||||
### GPS Accuracy
|
||||
- Server-side filtering enabled in Traccar config:
|
||||
- `filter.enable=true` (Kalman smoothing)
|
||||
- `filter.accuracy=30` (reject cell tower triangulation >30m)
|
||||
- `filter.distance=5` (ignore micro-jitter <5m)
|
||||
- `geolocation.enable=true` (road snapping via Nominatim)
|
||||
- Computed attributes added to database:
|
||||
- `motion`: auto-detect transport mode (walking/cycling/driving/flying)
|
||||
- `gpsQuality`: tag fix accuracy (excellent/good/fair/poor)
|
||||
|
||||
### Still Pending
|
||||
- Computed attribute device linking in UI
|
||||
- Full community dashboard integration
|
||||
@@ -0,0 +1,40 @@
|
||||
# fleettracker360
|
||||
|
||||
|
||||
## Overview
|
||||
Self-hosted GPS tracking using Traccar (open source) with live dashboard, ETA predictions, vehicle telemetry, and Sho'Nuff integration.
|
||||
|
||||
## Architecture
|
||||
```
|
||||
iPhone (Traccar Client) → Traccar Server (Docker) → HERE Maps API (traffic)
|
||||
OBD2 dongles → → Sho'Nuff (ETAs, alerts)
|
||||
Garrison's iPhone → → Live Dashboard (ops portal)
|
||||
```
|
||||
|
||||
## Tech Stack
|
||||
- **Traccar** — GPS tracking server (Docker)
|
||||
- **Traccar Client** — iOS/Android app for phone tracking
|
||||
- **HERE Maps API** — Traffic-aware routing (250k free transactions/mo)
|
||||
- **Custom Dashboard** — Dark theme, live-updating HTML/JS
|
||||
- **Sho'Nuff** — AI agent for ETA queries, alerts, geofencing
|
||||
- **Domain:** fleettracker360.com (Cloudflare proxied)
|
||||
|
||||
## Status
|
||||
- [ ] Fresh Traccar Docker deployment on netcup
|
||||
- [ ] iOS Traccar Client setup (Germaine + Garrison)
|
||||
- [ ] OBD2 dongle pairing (specs TBD)
|
||||
- [ ] HERE API key and routing integration
|
||||
- [ ] Live dashboard design and deploy
|
||||
- [ ] ETA automation (Sho'Nuff queries)
|
||||
- [ ] Geofence alerts (home, office, school)
|
||||
- [ ] Cancel old fleettracker Hetzner server
|
||||
|
||||
## Directory Structure
|
||||
```
|
||||
fleettracker/
|
||||
├── README.md <- This file
|
||||
├── server/ <- Docker compose, Traccar config
|
||||
├── dashboard/ <- Frontend HTML/CSS/JS
|
||||
├── api/ <- Scripts for Sho'Nuff integration
|
||||
└── ideas/ <- Feature ideas, mockups, research
|
||||
```
|
||||
@@ -0,0 +1,18 @@
|
||||
# Home Lab Changelog
|
||||
|
||||
## 2026-07
|
||||
|
||||
### Added
|
||||
- **Documentation repo initialized** — Git-tracked home lab infrastructure docs
|
||||
- **Host inventory:** vm-host-01 (10.1.1.100), vm-host-02 (10.1.1.110), QNAP TS-1635 (10.1.1.40), docker-host-01 (10.1.1.14), MikroTik router (10.1.1.1)
|
||||
- **SSH key:** homelab ed25519 key pair created and deployed to all hosts
|
||||
- **QNAP NFS storage:** 3 exports configured — VM migration (2TB), backups (1TB), ISOs (1TB)
|
||||
- **DNS chain documented:** AdGuard Home primary (docker-host-01, 10.1.1.14:53), Technitium secondary (dns1.itpropartner.com), AdGuard tertiary (vm-host-01)
|
||||
|
||||
### Changed
|
||||
- **vm-host-02 cleared** — all VMs migrated to vm-host-01 or destroyed; host ready for GPU installation
|
||||
- **VM consolidation:** destroyed template VM, Graylog, Zabbix, and FOG VMs for later rebuild
|
||||
|
||||
### Added
|
||||
- **State snapshot** (`state-2026-07-21.md`) — VM inventory, service listing, and migration state captured
|
||||
- Docker-host-01 service catalog: 13 containers including Mealie, n8n, Home Assistant, Jellyfin, media pipeline (Prowlarr/Radarr/Sonarr/Sabnzbd), AdGuard Home, NPM, Uptime Kuma, Dockhand, Browser-Use WebUI
|
||||
@@ -0,0 +1,75 @@
|
||||
# homelab
|
||||
|
||||
|
||||
Proxmox, QNAP, and home network management.
|
||||
**Last updated:** 2026-08-09
|
||||
|
||||
## Hosts
|
||||
|
||||
| Host | IP | Role | Version |
|
||||
|---|---|---|---|
|
||||
| vm-host-01 | 10.1.1.100 | Proxmox — docker-host-01, adguard-home | **PVE 8.4.1** (kernel 6.8.12-10-pve) |
|
||||
| vm-host-02 | 10.1.1.110 | Proxmox — cleared for GPU | **PVE 8.4.1** (kernel 6.8.12-10-pve) |
|
||||
| QNAP TS-1635 | 10.1.1.40 | Shared storage, 4 pools | **Firmware 5.2.7** |
|
||||
| docker-host-01 | 10.1.1.14 | Docker services (13 containers) | VM 105 on vm-host-01 |
|
||||
| MikroTik router | 10.1.1.1 | Gateway, WireGuard/L2TP endpoint | — |
|
||||
|
||||
## Connectivity
|
||||
|
||||
| Tunnel | Type | Status | Notes |
|
||||
|---|---|---|---|
|
||||
| Core ↔ MikroTik | WireGuard (wg0) | ✅ Up | Core's wg0, port 51821 |
|
||||
| Core ↔ MikroTik | L2TP | ✅ Up | SSH: `shonuff@192.168.88.1` |
|
||||
| MikroTik → LAN | Route | ✅ Up | 10.1.0.0/24 reachable from Core |
|
||||
|
||||
## SSH Access
|
||||
- Key: `homelab` (ed25519) at `/root/.ssh/homelab`
|
||||
- Deployed to: vm-host-01, vm-host-02, QNAP (admin user), docker-host-01
|
||||
|
||||
## Storage
|
||||
|
||||
| Pool | Size | Used | Mount |
|
||||
|---|---|---|---|
|
||||
| CACHEDEV4_DATA | 2.0T | 6% (112.8G) | `/share/CACHEDEV4_DATA` |
|
||||
| CACHEDEV5_DATA | 14.9T | 31% (4.6T) | `/share/CACHEDEV5_DATA` |
|
||||
| CACHEDEV6_DATA | 15.9T | 38% (6.1T) | `/share/CACHEDEV6_DATA` |
|
||||
| CACHEDEV7_DATA | 1.0T | 4% (40.8G) | `/share/CACHEDEV7_DATA`, ISO export |
|
||||
|
||||
**NFS exports on Proxmox hosts (as of Aug 9):**
|
||||
- `qnap-nfs-backups` — 10.1.1.40:/ISO → `/mnt/pve/qnap-nfs-backups` (1TB)
|
||||
- `qnap-nfs-iso` — 10.1.1.40:/ISO → `/mnt/pve/qnap-nfs-iso` (1TB)
|
||||
- ⚠️ `qnap-nfs` (VM migration storage) mount point `/mnt/pve/qnap-nfs` does not exist on vm-host-01
|
||||
|
||||
## VMs
|
||||
|
||||
### vm-host-01 (10.1.1.100)
|
||||
|
||||
| VMID | Name | Status | RAM | Disk |
|
||||
|---|---|---|---|---|
|
||||
| 100 | adguard-home | **stopped** | 2GB | 32GB |
|
||||
| 105 | docker-host-01 | running | 16GB | 150GB |
|
||||
|
||||
### vm-host-02 (10.1.1.110)
|
||||
|
||||
**CLEARED** — no VMs. Ready for GPU installation.
|
||||
|
||||
## DNS
|
||||
- **Primary AdGuard Home:** docker-host-01 at `10.1.1.14`
|
||||
- **Admin UI:** `http://10.1.1.14:8080/login.html`
|
||||
- DNS service: port `53`
|
||||
- **Secondary:** app2 Technitium (`dns1.itpropartner.com`)
|
||||
- **Tertiary:** vm-host-01 AdGuard (`10.1.1.10`) — **VM stopped**, secondary DNS unavailable
|
||||
|
||||
> Do not use `http://10.1.1.14:80` for AdGuard administration; that port serves NGINX Proxy Manager.
|
||||
|
||||
## Services on docker-host-01
|
||||
- Mealie (:9925), n8n (:5678), Home Assistant (:8123)
|
||||
- Jellyfin (:8096), Prowlarr/Radarr/Sonarr/Sabnzbd (media pipeline)
|
||||
- AdGuard Home DNS (:53) + admin UI (:8080)
|
||||
- NPM (:80/:443), Uptime Kuma (:3001)
|
||||
- Dockhand (:3100), Browser-Use WebUI (:6080/:7788)
|
||||
- 13 containers total, ~3.8GB RAM of 16GB allocated
|
||||
|
||||
## Key Docs
|
||||
- `state-2026-08-09.md` — current state snapshot
|
||||
- `state-2026-07-21.md` — previous state (pre-August audit)
|
||||
@@ -0,0 +1,26 @@
|
||||
# IT Pro Partner Documentation
|
||||
|
||||
Welcome to the IT Pro Partner centralized documentation site.
|
||||
|
||||
## Projects
|
||||
|
||||
| Project | Description | Repo |
|
||||
|---|---|---|
|
||||
| [ITPP Infrastructure](itpp-infrastructure/) | Server inventory, DNS, architecture | [Repo](https://git.itpropartner.com/ippadmin/itpp-infrastructure) |
|
||||
| [ITPP Standards](itpp-standards/) | Documentation standards & templates | [Repo](https://git.itpropartner.com/ippadmin/itpp-standards) |
|
||||
| [TransitPin](transitpin/) | White-label transportation portal | [Repo](https://git.itpropartner.com/ippadmin/transitpin) |
|
||||
| [HomeLab](homelab/) | Home lab infrastructure automation | [Repo](https://git.itpropartner.com/ippadmin/homelab) |
|
||||
| [Scripts](scripts/) | Operations and automation scripts | [Repo](https://git.itpropartner.com/ippadmin/scripts) |
|
||||
| [FleetTracker360](fleettracker360/) | GPS fleet tracking platform | [Repo](https://git.itpropartner.com/ippadmin/fleettracker360) |
|
||||
| [Shark Game](shark-game/) | Shark Attack Fantasy League | [Repo](https://git.itpropartner.com/ippadmin/shark-game) |
|
||||
| [VerdictTank](verdicttank/) | Product review and validation platform | [Repo](https://git.itpropartner.com/ippadmin/verdicttank) |
|
||||
| [Apex Track](apex-track/) | Track event management | [Repo](https://git.itpropartner.com/ippadmin/apex-track) |
|
||||
| [BoxPilot](boxpilot/) | Logistics operations platform | [Repo](https://git.itpropartner.com/ippadmin/boxpilot) |
|
||||
| [OSINT Tool](osint-tool/) | OSINT people search & skip tracing | [Repo](https://git.itpropartner.com/ippadmin/osint-tool) |
|
||||
| [LaunchCheck](launchcheck/) | Startup validation SaaS | [Repo](https://git.itpropartner.com/ippadmin/launchcheck) |
|
||||
|
||||
## About
|
||||
|
||||
This site is auto-generated by [mkdocs-material](https://squidfunk.github.io/mkdocs-material/)
|
||||
from source repositories hosted on [Gitea](https://git.itpropartner.com/).
|
||||
Rebuilt nightly via Gitea Actions.
|
||||
@@ -0,0 +1,6 @@
|
||||
# itpp-infrastructure — CHANGELOG
|
||||
|
||||
## 2026-07-16 — Audit Remediation
|
||||
|
||||
- Created CHANGELOG.md (missing per project documentation standard)
|
||||
- Project directory: `/root/projects/itpp-infrastructure`
|
||||
@@ -0,0 +1,27 @@
|
||||
# app2 Caddyfile Audit — July 21, 2026
|
||||
|
||||
## Root cause
|
||||
Technitium DNS was deployed on app2. During the Caddyfile rewrite to add `dns1.itpropartner.com`, two existing services were dropped:
|
||||
|
||||
1. **UNMS** — `reverse_proxy localhost:80` failed because UNMS nginx exposes port 443 (via host 8444), not port 80. Fixed by proxying via HTTPS with `tls_insecure_skip_verify`.
|
||||
2. **Gitea** — entry was completely removed. Fixed by adding `reverse_proxy 127.0.0.1:3001`.
|
||||
|
||||
## Prevention
|
||||
- Always audit `docker ps` output BEFORE rewriting Caddyfile
|
||||
- Verify every running container that exposes web ports has a Caddy entry
|
||||
- Test each domain with `curl -sk` after Caddy reload
|
||||
|
||||
## Final Caddyfile (validated)
|
||||
```
|
||||
{
|
||||
default_bind 152.53.39.202
|
||||
auto_https disable_redirects
|
||||
}
|
||||
dns1.itpropartner.com:443 → 127.0.0.1:5380
|
||||
gps.fleettracker360.com:443 → localhost:8082
|
||||
fleettracker360.com:443 → localhost:8082
|
||||
unms.forefrontwireless.com:443 → https://localhost:8444 (tls_insecure_skip_verify)
|
||||
unifi.itpropartner.com:443 → https://localhost:8443 (tls_insecure_skip_verify)
|
||||
hudu.itpropartner.com:443 → localhost:3000
|
||||
git.itpropartner.com:443 → 127.0.0.1:3001
|
||||
```
|
||||
@@ -0,0 +1,158 @@
|
||||
# Backup-Restore — Architecture
|
||||
|
||||
## Topology
|
||||
|
||||
```
|
||||
INTERNET
|
||||
|
|
||||
[Caddy on Core]
|
||||
my.itpropartner.com
|
||||
|
|
||||
+---------------+---------------+
|
||||
| | |
|
||||
/backups/* /api/restore /api/backup
|
||||
/api/log /api/download /api/delete
|
||||
| | |
|
||||
+-------+-------+-------+-------+
|
||||
|
|
||||
app3 (152.53.241.111)
|
||||
netcup RS 4000
|
||||
|
|
||||
[Flask :8090]
|
||||
/opt/backup-restore/
|
||||
|
|
||||
+-------------------+-------------------+
|
||||
| | |
|
||||
snapshot.sh app.py (UI+API) snapshots/
|
||||
(cron 1AM,1PM) Jinja templates /opt/backup-restore/
|
||||
| | snapshots/<domain>/
|
||||
v v |
|
||||
[tar files] [render HTML] +------+------+
|
||||
[mysqldump] [REST API] | | |
|
||||
| | .tar.gz .sql note.txt
|
||||
v v
|
||||
/opt/backup-restore/ [Browser]
|
||||
snapshots/<domain>/
|
||||
<timestamp>/
|
||||
```
|
||||
|
||||
## Data Flow — Manual Backup
|
||||
|
||||
```
|
||||
Browser (user clicks "Backup Now")
|
||||
|
|
||||
|-- POST /api/backup {"domain":"x.com","note":"pre-deploy"}
|
||||
| |
|
||||
| v
|
||||
| Caddy → app3:8090
|
||||
| |
|
||||
| v
|
||||
| Flask api_backup()
|
||||
| |
|
||||
| |-- Parse nginx config → find htdocs path
|
||||
| |-- tar -czf files.tar.gz (timeout 300s)
|
||||
| |-- Parse wp-config.php → find DB_NAME
|
||||
| |-- mysqldump → database.sql (timeout 300s)
|
||||
| |-- Save note.txt, size.txt
|
||||
| |-- Return {"ok":true, "snapshot":"<timestamp>"}
|
||||
| |
|
||||
| v
|
||||
| snapshots/x.com/2026-07-20_163208/
|
||||
| files.tar.gz (16MB)
|
||||
| database.sql (74KB)
|
||||
| note.txt ("pre-deploy")
|
||||
| size.txt
|
||||
|
|
||||
v
|
||||
Browser reloads → new snapshot in list
|
||||
```
|
||||
|
||||
## Data Flow — Restore
|
||||
|
||||
```
|
||||
Browser (user clicks Restore on a snapshot)
|
||||
|
|
||||
|-- POST /api/restore {"domain":"x.com","snapshot":"2026-07-20_130001"}
|
||||
| |
|
||||
| v
|
||||
| Caddy → app3:8090 (flush_interval -1, 300s timeouts)
|
||||
| |
|
||||
| v
|
||||
| Flask api_restore()
|
||||
| |
|
||||
| |-- Find snapshot path
|
||||
| |-- tar -xzf files.tar.gz → htdocs (timeout 300s)
|
||||
| |-- mysql < database.sql → WordPress DB (timeout 300s)
|
||||
| |-- chown -R site-user:site-user
|
||||
| |-- Log to restore.log: "TS|x.com|snap_id|OK"
|
||||
| |-- Return {"ok":true, "msg":"x.com restored to <snap>"}
|
||||
| |
|
||||
| v
|
||||
| Site is restored
|
||||
|
|
||||
v
|
||||
Browser shows success toast → Restore History updates
|
||||
```
|
||||
|
||||
## Components
|
||||
|
||||
### 1. Flask App (`/opt/backup-restore/app/app.py`)
|
||||
- Single-file Flask application, port 8090
|
||||
- Jinja2 templating for backup dashboard (render_template_string)
|
||||
- 6 API endpoints (backup, restore, delete, download, log, index)
|
||||
- All HTML/CSS/JS inline in a single Python triple-quoted string
|
||||
- No auth — accessible via Caddy-only routing
|
||||
- Systemd: `backup-restore.service`
|
||||
|
||||
### 2. Snapshot Engine (`/opt/backup-restore/snapshot.sh`)
|
||||
- Bash script, runs at 1 AM and 1 PM via cron
|
||||
- Iterates all WordPress sites in `/etc/nginx/sites-enabled/`
|
||||
- Creates: files.tar.gz (document root), database.sql (MySQL dump)
|
||||
- Auto-cleanup: deletes snapshots older than 30 days
|
||||
- Log: `/opt/backup-restore/logs/snapshots.log`
|
||||
|
||||
### 3. Snapshot Storage (`/opt/backup-restore/snapshots/`)
|
||||
- Structure: `/<domain>/<YYYY-MM-DD_HHMMSS>/`
|
||||
- 9 WordPress domains, 10 snapshots each (10 days retention shown)
|
||||
- Average snapshot size: 16MB files + 74KB database
|
||||
- Total: ~1.4GB for full snapshot set
|
||||
|
||||
### 4. Restore Log (`/opt/backup-restore/logs/restore.log`)
|
||||
- Pipe-delimited format: `timestamp|domain|snapshot_id|status`
|
||||
- Written by api_restore() on every restore attempt
|
||||
- Read by /api/log → displayed in Restore History table
|
||||
- Last 50 entries retained
|
||||
|
||||
### 5. Caddy Proxy (on Core)
|
||||
- `handle /api/backup` → app3:8090
|
||||
- `handle /api/restore` → app3:8090 (flush_interval -1, 300s read/write timeouts)
|
||||
- `handle /api/download/*` → app3:8090
|
||||
- `handle /api/log` → app3:8090
|
||||
- `handle_path /backups/*` → app3:8090 (300s timeouts for long restores)
|
||||
- Domain: my.itpropartner.com
|
||||
|
||||
## 9 Hosted WordPress Sites
|
||||
|
||||
All served by CloudPanel on app3, backed up by this system:
|
||||
|
||||
| Domain | htdocs Path | DB Pattern |
|
||||
|---|---|---|
|
||||
| apextrackexperience.com | /home/apx/htdocs/apextrackexperience.com | wp-config DB_NAME |
|
||||
| boxpilotlogistics.com | /home/boxpilotlogistics/htdocs/boxpilotlogistics.com | wp-config DB_NAME |
|
||||
| debtrecoveryexperts.com | /home/debtrecoveryexperts/... | wp-config DB_NAME |
|
||||
| iamgmb.com | /home/iamgmb/... | wp-config DB_NAME |
|
||||
| katiewattdesign.com | /home/katiewattdesign/htdocs/katiewattdesign.com | wp-config DB_NAME |
|
||||
| katiewattsdesign.com | /home/katiewattsdesign/... | wp-config DB_NAME |
|
||||
| mainwp.itpropartner.com | /home/mainwp/... | wp-config DB_NAME |
|
||||
| vigilanttac.com | /home/vigilanttac/... | wp-config DB_NAME |
|
||||
| voipsimplicity.com | /home/voipsimplicity/... | wp-config DB_NAME |
|
||||
|
||||
## Key Design Decisions
|
||||
|
||||
1. **Single-file Flask app:** No package structure needed — the app has 6 endpoints and one HTML template. Keeping it in one file makes deployment trivial (scp + systemctl restart).
|
||||
|
||||
2. **Caddy on Core as single entry point:** app3 isn't exposed to the internet directly. All access goes through Core's Caddy with proper timeouts. The restore operation takes 30-45s and Caddy's default proxy timeout was killing connections mid-operation.
|
||||
|
||||
3. **Tar + mysqldump over rsync:** Snapshots are point-in-time archives, not incremental backups. Each snapshot is self-contained (files.tar.gz + database.sql). Restore is a single operation with no dependency chain.
|
||||
|
||||
4. **No auth on backup API:** The endpoints have no authentication. Access is controlled by Caddy routing — only requests through my.itpropartner.com reach the app. Internal network only.
|
||||
@@ -0,0 +1,30 @@
|
||||
# Backup-Restore Changelog
|
||||
|
||||
## 2026-07-20 — Restore logging and manual backup
|
||||
|
||||
### Added
|
||||
- **Backup Now button:** Green "+ Backup Now" button on backup page
|
||||
- **Domain dropdown:** Select element with all 9 hosted domains
|
||||
- **Note field:** Optional "why" note saved as note.txt in snapshot
|
||||
- **Restore History section:** Auto-expanded table at bottom — Domain, Snapshot, Date/Time, Status
|
||||
- **Restore logging:** Every restore writes to `/opt/backup-restore/logs/restore.log`
|
||||
- **Status formatting:** Green OK / red FAILED with centered status column
|
||||
|
||||
### Fixed
|
||||
- **Restore timing out:** Caddy flush_interval added + 300s transport timeouts
|
||||
- **Route ordering:** `/api/restore` decorator was stacked on backup function → reconnected to restore function
|
||||
- **API routing:** `/api/restore`, `/api/backup`, `/api/log` not proxied → added to Caddy config
|
||||
- **Mobile toggle:** Inline `display:none` on site tables removed → CSS class toggle now works
|
||||
- **Mobile touch:** role="button", tabindex="0", Enter key support added to card headers
|
||||
- **Auto-expand first domain:** Removed — all domains now start collapsed
|
||||
- **Restore History auto-expanded:** tbl-log has class="show", arrow is ▼
|
||||
|
||||
### Changed
|
||||
- "Backup Log History" → "Restore History"
|
||||
- Config page scripts directory now shows content when clicked
|
||||
|
||||
## 2026-07-17 — Initial deployment
|
||||
- Flask app deployed on app3 as systemd service
|
||||
- Snapshot script scheduled (1 AM, 1 PM)
|
||||
- 9 WordPress sites configured for backup
|
||||
- Caddy proxy from Core via my.itpropartner.com
|
||||
@@ -0,0 +1,50 @@
|
||||
# Backup-Restore — my.itpropartner.com/backups/
|
||||
|
||||
## Architecture
|
||||
- **Server:** app3 (152.53.241.111, netcup RS 4000)
|
||||
- **Backend:** Flask Python app at `/opt/backup-restore/app/app.py` (port 8090)
|
||||
- **Proxy:** Caddy on Core → reverse_proxy to 152.53.241.111:8090 with 300s timeouts
|
||||
- **Snapshots:** `/opt/backup-restore/snapshots/<domain>/<timestamp>/`
|
||||
- **Scheduled:** `0 1,13 * * * /opt/backup-restore/snapshot.sh` — 1 AM and 1 PM daily
|
||||
- **Systemd:** `backup-restore.service`
|
||||
- **Retention:** 30 days (auto-cleanup)
|
||||
|
||||
## Sites Backed Up (9 domains)
|
||||
apextrackexperience.com, boxpilotlogistics.com, debtrecoveryexperts.com, iamgmb.com, katiewattdesign.com, katiewattsdesign.com, mainwp.itpropartner.com, vigilanttac.com, voipsimplicity.com
|
||||
|
||||
## Snapshot Contents
|
||||
Each snapshot directory contains:
|
||||
- `files.tar.gz` — WordPress document root tarball
|
||||
- `database.sql` — MySQL dump
|
||||
- `size.txt` — Total backup size in bytes
|
||||
- `note.txt` — Optional manual backup note
|
||||
|
||||
## API Endpoints
|
||||
| Method | Path | Auth | Description |
|
||||
|--------|------|------|-------------|
|
||||
| GET | /backups/ | No | Backup dashboard page |
|
||||
| POST | /api/backup | No | Trigger manual backup |
|
||||
| POST | /api/restore | No | Restore a snapshot |
|
||||
| POST | /api/delete | No | Delete a snapshot |
|
||||
| GET | /api/download/<domain>/<id> | No | Download snapshot archive |
|
||||
| GET | /api/log | No | Restore history |
|
||||
|
||||
## Caddy Routes (on Core)
|
||||
```
|
||||
handle /api/backup → app3:8090
|
||||
handle /api/restore → app3:8090 (flush_interval -1, 300s timeouts)
|
||||
handle /api/download/* → app3:8090
|
||||
handle /api/log → app3:8090
|
||||
handle_path /backups/* → app3:8090 (300s timeouts)
|
||||
```
|
||||
|
||||
## Recovery
|
||||
```
|
||||
systemctl restart backup-restore
|
||||
# Manual snapshot:
|
||||
/opt/backup-restore/snapshot.sh
|
||||
# Manual restore via curl:
|
||||
curl -X POST https://my.itpropartner.com/api/restore \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"domain":"katiewattdesign.com","snapshot":"2026-07-20_130001"}'
|
||||
```
|
||||
@@ -0,0 +1,37 @@
|
||||
# Cost Control Rollout — 2026-07-24
|
||||
|
||||
**Trigger:** $46 additional unexpected spend on top of $155.76/3-day burn.
|
||||
**Root cause:** Unlimited LiteLLM key + GPT-5.6 Terra as default gateway model with no enforced budget, session-size, or model-allowlist guardrails.
|
||||
|
||||
## Changes Deployed
|
||||
|
||||
### 1. LiteLLM — New constrained team + key
|
||||
- **Team `hermes-normal-ops`**: $3.33 rolling daily cap + $100 rolling 30-day cap, 30 RPM, 250K TPM, max 3 parallel requests.
|
||||
- **Key `hermes-normal-ops-daily-capped`** (`...I3gQ`): Hard $3.33/day, model-restricted to approved list only.
|
||||
- **Allowed models**: `claude-sonnet-5`, `deepseek-v4-pro`, `deepseek-v4-flash`, `glm-5.2`, `MiniMax-M3`, `qwen3.7-plus`.
|
||||
- **Terra/GPT-5.6/Claude-Opus-4**: explicitly **excluded** from this key — LiteLLM returns HTTP 403.
|
||||
- **Legacy key `sk-...itzA`**: blocked (blocked=t in DB).
|
||||
|
||||
### 2. Hermes config — Default routing
|
||||
- **Conductor**: `claude-sonnet-5` (admin-ai/LiteLLM proxy).
|
||||
- **Fallbacks**: `deepseek-v4-pro` → `deepseek-v4-flash` (admin-ai only).
|
||||
- **Delegation/workers**: `deepseek-v4-pro`, fallback `deepseek-v4-flash`.
|
||||
- **No automatic escalation to premium** — failure stops, not silently upgrades.
|
||||
|
||||
### 3. Session controls
|
||||
- **Context length**: 128k tokens hard ceiling.
|
||||
- **Compression**: enabled at 50% fill, targets 20% ratio.
|
||||
- **Max turns**: 50 per session (prevents unbounded tool-call marathons).
|
||||
|
||||
### 4. Rate limits (on LiteLLM key)
|
||||
- 30 RPM, 250K TPM, max 3 concurrent requests.
|
||||
- 429 throttle-backoff confirmed working in live logs.
|
||||
|
||||
## Verification
|
||||
- Sonnet makes calls through new key: HTTP 200.
|
||||
- Terra through new key: HTTP 403 (blocked).
|
||||
- Old key blocked in DB: `blocked = t`.
|
||||
- Live gateway confirmed routing through `admin-ai` at `https://admin-ai.itpropartner.com/v1/`.
|
||||
|
||||
## What's still behavioral (not enforced)
|
||||
- Model compliance is enforced at the proxy key layer. Cost caps are enforced at the key+team layer. Session size is a Hermes config setting — stickiness depends on the runtime respecting it.
|
||||
@@ -0,0 +1,278 @@
|
||||
# itpp-infrastructure
|
||||
|
||||
|
||||
> **Last Updated:** July 17, 2026
|
||||
> **Maintainer:** Sho'Nuff
|
||||
|
||||
---
|
||||
|
||||
## Server Inventory
|
||||
|
||||
### Core Server
|
||||
- **Hostname:** Core
|
||||
- **IP:** 152.53.192.33
|
||||
- **Provider:** netcup RS 2000 G12
|
||||
- **Specs:** 8 vCPU EPYC 9645, 15 GB DDR5 ECC, 512 GB NVMe
|
||||
- **OS:** Debian 13
|
||||
- **Role:** Hermes + Portals
|
||||
- **Key Services:**
|
||||
- Hermes Agent (Telegram + cron, 22 cron jobs)
|
||||
- Caddy reverse proxy (12 domains, auto-TLS)
|
||||
- Ops Portal (FastAPI, port 8090)
|
||||
- Prometheus (native, port 9090) + Grafana (native, port 3002)
|
||||
- Uptime Kuma (Docker, port 3001) — 9+ monitors
|
||||
- Vaultwarden (Docker, port 8080) — vault.iamgmb.com
|
||||
- Twenty CRM (Docker) — crm.debtrecoveryexperts.com
|
||||
- DocuSeal (Docker, port 3000) — sign.core.itpropartner.com
|
||||
- SearXNG (Docker, port 8888)
|
||||
- Komodo (Docker, port 9120)
|
||||
- Tailscale, StrongSwan, WireGuard (home CCR tunnel 10.77.0.0/24)
|
||||
- Redis cache
|
||||
|
||||
### App1 Server
|
||||
- **Hostname:** app1
|
||||
- **IP:** 152.53.36.131
|
||||
- **Provider:** netcup RS 4000 G12
|
||||
- **Specs:** 12 vCPU EPYC 9645, 32 GB DDR5 ECC, 1 TB NVMe
|
||||
- **OS:** Debian 13
|
||||
- **Role:** AI/Service Hub
|
||||
- **Key Services:**
|
||||
- Open WebUI (Docker, port 3000) — ai.itpropartner.com
|
||||
- n8n + Postgres (Docker, port 5678) — n8n.itpropartner.com
|
||||
- LiteLLM (Docker) + Postgres — admin-ai.itpropartner.com
|
||||
- Mattermost Team Edition (Docker, port 8065) — noc.itpropartner.com
|
||||
- Caddy (systemd, 80/443)
|
||||
- 4 MCP servers: Browser (:8901), Filesystem (:8900), Email (:8902), Git (:8903)
|
||||
- Super Search MCP (systemd, port 8899)
|
||||
|
||||
### App2 Server
|
||||
- **Hostname:** app2
|
||||
- **IP:** 152.53.39.202
|
||||
- **Provider:** netcup RS 4000 G12
|
||||
- **Specs:** 12 vCPU EPYC 9645, 32 GB DDR5 ECC, 1 TB NVMe
|
||||
- **OS:** Debian 13
|
||||
- **Role:** Infrastructure Server
|
||||
- **Key Services:**
|
||||
- Traccar GPS (Docker, port 8082 + 5000-5150) — fleettracker360.com
|
||||
- UniFi Controller (Docker, port 8443) — unifi.itpropartner.com
|
||||
- UNMS/UISP (10 Docker containers) — unms.forefrontwireless.com
|
||||
- Hudu (Docker) — hudu.itpropartner.com
|
||||
- Caddy (4 domains)
|
||||
|
||||
### App3 Server
|
||||
- **Hostname:** app3
|
||||
- **IP:** 152.53.241.111
|
||||
- **Provider:** netcup RS 4000 G12
|
||||
- **Specs:** 12 vCPU EPYC 9645, 32 GB DDR5 ECC, 1 TB NVMe
|
||||
- **OS:** Debian 13
|
||||
- **Role:** Web Hosting + Backup Restore
|
||||
- **Key Services:**
|
||||
- CloudPanel CE — panel.itpropartner.com
|
||||
- Nginx (80/443) + Percona MySQL 8.4 + PHP 8.3
|
||||
- Backup Restore System (Flask, port 8090) — my.itpropartner.com/backups
|
||||
- WordPress sites (7 migrated from wphost02, all live):
|
||||
- debtreecoveryexperts.com, boxpilotlogistics.com, iamgmb.com
|
||||
- katiewattsdesign.com, vigilanttac.com, apextrackexperience.com
|
||||
- mainwp.itpropartner.com, voipsimplicity.com, my.voipsimplicity.com
|
||||
- Daily snapshots: 1 AM + 1 PM, 60-day retention, /opt/backup-restore/snapshots
|
||||
|
||||
### Core-BU (Warm Standby)
|
||||
- **Hostname:** core-bu
|
||||
- **IP:** 5.161.225.131
|
||||
- **Provider:** Hetzner CPX21
|
||||
- **Specs:** 3 vCPU, 4 GB RAM, 80 GB SSD
|
||||
- **Role:** Warm standby — auto-failover if Core down
|
||||
- **Watchdog:** 5-min check, 4-cycle confirmation, S3 sync every 10 min
|
||||
|
||||
### Legacy / Decommissioned
|
||||
- **old-ai:** 178.156.167.181 (Hetzner CPX41) — **decommissioned** (LiteLLM migrated to app1)
|
||||
- **old app1:** 87.99.144.163 (Hetzner CPX11) — **deleted**
|
||||
- **wphost02:** 5.161.62.38 (Hetzner CPX21) — **migrated to app3**
|
||||
- **Ollama:** Removed from Core (systemd) and app1 (Docker) Jul 17
|
||||
|
||||
---
|
||||
|
||||
## Model Fallback Chain
|
||||
|
||||
All providers use direct API keys. GPT-5.5 quality survives through admin-ai → OpenRouter, then degrades through DeepSeek → Gemini → Grok.
|
||||
|
||||
| # | Model | Provider | Gateway |
|
||||
|---|---|---|---|
|
||||
| Primary | GPT-5.5 | admin-ai | Self-hosted LiteLLM (app1) |
|
||||
| Fallback 1 | GPT-5.5 | OpenRouter | openrouter.ai |
|
||||
| Fallback 2 | DeepSeek v4 Pro | DeepSeek | api.deepseek.com |
|
||||
| Fallback 3 | Gemini 3.5 Flash | Google | generativelanguage.googleapis.com |
|
||||
| Fallback 4 | Grok 4.5 | xAI | api.x.ai |
|
||||
|
||||
**Credits (Jul 17):** DeepSeek $58, OpenRouter ~$30 remaining, OpenAI/xAI/Google on pay-as-you-go
|
||||
**Health check:** Daily 8 AM cron (`model-usage-check`)
|
||||
|
||||
---
|
||||
|
||||
## Domain / DNS Map
|
||||
|
||||
### ⚠️ itpropartner.com — SiteGround Nameservers Only
|
||||
|
||||
`itpropartner.com` uses **SiteGround nameservers** exclusively. A Cloudflare zone exists (`0dc20632…`) but is NOT authoritative — records created there silently fail. All `*.itpropartner.com` changes must be manual through SiteGround panel.
|
||||
|
||||
| Domain | IP | Server | Service |
|
||||
|---|---|---|---|
|
||||
| core.itpropartner.com | 152.53.192.33 | Core | Landing page + Grafana link |
|
||||
| ops.itpropartner.com | 152.53.192.33 | Core | Ops dashboard |
|
||||
| sign.core.itpropartner.com | 152.53.192.33 | Core | DocuSeal |
|
||||
| uptimekuma.itpropartner.com | 152.53.192.33 | Core | Uptime monitoring |
|
||||
| gps.fleettracker360.com | 152.53.192.33 | Core | Traccar HTTPS proxy → app2 |
|
||||
| my.itpropartner.com | 152.53.192.33 | Core | Customer portal hub |
|
||||
| hudu.itpropartner.com | 152.53.39.202 | app2 | IT documentation |
|
||||
| unifi.itpropartner.com | 152.53.39.202 | app2 | UniFi controller |
|
||||
| panel.itpropartner.com | 152.53.241.111 | app3 | CloudPanel CE |
|
||||
| ai.itpropartner.com | 152.53.36.131 | app1 | Open WebUI |
|
||||
| n8n.itpropartner.com | 152.53.36.131 | app1 | n8n automation |
|
||||
| admin-ai.itpropartner.com | 152.53.36.131 | app1 | LiteLLM |
|
||||
|
||||
### Cloudflare-Managed Domains
|
||||
|
||||
| Domain | IP | Server | Service |
|
||||
|---|---|---|---|
|
||||
| fleettracker360.com | Cloudflare | app2 | Fleet tracking website |
|
||||
| gps.fleettracker360.com | Cloudflare → Core | Core → app2 | Traccar devices |
|
||||
| voipsimplicity.com | Cloudflare | app3 | VoIP marketing site |
|
||||
| my.voipsimplicity.com | Cloudflare | app3 | VoIP customer portal |
|
||||
| portal.debtrecoveryexperts.com | 152.53.192.33 | Core | DRE portal |
|
||||
| crm.debtrecoveryexperts.com | Cloudflare Access | — | DRE CRM |
|
||||
| vault.iamgmb.com | 152.53.192.33 | Core | Vaultwarden |
|
||||
| sign.iamgmb.com | 152.53.192.33 | Core | Document signing |
|
||||
| shark.iamgmb.com | 152.53.192.33 | Core | Shark game |
|
||||
|
||||
### DNS PENDING (create at SiteGround)
|
||||
|
||||
| Subdomain | → IP | Service |
|
||||
|---|---|---|
|
||||
| vault.itpropartner.com | 152.53.36.131 | Vaultwarden (after migration) |
|
||||
| status.itpropartner.com | 152.53.192.33 | Public status page |
|
||||
|
||||
---
|
||||
|
||||
## Backup Pipeline
|
||||
|
||||
| Backup | Schedule | Target | Purpose |
|
||||
|---|---|---|---|
|
||||
| hermes-live-sync | Every 15 min | s3://hermes-vps-backups/live/ | Live state sync |
|
||||
| hermes-full-backup | Daily 1 AM | s3://hermes-vps-backups/hermes-full-backup/ | Full Hermes backup |
|
||||
| home-router-backup | Daily 6 AM | s3://mikrotik-ccr-backups/ | CCR config |
|
||||
| root-essentials-backup | Daily 3 AM | S3 | /root essentials |
|
||||
| docker-volume-sync | Daily 3 AM | S3 | Docker volumes |
|
||||
| system-config-sync | Daily 4 AM | S3 | System configs |
|
||||
| unms-backup-sync | Daily 6 AM (Core) | s3://hermes-vps-backups/unms-backups/ | UNMS data (pulled from app2) |
|
||||
| unifi-backup-sync | Daily 2 AM (Core) | s3://hermes-vps-backups/unifi-backups/ | UniFi configs (pulled from app2) |
|
||||
| hudu-backup | Daily 7 AM | s3://hermes-vps-backups/hudu/backups/ | Hudu volume dump |
|
||||
| gitea-backup | Daily 8 AM | s3://hermes-vps-backups/gitea/daily/ | Gitea repos |
|
||||
| app1-backup | Daily 2 AM | s3://hermes-vps-backups/app1/ | LiteLLM, n8n, OpenWebUI, MCP, Mattermost |
|
||||
| app2-backup | Daily 2:30 AM | s3://hermes-vps-backups/app2/ | Traccar, Gitea, Hudu, UNMS, UniFi |
|
||||
| app3-backup | Daily 3 AM | s3://hermes-vps-backups/app3/ | CloudPanel, MySQL, WordPress |
|
||||
| wphost02-backup | Daily 5 AM | s3://hermes-vps-backups/wphost02-backup/ | Webapps + MySQL |
|
||||
| warm-standby-sync | Every 10 min | core-bu ← S3 | DR readiness |
|
||||
|
||||
---
|
||||
|
||||
## Caddy Configuration
|
||||
|
||||
### Core (152.53.192.33)
|
||||
|
||||
```
|
||||
core.itpropartner.com → static files
|
||||
sign.core.itpropartner.com → localhost:3000 (DocuSeal)
|
||||
ops.itpropartner.com → 127.0.0.1:8090 + static
|
||||
uptimekuma.itpropartner.com → 127.0.0.1:3001 (Uptime Kuma)
|
||||
gps.fleettracker360.com → app2:8082 (Traccar)
|
||||
my.itpropartner.com → static files
|
||||
portal.debtrecoveryexperts.com → static files
|
||||
vault.iamgmb.com → localhost:8080 (Vaultwarden)
|
||||
sign.iamgmb.com → 127.0.0.1:8090
|
||||
shark.iamgmb.com → static + :8083
|
||||
```
|
||||
|
||||
### App1 (152.53.36.131)
|
||||
|
||||
```
|
||||
ai.itpropartner.com → :3000 (Open WebUI)
|
||||
n8n.itpropartner.com → :5678 (n8n)
|
||||
admin-ai.itpropartner.com → :4000 (LiteLLM)
|
||||
app1.itpropartner.com → static response
|
||||
```
|
||||
|
||||
### App2 (152.53.39.202)
|
||||
|
||||
```
|
||||
hudu.itpropartner.com → Hudu internal
|
||||
gps.fleettracker360.com → :8082 (Traccar)
|
||||
unms.forefrontwireless.com → UNMS Nginx
|
||||
unifi.itpropartner.com → :8443 (UniFi)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Service Access
|
||||
|
||||
| Service | URL | Location | Auth |
|
||||
|---|---|---|---|
|
||||
| Open WebUI | https://ai.itpropartner.com | app1 | Chat UI |
|
||||
| Open WebUI Admin | https://admin-ai.itpropartner.com/ui | app1 | user: admin, pw: LITELLM_MASTER_KEY |
|
||||
| Ops Portal | https://ops.itpropartner.com | Core | Internal dashboard |
|
||||
| Grafana | http://core.itpropartner.com:3002 | Core | admin/admin |
|
||||
| Uptime Kuma | https://uptimekuma.itpropartner.com | Core | Service monitoring |
|
||||
| Vaultwarden | https://vault.iamgmb.com | Core | Password vault |
|
||||
| CloudPanel | https://panel.itpropartner.com | app3 | user: gmb / SQLite auth |
|
||||
| Traccar | https://gps.fleettracker360.com | app2 | GPS fleet tracking |
|
||||
| UniFi | https://unifi.itpropartner.com | app2 | Network controller |
|
||||
| UNMS | https://unms.forefrontwireless.com | app2 | WISP management |
|
||||
| Hudu | https://hudu.itpropartner.com | app2 | IT documentation |
|
||||
| n8n | https://n8n.itpropartner.com | app1 | Automation |
|
||||
| CRM (DRE) | https://crm.debtrecoveryexperts.com | Cloudflare Access | TwentyCRM |
|
||||
|
||||
### MCP Access (from Open WebUI)
|
||||
|
||||
| MCP Server | Location | Port | Tools |
|
||||
|---|---|---|---|
|
||||
| Super Search | app1 | :8899 | 10 tools — web_search, web_extract, person_search, email_search, phone_search, etc. |
|
||||
| Browser | app1 | :8901 | browser_navigate, browser_snapshot, browser_click, browser_type, browser_console |
|
||||
| Filesystem | app1 | :8900 | read_file, write_file, search_files, list_dir, file_info |
|
||||
| Email | app1 | :8902 | search_emails, send_email, get_email |
|
||||
| Git/Gitea | app1 | :8903 | clone, commit, push, pull |
|
||||
|
||||
---
|
||||
|
||||
## SSH Access
|
||||
|
||||
- **Key:** `itpp-infra` (deployed to all servers)
|
||||
- **User:** `ippadmin` (sudo privileges)
|
||||
- **Root SSH:** Enabled on app1, app2, app3 (key-only exception per provisioning standard)
|
||||
- **Core SSH:** `ssh -i /root/.ssh/itpp-infra root@152.53.192.33`
|
||||
|
||||
---
|
||||
|
||||
## Firewall
|
||||
|
||||
UFW is enabled on all servers. Standard rules:
|
||||
- **Core:** 22, 80, 443, 3000, 3001, 3002, 8080, 8082, 8090, 8443, 9090
|
||||
- **app1:** 22, 80, 443, 3000, 5678, 8899, 8900, 8901, 8902, 8903
|
||||
- **app2:** 22, 80, 443, 3000, 8080, 8082, 8089, 8443, 8843, 3478, 10001, 5000:5150
|
||||
- **app3:** 22, 80, 443, 8443
|
||||
|
||||
---
|
||||
|
||||
## SSL
|
||||
|
||||
All SSL certificates issued via Let's Encrypt through Caddy. All certs auto-renew. No manual management needed.
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- **DNS trap:** `itpropartner.com` uses SiteGround nameservers. Cloudflare zone is NOT authoritative. Always verify with `dig NS domain.com` before creating records.
|
||||
- **SiteGround:** No API access. All DNS changes are manual through SiteGround panel.
|
||||
- **Provider diversity:** core-bu stays at Hetzner specifically so a netcup outage can't kill both Core and standby simultaneously.
|
||||
- **app3 MySQL:** Root password in Vaultwarden + `/root/.my.cnf` on app3, accessible via 127.0.0.1:3306.
|
||||
- **CloudPanel:** SQLite DB at `/home/clp/htdocs/app/data/db.sq3` — users live here, not in MySQL.
|
||||
- **AWS CLI PATH:** All backup scripts must use `/opt/awscli-venv/bin/aws` or `source /opt/awscli-venv/bin/activate` — `aws` bare fails in cron context (PATH doesn't include venv bin). Documented in server-provisioning-standard v1.3.0.
|
||||
- **Backup verification:** Always run at least one manual backup after provisioning a server and verify it landed in S3 — never trust cron entries alone. Silent failures (`aws: command not found`, wrong file paths, S3 permission issues) won't surface otherwise.
|
||||
@@ -0,0 +1,252 @@
|
||||
# IT Pro Partner — Complete Key Inventory
|
||||
|
||||
**Generated:** 2026-07-23
|
||||
**Sanitized:** 2026-07-23 (plaintext secrets replaced with storage references)
|
||||
**Scope:** All SSH keys, API tokens, service credentials, device keys, and passwords across the infrastructure
|
||||
**⚠️ SENSITIVE:** All credential values live in the listed storage locations. See Hudu for API keys (layout 49).
|
||||
|
||||
---
|
||||
|
||||
## 1. SSH Keys
|
||||
|
||||
| Key Name | File | Type | Fingerprint (SHA256) | Purpose | Deployed To |
|
||||
|----------|------|------|-----------------------|---------|-------------|
|
||||
| **itpp-infra** | `/root/.ssh/itpp-infra` | ED25519 | `Jxh0bbT9dUV3q1DYYB3hHyhy/1TDj7Q8U4xrVmB38uQ` | Universal server admin key | All servers (Core, app1, app2, app3, wphost02, app1-bu, home router) |
|
||||
| **wisp_rsa** | `/root/.ssh/wisp_rsa` | ED25519 | `MxQw1oh90NibSgN2mDbKP+07/jE4FEUEBbFAzuk5DcI` | WISP MikroTik CCR router SSH | Home CCR router (10.77.0.2 via WireGuard) |
|
||||
| **germaine-personal** | `/root/.ssh/germaine-personal` | ED25519 | `dDbLH+bdPFcGU0mm1DpGa43ec0nUZ88YnpCi4p63y3I` | Germaine's personal key (from his machines) | Germaine's devices → Core |
|
||||
| **homelab** | `/root/.ssh/homelab` | ED25519 | `c1nts4wR9EU06/O/k895Pb2tGZublgnGWG6NoQrK/qs` | Homelab Proxmox/QNAP access | vm-host-01, vm-host-02, QNAP NAS |
|
||||
| **siteground.key** | `/root/.ssh/siteground.key` | RSA (encrypted) | N/A (RSA, encrypted) | SiteGround SFTP backup (port 18765) | SiteGround shared hosting |
|
||||
| **authorized_keys** | `/root/.ssh/authorized_keys` | — | — | Who can SSH into Core | Core (this server) |
|
||||
|
||||
### SSH Key Details
|
||||
|
||||
```
|
||||
itpp-infra.pub: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII4dxTH11aJkBqCY8lXl1kTfZ8yXWhTcthHnt1MtAuIE itpp-infra
|
||||
wisp_rsa.pub: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDnI4UwwPL8gJvtP/Jr7qiw0Qj/bQBwi2+f03p730xvn wisp-backup
|
||||
germaine-personal.pub: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID2H/2VMn8i7YSUUpcag6yXiI6nB3T99h7JIOs5/+73r germaine@itppartner
|
||||
homelab.pub: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHT+727Cti4cZ2x6CiYDeDKZ9BhvCJCzTHlO9vMInHie homelab-itpp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Server Root Passwords
|
||||
|
||||
**Storage:** Hudu (Vaultwarden asset) + `/root/.hermes/.env` (netcup CCP section)
|
||||
|
||||
| Server | IP | Provider | Access | Notes |
|
||||
|--------|-----|----------|--------|-------|
|
||||
| **Core** | 152.53.192.33 | netcup RS 2000 | SSH key only | `itpp-infra` key, password auth disabled |
|
||||
| **app1** | 152.53.36.131 | netcup RS 4000 | Via root or ippadmin+sudo | Root password in Vaultwarden |
|
||||
| **app2** | 152.53.39.202 | netcup RS 4000 | Via root or ippadmin+sudo | Root password in Vaultwarden |
|
||||
| **app3** | 152.53.241.111 | netcup RS 4000 | Via root or ippadmin+sudo | Root password in Vaultwarden |
|
||||
| **app1-bu** | 5.161.114.8 | Hetzner CPX11 | itpp-infra SSH key | Warm standby, offline by default |
|
||||
|
||||
### Admin Account (all servers)
|
||||
|
||||
- **Username:** `ippadmin`
|
||||
- **Password:** → Vaultwarden entry "ippadmin"
|
||||
- **Sudo:** Yes (full sudo access)
|
||||
- **SSH:** Key-based only (`itpp-infra`)
|
||||
|
||||
---
|
||||
|
||||
## 3. Cloud & Infrastructure API Keys
|
||||
|
||||
**Storage:** All in `~/.hermes/.env` + Hudu API assets (layout 49)
|
||||
|
||||
| Service | Hudu Asset | Storage Location | Status |
|
||||
|---------|-----------|------------------|--------|
|
||||
| **Hetzner Cloud** | [177] | `/root/.hermes/scripts/.hetzner_token` + `/root/.hermes/.env` | ✅ Verified Jul 22 |
|
||||
| **Cloudflare DNS** | [165] | `~/.hermes/.env` → `CLOUDFLARE_API_TOKEN` | ✅ Active (verified by health check) |
|
||||
| **Wasabi S3** | [176] | `/root/.aws/credentials` | ✅ Active |
|
||||
| **netcup API** | [166] | `~/.hermes/.env` → `NETCUP_API_KEY` | ✅ Active |
|
||||
| **netcup CCP** | [167] | `~/.hermes/.env` → `NETCUP_CUSTOMER_NUMBER` + `NETCUP_CCP_PASSWORD` | ✅ Active |
|
||||
| **Gitea (OLD/DEAD)** | — | ⚠️ **EXPIRED** — still in homelab + itpp-infrastructure remotes | ❌ INVALID (verified Jul 23) |
|
||||
| **Gitea (ACTIVE)** | — | All other repos + `gitea-backup.sh` — ippadmin | ✅ Active (verified Jul 23) |
|
||||
|
||||
---
|
||||
|
||||
## 4. AI Provider API Keys
|
||||
|
||||
All stored in `/root/.hermes/.env` and Hudu API assets (layout 49).
|
||||
|
||||
| Provider | Hudu Asset | Purpose | Status |
|
||||
|----------|-----------|---------|--------|
|
||||
| **admin-ai** (LiteLLM) | [126] Hermes Primary Key | Primary model gateway (all models) | ✅ Active |
|
||||
| **Anthropic** | [150] | Claude models | ✅ Active |
|
||||
| **OpenAI** | [149] | GPT models | ✅ Active |
|
||||
| **DeepSeek** | [152] | DeepSeek models | ✅ Active |
|
||||
| **Google Gemini** | [161] / [151] | Gemini models | ✅ Active |
|
||||
| **xAI (Grok)** | [154] | Grok models | ✅ Active |
|
||||
| **OpenRouter** | [153] | Multi-provider routing | ✅ Active |
|
||||
| **Mistral** | [155] | Mistral models | ✅ Active |
|
||||
| **Groq** | [157] | Fast inference | ✅ Active |
|
||||
| **Fireworks AI** | [156] | Serverless inference | ✅ Active |
|
||||
| **Perplexity** | [159] | Search-augmented LLM | ✅ Active |
|
||||
| **Cohere** | [158] | Cohere models | ✅ Active |
|
||||
| **AI21 Labs** | [160] | Jurassic models | ✅ Active |
|
||||
| **MiniMax** | [187] | MiniMax M3 | ✅ Active |
|
||||
| **Z.ai (GLM)** | [188] | GLM models | ✅ Active |
|
||||
| **Alibaba Qwen** | [189] Alibaba Qwen (DashScope) | Qwen models | ✅ Active |
|
||||
| **Deepgram** | [162] | STT (voice transcription) | ✅ Active |
|
||||
|
||||
---
|
||||
|
||||
## 5. Communication APIs
|
||||
|
||||
**Storage:** All in `~/.hermes/.env` + Hudu API assets (layout 49)
|
||||
|
||||
| Service | Hudu Asset | Storage | Status |
|
||||
|---------|-----------|---------|--------|
|
||||
| **Telegram Bot** | [170] | `~/.hermes/.env` → `TELEGRAM_BOT_TOKEN` | ✅ Active |
|
||||
| **Twilio (Live)** | [184] Twilio Live | `~/.hermes/.env` → `TWILIO_ACCOUNT_SID` + `TWILIO_AUTH_TOKEN` | ✅ Active |
|
||||
| **Twilio (Test)** | [185] Twilio Test | `~/.hermes/.env` → `TWILIO_TEST_ACCOUNT_SID` + `TWILIO_TEST_AUTH_TOKEN` | ✅ Active |
|
||||
| **Twilio API Key** | [186] Twilio API Key | `~/.hermes/.env` → `TWILIO_API_KEY_SID` + `TWILIO_API_KEY_SECRET` | ✅ Active |
|
||||
| **ElevenLabs** | [148] | `~/.hermes/config.yaml` (auxiliary vision / TTS) | ✅ Active |
|
||||
| **Email SMTP/IMAP** | — | `/root/.config/himalaya/shonuff.pass` | ✅ Active |
|
||||
| **Email account** | — | `shonuff@germainebrown.com` — MXroute via mail.germainebrown.com:2525 (SMTP) / :993 (IMAP) | ✅ Active |
|
||||
|
||||
---
|
||||
|
||||
## 6. VoIP / RingLogix
|
||||
|
||||
**Storage:** `~/.hermes/.env` + Hudu API assets
|
||||
|
||||
| Credential | Hudu Asset | Storage |
|
||||
|-----------|-----------|---------|
|
||||
| **RingLogix Client ID** | [174] | `~/.hermes/.env` → `RINGLOGIX_CLIENT_ID` |
|
||||
| **RingLogix Client Secret** | [175] | `~/.hermes/.env` → `RINGLOGIX_CLIENT_SECRET` |
|
||||
| **RingLogix Username** | — | `~/.hermes/.env` → `RINGLOGIX_USERNAME` |
|
||||
| **RingLogix Password** | — | `~/.hermes/.env` → `RINGLOGIX_PASSWORD` |
|
||||
| **RingLogix Domain** | — | `~/.hermes/.env` → `RINGLOGIX_DOMAIN` |
|
||||
|
||||
---
|
||||
|
||||
## 7. MSP / RMM / Security APIs
|
||||
|
||||
**Storage:** All in `~/.hermes/.env` + Hudu API assets
|
||||
|
||||
| Service | Hudu Asset | Storage | Status |
|
||||
|---------|-----------|---------|--------|
|
||||
| **SyncroMSP** | [168] Token + [169] API Key | `~/.hermes/.env` → `SYNCROMSP_API_TOKEN` + `SYNCROMSP_API_KEY` | ✅ Active |
|
||||
| **Bitdefender GZ** | [172] | `~/.hermes/.env` → `BITDEFENDER_API_KEY` | ✅ Active |
|
||||
| **VirusTotal** | [171] | `~/.hermes/.env` → `VIRUSTOTAL_API_KEY` | ✅ Active |
|
||||
| **UISP/UNMS** | [173] | `~/.hermes/.env` → `UISP_API_KEY` | ✅ Active |
|
||||
|
||||
---
|
||||
|
||||
## 8. Search & Data APIs
|
||||
|
||||
| Service | Hudu Asset | Storage | Status |
|
||||
|---------|-----------|---------|--------|
|
||||
| **Firecrawl** | [164] | `~/.hermes/.env` → `FIRECRAWL_API_KEY` | ✅ Active |
|
||||
| **Exa AI Search** | [163] | `~/.hermes/.env` → `EXA_API_KEY` | ✅ Active |
|
||||
|
||||
---
|
||||
|
||||
## 9. Database Credentials
|
||||
|
||||
| Database | Host | User | Password Location | Purpose |
|
||||
|----------|------|------|-------------------|---------|
|
||||
| **MySQL (apex track)** | 127.0.0.1:33060 (SSH tunnel from wphost02) | `apextrackexperience_1781549652` | `wp-config.php` on wphost02 | Apex Track Experience WordPress |
|
||||
| **MySQL (CloudPanel)** | app3:3306 | `root` | `/root/.my.cnf` on app3 (also in Vaultwarden) | CloudPanel WordPress hosting |
|
||||
| **LiteLLM Postgres** | app1 (Docker) | (in docker-compose) | `/root/docker/litellm/docker-compose.yml` on app1 | LiteLLM operational DB |
|
||||
|
||||
---
|
||||
|
||||
## 10. Docker Services
|
||||
|
||||
| Service | URL | Credential Location | Storage |
|
||||
|---------|-----|--------------------|---------|
|
||||
| **Vaultwarden** | vault.itpropartner.com / vault.iamgmb.com | Admin Token → `/root/docker/vaultwarden/.env` on Core | Docker env file |
|
||||
| **DRE Portal** | portal.debtrecoveryexperts.com | Basic Auth (htpasswd) | `/etc/caddy/dre-passwd` |
|
||||
| **SearXNG** | (internal, no public endpoint) | (none) | — |
|
||||
| **DocuSeal** | sign.core.itpropartner.com / sign.iamgmb.com | (none / app-managed) | — |
|
||||
| **Uptime Kuma** | uptimekuma.itpropartner.com | (app-managed) | — |
|
||||
| **Open WebUI** | admin-ai.itpropartner.com | `admin@itpropartner.com` (password: ask Sho'Nuff) | Not in .env |
|
||||
| **Mealie** | recipe.iamgmb.com | `G@germainebrown.com` (password → Vaultwarden) | Vaultwarden |
|
||||
| **Ops Portal** | ops.itpropartner.com | `ippadmin` (password → `~/.hermes/.env`) | `~/.hermes/.env` |
|
||||
|
||||
---
|
||||
|
||||
## 11. VPN & Network Keys
|
||||
|
||||
### WireGuard (Core)
|
||||
|
||||
| Item | Value |
|
||||
|------|-------|
|
||||
| **Interface** | `wg0` |
|
||||
| **Core Private Key** | → `/etc/wireguard/wg0.conf` on Core |
|
||||
| **Core IP** | `10.77.0.1/24` |
|
||||
| **Listen Port** | `51821` |
|
||||
| **Home Peer Public Key** | `1fPwdGQ20CxlZCQZQV134olDcE91hfp78yNDeaKJZzg=` |
|
||||
| **Home Peer Endpoint** | `76.195.7.60:13231` |
|
||||
| **Routed Networks** | `10.1.0.0/16`, `10.2.0.0/16`, `172.16.1.0/24`, `172.18.18.0/24` |
|
||||
|
||||
### Tailscale
|
||||
|
||||
| Node | IP | Type | Status |
|
||||
|------|-----|------|--------|
|
||||
| core | 100.71.155.7 | Linux | ✅ Online |
|
||||
| app1 | 100.90.186.109 | Linux | ✅ Online |
|
||||
| app2 | 100.117.164.66 | Linux | ✅ Online |
|
||||
| app3 | 100.72.15.12 | Linux | ✅ Online |
|
||||
| app1-bu | 100.112.23.21 | Linux | ⚠️ Offline (7d) |
|
||||
| iphone-15-pro-max | 100.106.231.86 | iOS | ✅ Online |
|
||||
| ipp-g-lap | 100.120.64.120 | macOS | ✅ Online |
|
||||
| m4-mac-mini | 100.116.232.65 | macOS | ✅ Online |
|
||||
|
||||
---
|
||||
|
||||
## 12. UniFi / UDM Pro Device Keys
|
||||
|
||||
| Site | Key Location | Type | Status |
|
||||
|------|-------------|------|--------|
|
||||
| **Grand Lake Club** | UniFi Network Controller → Settings → API | Local Network API Key | ✅ Stored, pending direct verification |
|
||||
| **Liberty Tire** | UniFi Network Controller → Settings → API | Local Network API Key | ✅ Stored, pending direct verification |
|
||||
|
||||
---
|
||||
|
||||
## 13. Unknown / Not Found
|
||||
|
||||
The following credentials are known to exist but were not found in the standard locations:
|
||||
|
||||
| Item | Notes |
|
||||
|------|-------|
|
||||
| **Open WebUI admin password** | Recovery manual says "in .env or ask Sho'Nuff" — NOT in current .env. Must ask Germaine. |
|
||||
| **Hudu API key** | In skill docs (`hudu-management`) — used programmatically, not in .env. |
|
||||
| **Traccar/FleetTracker360 admin** | Not in .env. May be Docker env or app-managed. |
|
||||
| **Twenty CRM credentials** | Docker on Core, env at `/root/docker/twenty/.env` (not read). |
|
||||
| **WordPress site DB passwords** | Various sites, typically in `wp-config.php` on wphost02 or app3. |
|
||||
| **app1-bu root password** | Hetzner CPX11 — accessed via itpp-infra SSH key only. |
|
||||
| **ComfyUI / Z4** | GPU server allocated for TripFlow — credentials not yet documented. |
|
||||
| **Home MikroTik admin** | SSH via `admin@10.77.0.2` with `wisp_rsa` key. RouterOS password in router config (not extracted). |
|
||||
|
||||
---
|
||||
|
||||
## 14. Key Rotation & Audit Notes
|
||||
|
||||
- **Last full audit:** 2026-07-23
|
||||
- **Last sanitization:** 2026-07-23 — all plaintext secrets removed; use Hudu + file paths for values
|
||||
- **Hetzner token:** Rotated Jul 22 (old tokens in Hudu were invalid)
|
||||
- **Twilio:** Live + test credentials both present in Hudu [184]/[185]/[186]
|
||||
- **OpenRouter:** Fallback routing key — keep active even if not primary
|
||||
- **admin-ai:** Primary gateway — all model calls route through this
|
||||
- **Backups:** All .env + config files included in daily Hermes backup to S3
|
||||
|
||||
### Recovery Priority
|
||||
|
||||
If Core is lost, you need these to rebuild (in order):
|
||||
1. `/root/.ssh/itpp-infra` — SSH to all servers
|
||||
2. `/root/.hermes/.env` — All API keys and secrets
|
||||
3. `/root/.aws/credentials` — S3 access for backups
|
||||
4. `/root/.hermes/config.yaml` — Full Hermes config
|
||||
5. `/root/.config/himalaya/shonuff.pass` — Email access
|
||||
|
||||
### Hudu API Assets (layout 49)
|
||||
|
||||
All API keys are documented as Hudu assets. List them via:
|
||||
```
|
||||
GET https://hudu.itpropartner.com/api/v1/companies/1/assets?page=1&per_page=25
|
||||
```
|
||||
Filter by `asset_layout_id == 49` to see all API keys with their Hudu asset IDs and storage locations.
|
||||
@@ -0,0 +1,29 @@
|
||||
July 21, 2026
|
||||
|
||||
Department of the Treasury
|
||||
Internal Revenue Service
|
||||
Ogden, UT 84201-0027
|
||||
|
||||
RE: Business Name Change Notification
|
||||
EIN: [INSERT EIN]
|
||||
Previous Legal Name: CG Premier Transport LLC
|
||||
New Legal Name: IT Pro Partner LLC
|
||||
|
||||
To whom it may concern,
|
||||
|
||||
This letter is to notify the Internal Revenue Service of a legal name change for the above-referenced entity. The name change was filed and approved by the Georgia Secretary of State.
|
||||
|
||||
Enclosed:
|
||||
- Copy of filed Georgia Articles of Amendment confirming the name change from CG Premier Transport LLC to IT Pro Partner LLC
|
||||
- This notification letter
|
||||
|
||||
Please update your records accordingly. The entity type (LLC) and EIN remain unchanged. All other information — business address, responsible party, and tax classification — remains the same as previously filed.
|
||||
|
||||
If you require additional documentation, please contact me at the address or phone number below.
|
||||
|
||||
Sincerely,
|
||||
|
||||
_______________________________
|
||||
[Name of Authorized Member/Officer]
|
||||
[Title]
|
||||
[Phone Number]
|
||||
@@ -0,0 +1,18 @@
|
||||
# AI Model Chain — IT Pro Partner
|
||||
|
||||
**Updated:** July 24, 2026
|
||||
|
||||
## Active Fallback Chain
|
||||
|
||||
| Tier | Model | Provider | Notes |
|
||||
|---|---|---|---|
|
||||
| **Primary** | `claude-sonnet-5` | `admin-ai` | Conductor via LiteLLM ($3.33/day cap) |
|
||||
| **Fallback 1 (F1)** | `deepseek-v4-pro` | `deepseek` | Direct DeepSeek API |
|
||||
| **Fallback 2 (F2)** | `gpt-5.6-terra` | `admin-ai` | Demoted from Primary via LiteLLM ($3.33/day cap) |
|
||||
| **Fallback 3 (F3)** | `grok-4.5` (`grok-2-1212`) | `xai` | Direct xAI API |
|
||||
| **Fallback 4 (F4)** | `gemini-3.6-flash` | `google` | Direct Google API |
|
||||
|
||||
## Admin-AI Virtual Key
|
||||
- **Key Hash**: `0237186aaff1ed90295c00d73103103900d4bd07252ec1806af8a4358e45d37a`
|
||||
- **Allowed Models**: `claude-sonnet-5`, `gpt-5.6-terra`, `deepseek-v4-pro`, `deepseek-v4-flash`, `glm-5.2`, `MiniMax-M3`, `qwen3.7-plus`
|
||||
- **Daily Budget Cap**: $3.33 / day
|
||||
@@ -0,0 +1,112 @@
|
||||
# Ops Portal — Architecture
|
||||
|
||||
## Topology
|
||||
|
||||
```
|
||||
INTERNET
|
||||
|
|
||||
[Caddy :443]
|
||||
|
|
||||
Core (152.53.192.33)
|
||||
|
|
||||
+---------------+---------------+
|
||||
| | |
|
||||
/api/* :8090 /data/* :files /static/*
|
||||
| | |
|
||||
[FastAPI app] ops-status.json [HTML/CSS/JS]
|
||||
server.py /var/www/ops/ /opt/ops-portal/
|
||||
| /data/ static/
|
||||
|
|
||||
+-------+-------+-------+-------+
|
||||
| | | | |
|
||||
S3 API UISP Wazuh Bitdef systemd
|
||||
(Wasabi) (FFW) (app1) (Cloud) (Core)
|
||||
```
|
||||
|
||||
## Data Flow
|
||||
|
||||
```
|
||||
[Collector] [Dashboard]
|
||||
| |
|
||||
|-- python3 ops-data- |
|
||||
| collector.py |
|
||||
| |
|
||||
v |
|
||||
S3 buckets ----+ |
|
||||
UISP API ------+---> ops-status |
|
||||
Wazuh API -----+ .json ------> GET /api/status
|
||||
Bitdefender ---+ |
|
||||
systemd -------+ |
|
||||
cron jobs -----+ |
|
||||
v
|
||||
[Browser renders
|
||||
health grid,
|
||||
widgets, alerts]
|
||||
```
|
||||
|
||||
## Components
|
||||
|
||||
### 1. Collector (`/root/.hermes/scripts/ops-data-collector.py`)
|
||||
- Runs every 5 min via cron
|
||||
- Gathers: S3 backup status (6 buckets), UISP devices (90), Wazuh agents/alerts, Bitdefender endpoints, systemd services, cron jobs, server health, disk/memory/CPU
|
||||
- Timeout: 90s (was 20s — too short for 94K-file S3 bucket)
|
||||
- Output: `/var/www/ops/data/ops-status.json`
|
||||
|
||||
### 2. Backend (`/opt/ops-portal/server.py`)
|
||||
- FastAPI on port 8090
|
||||
- 7 API endpoints (health, status, servers, servers/health, audit-log, ft360/status)
|
||||
- JWT auth from `/root/.hermes/.env` (ADMIN_USERNAME, ADMIN_PASSWORD, JWT_SECRET)
|
||||
- Critical service restart protection (hermes, caddy, ops-portal blocked)
|
||||
- Systemd: `ops-portal.service`
|
||||
|
||||
### 3. Frontend (`/opt/ops-portal/static/`)
|
||||
- 11 HTML pages with shared ops.css, app.js, utils.js
|
||||
- Auth: login overlay → localStorage JWT → all API calls Bearer
|
||||
- Auto-refresh: 60s interval + tab visibility API
|
||||
- Mobile: hamburger toggle with .nav-links.open CSS
|
||||
- Cache-busting: all assets versioned with timestamps
|
||||
|
||||
### 4. Proxy (Caddy on Core)
|
||||
- `/` and `/*.html` → static file server from `/opt/ops-portal/static/`
|
||||
- `/api/*` → reverse_proxy to 127.0.0.1:8090
|
||||
- `/data/*` → file server from `/var/www/ops/data/`
|
||||
- Domain: ops.itpropartner.com
|
||||
|
||||
## Cross-Service Dependencies
|
||||
|
||||
| Dependency | Server | Purpose | Fallback |
|
||||
|---|---|---|---|
|
||||
| Wasabi S3 | External | Backup bucket status | Shows "Issues" |
|
||||
| UISP API | unms.forefrontwireless.com | Device/site count | Shows 0 devices |
|
||||
| Wazuh | app1 (152.53.36.131) | Agent count, alerts | Shows "Offline" |
|
||||
| Bitdefender | External API | Endpoint monitoring | Shows "Offline" |
|
||||
| Traccar | app2 (152.53.39.202) | FleetTracker data | Dedicated endpoint |
|
||||
| Core systemd | Local | Service health, disk, memory | N/A (local) |
|
||||
|
||||
## Auth Flow
|
||||
|
||||
```
|
||||
Browser Server
|
||||
| |
|
||||
|-- POST /api/auth/login ->|
|
||||
| {username, password} |
|
||||
| |-- Validate against ADMIN_USERNAME/ADMIN_PASSWORD
|
||||
| |-- Generate JWT with JWT_SECRET
|
||||
|<- {access_token} --------|
|
||||
| |
|
||||
|-- GET /api/status ------->|
|
||||
| Authorization: Bearer |
|
||||
| |-- Verify JWT
|
||||
| |-- Read ops-status.json
|
||||
|<- {full dashboard} ------|
|
||||
```
|
||||
|
||||
## Key Design Decisions
|
||||
|
||||
1. **Collector pattern over direct API calls:** Dashboard fetches one JSON blob rather than 6 separate APIs. Single point of failure but fast rendering and offline-capable (shows last-cached data).
|
||||
|
||||
2. **Python/FastAPI over Node:** Already have Python toolchain on Core. FastAPI is lightweight, async-native, and the ops portal is read-heavy with minimal write paths.
|
||||
|
||||
3. **Static HTML + vanilla JS over React/Vue:** 11-page dashboard with no SPA routing. Auth via localStorage JWT. Zero build step, zero dependencies beyond ops.css.
|
||||
|
||||
4. **JWT over session cookies:** Cross-page auth without server-side session state. Token survives page navigations and ops-portal restarts (persistent JWT_SECRET in .env).
|
||||
@@ -0,0 +1,39 @@
|
||||
# Ops Portal Changelog
|
||||
|
||||
## 2026-07-20 — Major audit and fix session
|
||||
|
||||
### Fixed
|
||||
- **`/api/health` returning 404:** Caddy `handle_path` was stripping the path → changed to `handle`, port corrected to 8090
|
||||
- **`/api/servers` returning null:** Server list now returns all 5 servers with live ping health
|
||||
- **Server IPs stale:** app1-bu updated to 5.161.225.131, legacy entries removed
|
||||
- **Page titles inconsistent:** All 11 pages standardized to "X — IT Pro Partner Ops" format
|
||||
- **Missing nav icons:** All 11 nav items now have SVG icons
|
||||
- **FleetTracker360 missing from nav:** Added to navigation with car icon
|
||||
- **Backups page no data:** `s3_buckets` → `s3_backups` key fix
|
||||
- **FleetTracker360 page no nav:** Added ops.css, app.js, utils.js includes
|
||||
- **Network page dark sidebar:** Replaced with standard top nav bar
|
||||
- **Cache-busting broken:** All JS/CSS references now versioned with timestamps
|
||||
- **Mobile nav broken:** `.nav-links.open` CSS rule missing → hamburger menu now toggles properly on iOS/Android
|
||||
- **Auth guard race condition:** IIFE scripts replaced with DOMContentLoaded event listeners — pages now load data when user is authenticated
|
||||
- **Cost page broken:** Missing `loadData` function → defined and wired
|
||||
- **Dependency diagram 404:** File copied to static dir, link corrected
|
||||
- **Logs page mangled title:** Triple-nested `<title>` tags from sed accident → cleaned
|
||||
- **Config page scripts directory:** Now populates directory listing when clicked
|
||||
- **Services page:** Server column added showing "Core (152.53.192.33)"
|
||||
- **Dashboard auto-refresh on tab focus:** Visibility API handler added
|
||||
- **Critical service protection:** hermes, caddy, ops-portal restarts blocked via API
|
||||
|
||||
### Removed
|
||||
- Duplicate server entries: "app1 (AI Stack)" and "Docker Box (legacy)"
|
||||
- Server count: 7 → 5 clean entries
|
||||
|
||||
### Changed
|
||||
- Admin credentials: germaine/itpp2026! → ippadmin (password → Vaultwarden)
|
||||
- JWT_SECRET made persistent in /root/.hermes/.env to survive restarts
|
||||
- Collector timeout: 20s → 90s to handle 94K-file S3 bucket scanning
|
||||
|
||||
## Jul 17, 2026 — Initial deployment
|
||||
- Ops portal deployed on Core as FastAPI app
|
||||
- Caddy reverse proxy configured
|
||||
- 10 HTML pages created
|
||||
- Ops collector built for S3, system health, server status
|
||||
@@ -0,0 +1,55 @@
|
||||
# Ops Portal — ops.itpropartner.com
|
||||
|
||||
## Architecture
|
||||
- **Server:** Core (152.53.192.33, netcup RS 2000)
|
||||
- **Backend:** FastAPI at `/opt/ops-portal/server.py` (port 8090)
|
||||
- **Proxy:** Caddy → reverse_proxy to 127.0.0.1:8090
|
||||
- **Static files:** `/opt/ops-portal/static/` — 11 HTML pages, ops.css, app.js, utils.js
|
||||
- **Auth:** JWT via `POST /api/auth/login`, token in localStorage
|
||||
- **Data:** `/var/www/ops/data/ops-status.json` (5-min collector refresh)
|
||||
- **Collector:** `/root/.hermes/scripts/ops-data-collector.py` — Wazuh, Bitdefender, S3, UISP, system health
|
||||
- **Systemd:** `ops-portal.service`, env from `/root/.hermes/.env`
|
||||
- **Credentials:** ippadmin (password → Vaultwarden / `~/.hermes/.env`)
|
||||
|
||||
## Pages (11 total)
|
||||
| Page | Path | Description |
|
||||
|------|------|-------------|
|
||||
| Dashboard | / | System health, widgets, audit log |
|
||||
| Services | /services.html | Systemd service control, audit log, server column |
|
||||
| Servers | /servers.html | 5 servers with ping health |
|
||||
| Network | /network.html | UISP data (44 sites, 90 devices), DNS zones |
|
||||
| Backups | /backups.html | S3 bucket status (6 buckets) |
|
||||
| FleetTracker | /fleettracker360.html | Traccar device tracking |
|
||||
| Cron Jobs | /cron.html | Hermes cron jobs with expandable scripts |
|
||||
| Config | /config.html | Active configs, /root/.hermes/scripts/ listing |
|
||||
| Logs | /logs.html | Aggregated log viewer |
|
||||
| Audit | /audit.html | Full audit trail |
|
||||
| Costs | /cost.html | API cost tracking by model |
|
||||
|
||||
## API Endpoints
|
||||
| Method | Path | Auth | Description |
|
||||
|--------|------|------|-------------|
|
||||
| POST | /api/auth/login | No | JWT authentication |
|
||||
| GET | /api/health | No | Health check, DB status |
|
||||
| GET | /api/status | JWT | Full dashboard data (17 sections) |
|
||||
| GET | /api/servers | JWT | Server list with IPs |
|
||||
| GET | /api/servers/health | JWT | Ping health (all 7 LIVE) |
|
||||
| GET | /api/audit-log?limit=N | JWT | Audit trail entries |
|
||||
| GET | /api/ft360/status | JWT | FleetTracker device data |
|
||||
|
||||
## Critical Services (API restart blocked)
|
||||
hermes, hermes-assistant, hermes-browser, caddy, ops-portal, mysql-tunnel
|
||||
|
||||
## Dashboard Widgets
|
||||
- System Health — Core metrics (jobs, disk, memory, S3, APIs)
|
||||
- Wazuh Security — agent count, alerts
|
||||
- Bitdefender GravityZone — 9 managed endpoints
|
||||
- Alerts and Notifications — DR issues, backup failures, cron errors
|
||||
- Quick Actions — Restart Ops Portal
|
||||
|
||||
## Recovery
|
||||
```
|
||||
systemctl restart ops-portal
|
||||
systemctl reload caddy
|
||||
python3 /root/.hermes/scripts/ops-data-collector.py
|
||||
```
|
||||
@@ -0,0 +1,68 @@
|
||||
# Project Log — All Completed Projects
|
||||
|
||||
## 2026-07-20
|
||||
|
||||
### Ops Portal Audit and Overhaul
|
||||
- Full audit of all 11 pages, 7 API endpoints, and 5 dashboard widgets
|
||||
- Fixed 15 bugs: auth guards, cache-busting, mobile nav, page titles, missing icons, data keys
|
||||
- Added 3 new widgets: Wazuh Security, Bitdefender GravityZone, Alerts and Notifications
|
||||
- Standardized credentials: ippadmin (password → Vaultwarden / `~/.hermes/.env`)
|
||||
- Added critical service protection (hermes/caddy/ops-portal restart blocked via API)
|
||||
- Server list cleaned up (7→5), dependency diagram fixed, config page scripts listing
|
||||
|
||||
### Backup-Restore Enhancements
|
||||
- Added manual backup with domain dropdown and note field
|
||||
- Added restore history logging with formatted 4-column table
|
||||
- Fixed Caddy routing and timeouts (restore was returning 404 via proxy)
|
||||
- Fixed mobile toggle on domain expansion cards
|
||||
- 9 WordPress sites under daily backup (1 AM and 1 PM)
|
||||
|
||||
### Docs Written
|
||||
- `/root/projects/ops-portal/README.md` + `CHANGELOG.md`
|
||||
- `/root/projects/backup-restore/README.md` + `CHANGELOG.md`
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-17 — Backup-Restore Initial Deployment
|
||||
- Flask backup/restore app deployed on app3 (152.53.241.111)
|
||||
- Daily snapshots scheduled at 1 AM and 1 PM
|
||||
- Caddy reverse proxy from my.itpropartner.com
|
||||
- 9 WordPress sites configured
|
||||
|
||||
## 2026-07-21 — Home Lab Consolidation
|
||||
|
||||
### Proxmox Migration
|
||||
- vm-host-02 VMs migrated/destroyed: graylog, zabbix, fog, Ubuntu-Server
|
||||
- vm-host-01 now hosts: docker-host-01, adguard-home
|
||||
- vm-host-02 cleared for GPU installation (RTX 3090 pending verification)
|
||||
- QNAP NFS shared storage created (2TB pool, mounted on both Proxmox hosts)
|
||||
|
||||
### DNS Infrastructure
|
||||
- Technitium DNS deployed on app2 (dns1.itpropartner.com)
|
||||
- DoH upstreams: Quad9, Cloudflare, Google
|
||||
- Home DNS chain: docker-host-01 AdGuard → dns1 Technitium → vm-host-01 AdGuard
|
||||
- Firewall locked: port 53 restricted to 76.195.7.60
|
||||
|
||||
### Twilio
|
||||
- Toll-free number verification submitted for IT Pro Partner
|
||||
- Use case: customer notifications, appointment reminders, IVR
|
||||
|
||||
### Mattermost
|
||||
- Branding configured: IT Pro Partner NOC
|
||||
- Channel structure designed (13 channels)
|
||||
- Mobile push investigation: HPNS required for background notifications
|
||||
|
||||
### Gift-a-Roast
|
||||
- Domain giftaroast.com purchased, DNS live (Cloudflare → app1)
|
||||
- ElevenLabs TTS + Deepgram STT keys verified
|
||||
- Architecture: Twilio Voice → STT → AI → TTS → caller
|
||||
|
||||
### Uptime Kuma
|
||||
- Backed up (361MB, 25 monitors), updated to latest
|
||||
|
||||
### IRS
|
||||
- Name change letter drafted: CG Premier Transport LLC → IT Pro Partner LLC
|
||||
- Georgia Secretary of State filing confirmed
|
||||
|
||||
### Skills Updated
|
||||
- 10 skills patched: docker-service-deployment, home-lab-*, server-architecture-plan, twilio-10dlc, vaultwarden-management, voip-portal, hudu, syncromsp, recurring-information-scout
|
||||
@@ -0,0 +1,10 @@
|
||||
# IT Pro Partner / GMB Projects
|
||||
|
||||
Master index of all internal and client projects.
|
||||
|
||||
- **[Debt Recovery Experts (DRE)](./dre/README.md)**: A specialized debt recovery platform focused on Texas mechanics liens and B2B collections. Handles client intake, compliance with Texas law, fee structures, and deliverables. (IN DEVELOPMENT)
|
||||
- **[Shark Attack Fantasy League](./shark-game/README.md)**: A fantasy league game where players draft coastal regions and earn points based on real-world shark sightings, bites, and fatalities. (IN DEVELOPMENT)
|
||||
- **[IT Pro Partner Infrastructure](./itpp-infra/README.md)**: Management of IT Pro Partner server infrastructure, backups, security baselines, and disaster recovery plans. (LIVE)
|
||||
- **[OSINT People Search](./osint-tool/README.md)**: An Open Source Intelligence tool for performing background checks, compiling data broker reports, and removing personal information. (IN DEVELOPMENT)
|
||||
- **[Apex Track Experience](./apex-track/README.md)**: Website and operations platform for track day experiences, vehicle registrations, and event logistics. (PLANNED)
|
||||
- **[BoxPilot Logistics](./boxpilot/README.md)**: Logistics and shipping management platform. (PLANNED)
|
||||
@@ -0,0 +1,64 @@
|
||||
# Super Search — Cloudflare Bypass
|
||||
|
||||
**Added:** July 21, 2026
|
||||
**Version:** 2.1.0
|
||||
|
||||
## Extraction Chain
|
||||
|
||||
| Tier | Provider | What it handles | Fallback Trigger |
|
||||
|---|---|---|---|
|
||||
| 1 | Trafilatura | Normal sites | Error OR CF challenge detected |
|
||||
| 2 | Browserless Chrome | CF-protected sites | Chrome render + Trafilatura |
|
||||
| 3 | Firecrawl | Everything else | API-based extraction |
|
||||
|
||||
## CF Detection
|
||||
Nine detection markers for caught challenge pages (from Hound's code + additional):
|
||||
- cf-turnstile, challenges.cloudflare.com/turnstile
|
||||
- cf_chl_opt, __cf_chl
|
||||
- cf-browser-verification, challenge-platform, cf-mitigated
|
||||
- "Checking your browser", "Just a moment"
|
||||
|
||||
## Infrastructure
|
||||
- Browserless Chrome on app1 (152.53.36.131), port 3005
|
||||
- Caddy proxy: app1:3006 → localhost:3005
|
||||
- Firewall: only Core (152.53.192.33) can reach port 3006
|
||||
- Super Search: `/root/docker/super-search/server.py`
|
||||
|
||||
## Verify
|
||||
```bash
|
||||
# Test CF bypass
|
||||
cd /root/docker/super-search && source venv/bin/activate
|
||||
python3 -c "
|
||||
from server import _extract_one
|
||||
import asyncio
|
||||
r = asyncio.run(_extract_one('https://nowsecure.nl'))
|
||||
print(r['provider']) # Should be 'trafilatura' or 'browserless'
|
||||
"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## v2.1 Features (Added July 21, 2026)
|
||||
|
||||
### 13 Tools
|
||||
| # | Tool | Description |
|
||||
|---|---|---|
|
||||
| 1-10 | Original 10 | Search, extract, lookup, suggest, images |
|
||||
| 11 | `web_search_fast` | Parallel racing: all providers fire simultaneously |
|
||||
| 12 | `screenshot` | Browserless Chrome → base64 PNG |
|
||||
| 13 | `circuit_status` | Provider health states (closed/open/half-open) |
|
||||
|
||||
### Circuit Breaker
|
||||
- 8 provider circuits: 3 failures → open for 60s
|
||||
- Prevents hammering dead providers
|
||||
- Auto-recovers when provider comes back
|
||||
|
||||
### Parallel Racing
|
||||
- `web_search_fast`: SearXNG ∥ Exa ∥ DuckDuckGo ∥ Wikipedia
|
||||
- First successful result wins — others cancelled
|
||||
- Typically 2-3x faster than sequential fallback
|
||||
|
||||
### Screenshot
|
||||
- Browserless Chrome on port 3006 (Caddy HTTP proxy)
|
||||
- Full-page or viewport capture
|
||||
- Base64-encoded PNG in JSON response
|
||||
@@ -0,0 +1,8 @@
|
||||
# ITPP Standards — CHANGELOG
|
||||
|
||||
## 2026-08-09 — Initial
|
||||
|
||||
- Created repository with documentation templates and CI workflows.
|
||||
- Added README template, CHANGELOG template, DESIGN.md template, MkDocs config template.
|
||||
- Added Gitea Actions workflows: docs-check (lint + link check + spell check), docs-publish (aggregated site rebuild).
|
||||
- Added canonical .gitignore and .markdownlint.json.
|
||||
@@ -0,0 +1,40 @@
|
||||
# itpp-standards
|
||||
|
||||
|
||||
> **Owner:** Germaine | **Status:** LIVE
|
||||
> **Last Updated:** 2026-08-09
|
||||
|
||||
Canonical documentation standards, templates, and CI workflows for all IT Pro Partner repositories. Use this repo as a Gitea template when creating new projects, or copy individual templates as needed.
|
||||
|
||||
## What's Inside
|
||||
|
||||
- `templates/` — README, CHANGELOG, DESIGN.md, and MkDocs config templates for new projects
|
||||
- `templates/gitea-ci/` — Reusable Gitea Actions workflows (docs lint, link check, spell check)
|
||||
- `.markdownlint.json` — Standard Markdown linting rules for all ITPP repos
|
||||
- `.gitignore` — Canonical `.gitignore` for Python, Node.js, secrets, and build artifacts
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Option 1: Use as Gitea template
|
||||
# In Gitea UI: New Repository → From Template: itpp-standards
|
||||
|
||||
# Option 2: Copy templates into existing repo
|
||||
git clone https://git.itpropartner.com/ippadmin/<your-repo>.git
|
||||
cp /path/to/itpp-standards/templates/repo-readme.md <your-repo>/README.md
|
||||
cp /path/to/itpp-standards/templates/repo-changelog.md <your-repo>/CHANGELOG.md
|
||||
cp /path/to/itpp-standards/.gitignore <your-repo>/
|
||||
cp /path/to/itpp-standards/templates/gitea-ci/docs-check.yml <your-repo>/.gitea/workflows/
|
||||
```
|
||||
|
||||
## Standards
|
||||
|
||||
- **README.md** — Mandatory. Every repo must have one. Minimum 400 bytes. Follow the template.
|
||||
- **CHANGELOG.md** — Mandatory. Reverse-chronological, user-facing, one line per change.
|
||||
- **DESIGN.md** — When the project has a public API or multiple consumers.
|
||||
- **.gitea/workflows/docs-check.yml** — Recommended. Lints Markdown and checks links on push.
|
||||
|
||||
## Related
|
||||
|
||||
- [itpp-infrastructure](https://git.itpropartner.com/ippadmin/itpp-infrastructure) — server inventory, DNS
|
||||
- [itpp-docs](https://git.itpropartner.com/ippadmin/itpp-docs) — aggregated docs site
|
||||
@@ -0,0 +1,7 @@
|
||||
# LaunchCheck — CHANGELOG
|
||||
|
||||
## 2026-07-25 — Project Inception
|
||||
|
||||
- Spun startup validation into a separate product from IntelSight.
|
||||
- Created competitive analysis and business proposal documentation.
|
||||
- Defined two-audience strategy: startup founders (LaunchCheck) vs enterprise (IntelSight).
|
||||
@@ -0,0 +1,670 @@
|
||||
# Competitive Analysis: IntelSight & LaunchCheck
|
||||
|
||||
> **Last Updated:** July 2026
|
||||
> **Products Analyzed:** IntelSight (enterprise competitive intelligence) + LaunchCheck (startup validation)
|
||||
> **Shared Platform:** Super Search v2 + Premium APIs + LLM Synthesis
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Executive Summary](#executive-summary)
|
||||
2. [Market Context](#market-context)
|
||||
3. [IntelSight: Competitive Landscape](#intelsight-competitive-landscape)
|
||||
- [Direct Competitors](#intelsight-direct-competitors)
|
||||
- [Comparison Table: IntelSight vs Top 5](#intelsight-comparison-table)
|
||||
- [IntelSight Competitive Positioning](#intelsight-competitive-positioning)
|
||||
4. [LaunchCheck: Competitive Landscape](#launchcheck-competitive-landscape)
|
||||
- [Direct Competitors](#launchcheck-direct-competitors)
|
||||
- [Adjacent Competitors](#launchcheck-adjacent-competitors)
|
||||
- [Comparison Table: LaunchCheck vs Top 6](#launchcheck-comparison-table)
|
||||
- [LaunchCheck Competitive Positioning](#launchcheck-competitive-positioning)
|
||||
5. [Our Unfair Advantages](#our-unfair-advantages)
|
||||
6. [Why Customers Choose Us](#why-customers-choose-us)
|
||||
7. [Threat Assessment & Risk Mitigation](#threat-assessment--risk-mitigation)
|
||||
8. [Strategic Recommendations](#strategic-recommendations)
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
**IntelSight** and **LaunchCheck** operate in two distinct but overlapping markets: enterprise competitive intelligence ($1.46B by 2030, ~20% CAGR per Mordor Intelligence) and startup validation (a fragmented, emerging market with no clear leader). Both products share the same infrastructure backbone — Super Search v2, premium APIs (Crunchbase, Hunter.io), and LLM synthesis via deepseek-v4-pro — giving them structural cost advantages that no single competitor can match.
|
||||
|
||||
**Key finding:** IntelSight competes against incumbents charging 5–20× more (Crayon $20K–$40K/yr, Klue $20K–$40K/yr) while offering uniquely deep OSINT enrichment and LLM-generated strategic content (SWOT reports, battle cards, war room dashboards) they don't. LaunchCheck has **no direct competitor** in the $49/mo "investor-ready validation report" niche — the market is dominated by either enterprise platforms (PitchBook $12K+/yr, CB Insights $60K+/yr) or shallow AI-opinion tools ($5–$129 one-off) that lack source-linked evidence.
|
||||
|
||||
**The platform moat:** Both products benefit from shared infrastructure, enabling a founder-to-enterprise funnel no competitor can replicate. A founder who validates with LaunchCheck today becomes a natural IntelSight customer when their company reaches $2M+ revenue.
|
||||
|
||||
---
|
||||
|
||||
## Market Context
|
||||
|
||||
### The Competitive Intelligence Market
|
||||
|
||||
The CI tools market is projected to reach **$1.46 billion by 2030**, growing at nearly 20% annually (Mordor Intelligence). Gartner's 2025 Market Guide reclassified the category from "Tools" to "Platforms," signaling maturation. Key dynamics:
|
||||
|
||||
- **68% of B2B deals** now involve at least one direct competitor (Crayon 2025 State of CI)
|
||||
- **76% YoY growth** in AI adoption within CI teams (Competitive Intelligence Alliance)
|
||||
- **40% of tech/service providers** predicted to use commercial CI tools by 2026 (Gartner)
|
||||
- Average CI platform pricing has **risen 15–25% YoY** as incumbents add AI features
|
||||
- Market is consolidating: Semrush acquired Kompyte ($10M), Meltwater acquired Owler, ZoomInfo acquired Comparably
|
||||
|
||||
### The Startup Validation Market
|
||||
|
||||
This is an **emerging, fragmented market** with no clear category leader. The rise of "vibe coding" (shipping MVPs over a weekend) has made validation more urgent — 43% of startups fail from poor product-market fit (CB Insights). Current options fall into three buckets:
|
||||
|
||||
| Type | Examples | Price Range | Core Limitation |
|
||||
|---|---|---|---|
|
||||
| **AI-Opinion Tools** | ValidatorAI, VenturusAI, ChatGPT | Free – $49/mo | LLM training data only; no live sources; can't verify claims |
|
||||
| **Demand/Pain Evidence** | PainMap, WorthBuild, Trend Seeker | $5 – $199 one-off | Only answers "is there pain?" — doesn't grade business viability |
|
||||
| **Enterprise Platforms** | PitchBook, CB Insights, Crunchbase | $588 – $70K+/yr | Built for investors, not founders; no validation framework; no deliverables |
|
||||
|
||||
**LaunchCheck's position:** The only tool combining live-sourced evidence with a structured validation framework and investor-ready deliverables at a founder-accessible price ($49/mo).
|
||||
|
||||
---
|
||||
|
||||
## IntelSight: Competitive Landscape
|
||||
|
||||
### IntelSight Direct Competitors
|
||||
|
||||
#### 1. Crayon — The Incumbent Leader
|
||||
|
||||
**Founded:** 2014 | **Funding:** ~$40M | **HQ:** Boston, MA
|
||||
|
||||
| Dimension | Crayon | IntelSight |
|
||||
|---|---|---|
|
||||
| **Pricing** | ~$15K–$100K+/yr (quote-based) | $2,388–$17,988/yr (transparent) |
|
||||
| **Tiers** | Essentials ($15K–$25K), Professional ($25K–$60K), Enterprise ($60K+) | Pro ($199/mo), Growth ($499/mo), Enterprise ($1,499+/mo) |
|
||||
| **Core Capability** | Competitor monitoring + battle cards + win/loss | SEO monitoring + review sentiment + Crunchbase + OSINT + battle cards + SWOT + war room |
|
||||
| **Battle Cards** | Dynamic, automated | LLM-generated, source-linked |
|
||||
| **OSINT/Enrichment** | Web monitoring, social media | 7-provider search + Hunter.io + Crunchbase + CourtListener + OpenCorporates |
|
||||
| **AI Features** | AI classification, Win Story Insights | deepseek-v4-pro synthesis across all data sources |
|
||||
| **CRM Integration** | Salesforce, HubSpot | Planned (API-first architecture) |
|
||||
| **Target** | Enterprise CI programs | Mid-market ops directors, marketing VPs, strategy teams |
|
||||
|
||||
**Crayon Strengths:**
|
||||
- Market leader with G2 leader status and 3,000+ customers
|
||||
- Mature win/loss analysis module
|
||||
- Deep Salesforce/HubSpot integrations
|
||||
- Strong brand and analyst recognition (Forrester, Gartner)
|
||||
|
||||
**Crayon Weaknesses:**
|
||||
- **Prohibitively expensive** for mid-market ($15K minimum ACV)
|
||||
- No transparent pricing — all custom quotes, long sales cycles
|
||||
- No OSINT enrichment beyond web/social monitoring
|
||||
- No Crunchbase or Hunter.io integration
|
||||
- Battle cards require significant manual curation; AI features lag behind agentic competitors
|
||||
- Multi-year contracts with 90-day auto-renewal clauses
|
||||
- No multi-tenant architecture (single organization only)
|
||||
|
||||
**Why IntelSight Wins Against Crayon:**
|
||||
- **5–10× price advantage** with transparent, predictable pricing
|
||||
- **OSINT depth** no CI platform matches (7 search providers + CourtListener + OpenCorporates)
|
||||
- **LLM-generated strategic content** (SWOT reports, war room dashboards) that Crayon requires manual creation for
|
||||
- **Multi-tenant architecture** for agencies and consultancies — Crayon is single-org only
|
||||
- **No long-term lock-in** — monthly billing with no multi-year contracts
|
||||
|
||||
---
|
||||
|
||||
#### 2. Klue — The Battle Card Specialist
|
||||
|
||||
**Founded:** 2015 | **Funding:** $81M (Series B, Tiger Global + Salesforce Ventures) | **HQ:** Vancouver, BC
|
||||
|
||||
| Dimension | Klue | IntelSight |
|
||||
|---|---|---|
|
||||
| **Pricing** | ~$20K–$40K+/yr (quote-based; no public pricing) | $2,388–$17,988/yr (transparent) |
|
||||
| **Core Capability** | CI + Win-Loss analysis, Compete Agent (agentic AI) | Full-spectrum CI + OSINT + strategic deliverables |
|
||||
| **Battle Cards** | Industry-leading (9.5/10 G2); 10 auto-generated content categories | LLM-generated from multi-source intelligence |
|
||||
| **Win/Loss** | Full module (AI interviewer, expert interviews, transcript analysis) | Not yet available (roadmap) |
|
||||
| **OSINT/Enrichment** | Web monitoring, Gong/Teams call analysis, internal docs | 7-provider search + Hunter.io + Crunchbase + CourtListener + OpenCorporates |
|
||||
| **CRM Integration** | Salesforce, Slack, Gong, Microsoft 365, Teams | Planned (API-first) |
|
||||
| **Target** | Mid-market to enterprise B2B with dedicated CI/PMM teams | Mid-market ops, strategy, marketing — no dedicated CI headcount required |
|
||||
|
||||
**Klue Strengths:**
|
||||
- **Compete Agent** (launched July 2025) — the strongest agentic AI in CI, with deal-specific coaching
|
||||
- **Win-Loss module** is best-in-class; acquired DoubleCheck Research, Goldpan.ai, Ignition
|
||||
- **250,000+ users** across 1,000+ competitive programs
|
||||
- Blue-chip customers: Adobe, Shopify, Zendesk, Atlassian, Salesforce, Cisco, Dell, HubSpot
|
||||
- G2 leader in 4 categories; Forrester Strong Performer
|
||||
- Strong community (Compete Network)
|
||||
|
||||
**Klue Weaknesses:**
|
||||
- **No public pricing** — all terms require demo and custom quote
|
||||
- **Requires dedicated CI/PMM professional** — not self-serve; heavy platform management burden
|
||||
- **No OSINT depth** — web monitoring only; no Crunchbase, Hunter.io, CourtListener
|
||||
- **Navigation difficulties** when densely populated with data
|
||||
- **Annual contracts only** with 90-day auto-renewal
|
||||
- **No free trial** or free tier
|
||||
- **No multi-tenant** architecture
|
||||
- Win/Loss module is a separate product, not included in base CI
|
||||
|
||||
**Why IntelSight Wins Against Klue:**
|
||||
- **8–16× cheaper** with fully transparent pricing
|
||||
- **No dedicated CI headcount required** — IntelSight is designed for ops directors and strategy teams who can't justify a full-time CI role
|
||||
- **OSINT breadth** Klue cannot touch (public records, corporate registries, court documents)
|
||||
- **Hunter.io email discovery** — Klue has no equivalent
|
||||
- **Multi-tenant** for agencies holding multiple client competitive landscapes
|
||||
- **Strategic deliverables** (SWOT, war room) that go beyond Klue's sales-focused battle cards
|
||||
|
||||
---
|
||||
|
||||
#### 3. SEMrush + Kompyte — The Digital Marketing Giant
|
||||
|
||||
**Founded:** 2008 (SEMrush), 2014 (Kompyte, acquired 2022 for ~$10M) | **Public:** NYSE: SEMR
|
||||
|
||||
| Dimension | SEMrush + Kompyte | IntelSight |
|
||||
|---|---|---|
|
||||
| **Pricing** | SEMrush: $117–$456/mo; Kompyte: from $300/yr | $199–$1,499+/mo |
|
||||
| **Core Capability** | SEO, PPC, content marketing + basic CI via Kompyte | Purpose-built CI + OSINT + strategic intelligence |
|
||||
| **Competitive Intel** | SEO competitive analysis (keywords, backlinks, traffic); Kompyte adds battle cards and web monitoring | Full CI spectrum: SEO + reviews + Crunchbase + OSINT + LLM synthesis |
|
||||
| **Battle Cards** | Yes (via Kompyte), CRM-integrated | LLM-generated, source-linked |
|
||||
| **OSINT/Enrichment** | None beyond web monitoring | Full OSINT stack: 7 providers + Crunchbase + Hunter.io |
|
||||
| **Target** | Digital marketers, SEO agencies | CI and strategy professionals |
|
||||
|
||||
**SEMrush + Kompyte Strengths:**
|
||||
- **Best-in-class SEO data** (43 trillion backlinks, 25 billion keywords)
|
||||
- Public company with massive scale (108,000+ paying customers)
|
||||
- Kompyte adds affordable CI ($300/yr starting) with CRM-integrated battle cards
|
||||
- Strong G2 ratings (4.5/5, 2,200+ reviews for SEMrush)
|
||||
- AI features advancing rapidly (Copilot, content generation)
|
||||
|
||||
**SEMrush + Kompyte Weaknesses:**
|
||||
- **CI is an add-on, not the core product** — CI features are fragmented across .Trends, Kompyte, and Market Explorer
|
||||
- **No Crunchbase integration** for funding/market data
|
||||
- **No OSINT enrichment** beyond digital presence
|
||||
- Kompyte is a small side business for Semrush ($10M acquisition vs $376M annual revenue)
|
||||
- Kompyte missing strategy/product/market intelligence use cases (per Contify analysis)
|
||||
- **No review sentiment analysis**
|
||||
- **No SWOT reports** or war room dashboards
|
||||
|
||||
**Why IntelSight Wins Against SEMrush + Kompyte:**
|
||||
- **Purpose-built CI** vs. SEO tool with CI bolted on
|
||||
- **OSINT depth** — SEMrush knows digital marketing, IntelSight knows company intelligence (funding, reviews, legal, corporate structure)
|
||||
- **Unified platform** — single dashboard vs. fragmented SEMrush + Kompyte experience
|
||||
- **Crunchbase integration** — critical funding/market context SEMrush lacks
|
||||
- **SWOT + War Room** — strategic deliverables SEMrush doesn't produce
|
||||
|
||||
---
|
||||
|
||||
#### 4. SimilarWeb — The Traffic Intelligence Specialist
|
||||
|
||||
**Founded:** 2007 | **Public:** NYSE: SMWB | **HQ:** Tel Aviv, Israel
|
||||
|
||||
| Dimension | SimilarWeb | IntelSight |
|
||||
|---|---|---|
|
||||
| **Pricing** | Starter $149/mo, Professional $399/mo, Enterprise ~$16K+/yr | Pro $199/mo, Growth $499/mo, Enterprise $1,499+/mo |
|
||||
| **Core Capability** | Website traffic estimation + digital competitive analysis | Full-spectrum CI + OSINT + strategic intelligence |
|
||||
| **CI Depth** | Traffic sources, audience demographics, engagement metrics | SEO + reviews + funding + OSINT + email discovery + LLM synthesis |
|
||||
| **Battle Cards** | No | Yes (LLM-generated) |
|
||||
| **OSINT/Enrichment** | No | Full stack |
|
||||
| **Target** | Marketing teams, investors, media buyers | CI and strategy professionals |
|
||||
|
||||
**SimilarWeb Strengths:**
|
||||
- **Unmatched traffic estimation** — no competitor matches their traffic data depth
|
||||
- Multiple product lines (Web, Sales, App, Shopper Intelligence)
|
||||
- Public company with institutional credibility
|
||||
- Strong for investor due diligence
|
||||
|
||||
**SimilarWeb Weaknesses:**
|
||||
- **One-dimensional** — traffic data only; no funding, reviews, OSINT, email discovery
|
||||
- **No battle cards** or sales enablement features
|
||||
- **No SWOT** or strategic deliverables
|
||||
- Enterprise pricing opaque and expensive ($16K+/yr)
|
||||
- Free tier extremely limited (5 results, 1 month data)
|
||||
|
||||
**Why IntelSight Wins Against SimilarWeb:**
|
||||
- **Multi-dimensional intelligence** — traffic is one of many signals IntelSight synthesizes
|
||||
- **Actionable deliverables** (battle cards, SWOT, war room) vs. raw traffic data
|
||||
- **Crunchbase + Hunter.io** integration for company/funding intelligence
|
||||
- **LLM synthesis** turns raw data into strategic insight
|
||||
|
||||
---
|
||||
|
||||
#### 5. Owler (Meltwater) — The News Aggregator
|
||||
|
||||
**Founded:** 2011 | **Acquired by Meltwater (2021)** | **HQ:** San Mateo, CA
|
||||
|
||||
| Dimension | Owler | IntelSight |
|
||||
|---|---|---|
|
||||
| **Pricing** | Community (Free), Pro ($39/mo annual), Enterprise (custom) | $199–$1,499+/mo |
|
||||
| **Core Capability** | Company news aggregation + basic competitive insights | Full-spectrum CI + OSINT + strategic intelligence |
|
||||
| **CI Depth** | News alerts, company profiles, competitor graph | 7-provider search + SEO + reviews + Crunchbase + OSINT + email + LLM |
|
||||
| **Battle Cards** | No | Yes |
|
||||
| **OSINT/Enrichment** | Basic company data | Full OSINT stack |
|
||||
|
||||
**Owler Strengths:**
|
||||
- **Free tier** with real value — good for basic company monitoring
|
||||
- Simple, accessible UX
|
||||
- Meltwater's media intelligence ecosystem
|
||||
- AI-powered outreach suggestions (New Owler AI)
|
||||
|
||||
**Owler Weaknesses:**
|
||||
- **Very shallow CI** — mostly news aggregation; no SEO, reviews, funding, OSINT depth
|
||||
- No battle cards, SWOT reports, or war room dashboards
|
||||
- Limited free tier features; Pro at $39/mo still very basic
|
||||
- UI criticized as difficult to use
|
||||
- Limitations on number of tracked accounts
|
||||
|
||||
**Why IntelSight Wins Against Owler:**
|
||||
- Owler is fundamentally a different product category — news alerts vs. comprehensive CI
|
||||
- IntelSight does everything Owler does plus 10× more depth
|
||||
- Owler's Pro tier at $39/mo validates that the market wants affordable CI but can't get depth at that price — IntelSight occupies the sweet spot between Owler's shallowness and Crayon/Klue's enterprise pricing
|
||||
|
||||
---
|
||||
|
||||
### IntelSight Comparison Table
|
||||
|
||||
| Feature | **IntelSight** | Crayon | Klue | SEMrush+Kompyte | SimilarWeb | Owler |
|
||||
|---|---|---|---|---|---|---|
|
||||
| **Starting Price (annual)** | **$2,388/yr** | ~$15,000/yr | ~$20,000/yr | $1,404/yr (SEMrush) + $300/yr (Kompyte) | $1,500/yr (Starter) | $468/yr (Pro) |
|
||||
| **Mid-Tier Price** | **$5,988/yr** | ~$30,000/yr | ~$30,000/yr | $2,978/yr (Pro+) | $4,788/yr (Professional) | — |
|
||||
| **Enterprise** | **$17,988+/yr** | $60K–$100K+/yr | $40K+/yr | $5,468/yr (Advanced) | $16K+/yr | Custom |
|
||||
| **Transparent Pricing** | ✅ Yes | ❌ Quote only | ❌ Quote only | ✅ Yes | ⚠️ Partial | ⚠️ Partial |
|
||||
| **Multi-Tenant** | ✅ Yes | ❌ No | ❌ No | ⚠️ Agency add-on | ❌ No | ❌ No |
|
||||
| **SEO Monitoring** | ✅ | ❌ | ❌ | ✅ (Best-in-class) | ⚠️ Traffic only | ❌ |
|
||||
| **Review Sentiment** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
||||
| **Crunchbase Integration** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
||||
| **Hunter.io Email Discovery** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
||||
| **OSINT Enrichment** | ✅ Full (7 providers + CourtListener + OpenCorporates) | ⚠️ Web only | ⚠️ Web + call transcripts | ❌ | ❌ | ⚠️ Basic |
|
||||
| **Battle Cards** | ✅ LLM-generated | ✅ Dynamic | ✅ Industry-best | ✅ CRM-integrated | ❌ | ❌ |
|
||||
| **SWOT Reports** | ✅ LLM-generated | ❌ | ❌ | ❌ | ❌ | ❌ |
|
||||
| **War Room Dashboards** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
||||
| **Win/Loss Analysis** | ❌ (Roadmap) | ✅ | ✅ Best-in-class | ⚠️ Partner (IcebergIQ) | ❌ | ❌ |
|
||||
| **CRM Integration** | ⚠️ Planned | ✅ Salesforce, HubSpot | ✅ Salesforce, Slack, Teams, Gong | ✅ Salesforce, HubSpot | ❌ | ✅ Salesforce, HubSpot |
|
||||
| **No Long-Term Contract** | ✅ Monthly | ❌ Annual minimum | ❌ Annual minimum | ✅ Monthly | ❌ Annual | ✅ Monthly |
|
||||
| **Free Trial** | ⚠️ Planned | ❌ Demo only | ❌ Demo only | ✅ 7-day | ⚠️ Limited free | ✅ Free tier |
|
||||
| **G2 Rating** | New | 4.5/5 | 4.8/5 | 4.5/5 (SEMrush) | 4.5/5 | 4.2/5 |
|
||||
|
||||
### IntelSight Competitive Positioning
|
||||
|
||||
**IntelSight occupies a unique position:** enterprise-grade competitive intelligence depth at mid-market pricing. The market is bifurcated between:
|
||||
|
||||
1. **Expensive, deep platforms** (Crayon, Klue: $20K–$100K+/yr) — require dedicated CI teams
|
||||
2. **Cheap, shallow tools** (Owler: $39/mo, free tiers) — news aggregation only
|
||||
|
||||
IntelSight sits in the **uncontested middle**: $199–$1,499/mo for depth that rivals the enterprise platforms plus unique capabilities (OSINT, Crunchbase, Hunter.io) none of them offer. The multi-tenant architecture opens an additional market (agencies, consultancies) that incumbents structurally cannot serve.
|
||||
|
||||
---
|
||||
|
||||
## LaunchCheck: Competitive Landscape
|
||||
|
||||
### LaunchCheck Direct Competitors
|
||||
|
||||
LaunchCheck's competitive landscape is unique: there is **no direct competitor** offering a complete, source-linked startup validation report with investor-ready PDFs at $49/mo. The market fragments into enterprise platforms (priced 100–1,000× higher) and shallow AI tools (priced similarly but lacking evidence). Here's the breakdown:
|
||||
|
||||
#### 1. Preuve AI — Closest Feature Competitor
|
||||
|
||||
**Founded:** 2025 | **Pricing:** Free / $29/mo | **Method:** Full viability (10 agents, 50+ live sources)
|
||||
|
||||
| Dimension | Preuve AI | LaunchCheck |
|
||||
|---|---|---|
|
||||
| **Pricing** | Free (Reality Check) / $29/mo (Full Report) | **$49/mo** |
|
||||
| **Method** | 10 AI agents across 50+ live sources | Super Search v2 (7 providers) + Crunchbase + Hunter.io + LLM synthesis |
|
||||
| **Source-Linked** | ✅ Yes — every claim linked to source | ✅ Yes — all intelligence source-linked |
|
||||
| **Competitor Mapping** | ✅ With pricing | ✅ With pricing + feature benchmarking |
|
||||
| **Market Sizing** | ✅ | ✅ |
|
||||
| **Demand/Pain Signals** | ✅ (Reddit, HN, LinkedIn, etc.) | ✅ (7-provider search) |
|
||||
| **OSINT Depth** | ⚠️ Web sources only | ✅ Web + CourtListener + OpenCorporates + Crunchbase |
|
||||
| **Investor-Ready PDF** | Report format, not investor-specific | ✅ Purpose-built investor-ready summary PDF |
|
||||
| **Feature Benchmarking** | ⚠️ Basic | ✅ Structured comparison tables |
|
||||
| **Pricing Comparisons** | ✅ | ✅ |
|
||||
| **Blind Spot Detection** | ✅ (3 pivot directions) | ✅ |
|
||||
| **Founder Contact Discovery** | ❌ | ✅ Via Hunter.io |
|
||||
|
||||
**Preuve AI Strengths:**
|
||||
- Excellent source-linking — every claim verifiable
|
||||
- 50+ live data sources per scan
|
||||
- Free tier available
|
||||
- Strong methodology (pain + demand + market size + competitors + blind spots)
|
||||
|
||||
**Preuve AI Weaknesses:**
|
||||
- One-person operation (founder-built, disclosed on their blog)
|
||||
- No Crunchbase or OSINT depth (CourtListener, OpenCorporates)
|
||||
- No email/contact discovery for competitor founders
|
||||
- Report format, not investor-ready deck
|
||||
- No multi-product strategy (validation only, no enterprise upsell path)
|
||||
|
||||
**Why LaunchCheck Wins Against Preuve AI:**
|
||||
- **OSINT depth** — CourtListener, OpenCorporates, and Crunchbase integration provide evidence Preuve can't access
|
||||
- **Hunter.io integration** — discover competitor founders' contact info
|
||||
- **Investor-ready PDFs** — formatted for pitch decks, not just research reports
|
||||
- **Platform ecosystem** — LaunchCheck users graduate to IntelSight (founder-to-enterprise funnel)
|
||||
- **Crunchbase data** — funding history, investor networks, market signals
|
||||
|
||||
---
|
||||
|
||||
#### 2. DimeADozen — The AI Business Analyst
|
||||
|
||||
**Founded:** 2023 | **Pricing:** Free / $129+ (one-off reports) | **Method:** AI + web search
|
||||
|
||||
| Dimension | DimeADozen | LaunchCheck |
|
||||
|---|---|---|
|
||||
| **Pricing** | Free (basic) / $129+ per report | **$49/mo** (unlimited reports) |
|
||||
| **Method** | AI analysis + sourced web data | Multi-source search + Crunchbase + Hunter.io + LLM |
|
||||
| **Source-Linked** | ✅ Yes (web search) | ✅ Yes |
|
||||
| **Report Format** | Long-form document | Structured validation + investor-ready PDF |
|
||||
| **OSINT** | ❌ | ✅ |
|
||||
| **Subscription Model** | ❌ One-off reports | ✅ Monthly unlimited |
|
||||
|
||||
**DimeADozen Weaknesses:**
|
||||
- Per-report pricing ($129+) — expensive if validating multiple ideas
|
||||
- No OSINT or structured company data
|
||||
- Document format, not investor deliverables
|
||||
- No Crunchbase or Hunter.io
|
||||
|
||||
**Why LaunchCheck Wins:**
|
||||
- **$49/mo unlimited** vs. $129+/report — 3× cheaper if validating even one idea per month
|
||||
- **Subscription model** matches founder behavior (iterate and re-validate)
|
||||
- **Investor-ready deliverables** built for the fundraising journey
|
||||
- **OSINT + Crunchbase** depth
|
||||
|
||||
---
|
||||
|
||||
#### 3. ValidatorAI & VenturusAI — AI-Opinion Tools
|
||||
|
||||
**ValidatorAI:** Free / $49 | **VenturusAI:** Free / paid tiers
|
||||
|
||||
These tools represent the "AI opinion" category — they run your idea through an LLM and return analysis based on training data only. No live sources, no verification.
|
||||
|
||||
**Their Weaknesses (shared):**
|
||||
- **No live data** — output is LLM training data, not real market evidence
|
||||
- **Can't verify claims** — may hallucinate competitors or market sizes
|
||||
- **No Crunchbase, OSINT, or structured data**
|
||||
- **"Confident but wrong"** problem — sounds authoritative but unverifiable
|
||||
|
||||
**Why LaunchCheck Wins:**
|
||||
- **Every claim source-linked** — founders can verify, investors trust
|
||||
- **Real-time data** from 7 search providers + premium APIs
|
||||
- **Evidence over opinion** — the fundamental differentiator
|
||||
|
||||
---
|
||||
|
||||
### LaunchCheck Adjacent Competitors
|
||||
|
||||
These aren't direct competitors (they don't offer validation reports), but they compete for the same founder wallet share and attention:
|
||||
|
||||
#### 4. Crunchbase (Free/Pro) — The Company Database
|
||||
|
||||
**Pricing:** Free / Pro $49/mo annual ($588/yr) / Business $199/mo annual ($2,388/yr)
|
||||
|
||||
**What it does:** Database of 4M+ companies with funding rounds, investors, news.
|
||||
|
||||
**Why it's NOT a LaunchCheck competitor:**
|
||||
- **Research tool, not validation tool** — you see data, you don't get analysis
|
||||
- **No competitive landscape snapshots** — you build them manually
|
||||
- **No pricing comparisons or feature benchmarking**
|
||||
- **No OSINT dossiers**
|
||||
- **No investor-ready PDFs** — raw data exports, not formatted deliverables
|
||||
- **No validation framework** — no grading, no go/no-go verdict
|
||||
|
||||
**However:** Crunchbase's free tier provides basic company lookups that some founders use for DIY research. LaunchCheck integrates Crunchbase data into a structured validation — making the data actionable rather than raw.
|
||||
|
||||
#### 5. PitchBook — The Institutional Database
|
||||
|
||||
**Pricing:** $12,000–$70,000+/yr (quote-based)
|
||||
|
||||
**What it does:** Deep private market data for VCs, PE firms, investment banks.
|
||||
|
||||
**Why it's NOT a LaunchCheck competitor:**
|
||||
- **100–1,400× more expensive** — irrelevant to solo founders
|
||||
- **No validation framework**
|
||||
- **Built for deal sourcing**, not startup validation
|
||||
- **No OSINT or competitive analysis features**
|
||||
|
||||
#### 6. CB Insights — The Research Platform
|
||||
|
||||
**Pricing:** ~$60,000+/yr (quote-based, per Vendr data)
|
||||
|
||||
**What it does:** Technology market intelligence, startup scoring, industry analysis.
|
||||
|
||||
**Why it's NOT a LaunchCheck competitor:**
|
||||
- **1,200× more expensive** — enterprise-only
|
||||
- **No founder-facing validation product**
|
||||
- **Built for corporate strategy and VC**, not pre-revenue founders
|
||||
|
||||
---
|
||||
|
||||
### LaunchCheck Comparison Table
|
||||
|
||||
| Feature | **LaunchCheck** | Preuve AI | DimeADozen | ValidatorAI | Crunchbase Pro | PitchBook |
|
||||
|---|---|---|---|---|---|---|
|
||||
| **Pricing** | **$49/mo** | Free / $29/mo | Free / $129+/report | Free / $49 | $49/mo ($588/yr) | $12K–$70K+/yr |
|
||||
| **Subscription** | ✅ Unlimited reports | ✅ Monthly | ❌ Per-report | ✅ Monthly | ✅ Annual | ✅ Annual |
|
||||
| **Live Data Sources** | ✅ 7+ providers | ✅ 50+ web sources | ✅ Web search | ❌ AI training data only | ✅ Database | ✅ Database |
|
||||
| **Source-Linked Claims** | ✅ | ✅ | ✅ | ❌ | N/A (raw data) | N/A (raw data) |
|
||||
| **Competitive Landscape** | ✅ With pricing + feature benchmarking | ✅ With pricing | ✅ | ⚠️ May hallucinate | ❌ Manual only | ✅ Manual only |
|
||||
| **OSINT Enrichment** | ✅ CourtListener + OpenCorporates | ❌ | ❌ | ❌ | ❌ | ❌ |
|
||||
| **Crunchbase Integration** | ✅ | ❌ | ❌ | ❌ | ✅ (native) | ❌ |
|
||||
| **Hunter.io Email Discovery** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
||||
| **Investor-Ready PDF** | ✅ Purpose-built | ⚠️ Report format | ⚠️ Long document | ❌ | ❌ | ❌ |
|
||||
| **Feature Benchmarking** | ✅ | ⚠️ Basic | ❌ | ❌ | ❌ | ❌ |
|
||||
| **Validation Score** | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
|
||||
| **Blind Spot Detection** | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
|
||||
| **Free Tier** | ⚠️ Planned | ✅ | ✅ | ✅ | ✅ Limited | ❌ Trial only |
|
||||
| **Path to Enterprise** | ✅ IntelSight upsell | ❌ | ❌ | ❌ | N/A | N/A |
|
||||
|
||||
### LaunchCheck Competitive Positioning
|
||||
|
||||
**LaunchCheck is the only tool that combines:**
|
||||
|
||||
1. **Live, source-linked evidence** (not AI hallucination)
|
||||
2. **Structured validation framework** (not raw data)
|
||||
3. **OSINT depth** (CourtListener, OpenCorporates — unique competitive signal)
|
||||
4. **Investor-ready deliverables** (formatted PDFs, not research reports)
|
||||
5. **Founder-accessible pricing** ($49/mo — less than most SaaS tools)
|
||||
|
||||
The market is bifurcated between tools that are cheap but unverifiable (ValidatorAI, VenturusAI, ChatGPT) and tools that are data-rich but built for investors, not founders (PitchBook, CB Insights, Crunchbase). LaunchCheck bridges this gap: evidence-grade validation at founder prices.
|
||||
|
||||
---
|
||||
|
||||
## Our Unfair Advantages
|
||||
|
||||
### 1. LLM Synthesis Across Multi-Source Intelligence
|
||||
|
||||
**What it is:** deepseek-v4-pro synthesizes intelligence from 7 search providers + Crunchbase + Hunter.io + CourtListener + OpenCorporates into structured deliverables (SWOT reports, battle cards, war room dashboards, validation reports).
|
||||
|
||||
**Why competitors can't match it:**
|
||||
- **Crayon/Klue:** AI is limited to classification and summarization of web monitoring data. They don't have multi-provider search architecture or OSINT integration.
|
||||
- **SEMrush:** AI is SEO-focused (content generation, keyword analysis). No general-purpose intelligence synthesis.
|
||||
- **Preuve AI/DimeADozen:** Use LLM for analysis but lack our data breadth (no Crunchbase, no OSINT, no Hunter.io).
|
||||
- **Owler:** Basic AI for outreach personalization, not intelligence synthesis.
|
||||
|
||||
**The moat:** LLM synthesis is only as good as the data fed into it. Our 7-provider search architecture + premium APIs creates a data moat that's expensive and time-consuming to replicate.
|
||||
|
||||
### 2. OSINT Depth No CI Platform Matches
|
||||
|
||||
**Our OSINT stack:**
|
||||
- **SearXNG** — Metasearch across dozens of engines
|
||||
- **Exa** — Semantic web search with domain filtering
|
||||
- **OpenCorporates** — Global company registry data (200M+ companies)
|
||||
- **CourtListener** — US court records and legal filings
|
||||
- **DuckDuckGo** — Privacy-preserving web search
|
||||
- **Wikipedia** — Structured encyclopedic data
|
||||
- **Firecrawl** — Deep web page extraction
|
||||
|
||||
**Why it matters:**
|
||||
- CourtListener reveals lawsuits, IP disputes, regulatory actions — competitive signals no CI platform captures
|
||||
- OpenCorporates reveals corporate structure, subsidiaries, shell companies — illuminates competitor org charts
|
||||
- This is the kind of intelligence that traditionally required expensive boutique research firms ($500–$2,000/report)
|
||||
|
||||
### 3. Lower Cost Structure — The Infrastructure Advantage
|
||||
|
||||
**Our monthly infrastructure costs:**
|
||||
|
||||
| Component | Monthly Cost |
|
||||
|---|---|
|
||||
| Super Search v2 (7 providers) | Self-hosted (netcup VPS) |
|
||||
| Crunchbase API | $49/mo |
|
||||
| Hunter.io API | $34/mo |
|
||||
| deepseek-v4-pro (LLM) | Usage-based API |
|
||||
| Netcup VPS hosting | ~$30–$50/mo |
|
||||
| **Total infrastructure** | **~$150–$200/mo** |
|
||||
|
||||
**Competitor cost structures (estimated):**
|
||||
- **Crayon/Klue:** $81M+ funding, 200–500+ employees, massive sales orgs — must charge $20K+/yr to sustain
|
||||
- **SEMrush:** Public company, 1,300+ employees, massive marketing spend
|
||||
- **PitchBook/CB Insights:** Large analyst teams, expensive data licensing, enterprise sales
|
||||
|
||||
**Our advantage:** 1–2 person operation with automated intelligence gathering can serve hundreds of customers at 10–20× lower price points while maintaining healthy margins.
|
||||
|
||||
### 4. The Founder-to-Enterprise Funnel
|
||||
|
||||
**No competitor has this:**
|
||||
|
||||
```
|
||||
LaunchCheck ($49/mo) → Solo founder validates idea
|
||||
↓
|
||||
Founder builds company, reaches $2M+ revenue
|
||||
↓
|
||||
IntelSight (Pro $199/mo) → Now needs competitive intelligence
|
||||
↓
|
||||
Company grows, needs more → IntelSight Growth ($499/mo)
|
||||
↓
|
||||
Scales to enterprise → IntelSight Enterprise ($1,499+/mo)
|
||||
```
|
||||
|
||||
**The math:**
|
||||
- A LaunchCheck user today could become a $18K+/yr IntelSight Enterprise customer in 3–5 years
|
||||
- Zero customer acquisition cost for the upsell — they're already in the platform
|
||||
- Competitors: Crayon/Klue acquire enterprise customers through expensive outbound sales ($1,000–$3,000 CAC). PitchBook/CB Insights have no founder product at all.
|
||||
|
||||
**This is a structural advantage.** No competitor has a product for pre-revenue founders AND enterprise strategy teams. The shared infrastructure makes serving both segments economically viable.
|
||||
|
||||
### 5. Multi-Tenant Architecture
|
||||
|
||||
**IntelSight is multi-tenant** — agencies, consultancies, and holding companies can manage competitive landscapes for multiple clients from a single account.
|
||||
|
||||
**Why competitors can't:**
|
||||
- **Crayon, Klue, SimilarWeb, Owler** — all single-organization
|
||||
- **SEMrush** — has agency features but not for CI specifically
|
||||
- **PitchBook, CB Insights** — single-org licensing with strict seat enforcement
|
||||
|
||||
**Market opportunity:** The 25,000+ US management consultancies and 14,000+ digital agencies need competitive intelligence for their clients. Multi-tenant IntelSight opens a market incumbents structurally cannot address.
|
||||
|
||||
### 6. Transparent, Predictable Pricing
|
||||
|
||||
Every enterprise CI competitor (Crayon, Klue, PitchBook, CB Insights) uses opaque, quote-based pricing. This creates:
|
||||
|
||||
- **Friction:** 2–6 week sales cycles for basic pricing information
|
||||
- **Distrust:** Buyers suspect they're being charged what they can pay, not what the product costs
|
||||
- **Budget barriers:** Mid-market companies can't get pricing without a sales call — many don't bother
|
||||
|
||||
**Our transparent pricing** ($199, $499, $1,499/mo) removes friction, builds trust, and captures the mid-market that incumbents underserve.
|
||||
|
||||
---
|
||||
|
||||
## Why Customers Choose Us
|
||||
|
||||
### For IntelSight vs. Enterprise CI Platforms
|
||||
|
||||
| Decision Factor | Why IntelSight |
|
||||
|---|---|
|
||||
| **Budget** | "I need CI depth but can't justify $20K+/yr for Crayon or Klue. IntelSight at $199–$499/mo fits my ops budget without board approval." |
|
||||
| **No CI Team** | "I run strategy/ops for a 50-person company. I don't have a dedicated CI person. IntelSight gives me intelligence without a platform manager." |
|
||||
| **OSINT Depth** | "I need to know about competitor lawsuits, corporate structure, and public records — not just their website changes. IntelSight finds things Crayon misses." |
|
||||
| **Multi-Client** | "I'm a consultant with 8 clients. I need one platform to manage all their competitive landscapes. Crayon would charge me 8×." |
|
||||
| **Deliverables** | "I need SWOT reports and war room dashboards for quarterly board meetings. IntelSight generates them; Crayon gives me raw alerts." |
|
||||
| **No Lock-In** | "I want monthly billing and the ability to cancel. Crayon and Klue require annual contracts." |
|
||||
|
||||
### For LaunchCheck vs. Validation Tools
|
||||
|
||||
| Decision Factor | Why LaunchCheck |
|
||||
|---|---|
|
||||
| **Evidence Over Opinion** | "I need to show my co-founder real data, not AI guesses. LaunchCheck links every claim to its source." |
|
||||
| **Investor-Ready** | "I'm pitching in two weeks and need a professional competitive landscape to include in my deck. LaunchCheck generates the PDF I need." |
|
||||
| **Affordable Iteration** | "I'm testing 3 ideas this month. At $49/mo unlimited, I can validate all of them. DimeADozen would cost me $387." |
|
||||
| **OSINT Intel** | "I want to know if my competitors have legal troubles or hidden corporate structures. No other validation tool shows me that." |
|
||||
| **Path Forward** | "I'm validating now, but when my company grows I'll need real CI. LaunchCheck's IntelSight integration means I won't outgrow the platform." |
|
||||
| **Contact Discovery** | "I need to reach competitor founders for customer discovery interviews. Hunter.io integration finds their emails." |
|
||||
|
||||
---
|
||||
|
||||
## Threat Assessment & Risk Mitigation
|
||||
|
||||
### Threat 1: Incumbents Add OSINT/API Integrations
|
||||
|
||||
**Risk:** Crayon or Klue partner with Crunchbase, add CourtListener, or build multi-provider search.
|
||||
|
||||
**Likelihood:** Low–Medium. These companies are focused on sales enablement and CRM integration depth, not intelligence breadth. Their product roadmaps center on win/loss, deal coaching, and conversation intelligence — not OSINT.
|
||||
|
||||
**Mitigation:**
|
||||
- Move fast to establish OSINT depth as a brand differentiator
|
||||
- Build proprietary intelligence models (competitor scoring algorithms) that improve with data volume
|
||||
- Lock in Crunchbase/Hunter.io integrations as platform features before incumbents notice
|
||||
|
||||
### Threat 2: SEMrush Expands CI Features
|
||||
|
||||
**Risk:** SEMrush deepens Kompyte integration and adds company intelligence features.
|
||||
|
||||
**Likelihood:** Medium. Kompyte's roadmap shows they're moving toward broader CI, and SEMrush has the resources to build. However, SEMrush's DNA is digital marketing, not corporate intelligence.
|
||||
|
||||
**Mitigation:**
|
||||
- Double down on what SEMrush can't do: OSINT, Crunchbase, court records, email discovery
|
||||
- Position IntelSight as "intelligence for strategy teams" vs. "CI for marketers"
|
||||
- Maintain pricing advantage (SEMrush Advanced + Kompyte is already $5,468+/yr)
|
||||
|
||||
### Threat 3: PitchBook or Crunchbase Launch a Founder Product
|
||||
|
||||
**Risk:** Either builds a lightweight validation tool at $50–$100/mo.
|
||||
|
||||
**Likelihood:** Low for PitchBook (institutional DNA, $618M ARR from 10,600 accounts — they optimize for whales). Medium for Crunchbase (already has Pro at $49/mo, could add validation features).
|
||||
|
||||
**Mitigation:**
|
||||
- Crunchbase Pro is a data tool, not a validation tool — we integrate them, we don't compete
|
||||
- Build proprietary validation methodology (scoring algorithms, report formats) that raw data access can't replicate
|
||||
- Establish brand as "the validation platform" before Crunchbase enters
|
||||
|
||||
### Threat 4: Free AI Tools Improve
|
||||
|
||||
**Risk:** ChatGPT/Claude with web search become good enough for DIY validation.
|
||||
|
||||
**Likelihood:** Medium-High. AI models are rapidly improving and adding search capabilities.
|
||||
|
||||
**Mitigation:**
|
||||
- **Source-linking is our moat** — even with search, raw LLM outputs aren't verifiable without structured sourcing
|
||||
- **Investor-ready formatting** — raw AI chat can't produce pitch-ready PDFs
|
||||
- **Structured methodology** — our validation framework provides consistency that ad-hoc AI queries can't
|
||||
- **OSINT depth** — CourtListener and OpenCorporates aren't indexed by general web search
|
||||
|
||||
---
|
||||
|
||||
## Strategic Recommendations
|
||||
|
||||
### Near-Term (0–6 Months)
|
||||
|
||||
1. **Ship CRM integrations** (Salesforce, HubSpot) — this is the #1 objection from Crayon/Klue evaluators
|
||||
2. **Launch free tier for LaunchCheck** — capture top-of-funnel founders before Preuve AI/DimeADozen
|
||||
3. **Publish comparison pages** on intelsight.io and launchcheck.io referencing this analysis
|
||||
4. **Build win/loss analysis** for IntelSight Enterprise — close the feature gap with Klue
|
||||
5. **Content marketing:** "Why OSINT matters in competitive intelligence" — establish category authority
|
||||
|
||||
### Medium-Term (6–12 Months)
|
||||
|
||||
6. **Launch the founder-to-enterprise funnel** — automated upsell path from LaunchCheck to IntelSight
|
||||
7. **Agency/consultancy program** for IntelSight multi-tenant — target 14,000+ digital agencies
|
||||
8. **API access** for IntelSight Enterprise — enable custom integrations and data export
|
||||
9. **Competitor scoring algorithm** — proprietary ML model trained on multi-source intelligence data
|
||||
10. **LaunchCheck investor matching** — connect validated founders with relevant VCs (Crunchbase-powered)
|
||||
|
||||
### Long-Term (12–24 Months)
|
||||
|
||||
11. **International expansion** — multi-language OSINT and local data sources (EU business registries, UK Companies House, APAC equivalents)
|
||||
12. **Data-as-a-Service** — sell enriched competitive intelligence datasets to enterprises
|
||||
13. **M&A target positioning** — build enough OSINT depth and customer base to become an attractive acquisition for a CRM or sales intelligence platform
|
||||
|
||||
---
|
||||
|
||||
## Appendix: Methodology
|
||||
|
||||
This analysis is based on:
|
||||
|
||||
- **Primary research:** Direct extraction of pricing pages, feature documentation, and product marketing from all named competitors (July 2026)
|
||||
- **Secondary sources:** G2 reviews, Gartner Peer Insights, TrustRadius, Vendr pricing data, Capterra, and industry analyst reports
|
||||
- **Market data:** Mordor Intelligence CI Tools Market Report, Crayon State of Competitive Intelligence 2025, Gartner Market Guide 2025
|
||||
- **Pricing data:** Verified via official pricing pages where available; estimated via Vendr, TrustRadius, and third-party analysis for quote-based vendors
|
||||
|
||||
Pricing is current as of July 2026 and subject to change. All competitive assessments are based on publicly available information and do not reflect proprietary knowledge of competitor roadmaps or internal strategies.
|
||||
|
||||
---
|
||||
|
||||
> **Document maintained by:** IntelSight / LaunchCheck Strategy Team
|
||||
> **Next review:** January 2027
|
||||
@@ -0,0 +1,34 @@
|
||||
# launchcheck
|
||||
|
||||
|
||||
> **Owner:** Germaine | **Status:** PLANNED
|
||||
> **Last Updated:** 2026-08-09
|
||||
> **Tagline:** Validate your idea before you build it.
|
||||
|
||||
LaunchCheck is a startup validation SaaS built for pre-revenue founders who need to understand their competitive landscape before writing code. It delivers competitive landscape reports, pricing comparisons, feature benchmarking, OSINT dossiers on key competitors, and investor-ready summary PDFs — powered by the Super Search v2 engine that drives IntelSight, IT Pro Partner's enterprise-grade intelligence platform.
|
||||
|
||||
## What's Inside
|
||||
|
||||
- `docs/` — Product documentation and research
|
||||
- `competitive-analysis.md` — Full competitive landscape for IntelSight (enterprise CI) and LaunchCheck (startup validation)
|
||||
- `launchcheck-business-proposal.md` — Business proposal with market analysis, revenue model, GTM strategy, and financial projections
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Platform:** IntelSight shared infrastructure — Super Search v2 + Premium APIs + LLM Synthesis
|
||||
- **Backend:** TBD — FastAPI or equivalent
|
||||
- **Frontend:** TBD
|
||||
- **Target Pricing:** $49/month
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
git clone https://git.itpropartner.com/ippadmin/launchcheck.git
|
||||
cd launchcheck
|
||||
# Review docs/ for product spec and competitive analysis
|
||||
```
|
||||
|
||||
## Related
|
||||
|
||||
- [itpp-infrastructure](https://git.itpropartner.com/ippadmin/itpp-infrastructure) — server inventory, DNS
|
||||
- [itpp-standards](https://git.itpropartner.com/ippadmin/itpp-standards) — docs standards and templates
|
||||
@@ -0,0 +1,561 @@
|
||||
# LaunchCheck — Business Proposal
|
||||
|
||||
**Prepared for:** Germaine Brown & Advisory Team
|
||||
**Product:** LaunchCheck (launchcheck.io) — "Validate your idea before you build it"
|
||||
**Company:** IT Pro Partner (established MSP)
|
||||
**Date:** July 25, 2026
|
||||
**Classification:** Confidential — Advisory Team Only
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Executive Summary](#1-executive-summary)
|
||||
2. [Elevator Pitch](#2-elevator-pitch)
|
||||
3. [Problem Statement](#3-problem-statement)
|
||||
4. [Market Analysis](#4-market-analysis)
|
||||
5. [Product Overview](#5-product-overview)
|
||||
6. [Revenue Model](#6-revenue-model)
|
||||
7. [Competitive Advantages](#7-competitive-advantages)
|
||||
8. [Go-to-Market Strategy](#8-go-to-market-strategy)
|
||||
9. [Risk Analysis](#9-risk-analysis)
|
||||
10. [Financial Projections](#10-financial-projections)
|
||||
11. [The Upgrade Path](#11-the-upgrade-path)
|
||||
12. [The Ask](#12-the-ask)
|
||||
|
||||
---
|
||||
|
||||
## 1. Executive Summary
|
||||
|
||||
LaunchCheck is a startup validation SaaS built for pre-revenue founders who need to understand their competitive landscape **before they write a single line of code**. Priced at $49/month, it delivers competitive landscape reports, pricing comparisons, feature benchmarking, OSINT dossiers on key competitors, and investor-ready summary PDFs — all powered by the same Super Search v2 engine that drives IntelSight, IT Pro Partner's enterprise-grade intelligence platform.
|
||||
|
||||
**The core insight:** 42% of startups fail because there is no market need (CB Insights). The overwhelming majority of those failures are preventable with structured competitive intelligence early in the ideation phase. Yet existing validation tools are either too shallow (single-page AI summaries), too expensive (enterprise platforms starting at $199+/month), or too manual (founders Googling competitors one at a time). LaunchCheck sits in the whitespace: professional-grade competitive intelligence at a price a pre-revenue founder can afford.
|
||||
|
||||
**Why now:** The US saw a record 5.5 million new business applications in 2023, Y Combinator processed 96,000+ applications for roughly 620 spots in 2025 (0.7% acceptance rate), and the global SaaS market is $322 billion growing at 19.3% CAGR. More people are starting companies than ever before — and more of them are failing for reasons that structured competitive intelligence could prevent.
|
||||
|
||||
**The unit economics are compelling.** At $49/month, LaunchCheck is profitable on Day 1 customer 1. The Super Search v2 infrastructure already exists and is amortized across IntelSight. The remaining build is a React frontend, a FastAPI wrapper, Stripe integration, and a Postgres schema — roughly 80% of the engine is already operational on app1. At 1,000 customers, LaunchCheck generates $588,000 ARR with near-zero incremental infrastructure cost.
|
||||
|
||||
**The strategic value extends beyond direct revenue.** LaunchCheck is the top of a deliberate funnel: founders who validate with LaunchCheck and then raise funding or achieve product-market fit naturally graduate to IntelSight Pro ($199/mo), Growth ($499/mo), or Enterprise ($1,499+/mo). The customer acquisition cost for IntelSight's higher tiers drops dramatically when the lead arrives pre-qualified through LaunchCheck.
|
||||
|
||||
---
|
||||
|
||||
## 2. Elevator Pitch
|
||||
|
||||
> **For founders sitting on an idea they can't stop thinking about:** LaunchCheck tells you who your competitors are, what they charge, what features they have that you don't, and whether there's room for you — in a single report you can take to investors. $49. One month. Know before you build.
|
||||
|
||||
> You wouldn't open a restaurant without knowing what's on the next block. Don't build a startup without knowing your competitive landscape. LaunchCheck gives you the intelligence that used to cost thousands — for $49/month. Cancel anytime, but most founders keep it until they close their first round.
|
||||
|
||||
---
|
||||
|
||||
## 3. Problem Statement
|
||||
|
||||
### 3.1 The Founder Pain Point
|
||||
|
||||
Every founder faces the same moment of terror: *"What if someone's already built this?"* Right now, the answer to that question comes through one of three paths, all broken:
|
||||
|
||||
| Method | What Founders Do | Why It Fails |
|
||||
|--------|-----------------|--------------|
|
||||
| **Google manually** | Search "[idea] competitor" and skim 20 tabs | Incomplete, unstructured, takes days, misses pricing/feature gaps |
|
||||
| **Free AI validators** | Paste idea into ValidatorAI or ChatGPT | Shallow, hallucinates market data, no verifiable sources, zero investor credibility |
|
||||
| **Enterprise tools** | Try Crunchbase, CB Insights, PitchBook | $99–$25,000/year, built for funded companies and VCs, absurd overkill for pre-revenue |
|
||||
|
||||
The result: founders either build blind (and join the 42% who fail from "no market need") or waste 2–3 weeks doing manual competitive research they could have outsourced for $49.
|
||||
|
||||
### 3.2 The Numbers That Make This Urgent
|
||||
|
||||
- **5.5 million** new business applications were filed in the US in 2023 — an all-time record.
|
||||
- **22.1%** of new US businesses close within their first year (Bureau of Labor Statistics, 2024 data).
|
||||
- **48.6%** are gone within five years. **65.3%** within ten years.
|
||||
- **42%** of VC-backed startup failures cite "no market need" as the primary cause (CB Insights, analysis of 431 failures).
|
||||
- **63%** of tech startups fail within five years — worse than the overall average.
|
||||
- **96,000+** founders applied to Y Combinator in 2025. **620** got in (0.65% acceptance rate).
|
||||
- A solo founder spending 6 months building an unvalidated product burns **$30,000–$60,000** in opportunity cost. LaunchCheck costs $49.
|
||||
|
||||
### 3.3 The Four Founder Personas
|
||||
|
||||
| Persona | Situation | What They Need | Willingness to Pay |
|
||||
|---------|-----------|---------------|-------------------|
|
||||
| **Solo Founder** | Has an idea, pre-revenue, pre-funding | Confidence to commit weekends for 6 months | $49 feels cheap compared to wasted time |
|
||||
| **Indie Hacker** | Launching a side project, wants recurring revenue | Competitive landscape to avoid saturated niches | $49/month is a line-item expense they'll justify |
|
||||
| **Pre-Seed Team** | Preparing a pitch deck, needs the "competition" slide | Investor-ready competitive analysis in PDF | $49 is a rounding error on a $500K raise |
|
||||
| **YC/Techstars Applicant** | Needs to show market awareness | Structured competitive data with named comparables | $49 to improve 0.7% odds is a no-brainer |
|
||||
|
||||
---
|
||||
|
||||
## 4. Market Analysis
|
||||
|
||||
### 4.1 Total Addressable Market (TAM)
|
||||
|
||||
**Definition:** Every person globally who starts a business and needs competitive intelligence.
|
||||
|
||||
- **US new business applications:** 5.3–5.5 million annually (Census Bureau, 2023–2024).
|
||||
- **Global new business formation:** Estimated 100+ million new enterprises annually across all countries (World Bank entrepreneurship data). Narrowing to English-speaking and tech-adjacent markets: conservatively **15–20 million new founders per year**.
|
||||
- **YC/accelerator applicants:** 96,000+ to YC alone in 2025. Techstars processes tens of thousands more. 500 Global adds thousands. Combined accelerator ecosystem: **200,000–300,000 serious applicants annually**.
|
||||
- **Indie Hackers community:** 100,000+ on r/indiehackers alone; broader indie maker movement estimated at **500,000–1,000,000 active builders** across platforms (Indie Hackers, Makerlog, Product Hunt makers, Twitter/X #buildinpublic).
|
||||
|
||||
**TAM Estimate:** 3–5 million serious, tech-savvy founders annually who could benefit from structured competitive validation. At $49/month (annualized $588/year), that's a **$1.7–$2.9 billion annual market** if every founder paid for one month of validation.
|
||||
|
||||
### 4.2 Serviceable Addressable Market (SAM)
|
||||
|
||||
**Definition:** Founders who (a) are building tech or tech-enabled products, (b) operate in English, (c) have $49 of disposable cash, and (d) are actively seeking validation before building.
|
||||
|
||||
- US-based tech founders: ~500,000–800,000 annually (subset of 5.5M business applications that are tech/software).
|
||||
- Accelerator applicants (YC, Techstars, 500 Global, AngelPad, etc.): ~300,000 annually.
|
||||
- Indie hackers building SaaS/MRR products: ~200,000–400,000 active at any time.
|
||||
- Global English-speaking tech founders: ~500,000–1,000,000 additional.
|
||||
|
||||
**SAM Estimate:** **1.0–2.0 million founders** annually. At $588/year average revenue (accounting for churn), this represents a **$588M–$1.18B SAM**.
|
||||
|
||||
### 4.3 Serviceable Obtainable Market (SOM)
|
||||
|
||||
**Definition:** The portion of SAM LaunchCheck can realistically capture in years 1–3 through community-driven growth and Product Hunt.
|
||||
|
||||
**Benchmarks from comparable products:**
|
||||
|
||||
| Comparable | Early Traction | Notes |
|
||||
|-----------|---------------|-------|
|
||||
| IdeaProof | 68,342+ founders since launch | Credit-based model, free tier drives growth |
|
||||
| ValidatorAI | Hundreds of thousands of validation sessions | Free, single-page AI summary |
|
||||
| ValidateMySaaS | Steady niche growth | $19–$29/mo, competitor-focused |
|
||||
| Trend Seeker | Growing community, $9.99/mo | Demand-based, different angle |
|
||||
|
||||
**LaunchCheck Year 1 SOM:** If LaunchCheck captures 0.05%–0.1% of the SAM in Year 1:
|
||||
- Conservative: **500–1,000 paying customers** by Month 12
|
||||
- Optimistic: **1,500–2,500 paying customers** with Product Hunt tailwinds
|
||||
|
||||
At $49/month ($588/year annualized), Year 1 ARR exit:
|
||||
- Conservative: **$294K–$588K ARR**
|
||||
- Base case: **$588K–$1.18M ARR**
|
||||
- Optimistic: **$882K–$1.47M ARR**
|
||||
|
||||
### 4.4 Market Timing
|
||||
|
||||
Five structural tailwinds make now the right moment:
|
||||
|
||||
1. **Record business formation:** 5.5M new applications in 2023 is 50%+ above pre-pandemic levels. The "great entrepreneurship boom" is not slowing.
|
||||
2. **AI validation is a recognized category:** Founders now expect AI-powered tools for competitive research. The category has been validated by IdeaProof, ValidatorAI, and WorthBuild.
|
||||
3. **YC is harder than ever:** 0.65% acceptance rate means founders need every edge. A competitive landscape report improves the "What do you know about your market?" section of the application.
|
||||
4. **"Build in public" culture:** Indie hackers publicly share their journey. LaunchCheck reports become shareable content — "Here's what LaunchCheck found about my idea space."
|
||||
5. **Enterprise SaaS fatigue:** Founders are rejecting $199+/month tools. There's a clear whitespace for professional-grade intelligence at indie-friendly pricing.
|
||||
|
||||
---
|
||||
|
||||
## 5. Product Overview
|
||||
|
||||
### 5.1 Core Features
|
||||
|
||||
LaunchCheck is built on the **Super Search v2** MCP server already operational on app1 — the same infrastructure powering IntelSight ($199–$1,499/mo). The core differentiator: this is not an AI hallucinating about your market. It's 7 search providers feeding an LLM synthesis engine producing structured, verifiable competitive intelligence.
|
||||
|
||||
| Feature | Description | Frequency |
|
||||
|---------|-------------|-----------|
|
||||
| **Competitive Search** | Multi-provider search across 7 engines (SearXNG, Exa, DuckDuckGo, Firecrawl, Wikipedia, OpenCorporates, CourtListener) | 25 searches/month |
|
||||
| **Competitive Landscape Report** | "Here's everyone in your space" — identified competitors with URLs, descriptions, and market positioning | On-demand |
|
||||
| **Pricing Comparison** | "What do they charge?" — pricing tiers, free trials, freemium vs. paid comparison across all identified competitors | Included in landscape report |
|
||||
| **Feature Benchmarking** | "What do they have that you don't?" — feature matrix across competitors, gaps identified, differentiation opportunities flagged | Included in landscape report |
|
||||
| **OSINT Dossier** | Deep-dive on one key competitor: founder background, funding history, Glassdoor/employee signals, web presence, technology stack indicators | 1 dossier/month |
|
||||
| **Investor-Ready Summary PDF** | Professionally formatted PDF with executive summary, competitive matrix, market positioning, and differentiation thesis. Ready for pitch deck attachment. | On-demand |
|
||||
|
||||
### 5.2 The "Validate Your Startup" Lead Gen Engine
|
||||
|
||||
The landing page at launchcheck.io will feature a **free, instant competitive snapshot** — enter a one-line description of your idea and get a mini-report as a lead generation tool:
|
||||
|
||||
1. User enters: *"AI-powered contract review for small law firms"*
|
||||
2. LaunchCheck returns: Top 3–5 identified competitors, average pricing range, one key insight
|
||||
3. Call to action: *"Get the full report — 15+ competitors mapped, pricing comparison, feature gaps, investor-ready PDF. $49/month."*
|
||||
|
||||
This lead gen engine converts 3–8% to paid (industry benchmark for freemium SaaS). At 10,000 free snapshots/month, that's 300–800 new trials.
|
||||
|
||||
### 5.3 Technology Stack
|
||||
|
||||
| Component | Technology | Status |
|
||||
|-----------|-----------|--------|
|
||||
| Search Engine | Super Search v2 MCP server (7 providers) | ✅ **Operational** on app1 |
|
||||
| LLM Synthesis | Admin-AI (DeepSeek, Claude, GPT-4.1, Gemini) | ✅ **Operational** via existing provider |
|
||||
| PDF Generation | WeasyPrint or Puppeteer | 🟡 Needs implementation |
|
||||
| Frontend | React + TailwindCSS | 🔴 Needs build |
|
||||
| API Layer | FastAPI wrapper around Super Search v2 | 🔴 Needs build |
|
||||
| Payments | Stripe (single tier: $49/mo or $49/mo annual) | 🔴 Needs integration |
|
||||
| Database | PostgreSQL (users, reports, search history) | 🔴 Needs schema + deployment |
|
||||
| Auth | Clerk or Auth0 (social login: Google, GitHub) | 🔴 Needs integration |
|
||||
| Hosting | app1 (existing infrastructure) | ✅ **Available** |
|
||||
|
||||
**Build estimate:** ~80% of the engine exists. Remaining work is frontend + API wrapper + payments. This is a 4–6 week build for one senior React/FastAPI developer — not a 6-month greenfield project.
|
||||
|
||||
---
|
||||
|
||||
## 6. Revenue Model
|
||||
|
||||
### 6.1 Pricing
|
||||
|
||||
| Plan | Price | What You Get |
|
||||
|------|-------|-------------|
|
||||
| **LaunchCheck Monthly** | $56/month | 25 competitive searches, landscape reports, pricing comparison, feature benchmarking, 1 OSINT dossier, investor PDF |
|
||||
| **LaunchCheck Annual** | $49/month (billed $588/year) | Same as monthly, save $84/year |
|
||||
|
||||
**Single tier only.** No confusing "Starter / Pro / Enterprise" upsells. Founders hate pricing page anxiety. One price, everything included. Clean.
|
||||
|
||||
### 6.2 Why $49?
|
||||
|
||||
- **Psychological threshold:** Below $50 is "impulse buy" territory for professionals. Above $50 triggers budget-decision anxiety.
|
||||
- **Competitor positioning:** IdeaProof is €19.99–€99.99 in credits, ValidateMySaaS is $19–$29/month for lighter reports, DimeADozen is $129+ for a single report. LaunchCheck at $49/month for unlimited landscape + 1 dossier occupies the "professional but affordable" zone.
|
||||
- **LTV calculation:** Average customer lifetime of 6 months = $294 LTV. At near-zero marginal cost, this is >90% gross margin.
|
||||
- **Anchor to IntelSight:** $49 makes IntelSight's $199 Pro tier feel like a natural step up — 4x the price for 4x the searches and multi-user features.
|
||||
|
||||
### 6.3 Revenue Scenarios
|
||||
|
||||
| Customers | Monthly Revenue | Annual Revenue (ARR) | Monthly (if 50% monthly plan) |
|
||||
|-----------|----------------|---------------------|-------------------------------|
|
||||
| 25 | $1,225 | $14,700 | $1,312 |
|
||||
| 50 | $2,450 | $29,400 | $2,625 |
|
||||
| 100 | $4,900 | $58,800 | $5,250 |
|
||||
| 250 | $12,250 | $147,000 | $13,125 |
|
||||
| 500 | $24,500 | $294,000 | $26,250 |
|
||||
| 1,000 | $49,000 | $588,000 | $52,500 |
|
||||
| 2,500 | $122,500 | $1,470,000 | $131,250 |
|
||||
| 5,000 | $245,000 | $2,940,000 | $262,500 |
|
||||
|
||||
*Assumes 70% annual / 30% monthly mix. Monthly plan customers pay $56/month.*
|
||||
|
||||
### 6.4 Cost Structure (Monthly at 1,000 Customers)
|
||||
|
||||
| Cost Category | Monthly Estimate | Notes |
|
||||
|--------------|-----------------|-------|
|
||||
| LLM API calls (Admin-AI) | $800–$1,500 | 25 searches × 1,000 customers = 25,000 queries/month. Heavily cached overlapping searches. |
|
||||
| Super Search v2 infra | $0 (marginal) | Already running for IntelSight. Shared infrastructure. |
|
||||
| Hosting (app1) | $0 (marginal) | Existing server. Incremental load is minimal. |
|
||||
| Stripe fees | ~$1,470 | 2.9% + $0.30 per transaction |
|
||||
| Domain + email | $25 | launchcheck.io + transactional email |
|
||||
| **Total** | **~$2,300–$3,000** | |
|
||||
|
||||
**Gross margin at 1,000 customers:** ~94%. This is a high-margin software business from Day 1.
|
||||
|
||||
---
|
||||
|
||||
## 7. Competitive Advantages
|
||||
|
||||
### 7.1 The Competitive Landscape
|
||||
|
||||
| Competitor | Price | Strengths | Weaknesses vs. LaunchCheck |
|
||||
|-----------|-------|-----------|---------------------------|
|
||||
| **ValidatorAI** | Free | Fast, simple, unlimited | Single-page AI summary; no real search data; hallucinations of market size |
|
||||
| **IdeaProof** | €19.99–€99.99 (credits) | Multi-model AI, brand assets, business plans | Per-report pricing adds up; still AI-only, no real-time search |
|
||||
| **WorthBuild** | $5/report | Customer discovery leads, cheap | Limited competitive depth; consumer-grade reports |
|
||||
| **ValidateMySaaS** | $19–$29/month | SEO + competitor focus | Lighter reports; no OSINT; no investor PDF |
|
||||
| **DimeADozen** | $129–$179/report | Deep investment-grade reports | Expensive per use; overkill for ideation phase |
|
||||
| **Crunchbase** | $99+/month | Funding data, investor discovery | Built for funded companies, not pre-revenue founders |
|
||||
| **ChatGPT / Claude** | Free/$20 | Quick, conversational | Hallucinates competitor names and market data; no verifiable sources |
|
||||
|
||||
### 7.2 LaunchCheck's Moat
|
||||
|
||||
1. **Real search, not AI hallucination.** Seven search providers feeding structured synthesis means LaunchCheck returns actual competitors with real URLs — not made-up company names. This is the single biggest differentiator: founders can click through and verify every finding. IdeaProof, ValidatorAI, and ChatGPT cannot do this.
|
||||
|
||||
2. **The IT Pro Partner credibility backstop.** LaunchCheck is not a random startup built by a solo founder in a weekend. It's a product of IT Pro Partner, an established managed services provider with real revenue, existing infrastructure, and a track record. This matters when founders share reports with investors — the logo and company backing convey legitimacy.
|
||||
|
||||
3. **Same engine as IntelSight ($199–$1,499/mo).** Enterprise-grade search infrastructure at indie pricing. LaunchCheck customers are running the same search pipeline that powers competitive intelligence for funded companies.
|
||||
|
||||
4. **OSINT dossiers.** No other validation tool offers deep competitor dossiers (founder background, funding history, employee signals, technology stack). This is normally a $500+ consulting engagement. LaunchCheck includes one per month.
|
||||
|
||||
5. **The upgrade path creates a compounding advantage.** Every LaunchCheck customer who upgrades to IntelSight makes the IntelSight product better (more data, more search patterns, better synthesis). The funnel is self-reinforcing.
|
||||
|
||||
6. **Single tier, simple pricing.** No credit systems, no "you've run out of reports," no confusing feature matrices. One price, everything included. Founders are exhausted by pricing page dark patterns.
|
||||
|
||||
---
|
||||
|
||||
## 8. Go-to-Market Strategy
|
||||
|
||||
### 8.1 Launch Sequence
|
||||
|
||||
**Phase 1: Soft Launch (Weeks 1–2)**
|
||||
- Deploy to a small waitlist of 50–100 founders (recruited from IT Pro Partner network, Germaine's contacts)
|
||||
- Gather testimonials, fix bugs, refine the PDF output
|
||||
- Identify "magic moments" — what do users do right before they convert?
|
||||
|
||||
**Phase 2: Product Hunt Launch (Week 3)**
|
||||
- **Title:** "LaunchCheck: Know your competition before you write a line of code"
|
||||
- **Tagline:** Validate your startup idea with real competitive intelligence.
|
||||
- **Maker comment:** Personal story about watching founders build things nobody wanted. LaunchCheck is the tool you wish you had before spending 6 months on the wrong idea.
|
||||
- **Target:** Top 5 of the day (requires 300+ upvotes). Product Hunt's top products average 1,079 upvotes. Top 5 typically requires 400–600 upvotes with an engaged community.
|
||||
- **Expected outcomes:**
|
||||
- 500–2,000 signups during launch week (26.5% of PH launches attract 500–1,000 users)
|
||||
- 5–10% conversion to paid = 25–200 new customers in Week 1
|
||||
- Press coverage: Product Hunt feature → tech blogs pick up → founder Twitter amplification
|
||||
|
||||
**Phase 3: Community Flywheel (Weeks 4–12)**
|
||||
- **YC community:** Free competitive landscape snapshots posted in YC forums, Bookface, and founder Slack groups. *"Applied to YC? Here's a competitive landscape for your space. DM me your one-liner and I'll run it through LaunchCheck."*
|
||||
- **Indie Hackers:** Guest posts on Indie Hackers: *"I analyzed 100 startup ideas on LaunchCheck. Here's what founders consistently get wrong about their competition."* Native content performs 10x better than ads on IH.
|
||||
- **r/startups, r/SaaS, r/Entrepreneur:** Answer "how do I validate my idea?" threads with specific, helpful responses. Include a LaunchCheck reference only when genuinely relevant.
|
||||
- **Techstars applicant networks:** Identical playbook to YC. 300,000+ accelerator applicants annually is a captive audience with a hard deadline and high motivation.
|
||||
|
||||
**Phase 4: Content + SEO (Months 3–12)**
|
||||
- **"Validate your startup" landing page** (launchcheck.io): Free competitive snapshot for lead generation. SEO-optimized for "validate startup idea," "competitor analysis for startups," "startup competitive landscape."
|
||||
- **Blog content:** "How to research competitors before building," "The competition slide investors actually want," "What Y Combinator looks for in market analysis."
|
||||
- **Founder spotlights:** Interview LaunchCheck users who validated, pivoted, or killed an idea based on competitive intelligence. Real stories outperform marketing copy.
|
||||
|
||||
### 8.2 Zero Ad Spend
|
||||
|
||||
LaunchCheck will not spend on paid acquisition in Year 1. The customer acquisition channels are:
|
||||
|
||||
| Channel | Cost | Expected Volume (Year 1) | Conversion Rate |
|
||||
|---------|------|--------------------------|----------------|
|
||||
| Product Hunt launch | $0 (organic) | 500–2,000 signups | 5–10% to paid |
|
||||
| Free lead gen landing page | $0 (SEO) | 5,000–20,000 snapshots/mo by M12 | 3–8% to trial |
|
||||
| Community posts (YC, IH, Reddit) | $0 (time) | 200–500 visitors/post | 2–5% to trial |
|
||||
| Word of mouth / viral sharing | $0 | Compounding | 1–3% referral rate |
|
||||
| Founder Twitter/X (#buildinpublic) | $0 (content) | Steady inbound | 2–4% to trial |
|
||||
|
||||
### 8.3 Viral Loops
|
||||
|
||||
1. **"Share your competitive landscape"** — Every LaunchCheck report has a "Share publicly" button that generates a branded preview card. Founders sharing their competitive research is marketing for LaunchCheck.
|
||||
2. **Investor PDFs carry branding** — Every PDF sent to an investor includes "Powered by LaunchCheck" with a QR code. Investors evaluating multiple deals see the branding repeatedly.
|
||||
3. **"Validated by LaunchCheck" badge** — Founders can embed a badge on their landing page: "Validated by LaunchCheck — competitive landscape analyzed." This is aspirational for pre-launch startups.
|
||||
|
||||
---
|
||||
|
||||
## 9. Risk Analysis
|
||||
|
||||
### 9.1 Risk Matrix
|
||||
|
||||
| Risk | Likelihood | Impact | Mitigation |
|
||||
|------|-----------|--------|------------|
|
||||
| **Founders churn after validating one idea** | High | Medium | This is by design. One month of validation is the expected use case. Annual pricing reduces churn. Email "Validate your next idea" re-engagement campaigns. |
|
||||
| **Price sensitivity — founders compare to free AI validators** | Medium | High | Differentiate on verifiable sources vs. AI hallucination. "Free validators tell you your idea is great. LaunchCheck shows you the competitive reality." |
|
||||
| **Competitor (IdeaProof, WorthBuild) adds real search** | Medium | Medium | First-mover advantage with Super Search v2. IntelSight's enterprise revenue funds continuous infrastructure investment. Competitors would need to build a 7-provider search pipeline — significant engineering investment. |
|
||||
| **AI search becomes commoditized** | Medium-High | High | Shift to value-add: OSINT dossiers, investor PDFs, upgrade path to IntelSight. The search engine is the moat; if search becomes free, the moat becomes depth + synthesis + trust. |
|
||||
| **Low upgrade rate to IntelSight** | Medium | Medium | Even at 5% upgrade rate on 1,000 LaunchCheck customers, that's 50 new IntelSight leads at $199+/month ($119K+ ARR). The standalone economics are strong enough that the upgrade path is upside, not necessity. |
|
||||
| **Founders fail, stop paying** | High | Medium | Expected. Churn will be 8–15% monthly. Compensate with high top-of-funnel growth. The "free snapshot" lead gen engine needs to consistently feed new trials. |
|
||||
| **GDPR / data privacy** | Low | Medium | Competitive intelligence is public information. Reports cite sources. Standard privacy policy + data processing agreement. |
|
||||
| **IT Pro Partner brand risk** | Low | High | LaunchCheck is a separate brand (launchcheck.io). If it fails, it doesn't damage the MSP brand. If it succeeds, IT Pro Partner gets credit as the parent company. |
|
||||
|
||||
### 9.2 Churn Analysis
|
||||
|
||||
LaunchCheck will have higher churn than typical B2B SaaS (which averages 3–7% monthly). Reasons:
|
||||
|
||||
- Founders validate one idea and leave (expected, not a failure)
|
||||
- Founders run out of money (pre-revenue, pre-funding)
|
||||
- Founders succeed and upgrade to IntelSight (desired outcome)
|
||||
- Founders fail and stop all spending (sad but inevitable)
|
||||
|
||||
**Projected churn rates:**
|
||||
|
||||
| Month | Monthly Churn Rate | Cumulative Retention |
|
||||
|-------|-------------------|---------------------|
|
||||
| 1 | 25% | 75% |
|
||||
| 2 | 20% | 60% |
|
||||
| 3 | 15% | 51% |
|
||||
| 4 | 12% | 45% |
|
||||
| 5 | 12% | 40% |
|
||||
| 6 | 10% | 36% |
|
||||
|
||||
At these rates, average customer lifetime is ~4.2 months, LTV = ~$206. This is acceptable because:
|
||||
- Gross margin is 94% (near-zero marginal cost)
|
||||
- CAC is near-zero (community-driven, no ad spend)
|
||||
- LTV:CAC ratio is effectively infinite (or at minimum >10:1)
|
||||
|
||||
The upgrade path to IntelSight dramatically increases effective LTV. A LaunchCheck customer who upgrades to IntelSight Pro at $199/month for 12+ months has an LTV of $2,500+.
|
||||
|
||||
### 9.3 What Happens If Nobody Upgrades?
|
||||
|
||||
If LaunchCheck-to-IntelSight upgrades are negligible, the business still works:
|
||||
|
||||
- At 500 customers: $24,500/month ($294K ARR) at ~$1,500/month operating cost
|
||||
- At 1,000 customers: $49,000/month ($588K ARR) at ~$3,000/month operating cost
|
||||
|
||||
These are profitable outcomes that require no IntelSight dependency. The upgrade path is upside, not the core thesis.
|
||||
|
||||
---
|
||||
|
||||
## 10. Financial Projections
|
||||
|
||||
### 10.1 12-Month Revenue Forecast (Base Case)
|
||||
|
||||
| Month | New Customers | Churned | Net | Total Active | MRR | Cumulative Revenue |
|
||||
|-------|--------------|---------|-----|-------------|-----|-------------------|
|
||||
| 1 | 50 | 0 | +50 | 50 | $2,450 | $2,450 |
|
||||
| 2 | 80 | 5 | +75 | 125 | $6,125 | $8,575 |
|
||||
| 3 | 150 | 15 | +135 | 260 | $12,740 | $21,315 |
|
||||
| 4 | 200 | 30 | +170 | 430 | $21,070 | $42,385 |
|
||||
| 5 | 150 | 50 | +100 | 530 | $25,970 | $68,355 |
|
||||
| 6 | 120 | 65 | +55 | 585 | $28,665 | $97,020 |
|
||||
| 7 | 100 | 70 | +30 | 615 | $30,135 | $127,155 |
|
||||
| 8 | 90 | 75 | +15 | 630 | $30,870 | $158,025 |
|
||||
| 9 | 80 | 75 | +5 | 635 | $31,115 | $189,140 |
|
||||
| 10 | 70 | 75 | -5 | 630 | $30,870 | $220,010 |
|
||||
| 11 | 60 | 70 | -10 | 620 | $30,380 | $250,390 |
|
||||
| 12 | 50 | 65 | -15 | 605 | $29,645 | $280,035 |
|
||||
|
||||
**Key metrics at Month 12:**
|
||||
- Active customers: 605
|
||||
- MRR: $29,645
|
||||
- ARR run rate: $355,740
|
||||
- Cumulative Year 1 revenue: $280,035
|
||||
- Total customers acquired: 1,200
|
||||
- Average monthly churn: ~11%
|
||||
- Customer acquisition cost: ~$0 (organic)
|
||||
|
||||
### 10.2 Three Scenarios
|
||||
|
||||
| Scenario | Month 12 Customers | Month 12 MRR | Year 1 Revenue | Assumptions |
|
||||
|----------|-------------------|-------------|----------------|-------------|
|
||||
| **Conservative** | 300 | $14,700 | $120,000 | Slow community growth, low PH launch (200 upvotes), 30% monthly churn |
|
||||
| **Base Case** | 605 | $29,645 | $280,000 | Healthy PH launch (400+ upvotes), steady community growth, 11% avg monthly churn |
|
||||
| **Optimistic** | 1,200 | $58,800 | $520,000 | PH #1–3 of the day, viral founder sharing, YC community embrace, 8% avg monthly churn |
|
||||
|
||||
### 10.3 Breakeven Analysis
|
||||
|
||||
LaunchCheck is profitable from Day 1, Customer 1. The only upfront costs are the build:
|
||||
|
||||
| Build Component | Estimated Cost |
|
||||
|----------------|----------------|
|
||||
| React frontend | $8,000–$12,000 (one senior dev, 3–4 weeks) |
|
||||
| FastAPI wrapper | $4,000–$6,000 (one dev, 1–2 weeks) |
|
||||
| Stripe integration | $2,000–$3,000 |
|
||||
| PostgreSQL + schema | $1,000–$2,000 |
|
||||
| PDF generation | $2,000–$3,000 |
|
||||
| Auth (Clerk/Auth0) | $1,000–$2,000 |
|
||||
| Design + branding | $3,000–$5,000 |
|
||||
| **Total Build** | **$21,000–$33,000** |
|
||||
|
||||
**Breakeven on build cost:** At 50 customers, Monthly 1 (~$2,450 MRR), the build cost is recovered in **9–14 months**. At 200 customers (Month 4 base case), the build cost is recovered in **2–3 months**.
|
||||
|
||||
### 10.4 Year 2 Projection
|
||||
|
||||
At Month 12 with 600+ customers and organic growth compounding:
|
||||
|
||||
- Monthly new customers: 80–120 (compounding from SEO, referrals, founder word-of-mouth)
|
||||
- Monthly churn stabilizing at 8–10%
|
||||
- **Month 24 customers:** 1,000–1,500
|
||||
- **Month 24 MRR:** $49,000–$73,500
|
||||
- **Year 2 cumulative revenue:** $470,000–$750,000
|
||||
|
||||
---
|
||||
|
||||
## 11. The Upgrade Path: LaunchCheck → IntelSight
|
||||
|
||||
### 11.1 The Funnel
|
||||
|
||||
```
|
||||
LaunchCheck ($49/mo)
|
||||
│
|
||||
├── Founder validates, builds, raises funding ────► IntelSight Pro ($199/mo)
|
||||
│ • Multi-user dashboard
|
||||
│ • 100 searches/month
|
||||
│ • Competitor monitoring alerts
|
||||
│
|
||||
├── Founder grows, hires team ───────────────────► IntelSight Growth ($499/mo)
|
||||
│ • Team seats
|
||||
│ • Custom report scheduling
|
||||
│ • API access
|
||||
│
|
||||
└── Founder's company scales, needs enterprise ──► IntelSight Enterprise ($1,499+/mo)
|
||||
• Dedicated analyst
|
||||
• White-label reports
|
||||
• SSO / compliance
|
||||
```
|
||||
|
||||
### 11.2 What Triggers an Upgrade?
|
||||
|
||||
| Trigger | Signal | Upgrade Path |
|
||||
|---------|--------|-------------|
|
||||
| **Funding closed** | Founder mentions in-app or in support email | IntelSight Pro — "Now that you're funded, here's what you need" |
|
||||
| **Exceeded search limits 3+ months in a row** | 25 searches/mo consistently maxed out | IntelSight Growth — "You need more firepower" |
|
||||
| **Team member added** | Second user tries to access account | IntelSight Growth — "Add your team" |
|
||||
| **6+ months active** | Sustained usage beyond validation phase | IntelSight Pro — "You're clearly past validation. Upgrade for monitoring." |
|
||||
|
||||
### 11.3 Upgrade Economics
|
||||
|
||||
| Metric | Conservative | Base Case | Optimistic |
|
||||
|--------|-------------|-----------|------------|
|
||||
| LaunchCheck → IntelSight conversion | 3% | 5% | 8% |
|
||||
| At 600 LaunchCheck customers | 18 IntelSight upgrades | 30 IntelSight upgrades | 48 IntelSight upgrades |
|
||||
| Incremental ARR from upgrades | $42,984 | $71,640 | $114,624 |
|
||||
| Combined ARR (LaunchCheck + upgrades) | $398,724 | $427,380 | $469,344 |
|
||||
|
||||
The upgrade path effectively doubles ARR per LaunchCheck cohort when factored over 24 months.
|
||||
|
||||
---
|
||||
|
||||
## 12. The Ask
|
||||
|
||||
### 12.1 What's Needed
|
||||
|
||||
LaunchCheck is not a 6-month greenfield build. ~80% of the engine exists. The ask is minimal:
|
||||
|
||||
| Resource | What | Cost |
|
||||
|----------|------|------|
|
||||
| **Frontend developer** | React + TailwindCSS build for launchcheck.io | $8,000–$12,000 (contract, 3–4 weeks) |
|
||||
| **Backend developer** | FastAPI wrapper + Stripe + Postgres + PDF | $7,000–$10,000 (contract, 2–3 weeks) |
|
||||
| **Design/branding** | Logo, color system, landing page, report templates | $3,000–$5,000 |
|
||||
| **Domain + infrastructure** | launchcheck.io, deployment on app1 | $200/year |
|
||||
| **Legal** | Terms of service, privacy policy, data processing agreement | $2,000–$3,000 (if not using template) |
|
||||
| **Total Ask** | | **$20,000–$30,000** |
|
||||
|
||||
### 12.2 What's Already In Place (No Additional Cost)
|
||||
|
||||
- Super Search v2 MCP server (7 providers) — operational on app1
|
||||
- LLM access via Admin-AI (DeepSeek, Claude, GPT-4.1, Gemini)
|
||||
- Hosting infrastructure on app1
|
||||
- IT Pro Partner operational backbone (support, billing, compliance awareness)
|
||||
- Germaine's founder network for initial distribution
|
||||
- IntelSight as the upgrade destination
|
||||
|
||||
### 12.3 Timeline
|
||||
|
||||
| Phase | Duration | Deliverable |
|
||||
|-------|---------|------------|
|
||||
| Build | Weeks 1–6 | Functional product on launchcheck.io |
|
||||
| Internal QA | Week 7 | Bug fixes, PDF polish, report quality review |
|
||||
| Soft launch | Week 8 | 50–100 founder waitlist, gather testimonials |
|
||||
| Product Hunt launch | Week 9 | Public launch, community push |
|
||||
| Growth | Weeks 10–52 | Community, SEO, content, iteration |
|
||||
|
||||
### 12.4 Decision Required
|
||||
|
||||
The advisory team is asked to:
|
||||
|
||||
1. **Approve** the $20,000–$30,000 development budget
|
||||
2. **Validate** the single-tier $49/month pricing strategy
|
||||
3. **Confirm** the Product Hunt + community GTM approach (zero ad spend)
|
||||
4. **Authorize** the use of app1 infrastructure for LaunchCheck deployment
|
||||
5. **Decide** whether LaunchCheck operates as an IT Pro Partner product line or a separate entity
|
||||
|
||||
---
|
||||
|
||||
## Appendix A: Source Citations
|
||||
|
||||
| Claim | Source |
|
||||
|-------|--------|
|
||||
| 5.5M new business applications (US, 2023) | US Census Bureau, Business Formation Statistics |
|
||||
| 531,423 new business applications (June 2026) | US Census Bureau, BFS Current Report |
|
||||
| 22.1% of businesses fail in first year | Bureau of Labor Statistics, via LendingTree analysis |
|
||||
| 48.6% fail within 5 years; 65.3% within 10 years | Bureau of Labor Statistics, Business Employment Dynamics |
|
||||
| 42% of startups fail due to "no market need" | CB Insights, "Top 20 Reasons Startups Fail" (analysis of 431 failures) |
|
||||
| 63% of tech startups fail within 5 years | DemandSage research analysis |
|
||||
| Global SaaS market: $322B in 2024, 19.3% CAGR | SkyQuest, Precedence Research, Fortune Business Insights |
|
||||
| YC: 27,000+ applications for Winter 2024 batch, 96,000+ for 2025 | GrowthList, LinkedIn (Ayush Sharma), Y Combinator public data |
|
||||
| 0.7% YC acceptance rate (2025) | LinkedIn (Ayush Sharma): 620 accepted from 96,000+ |
|
||||
| Techstars <1% acceptance rate | Techstars 2.0 announcement, multiple sources |
|
||||
| 68,342+ IdeaProof users | ideaproof.io public homepage |
|
||||
| Average Product Hunt top product: 1,079 upvotes | Medium: "What 76,822 Product Hunt Launches Reveal" |
|
||||
| 26.5% of PH launches attract 500–1,000 users | MySignature.io survey |
|
||||
| $15K Product Hunt launch → $6–20K in customer value | LinkedIn (Thomas Mazimann) |
|
||||
| r/indiehackers: 100K+ members | waveup.com blog |
|
||||
| 10% of SaaS startups fail in first year | Failory / Exploding Topics |
|
||||
|
||||
---
|
||||
|
||||
## Appendix B: Competitive Pricing Comparison
|
||||
|
||||
| Tool | Low-End Pricing | High-End Pricing | Model | LaunchCheck Advantage |
|
||||
|------|----------------|-----------------|-------|----------------------|
|
||||
| ValidatorAI | Free | Free (public) | Perpetual free | No real search; hallucinations |
|
||||
| IdeaProof | Free (90 credits) | €99.99 (1,500 credits) | Credit-based | Per-report costs add up; AI-only |
|
||||
| WorthBuild | Free (1/mo) | $20 (5 reports) | Pay-per-report | Consumer-grade depth; no OSINT |
|
||||
| ValidateMySaaS | $19/mo | $29/mo | Monthly sub | Lighter reports; no investor PDF |
|
||||
| Trend Seeker | Free (daily limit) | $9.99/mo | Monthly sub | Demand signals, not competitive intel |
|
||||
| DimeADozen | Free (Solo) | $179 (3-pack) | Pay-per-report | Expensive; overkill for ideation |
|
||||
| Crunchbase | $99/mo (Pro) | Custom enterprise | Annual contract | Built for funded companies |
|
||||
| **LaunchCheck** | **$49/mo annual** | **$56/mo monthly** | **Simple monthly** | **Verifiable search + OSINT + investor PDF** |
|
||||
|
||||
---
|
||||
|
||||
*This proposal was prepared with publicly available market data and reflects the best available information as of July 2026. Revenue projections are forward-looking estimates and actual results may vary. All competitive pricing was verified against public pricing pages as of the date of this document.*
|
||||
@@ -0,0 +1,13 @@
|
||||
# OSINT People Search — CHANGELOG
|
||||
|
||||
## 2026-07-10 — Documentation
|
||||
|
||||
- Migrated web scraping API comparison and tool evaluations into the repo.
|
||||
|
||||
## 2026-07-02 — Research
|
||||
|
||||
- Completed comparison of web scraping APIs for OSINT data collection.
|
||||
|
||||
## 2026-06-20 — API Planning
|
||||
|
||||
- Drafted initial frontend UI and API integration plans.
|
||||
@@ -0,0 +1,33 @@
|
||||
# osint-tool
|
||||
|
||||
|
||||
> **Owner:** Germaine | **Status:** PLANNED
|
||||
> **Last Updated:** 2026-08-09
|
||||
|
||||
An open-source intelligence (OSINT) toolchain for people search, skip tracing, and data aggregation. Integrates multiple web scraping and search APIs to build comprehensive person profiles from public data sources — supporting debt recovery, asset location, and investigative workflows.
|
||||
|
||||
## What's Inside
|
||||
|
||||
- `research/` — API evaluations and tool comparisons for web scraping, search, and browser automation
|
||||
- `web-scraping-api-comparison.md` — Detailed comparison of 10 APIs (Firecrawl, ScrapingAnt, SerpAPI, Browserbase, etc.) for scraping government sites, court records, and people-search platforms
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Scraping Pipeline:** Firecrawl, ScrapingAnt, Browserbase (evaluated, pending selection)
|
||||
- **Search:** Brave Search API, Serper, Tavily (evaluated)
|
||||
- **Backend:** TBD — likely Python/FastAPI
|
||||
- **Frontend:** TBD
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
git clone https://git.itpropartner.com/ippadmin/osint-tool.git
|
||||
cd osint-tool
|
||||
# Review research/ for API evaluation and selection
|
||||
```
|
||||
|
||||
## Related
|
||||
|
||||
- [itpp-infrastructure](https://git.itpropartner.com/ippadmin/itpp-infrastructure) — server inventory, DNS
|
||||
- [itpp-standards](https://git.itpropartner.com/ippadmin/itpp-standards) — docs standards and templates
|
||||
- [FleetTracker360](https://git.itpropartner.com/ippadmin/fleettracker360) — GPS fleet tracking
|
||||
@@ -0,0 +1,19 @@
|
||||
# scripts — CHANGELOG
|
||||
|
||||
## 2026-07-21 — Purpose Descriptions
|
||||
|
||||
- Added one-line purpose descriptions for all 78 scripts in README.md
|
||||
- Backup scope documented in README header
|
||||
|
||||
## 2026-07-16 — Audit Remediation
|
||||
|
||||
- Recategorized scripts and removed Garrison Code Watch from cron
|
||||
- `_fetch_body.py` moved to Email (internal utility)
|
||||
- `mcp-mysql.py` moved to Hermes Internal (MCP server)
|
||||
- `unsubscribe-scanner.py` and `daily-feed-summary.py` moved to Personal
|
||||
- `garrison-code-watch.py` cron removed, script archived
|
||||
|
||||
## 2026-07-15 — Initial Inventory
|
||||
|
||||
- Initial commit: 79 scripts across 16 categories catalogued in README.md
|
||||
- 31 cron-attached scripts, 48 manual/indirect
|
||||
@@ -0,0 +1,157 @@
|
||||
# scripts
|
||||
|
||||
|
||||
**Generated:** 2026-07-21 19:53
|
||||
**Total scripts:** 78 (44 shell, 34 Python)
|
||||
**Cron-attached:** 30 of 78
|
||||
**Location:** `/root/.hermes/scripts/`
|
||||
**Backup:** Live sync (every 15m) + Full daily backup → Wasabi S3
|
||||
|
||||
## Backup & DR
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `unms-backup-sync.sh` | unms-backup-sync.sh -- Daily UISP/UNMS backup sync to Wasabi S3. | shell | 2.6KB | {'kind': 'cron', 'expr': '0 6 * * *', 'display': '0 6 * * *'} | unms-backup-sync ✅ |
|
||||
| `gitea-backup.sh` | gitea-backup.sh — Daily Gitea backup to Wasabi S3. | shell | 2.5KB | {'kind': 'cron', 'expr': '0 8 * * *', 'display': '0 8 * * *'} | gitea-backup ✅ |
|
||||
| `snapshot-hetzner.py` | Create a snapshot of ALL running servers in the Hetzner account. | python | 1.8KB | {'kind': 'cron', 'expr': '0 5 * * 1', 'display': '0 5 * * 1'} | hetzner-weekly-snapshots ✅ |
|
||||
| `hudu-backup.sh` | hudu-backup.sh — Daily Hudu PostgreSQL backup to Wasabi S3. | shell | 1.6KB | {'kind': 'cron', 'expr': '0 7 * * *', 'display': '0 7 * * *'} | hudu-backup ✅ |
|
||||
| `hermes-live-sync.sh` | hermes-live-sync.sh — Full Hermes sync to S3 every 15 min | shell | 1.1KB | {'kind': 'interval', 'minutes': 15, 'display': 'every 15m'} | hermes-live-sync ✅ |
|
||||
| `run-wisp-backup.sh` | run-wisp-backup.sh — Wrapper for cron: sets up env and runs CCR backup via VPN | shell | 776B | {'kind': 'cron', 'expr': '0 6 * * *', 'display': '0 6 * * *'} | home-router-daily-backup ✅ |
|
||||
| `sync_ringlogix.py` | Sync RingLogix subscriber data to local cache | python | 27.0KB | Manual | — |
|
||||
| `backup_portal.py` | Backup portal data for web hosting services | python | 17.1KB | Manual | — |
|
||||
| `wisp-backup.py` | Call home-router-vpn.sh up/down/status. | python | 13.1KB | Manual | — |
|
||||
| `hermes-backup.sh` | hermes-backup.sh — Full Hermes backup to Wasabi S3 | shell | 7.9KB | Manual | — |
|
||||
| `core-services-backup.sh` | Supplemental Core service backups (services not covered by existing Core backups) | shell | 3.8KB | Manual | — |
|
||||
| `hermes-standby-restore.sh` | hermes-standby-restore.sh — Warm standby restore from S3 | shell | 2.7KB | Manual | — |
|
||||
| `app1-backup.sh` | Backup app1 AI stack services to S3 | shell | 2.6KB | Manual | — |
|
||||
| `hermes-system-config-sync.sh` | hermes-system-config-sync.sh — Sync system-level configs to Wasabi | shell | 2.4KB | Manual | — |
|
||||
| `backup-uisp.sh` | Backup UISP/UNMS network management system | shell | 2.3KB | Manual | — |
|
||||
| `app3-backup.sh` | Backup app3 web hosting services to S3 | shell | 2.1KB | Manual | — |
|
||||
| `root-essentials-backup.sh` | root-essentials-backup.sh — Daily backup of Hermes config/core to S3 | shell | 1.8KB | Manual | — |
|
||||
| `hermes-docker-sync.sh` | hermes-docker-sync.sh — Sync Docker volumes to Wasabi | shell | 1.7KB | Manual | — |
|
||||
| `unifi-backup-sync.sh` | unifi-backup-sync.sh Daily UniFi backup sync from app2 Docker volume to Wasabi S3. | shell | 1.7KB | Manual | — |
|
||||
| `home-router-backup.sh` | Backup home MikroTik router config to S3 | shell | 1.7KB | Manual | — |
|
||||
| `app2-backup.sh` | Backup app2 services to S3 | shell | 1.7KB | Manual | — |
|
||||
| `backup-audit-check.sh` | backup-audit-check.sh — Daily check: was yesterday's full backup successful? | shell | 1.3KB | Manual | — |
|
||||
| `send-backup-email.py` | Send home router backup archive via SMTP. | python | 1.1KB | Manual | — |
|
||||
| `send-backup-readme.py` | Send home router backup README via SMTP. | python | 1.1KB | Manual | — |
|
||||
| `run-portal-backup.sh` | Portal backup cron wrapper — runs backup_portal.py, silent on success | shell | 782B | Manual | — |
|
||||
| `system-config-sync.sh` | Sync system config files to S3 | shell | 669B | Manual | — |
|
||||
| `docker-volume-sync.sh` | Sync Docker volumes to S3 | shell | 597B | Manual | — |
|
||||
|
||||
## Monitoring
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `vps-threshold-check.sh` | VPS Resource Threshold Alert Checker | shell | 6.1KB | {'kind': 'interval', 'minutes': 15, 'display': 'every 15m'} | vps-threshold-check ✅ |
|
||||
| `bounce-check.py` | Check email bounce rates and flag delivery issues | python | 3.3KB | {'kind': 'interval', 'minutes': 60, 'display': 'every 60m'} | bounce-check ✅ |
|
||||
| `service-health-check.sh` | service-health-check.sh — Check all critical services and report failures | shell | 2.3KB | {'kind': 'interval', 'minutes': 5, 'display': 'every 5m'} | service-health-check ✅ |
|
||||
| `imap_triage_watchdog.sh` | Watchdog for the email triage cron job (5929c5f1deff). | shell | 2.1KB | {'kind': 'interval', 'minutes': 10, 'display': 'every 10m'} | IMAP-triage-watchdog ✅ |
|
||||
| `spend-monitor-collect.sh` | spend-monitor-collect.sh — Collect LLM spend data for daily monitor | shell | 1.9KB | {'kind': 'cron', 'expr': '0 7 * * *', 'display': '0 7 * * *'} | daily-spend-monitor ✅ |
|
||||
| `apex-mail-watchdog.sh` | apex-mail-watchdog.sh — Check Apex WPForms email delivery every 5 min | shell | 1.9KB | {'kind': 'cron', 'expr': '*/5 * * * *', 'display': '*/5 * * * *'} | apex-mail-watchdog ✅ |
|
||||
| `home-router-watchdog.sh` | home-router-watchdog.sh — Check home router via WireGuard tunnel | shell | 553B | {'kind': 'interval', 'minutes': 5, 'display': 'every 5m'} | Home-Router-Watchdog ✅ |
|
||||
| `home-router-watchdog.sh` | home-router-watchdog.sh — Check home router via WireGuard tunnel | shell | 553B | {'kind': 'interval', 'minutes': 5, 'display': 'every 5m'} | Home-Router-Watchdog ✅ |
|
||||
| `boys-mail-monitor.py` | Monitor Tony's email inbox for important messages | python | 18.5KB | Manual | — |
|
||||
| `hermes-standby-watchdog.sh` | hermes-standby-watchdog.sh — Periodic health check for warm standby | shell | 4.2KB | Manual | — |
|
||||
| `apex-mail-watchdog.py` | Try sending a test email to the admin address. | python | 2.9KB | Manual | — |
|
||||
| `reboot-with-check.sh` | reboot-with-check.sh — Reboot a server and wait for it + key services to come back. | shell | 2.7KB | Manual | — |
|
||||
|
||||
## Email
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `shonuff-email-responder.py` | Collect new emails from the Master | python | 9.7KB | {'kind': 'interval', 'minutes': 5, 'display': 'every 5m'} | shonuff-email-reply ✅ |
|
||||
| `dre-mail-poller.py` | ── Configuration ────────────────────────────────────────────────────────────── | python | 9.6KB | {'kind': 'interval', 'minutes': 1, 'display': 'every 1m'} | dre-mail-poller ✅ |
|
||||
| `boxpilot-triage.py` | Free/personal email domains — if sender is from these AND claims another company, it's sus | python | 5.8KB | {'kind': 'interval', 'minutes': 10, 'display': 'every 10m'} | boxpilot-triage ✅ |
|
||||
| `shonuff-inbox-collect.py` | Extract plain text from email, favoring text/plain. | python | 3.3KB | {'kind': 'interval', 'minutes': 15, 'display': 'every 15m'} | shonuff-inbox-agent ✅ |
|
||||
| `imap_triage_autorun.py` | User-blocked marketing/loan domains are spam/promotional. | python | 2.9KB | {'kind': 'interval', 'minutes': 60, 'display': 'every 60m'} | IMAP-email-triage ✅ |
|
||||
| `imap_triage.py` | Core IMAP email triage and classification engine | python | 14.6KB | Manual | — |
|
||||
| `send-dr-audit-email.py` | Send DR Backup Audit email to Germaine. | python | 5.5KB | Manual | — |
|
||||
| `send-shonuff.py` | Send email from Sho'Nuff Brown with signature + BCC to Germaine + IMAP Sent copy. | python | 2.3KB | Manual | — |
|
||||
| `watch-shonuff-inbox.py` | Monitor Sho'Nuff inbox for new messages | python | 2.2KB | Manual | — |
|
||||
| `send-recovery.py` | Email the recovery bundle to g@germainebrown.com. | python | 1.5KB | Manual | — |
|
||||
| `_fetch_body.py` | Fetch body of email sequence number 2 from shonuff inbox. | python | 1.1KB | Manual | — |
|
||||
| `send-reset-notifications.sh` | Called BEFORE suggesting the user type /reset | shell | 914B | Manual | — |
|
||||
| `send-back-online.sh` | Called by the NEW session after /reset to notify Germaine and Anita | shell | 832B | Manual | — |
|
||||
|
||||
## Ops Portal
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `ops-data-collector.py` | ─── Configuration ───────────────────── | python | 47.6KB | {'kind': 'cron', 'expr': '*/5 * * * *', 'display': '*/5 * * * *'} | ops-data-collector ✅ |
|
||||
| `status-page-refresh.sh` | Status page heartbeat JSON generator | shell | 762B | {'kind': 'interval', 'minutes': 1, 'display': 'every 1m'} | status-page-refresh ✅ |
|
||||
|
||||
## Network
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `home-router-vpn.sh` | wisp-vpn.sh — Connect/disconnect L2TP/IPsec VPN to MicroTik gateway | shell | 8.1KB | Manual | — |
|
||||
| `home-router-keepalive.sh` | wisp-vpn-keepalive.sh — Check VPN status and reconnect if down | shell | 877B | Manual | — |
|
||||
|
||||
## FleetTracker
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `ft360-export.py` | Cron runs scripts with system Python. The FT360 MCP uses the shared | python | 5.2KB | {'kind': 'interval', 'minutes': 1, 'display': 'every 1m'} | ft360-dashboard-export ✅ |
|
||||
| `ft360-route-export.py` | Export today's FT360 device positions as GeoJSON for the dashboard map overlay. | python | 3.8KB | Manual | — |
|
||||
| `ft360-daily-stats.py` | Compute daily stats from the Traccar H2 DB for the FT360 dashboard export. | python | 3.2KB | Manual | — |
|
||||
|
||||
## AI & Models
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `track-firecrawl.py` | Track Firecrawl API credit usage for portal dashboard. | python | 2.7KB | {'kind': 'cron', 'expr': '0 9 * * *', 'display': '0 9 * * *'} | firecrawl-usage-check ✅ |
|
||||
| `model-usage-tracker.sh` | Model health check -- test all 5 fallback chain providers | shell | 2.2KB | {'kind': 'cron', 'expr': '0 8 * * *', 'display': '0 8 * * *'} | model-usage-check ✅ |
|
||||
|
||||
## Security
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `lynis-scan.sh` | Nightly security audit via Lynis | shell | 723B | {'kind': 'cron', 'expr': '0 3 * * *', 'display': '0 3 * * *'} | lynis-scan ✅ |
|
||||
| `audit-server.sh` | Comprehensive server audit script | shell | 3.1KB | Manual | — |
|
||||
|
||||
## DRE
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `dre-approval-reminder.sh` | dre-approval-reminder.sh — Check for pending claim approvals | shell | 854B | {'kind': 'cron', 'expr': '0 * * * *', 'display': '0 * * * *'} | dre-pending-approval-reminder ✅ |
|
||||
|
||||
## Shark Game
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `shark-scraper.sh` | Shark scraper wrapper — silent on success, only outputs on failure | shell | 307B | {'kind': 'interval', 'minutes': 60, 'display': 'every 60m'} | shark-scraper ✅ |
|
||||
| `shark-draft-reminder.sh` | shark-draft-reminder.sh — Send 24h and 1h draft reminder emails to league members | shell | 13.1KB | Manual | — |
|
||||
|
||||
## Hermes Internal
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `hermes-consolidate.sh` | hermes-consolidate.sh — Auto-consolidate Hermes memory every 10 min. | shell | 2.8KB | {'kind': 'interval', 'minutes': 10, 'display': 'every 10m'} | hermes-memory-consolidate ✅ |
|
||||
| `hermes-consolidate.py` | Consolidate and archive Hermes backup files | python | 4.6KB | Manual | — |
|
||||
| `mcp-mysql.py` | Simple MySQL MCP server for Hermes - with async stdin handling. | python | 3.0KB | Manual | — |
|
||||
|
||||
## Infrastructure
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `snmp-collect.sh` | Collect SNMP metrics from MikroTik network devices | shell | 926B | Manual | — |
|
||||
| `snmp-http-server.py` | Serve SNMP textfile metrics via HTTP for Prometheus | python | 620B | Manual | — |
|
||||
| `list-hetzner-servers.py` | List Hetzner servers via API. | python | 500B | Manual | — |
|
||||
|
||||
## Utilities
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `build-recovery.py` | Build the full Hermes recovery bundle markdown file. | python | 6.9KB | Manual | — |
|
||||
| `generate-script-contents.py` | Find a script file by name in known script directories. | python | 2.4KB | Manual | — |
|
||||
| `changelog.sh` | changelog.sh — Append an entry to the Hermes changelog | shell | 877B | Manual | — |
|
||||
|
||||
## Personal
|
||||
|
||||
| Script | Purpose | Type | Size | Schedule | Cron Job |
|
||||
|---|---|---|---|---|---|
|
||||
| `daily-feed-summary.py` | Collect RSS feeds and generate daily digest summary | python | 9.3KB | {'kind': 'cron', 'expr': '0 11 * * *', 'display': '0 11 * * *'} | daily-tech-digest ✅ |
|
||||
| `unsubscribe-scanner.py` | ── Config ── | python | 4.8KB | {'kind': 'cron', 'expr': '0 7 * * *', 'display': '0 7 * * *'} | Unsubscribe Daily Digest ✅ |
|
||||
| `icloud_bills_calendar.py` | Sync iCloud calendar with billing reminders | python | 12.0KB | Manual | — |
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# Changelog - Shark Attack Fantasy League
|
||||
|
||||
### 2026-07-10
|
||||
- **Backend & Infrastructure:** Backend server deployed (Python/FastAPI on Core), push notifications, Discord-Hermes bridge.
|
||||
|
||||
### 2026-07-10
|
||||
- **Game Logic:** Player registration, league creation, season start locked to Aug 1.
|
||||
|
||||
### 2026-07-10
|
||||
- **Frontend:** Bottom navigation, PWA manifest, draft room, settings page.
|
||||
|
||||
### 2026-07-09
|
||||
- **Backend:** Shark sighting scraper deployed, Caddy reverse proxy configured.
|
||||
|
||||
### 2026-07-09
|
||||
- **Game Logic:** Scoring system designed (1pt sighting, 3pt bite, 10pt fatality).
|
||||
|
||||
### 2026-07-08
|
||||
- **Design:** Game concept finalized, coastal regions defined, database schema.
|
||||
|
||||
### 2026-07-08
|
||||
- **Frontend & Backend:** Initial frontend scaffold, API endpoints created.
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# shark-game
|
||||
|
||||
|
||||
A fantasy league game where players draft coastal regions and earn points based on real-world shark sightings, bites, and fatalities.
|
||||
|
||||
## Project Info
|
||||
|
||||
- **Owner:** Germaine
|
||||
- **Ideation Team:** Germaine, Ryan, Garrison (age 11)
|
||||
- **Status:** IN DEVELOPMENT
|
||||
- **Deployed:** https://shark.iamgmb.com (Core Server)
|
||||
- **Changelog:** [CHANGELOG.md](./CHANGELOG.md)
|
||||
- **Note:** Game may evolve into real-time multiplayer
|
||||
|
||||
## Access
|
||||
|
||||
- Game: https://shark.iamgmb.com
|
||||
- Discord: #shark-game channel (Hermes connected for 2-way chat)
|
||||
- Draft reminders: cron-scheduled via shark-draft-reminder.sh
|
||||
@@ -0,0 +1,45 @@
|
||||
# TransitPin — CHANGELOG
|
||||
|
||||
## 2026-08-09 — Initial: migrate to Git
|
||||
|
||||
- Migrated project to Git with ITPP standards (.gitignore, README template, docs-check CI).
|
||||
|
||||
## 2026-07-29
|
||||
|
||||
### Added
|
||||
- **Follow Driver** — each driver card in Dispatch tab has a 📍 button. Clicking centers the map on that driver and pans to follow their position updates every 3s. Dragging the map or clicking again unfollows. Blue glow on active follow. (JS: `window.followedDriverId`, `dispatchMap.panTo` in position handler)
|
||||
- **Wake Lock API** — driver page requests `navigator.wakeLock.request('screen')` when GPS tracking starts, preventing screen dim/lock. Released on stop. Re-acquired automatically on visibility change. "🔒 Screen awake" / "⚠️ Screen may dim" indicator below GPS grid.
|
||||
- **TomTom traffic overlay** — 🚦 toggle button on Dispatch tab. Toggles real-time traffic flow tiles (green/yellow/red overlay) on the Leaflet map.
|
||||
|
||||
### Fixed
|
||||
- **Permission 600→644** — driver.html and manifest were root-only, blocked Caddy from serving them.
|
||||
- **Caddy WebSocket route** — changed from `handle_path /ws/driver/*` to `handle_path /ws/driver*` to match bare `/ws/driver` path.
|
||||
- **Position ID field mismatch** — server broadcasts `position` with `driverId` field, but admin JS was looking for `d.id`. Fixed `updateDriverPosition`, `updateDriverCard`, `updateDriverStatus`, and `driver-offline` handler to accept both `id` and `driverId`.
|
||||
- **TomTom tile URL** — was missing `/absolute/` in the path, causing 400 errors on all traffic tiles. Fixed from `/tile/flow/{z}/{x}/{y}.png` to `/tile/flow/absolute/{z}/{x}/{y}.png`.
|
||||
- **JS scope on toggleTraffic** — function was local inside `initDispatch()`, invisible to onclick. Changed to `window.toggleTraffic`.
|
||||
- **Parent portal dashboard crash after login** — `escapeHtml()` was called in 10 places throughout `renderDashboard()` and `renderEmergencyContacts()`, but the function was defined as `escHTML()` (abbreviated). This threw `ReferenceError` immediately after login, leaving a blank dashboard. Fix: added `const escapeHtml = escHTML;` alias at line 1121. Root cause: function was named one way during message rendering code (`escHTML`) and inconsistently named in dashboard/emergency contacts code (`escapeHtml`).
|
||||
|
||||
### Architecture
|
||||
- WebSocket relay running as `village-express.service` (systemd, port 8210)
|
||||
- Caddy reverse-proxies `/ws/driver*` → `127.0.0.1:8210` for TLS
|
||||
- Driver PWA streams GPS every 3s via `watchPosition`
|
||||
- Dispatchers receive real-time position broadcasts
|
||||
|
||||
---
|
||||
|
||||
## Future Projects
|
||||
|
||||
### Native Background Tracking (Capacitor Wrapper)
|
||||
The PWA approach cannot keep GPS running when the phone screen locks. No browser-based solution supports this.
|
||||
|
||||
**Next step:** Wrap the driver PWA with Capacitor to produce real iOS/Android apps with native background geolocation permissions (`CLLocationManager` on iOS, `FusedLocationProviderClient` on Android). The existing HTML/JS frontend stays — Capacitor wraps it with native APIs.
|
||||
|
||||
**Requirements:**
|
||||
- Capacitor CLI + native iOS/Android project scaffolding
|
||||
- `cordova-plugin-background-geolocation` or Capacitor's built-in geolocation plugin with background mode
|
||||
- App store deployment for iOS (Apple Developer account needed)
|
||||
- Play Store or direct APK for Android
|
||||
|
||||
**Estimated effort:** 1-2 days for Capacitor setup + background plugin integration. App store submission adds 1-2 weeks for review.
|
||||
|
||||
**No rewrite needed** — the web code stays; Capacitor adds the native shell.
|
||||
@@ -0,0 +1,42 @@
|
||||
# transitpin
|
||||
|
||||
|
||||
> **Owner:** Germaine | **Status:** LIVE (dev)
|
||||
> **Last Updated:** 2026-08-09
|
||||
|
||||
TransitPin is a real-time student transportation tracking SaaS built for the private contractor market — the companies school districts hire to move students. It replaces paper route sheets, manual parent texts, and clipboards with a live GPS platform: driver PWA, parent ETA portal, bell-schedule intelligence, and an admin dashboard for owners.
|
||||
|
||||
Built from a direct client engagement with Village Express Transportation (Savannah, GA).
|
||||
|
||||
## Access
|
||||
|
||||
| Resource | URL | Location | Notes |
|
||||
|---|---|---|---|
|
||||
| Parent Portal | https://villageexpress.transitpin.com/ | Core (152.53.192.33) | Caddy reverse proxy |
|
||||
| Driver PWA | https://villageexpress.transitpin.com/driver.html | Core | WebSocket at /ws/driver* |
|
||||
| Admin Dashboard | https://villageexpress.transitpin.com/admin.html | Core | Dispatch map, driver tracking |
|
||||
| WebSocket Relay | port 8210 (localhost) | Core | systemd: village-express.service |
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- Frontend: Vanilla HTML/CSS/JS, Leaflet maps, TomTom traffic tiles
|
||||
- Backend: WebSocket relay (Node.js), systemd service
|
||||
- Reverse Proxy: Caddy (TLS auto-provision)
|
||||
- GPS: Browser `watchPosition` API, Wake Lock API
|
||||
- Data: driver-manifest.json (static routes), PWA manifest
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
git clone https://git.itpropartner.com/ippadmin/transitpin.git
|
||||
cd transitpin/
|
||||
# Start WebSocket relay
|
||||
sudo systemctl start village-express
|
||||
# Caddy serves static files + proxies /ws/* to WebSocket relay
|
||||
```
|
||||
|
||||
## Related
|
||||
|
||||
- [itpp-infrastructure](https://git.itpropartner.com/ippadmin/itpp-infrastructure) — server inventory, DNS
|
||||
- [itpp-standards](https://git.itpropartner.com/ippadmin/itpp-standards) — docs standards and templates
|
||||
- [transitpin-white-label](https://git.itpropartner.com/ippadmin/transitpin-white-label) — white-label portal builder
|
||||
@@ -0,0 +1,48 @@
|
||||
# VerdictTank — Changelog
|
||||
|
||||
## 2026-08-07
|
||||
|
||||
### Rebrand (SharkTank → VerdictTank)
|
||||
- Project renamed: /root/projects/sharktank → /root/projects/verdicttank
|
||||
- Mockup moved: mockup.iamgmb.com/sharktank → mockup.iamgmb.com/verdicttank
|
||||
- New proposal: proposals.iamgmb.com/verdicttank (incorporates all pipeline review feedback)
|
||||
- Original SharkTank proposal archived with "superseded" banner
|
||||
- Mockup landing page: removed all model names, added file upload (doc/docx/pdf), purged all em dashes
|
||||
- Proposals index: VerdictTank (primary) + SharkTank (archived, grayed out)
|
||||
- Critical review page: rebranded, em dashes purged
|
||||
|
||||
### Pipeline Review Results
|
||||
- First dogfood: ran proposal through full VerdictTank pipeline
|
||||
- **Verdict: 3/3 Unanimous Conditional Go**
|
||||
- Phase 1 (Research Agent): No direct competitor found — cross-vendor architecture is novel
|
||||
- Phase 2 (Critic Agent): 4/10 average — 4 fatal flaws: trademark, pricing, financial model, no validation
|
||||
- Phase 3a (Judge A): Ratified 85% of critic — pricing > name in priority, rejected co-founder as condition
|
||||
- Phase 3b (Judge B): Caught overage incentive flaw, compound reliability risk (97.5% = 18hr/mo downtime)
|
||||
- Phase 3c (Judge C): Meta-layer insight, training-data recursion (Year 3), liability asymmetry, SEO desert
|
||||
- Critical review addendum: https://mockup.iamgmb.com/verdicttank/critical-review.html
|
||||
- Priority-ranked 11-item action plan with reconciled timeline (Apr 2027 paid launch)
|
||||
- Novel insights: product IS content, verdict confidence scoring, degraded-mode fallback needed
|
||||
|
||||
### Updated Proposal (Post-Review)
|
||||
- Full rebrand to VerdictTank throughout
|
||||
- Tiered usage-based pricing (no "unlimited"): $19/$49/$99/$299 + $14.99 pay-per-review
|
||||
- Financial model with churn (5-7%), CAC ($15-25), LTV ($210-290), LTV:CAC (~10:1)
|
||||
- Real break-even estimate: 25-35 users (not 6)
|
||||
- Timeline pushed to Mar-Apr 2027 paid launch
|
||||
- New risks: training-data recursion, liability asymmetry, alignment drift, SEO desert
|
||||
- Pipeline described by roles only (no model names)
|
||||
- Pipeline self-review section with verdict banner
|
||||
- Added: degraded-mode fallback, benchmark accuracy report, advisory board plan
|
||||
- Product origin: dogfooding at IT Pro Partner
|
||||
|
||||
### Pending
|
||||
- Register verdicttank.com domain
|
||||
- File VerdictTank trademark (USPTO Class 42)
|
||||
- Landing page + waitlist at verdicttank.com
|
||||
- Interview 20 target ICP users
|
||||
- Publish benchmark accuracy report (20 proposals, known outcomes)
|
||||
- Recruit 3+ named advisors
|
||||
- FastAPI backend with job queue
|
||||
- WeasyPrint PDF generation
|
||||
- Email delivery via MXroute
|
||||
- LiteLLM virtual key: verdicttank-prod
|
||||
@@ -0,0 +1,70 @@
|
||||
# verdicttank
|
||||
|
||||
|
||||
AI-powered business proposal review platform. Five specialized agents, three independent judges, majority-rules verdict.
|
||||
|
||||
**Status:** PRE-LAUNCH (rebranded from SharkTank)
|
||||
**Owner:** Germaine Brown
|
||||
**Built by:** Sho'Nuff (Hermes Agent)
|
||||
**Pipeline Verdict:** 3/3 Unanimous Conditional Go (Aug 7, 2026)
|
||||
|
||||
## Access
|
||||
|
||||
| Resource | URL | Access |
|
||||
|---|---|---|
|
||||
| Mockup (landing page) | https://mockup.iamgmb.com/verdicttank/ | Public |
|
||||
| Critical Review | https://mockup.iamgmb.com/verdicttank/critical-review.html | Public |
|
||||
| Proposal (updated) | https://proposals.iamgmb.com/verdicttank | Public |
|
||||
| Proposal (original, archived) | https://proposals.iamgmb.com/sharktank | Public |
|
||||
| Domain | verdicttank.com | Available, not registered |
|
||||
| AI Costs | admin-ai key: `verdicttank-prod` | TBD |
|
||||
|
||||
## Pipeline
|
||||
|
||||
```
|
||||
Phase 1 → Research Agent — Live web verification with citations
|
||||
Phase 2 → Critic Agent — 10-dimension brutal review, scored 1-10
|
||||
Phase 3 → Three judges in parallel (majority rules):
|
||||
Judge A — Independent architecture
|
||||
Judge B — Independent architecture
|
||||
Judge C — Independent architecture
|
||||
→ PDF verdict delivered by email
|
||||
```
|
||||
|
||||
**Cost per review:** $0.55 fully loaded
|
||||
**Turnaround:** ~5-9 minutes
|
||||
**Degraded mode:** Runs with 2 judges if 1 is down. Free re-run if only 1 available.
|
||||
|
||||
## Pricing (Revised — Post-Review)
|
||||
|
||||
| Tier | Price | Reviews/Month |
|
||||
|---|---|---|
|
||||
| Free | $0 | 1 |
|
||||
| Starter | $19/mo | 5 ($3 overage) |
|
||||
| Pro | $49/mo | 20 ($4 overage) |
|
||||
| Scale | $99/mo | 50 ($5 overage) |
|
||||
| Enterprise | $299/mo | 150 (custom) |
|
||||
|
||||
Pay-per-review: $14.99. Annual: 20% discount.
|
||||
|
||||
## Current State
|
||||
|
||||
- Pipeline skill (`shark-tank-review`) fully built and tested
|
||||
- Pipeline self-reviewed: 3/3 unanimous Conditional Go (Aug 7, 2026)
|
||||
- Proposal page live (updated VerdictTank + archived SharkTank)
|
||||
- Mockup landing page live at mockup.iamgmb.com/verdicttank
|
||||
- Critical review addendum live
|
||||
- Backend API (FastAPI) — to build
|
||||
- PDF generation (WeasyPrint) — to build
|
||||
- Email delivery (MXroute) — to build
|
||||
- Domain: verdicttank.com — to register
|
||||
- Trademark: USPTO Class 42 — to file
|
||||
|
||||
## Key Risks (From Pipeline Review)
|
||||
|
||||
- Pricing suicide (fixed: tiered usage-based)
|
||||
- Sony trademark conflict (fixed: rebranded)
|
||||
- Training-data recursion (Year 3+ — acknowledged, cap plan in place)
|
||||
- Liability asymmetry (GO verdicts > NO-GO exposure)
|
||||
- Alignment drift (models becoming less critical over time)
|
||||
- SEO desert from rebrand (mitigation: 301 redirects, content marketing)
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
site_name: "IT Pro Partner Docs"
|
||||
site_url: "https://docs.itpropartner.com/"
|
||||
repo_url: "https://git.itpropartner.com/ippadmin/itpp-docs"
|
||||
edit_uri: edit/main/docs-source/
|
||||
docs_dir: docs-source
|
||||
|
||||
theme:
|
||||
name: material
|
||||
palette:
|
||||
scheme: slate
|
||||
primary: indigo
|
||||
accent: indigo
|
||||
features:
|
||||
- navigation.instant
|
||||
- navigation.tracking
|
||||
- navigation.tabs
|
||||
- navigation.sections
|
||||
- search.highlight
|
||||
- search.share
|
||||
|
||||
plugins:
|
||||
- search
|
||||
|
||||
markdown_extensions:
|
||||
- admonition
|
||||
- pymdownx.details
|
||||
- pymdownx.superfences
|
||||
- pymdownx.highlight
|
||||
- tables
|
||||
- toc:
|
||||
permalink: true
|
||||
|
||||
nav:
|
||||
- Home: index.md
|
||||
- Projects:
|
||||
- ITPP Infrastructure: itpp-infrastructure/index.md
|
||||
- ITPP Standards: itpp-standards/index.md
|
||||
- TransitPin: transitpin/index.md
|
||||
- HomeLab: homelab/index.md
|
||||
- Scripts: scripts/index.md
|
||||
- FleetTracker360: fleettracker360/index.md
|
||||
- Shark Game: shark-game/index.md
|
||||
- VerdictTank: verdicttank/index.md
|
||||
- Apex Track: apex-track/index.md
|
||||
- BoxPilot: boxpilot/index.md
|
||||
- OSINT Tool: osint-tool/index.md
|
||||
- LaunchCheck: launchcheck/index.md
|
||||
+764
@@ -0,0 +1,764 @@
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="/assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
<title>IT Pro Partner Docs</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/assets/stylesheets/palette.ab4e12ef.min.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||||
|
||||
|
||||
|
||||
<script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||||
<label class="md-overlay" for="__drawer"></label>
|
||||
<div data-md-component="skip">
|
||||
|
||||
</div>
|
||||
<div data-md-component="announce">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href="/." title="IT Pro Partner Docs" class="md-header__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
||||
</label>
|
||||
<div class="md-header__title" data-md-component="header-title">
|
||||
<div class="md-header__ellipsis">
|
||||
<div class="md-header__topic">
|
||||
<span class="md-ellipsis">
|
||||
IT Pro Partner Docs
|
||||
</span>
|
||||
</div>
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
</label>
|
||||
<div class="md-search" data-md-component="search" role="dialog">
|
||||
<label class="md-search__overlay" for="__search"></label>
|
||||
<div class="md-search__inner" role="search">
|
||||
<form class="md-search__form" name="search">
|
||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||||
<label class="md-search__icon md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
||||
</label>
|
||||
<nav class="md-search__options" aria-label="Search">
|
||||
|
||||
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
|
||||
</a>
|
||||
|
||||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
</form>
|
||||
<div class="md-search__output">
|
||||
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
||||
<div class="md-search-result" data-md-component="search-result">
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
|
||||
<div class="md-container" data-md-component="container">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
||||
<div class="md-grid">
|
||||
<ul class="md-tabs__list">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="/." class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Home
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="/itpp-infrastructure/" class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<main class="md-main" data-md-component="main">
|
||||
<div class="md-main__inner md-grid">
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="/." title="IT Pro Partner Docs" class="md-nav__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
IT Pro Partner Docs
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/." class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Home
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_2">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/itpp-infrastructure/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Infrastructure
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/itpp-standards/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Standards
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/transitpin/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
TransitPin
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/homelab/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
HomeLab
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/scripts/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Scripts
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/fleettracker360/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
FleetTracker360
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/shark-game/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Shark Game
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/verdicttank/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
VerdictTank
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/apex-track/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Apex Track
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/boxpilot/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
BoxPilot
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/osint-tool/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
OSINT Tool
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/launchcheck/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
LaunchCheck
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-content" data-md-component="content">
|
||||
|
||||
<article class="md-content__inner md-typeset">
|
||||
|
||||
<h1>404 - Not found</h1>
|
||||
|
||||
</article>
|
||||
</div>
|
||||
|
||||
|
||||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
|
||||
|
||||
Made with
|
||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||||
Material for MkDocs
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
<div class="md-dialog" data-md-component="dialog">
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "/", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.sections", "search.highlight", "search.share"], "search": "/assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="/assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,815 @@
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://docs.itpropartner.com/apex-track/CHANGELOG/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="../../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
<title>Apex Track Experience — CHANGELOG - IT Pro Partner Docs</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||||
|
||||
|
||||
|
||||
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||||
<label class="md-overlay" for="__drawer"></label>
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#apex-track-experience-changelog" class="md-skip">
|
||||
Skip to content
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div data-md-component="announce">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href="../.." title="IT Pro Partner Docs" class="md-header__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
||||
</label>
|
||||
<div class="md-header__title" data-md-component="header-title">
|
||||
<div class="md-header__ellipsis">
|
||||
<div class="md-header__topic">
|
||||
<span class="md-ellipsis">
|
||||
IT Pro Partner Docs
|
||||
</span>
|
||||
</div>
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Apex Track Experience — CHANGELOG
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
</label>
|
||||
<div class="md-search" data-md-component="search" role="dialog">
|
||||
<label class="md-search__overlay" for="__search"></label>
|
||||
<div class="md-search__inner" role="search">
|
||||
<form class="md-search__form" name="search">
|
||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||||
<label class="md-search__icon md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
||||
</label>
|
||||
<nav class="md-search__options" aria-label="Search">
|
||||
|
||||
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
|
||||
</a>
|
||||
|
||||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
</form>
|
||||
<div class="md-search__output">
|
||||
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
||||
<div class="md-search-result" data-md-component="search-result">
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
|
||||
<div class="md-container" data-md-component="container">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
||||
<div class="md-grid">
|
||||
<ul class="md-tabs__list">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="../.." class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Home
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="../../itpp-infrastructure/" class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<main class="md-main" data-md-component="main">
|
||||
<div class="md-main__inner md-grid">
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="../.." title="IT Pro Partner Docs" class="md-nav__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
IT Pro Partner Docs
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../.." class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Home
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_2">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../itpp-infrastructure/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Infrastructure
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../itpp-standards/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Standards
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../transitpin/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
TransitPin
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../homelab/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
HomeLab
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../scripts/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Scripts
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../fleettracker360/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
FleetTracker360
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../shark-game/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Shark Game
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../verdicttank/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
VerdictTank
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Apex Track
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../boxpilot/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
BoxPilot
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../osint-tool/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
OSINT Tool
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../launchcheck/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
LaunchCheck
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Table of contents
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#2026-07-10-initial" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
2026-07-10 — Initial
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-content" data-md-component="content">
|
||||
|
||||
<article class="md-content__inner md-typeset">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h1 id="apex-track-experience-changelog">Apex Track Experience — CHANGELOG<a class="headerlink" href="#apex-track-experience-changelog" title="Permanent link">¶</a></h1>
|
||||
<h2 id="2026-07-10-initial">2026-07-10 — Initial<a class="headerlink" href="#2026-07-10-initial" title="Permanent link">¶</a></h2>
|
||||
<ul>
|
||||
<li>Created project repository and directory structure.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
</div>
|
||||
|
||||
|
||||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
|
||||
|
||||
Made with
|
||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||||
Material for MkDocs
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
<div class="md-dialog" data-md-component="dialog">
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.sections", "search.highlight", "search.share"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,943 @@
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://docs.itpropartner.com/apex-track/">
|
||||
|
||||
|
||||
<link rel="prev" href="../verdicttank/">
|
||||
|
||||
|
||||
<link rel="next" href="../boxpilot/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
<title>Apex Track - IT Pro Partner Docs</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||||
|
||||
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||||
<label class="md-overlay" for="__drawer"></label>
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#apex-track" class="md-skip">
|
||||
Skip to content
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div data-md-component="announce">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href=".." title="IT Pro Partner Docs" class="md-header__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
||||
</label>
|
||||
<div class="md-header__title" data-md-component="header-title">
|
||||
<div class="md-header__ellipsis">
|
||||
<div class="md-header__topic">
|
||||
<span class="md-ellipsis">
|
||||
IT Pro Partner Docs
|
||||
</span>
|
||||
</div>
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Apex Track
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
</label>
|
||||
<div class="md-search" data-md-component="search" role="dialog">
|
||||
<label class="md-search__overlay" for="__search"></label>
|
||||
<div class="md-search__inner" role="search">
|
||||
<form class="md-search__form" name="search">
|
||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||||
<label class="md-search__icon md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
||||
</label>
|
||||
<nav class="md-search__options" aria-label="Search">
|
||||
|
||||
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
|
||||
</a>
|
||||
|
||||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
</form>
|
||||
<div class="md-search__output">
|
||||
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
||||
<div class="md-search-result" data-md-component="search-result">
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
|
||||
<div class="md-container" data-md-component="container">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
||||
<div class="md-grid">
|
||||
<ul class="md-tabs__list">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href=".." class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Home
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item md-tabs__item--active">
|
||||
<a href="../itpp-infrastructure/" class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<main class="md-main" data-md-component="main">
|
||||
<div class="md-main__inner md-grid">
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href=".." title="IT Pro Partner Docs" class="md-nav__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
IT Pro Partner Docs
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href=".." class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Home
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_2">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../itpp-infrastructure/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Infrastructure
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../itpp-standards/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Standards
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../transitpin/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
TransitPin
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../homelab/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
HomeLab
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../scripts/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Scripts
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../fleettracker360/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
FleetTracker360
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../shark-game/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Shark Game
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../verdicttank/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
VerdictTank
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
|
||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Apex Track
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<a href="./" class="md-nav__link md-nav__link--active">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Apex Track
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Table of contents
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#tech-stack" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Tech Stack
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#quick-start" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Quick Start
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#related" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Related
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../boxpilot/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
BoxPilot
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../osint-tool/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
OSINT Tool
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../launchcheck/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
LaunchCheck
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Table of contents
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#tech-stack" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Tech Stack
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#quick-start" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Quick Start
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#related" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Related
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-content" data-md-component="content">
|
||||
|
||||
<article class="md-content__inner md-typeset">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h1 id="apex-track">apex-track<a class="headerlink" href="#apex-track" title="Permanent link">¶</a></h1>
|
||||
<blockquote>
|
||||
<p><strong>Owner:</strong> Germaine | <strong>Status:</strong> PLANNED
|
||||
<strong>Last Updated:</strong> 2026-08-09</p>
|
||||
</blockquote>
|
||||
<p>Apex Track is a track event and racing experience management platform. Designed for track day organizers, racing clubs, and motorsport venues to manage event scheduling, participant registration, timing and scoring, and live results publishing.</p>
|
||||
<h2 id="tech-stack">Tech Stack<a class="headerlink" href="#tech-stack" title="Permanent link">¶</a></h2>
|
||||
<ul>
|
||||
<li>TBD — architecture and stack decisions pending</li>
|
||||
</ul>
|
||||
<h2 id="quick-start">Quick Start<a class="headerlink" href="#quick-start" title="Permanent link">¶</a></h2>
|
||||
<div class="highlight"><pre><span></span><code>git<span class="w"> </span>clone<span class="w"> </span>https://git.itpropartner.com/ippadmin/apex-track.git
|
||||
<span class="nb">cd</span><span class="w"> </span>apex-track
|
||||
<span class="c1"># Project in early planning phase — implementation to follow</span>
|
||||
</code></pre></div>
|
||||
<h2 id="related">Related<a class="headerlink" href="#related" title="Permanent link">¶</a></h2>
|
||||
<ul>
|
||||
<li><a href="https://git.itpropartner.com/ippadmin/itpp-infrastructure">itpp-infrastructure</a> — server inventory, DNS</li>
|
||||
<li><a href="https://git.itpropartner.com/ippadmin/itpp-standards">itpp-standards</a> — docs standards and templates</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
</div>
|
||||
|
||||
|
||||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
|
||||
|
||||
Made with
|
||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||||
Material for MkDocs
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
<div class="md-dialog" data-md-component="dialog">
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.sections", "search.highlight", "search.share"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
+16
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+18
@@ -0,0 +1,18 @@
|
||||
/*!
|
||||
* Lunr languages, `Danish` language
|
||||
* https://github.com/MihaiValentin/lunr-languages
|
||||
*
|
||||
* Copyright 2014, Mihai Valentin
|
||||
* http://www.mozilla.org/MPL/
|
||||
*/
|
||||
/*!
|
||||
* based on
|
||||
* Snowball JavaScript Library v0.3
|
||||
* http://code.google.com/p/urim/
|
||||
* http://snowball.tartarus.org/
|
||||
*
|
||||
* Copyright 2010, Oleg Mazko
|
||||
* http://www.mozilla.org/MPL/
|
||||
*/
|
||||
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d<a&&(d=a)}}function n(){var e,r;if(f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});
|
||||
+18
File diff suppressed because one or more lines are too long
+18
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+18
File diff suppressed because one or more lines are too long
+18
File diff suppressed because one or more lines are too long
+18
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Za-zA-Z0-90-9",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}});
|
||||
+18
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hy=function(){this.pipeline.reset(),this.pipeline.add(e.hy.trimmer,e.hy.stopWordFilter)},e.hy.wordCharacters="[A-Za-z-֏ff-ﭏ]",e.hy.trimmer=e.trimmerSupport.generateTrimmer(e.hy.wordCharacters),e.Pipeline.registerFunction(e.hy.trimmer,"trimmer-hy"),e.hy.stopWordFilter=e.generateStopWordFilter("դու և եք էիր էիք հետո նաև նրանք որը վրա է որ պիտի են այս մեջ ն իր ու ի այդ որոնք այն կամ էր մի ես համար այլ իսկ էին ենք հետ ին թ էինք մենք նրա նա դուք եմ էի ըստ որպես ում".split(" ")),e.Pipeline.registerFunction(e.hy.stopWordFilter,"stopWordFilter-hy"),e.hy.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}(),e.Pipeline.registerFunction(e.hy.stemmer,"stemmer-hy")}});
|
||||
+18
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n<p.length;n++)r?a.push(new e.Token(p[n],{position:[f,p[n].length],index:a.length})):a.push(p[n]),f+=p[n].length;l=c+1}return a},e.ja.stemmer=function(){return function(e){return e}}(),e.Pipeline.registerFunction(e.ja.stemmer,"stemmer-ja"),e.ja.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9",e.ja.trimmer=e.trimmerSupport.generateTrimmer(e.ja.wordCharacters),e.Pipeline.registerFunction(e.ja.trimmer,"trimmer-ja"),e.ja.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.ja.stopWordFilter,"stopWordFilter-ja"),e.jp=e.ja,e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.Pipeline.registerFunction(e.jp.trimmer,"trimmer-jp"),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}});
|
||||
@@ -0,0 +1 @@
|
||||
module.exports=require("./lunr.ja");
|
||||
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.kn=function(){this.pipeline.reset(),this.pipeline.add(e.kn.trimmer,e.kn.stopWordFilter,e.kn.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.kn.stemmer))},e.kn.wordCharacters="ಀ-಄ಅ-ಔಕ-ಹಾ-ೌ಼-ಽೕ-ೖೝ-ೞೠ-ೡೢ-ೣ೦-೯ೱ-ೳ",e.kn.trimmer=e.trimmerSupport.generateTrimmer(e.kn.wordCharacters),e.Pipeline.registerFunction(e.kn.trimmer,"trimmer-kn"),e.kn.stopWordFilter=e.generateStopWordFilter("ಮತ್ತು ಈ ಒಂದು ರಲ್ಲಿ ಹಾಗೂ ಎಂದು ಅಥವಾ ಇದು ರ ಅವರು ಎಂಬ ಮೇಲೆ ಅವರ ತನ್ನ ಆದರೆ ತಮ್ಮ ನಂತರ ಮೂಲಕ ಹೆಚ್ಚು ನ ಆ ಕೆಲವು ಅನೇಕ ಎರಡು ಹಾಗು ಪ್ರಮುಖ ಇದನ್ನು ಇದರ ಸುಮಾರು ಅದರ ಅದು ಮೊದಲ ಬಗ್ಗೆ ನಲ್ಲಿ ರಂದು ಇತರ ಅತ್ಯಂತ ಹೆಚ್ಚಿನ ಸಹ ಸಾಮಾನ್ಯವಾಗಿ ನೇ ಹಲವಾರು ಹೊಸ ದಿ ಕಡಿಮೆ ಯಾವುದೇ ಹೊಂದಿದೆ ದೊಡ್ಡ ಅನ್ನು ಇವರು ಪ್ರಕಾರ ಇದೆ ಮಾತ್ರ ಕೂಡ ಇಲ್ಲಿ ಎಲ್ಲಾ ವಿವಿಧ ಅದನ್ನು ಹಲವು ರಿಂದ ಕೇವಲ ದ ದಕ್ಷಿಣ ಗೆ ಅವನ ಅತಿ ನೆಯ ಬಹಳ ಕೆಲಸ ಎಲ್ಲ ಪ್ರತಿ ಇತ್ಯಾದಿ ಇವು ಬೇರೆ ಹೀಗೆ ನಡುವೆ ಇದಕ್ಕೆ ಎಸ್ ಇವರ ಮೊದಲು ಶ್ರೀ ಮಾಡುವ ಇದರಲ್ಲಿ ರೀತಿಯ ಮಾಡಿದ ಕಾಲ ಅಲ್ಲಿ ಮಾಡಲು ಅದೇ ಈಗ ಅವು ಗಳು ಎ ಎಂಬುದು ಅವನು ಅಂದರೆ ಅವರಿಗೆ ಇರುವ ವಿಶೇಷ ಮುಂದೆ ಅವುಗಳ ಮುಂತಾದ ಮೂಲ ಬಿ ಮೀ ಒಂದೇ ಇನ್ನೂ ಹೆಚ್ಚಾಗಿ ಮಾಡಿ ಅವರನ್ನು ಇದೇ ಯ ರೀತಿಯಲ್ಲಿ ಜೊತೆ ಅದರಲ್ಲಿ ಮಾಡಿದರು ನಡೆದ ಆಗ ಮತ್ತೆ ಪೂರ್ವ ಆತ ಬಂದ ಯಾವ ಒಟ್ಟು ಇತರೆ ಹಿಂದೆ ಪ್ರಮಾಣದ ಗಳನ್ನು ಕುರಿತು ಯು ಆದ್ದರಿಂದ ಅಲ್ಲದೆ ನಗರದ ಮೇಲಿನ ಏಕೆಂದರೆ ರಷ್ಟು ಎಂಬುದನ್ನು ಬಾರಿ ಎಂದರೆ ಹಿಂದಿನ ಆದರೂ ಆದ ಸಂಬಂಧಿಸಿದ ಮತ್ತೊಂದು ಸಿ ಆತನ ".split(" ")),e.kn.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.kn.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var n=t.toString().toLowerCase().replace(/^\s+/,"");return r.cut(n).split("|")},e.Pipeline.registerFunction(e.kn.stemmer,"stemmer-kn"),e.Pipeline.registerFunction(e.kn.stopWordFilter,"stopWordFilter-kn")}});
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var t=Array.prototype.slice.call(arguments),i=t.join("-"),r="",n=[],s=[],p=0;p<t.length;++p)"en"==t[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[t[p]].wordCharacters,e[t[p]].stopWordFilter&&n.unshift(e[t[p]].stopWordFilter),e[t[p]].stemmer&&(n.push(e[t[p]].stemmer),s.push(e[t[p]].stemmer)));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+i),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}});
|
||||
+18
File diff suppressed because one or more lines are too long
+18
@@ -0,0 +1,18 @@
|
||||
/*!
|
||||
* Lunr languages, `Norwegian` language
|
||||
* https://github.com/MihaiValentin/lunr-languages
|
||||
*
|
||||
* Copyright 2014, Mihai Valentin
|
||||
* http://www.mozilla.org/MPL/
|
||||
*/
|
||||
/*!
|
||||
* based on
|
||||
* Snowball JavaScript Library v0.3
|
||||
* http://code.google.com/p/urim/
|
||||
* http://snowball.tartarus.org/
|
||||
*
|
||||
* Copyright 2010, Oleg Mazko
|
||||
* http://www.mozilla.org/MPL/
|
||||
*/
|
||||
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a<s&&(a=s)}}function i(){var e,r,n;if(w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});
|
||||
+18
File diff suppressed because one or more lines are too long
+18
File diff suppressed because one or more lines are too long
+18
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sa=function(){this.pipeline.reset(),this.pipeline.add(e.sa.trimmer,e.sa.stopWordFilter,e.sa.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sa.stemmer))},e.sa.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿ꣠-꣱ꣲ-ꣷ꣸-ꣻ꣼-ꣽꣾ-ꣿᆰ0-ᆰ9",e.sa.trimmer=e.trimmerSupport.generateTrimmer(e.sa.wordCharacters),e.Pipeline.registerFunction(e.sa.trimmer,"trimmer-sa"),e.sa.stopWordFilter=e.generateStopWordFilter('तथा अयम् एकम् इत्यस्मिन् तथा तत् वा अयम् इत्यस्य ते आहूत उपरि तेषाम् किन्तु तेषाम् तदा इत्यनेन अधिकः इत्यस्य तत् केचन बहवः द्वि तथा महत्वपूर्णः अयम् अस्य विषये अयं अस्ति तत् प्रथमः विषये इत्युपरि इत्युपरि इतर अधिकतमः अधिकः अपि सामान्यतया ठ इतरेतर नूतनम् द न्यूनम् कश्चित् वा विशालः द सः अस्ति तदनुसारम् तत्र अस्ति केवलम् अपि अत्र सर्वे विविधाः तत् बहवः यतः इदानीम् द दक्षिण इत्यस्मै तस्य उपरि नथ अतीव कार्यम् सर्वे एकैकम् इत्यादि। एते सन्ति उत इत्थम् मध्ये एतदर्थं . स कस्य प्रथमः श्री. करोति अस्मिन् प्रकारः निर्मिता कालः तत्र कर्तुं समान अधुना ते सन्ति स एकः अस्ति सः अर्थात् तेषां कृते . स्थितम् विशेषः अग्रिम तेषाम् समान स्रोतः ख म समान इदानीमपि अधिकतया करोतु ते समान इत्यस्य वीथी सह यस्मिन् कृतवान् धृतः तदा पुनः पूर्वं सः आगतः किम् कुल इतर पुरा मात्रा स विषये उ अतएव अपि नगरस्य उपरि यतः प्रतिशतं कतरः कालः साधनानि भूत तथापि जात सम्बन्धि अन्यत् ग अतः अस्माकं स्वकीयाः अस्माकं इदानीं अन्तः इत्यादयः भवन्तः इत्यादयः एते एताः तस्य अस्य इदम् एते तेषां तेषां तेषां तान् तेषां तेषां तेषां समानः सः एकः च तादृशाः बहवः अन्ये च वदन्ति यत् कियत् कस्मै कस्मै यस्मै यस्मै यस्मै यस्मै न अतिनीचः किन्तु प्रथमं सम्पूर्णतया ततः चिरकालानन्तरं पुस्तकं सम्पूर्णतया अन्तः किन्तु अत्र वा इह इव श्रद्धाय अवशिष्यते परन्तु अन्ये वर्गाः सन्ति ते सन्ति शक्नुवन्ति सर्वे मिलित्वा सर्वे एकत्र"'.split(" ")),e.sa.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.sa.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var i=t.toString().toLowerCase().replace(/^\s+/,"");return r.cut(i).split("|")},e.Pipeline.registerFunction(e.sa.stemmer,"stemmer-sa"),e.Pipeline.registerFunction(e.sa.stopWordFilter,"stopWordFilter-sa")}});
|
||||
@@ -0,0 +1 @@
|
||||
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=_.s_size-1-l;m>=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
/*!
|
||||
* Lunr languages, `Swedish` language
|
||||
* https://github.com/MihaiValentin/lunr-languages
|
||||
*
|
||||
* Copyright 2014, Mihai Valentin
|
||||
* http://www.mozilla.org/MPL/
|
||||
*/
|
||||
/*!
|
||||
* based on
|
||||
* Snowball JavaScript Library v0.3
|
||||
* http://code.google.com/p/urim/
|
||||
* http://snowball.tartarus.org/
|
||||
*
|
||||
* Copyright 2010, Oleg Mazko
|
||||
* http://www.mozilla.org/MPL/
|
||||
*/
|
||||
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o<a&&(o=a)}}function t(){var e,r=w.limit_backward;if(w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});
|
||||
@@ -0,0 +1 @@
|
||||
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ta=function(){this.pipeline.reset(),this.pipeline.add(e.ta.trimmer,e.ta.stopWordFilter,e.ta.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ta.stemmer))},e.ta.wordCharacters="-உஊ-ஏஐ-ஙச-ட-னப-யர-ஹ-ிீ-ொ-ௐ---௩௪-௯௰-௹௺-a-zA-Za-zA-Z0-90-9",e.ta.trimmer=e.trimmerSupport.generateTrimmer(e.ta.wordCharacters),e.Pipeline.registerFunction(e.ta.trimmer,"trimmer-ta"),e.ta.stopWordFilter=e.generateStopWordFilter("அங்கு அங்கே அது அதை அந்த அவர் அவர்கள் அவள் அவன் அவை ஆக ஆகவே ஆகையால் ஆதலால் ஆதலினால் ஆனாலும் ஆனால் இங்கு இங்கே இது இதை இந்த இப்படி இவர் இவர்கள் இவள் இவன் இவை இவ்வளவு உனக்கு உனது உன் உன்னால் எங்கு எங்கே எது எதை எந்த எப்படி எவர் எவர்கள் எவள் எவன் எவை எவ்வளவு எனக்கு எனது எனவே என் என்ன என்னால் ஏது ஏன் தனது தன்னால் தானே தான் நாங்கள் நாம் நான் நீ நீங்கள்".split(" ")),e.ta.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.ta.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.ta.stemmer,"stemmer-ta"),e.Pipeline.registerFunction(e.ta.stopWordFilter,"stopWordFilter-ta")}});
|
||||
@@ -0,0 +1 @@
|
||||
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.te=function(){this.pipeline.reset(),this.pipeline.add(e.te.trimmer,e.te.stopWordFilter,e.te.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.te.stemmer))},e.te.wordCharacters="ఀ-ఄఅ-ఔక-హా-ౌౕ-ౖౘ-ౚౠ-ౡౢ-ౣ౦-౯౸-౿఼ఽ్ౝ౷",e.te.trimmer=e.trimmerSupport.generateTrimmer(e.te.wordCharacters),e.Pipeline.registerFunction(e.te.trimmer,"trimmer-te"),e.te.stopWordFilter=e.generateStopWordFilter("అందరూ అందుబాటులో అడగండి అడగడం అడ్డంగా అనుగుణంగా అనుమతించు అనుమతిస్తుంది అయితే ఇప్పటికే ఉన్నారు ఎక్కడైనా ఎప్పుడు ఎవరైనా ఎవరో ఏ ఏదైనా ఏమైనప్పటికి ఒక ఒకరు కనిపిస్తాయి కాదు కూడా గా గురించి చుట్టూ చేయగలిగింది తగిన తర్వాత దాదాపు దూరంగా నిజంగా పై ప్రకారం ప్రక్కన మధ్య మరియు మరొక మళ్ళీ మాత్రమే మెచ్చుకో వద్ద వెంట వేరుగా వ్యతిరేకంగా సంబంధం".split(" ")),e.te.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.te.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.te.stemmer,"stemmer-te"),e.Pipeline.registerFunction(e.te.stopWordFilter,"stopWordFilter-te")}});
|
||||
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[-]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}});
|
||||
+18
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}});
|
||||
@@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 為 以 于 於 上 他 而 后 後 之 来 來 及 了 因 下 可 到 由 这 這 与 與 也 此 但 并 並 个 個 其 已 无 無 小 我 们 們 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 當 从 從 得 打 凡 儿 兒 尔 爾 该 該 各 给 給 跟 和 何 还 還 即 几 幾 既 看 据 據 距 靠 啦 另 么 麽 每 嘛 拿 哪 您 凭 憑 且 却 卻 让 讓 仍 啥 如 若 使 谁 誰 虽 雖 随 隨 同 所 她 哇 嗡 往 些 向 沿 哟 喲 用 咱 则 則 怎 曾 至 致 着 著 诸 諸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}});
|
||||
@@ -0,0 +1,206 @@
|
||||
/**
|
||||
* export the module via AMD, CommonJS or as a browser global
|
||||
* Export code from https://github.com/umdjs/umd/blob/master/returnExports.js
|
||||
*/
|
||||
;(function (root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(factory)
|
||||
} else if (typeof exports === 'object') {
|
||||
/**
|
||||
* Node. Does not work with strict CommonJS, but
|
||||
* only CommonJS-like environments that support module.exports,
|
||||
* like Node.
|
||||
*/
|
||||
module.exports = factory()
|
||||
} else {
|
||||
// Browser globals (root is window)
|
||||
factory()(root.lunr);
|
||||
}
|
||||
}(this, function () {
|
||||
/**
|
||||
* Just return a value to define the module export.
|
||||
* This example returns an object, but the module
|
||||
* can return a function as the exported value.
|
||||
*/
|
||||
|
||||
return function(lunr) {
|
||||
// TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript
|
||||
// (c) 2008 Taku Kudo <taku@chasen.org>
|
||||
// TinySegmenter is freely distributable under the terms of a new BSD licence.
|
||||
// For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt
|
||||
|
||||
function TinySegmenter() {
|
||||
var patterns = {
|
||||
"[一二三四五六七八九十百千万億兆]":"M",
|
||||
"[一-龠々〆ヵヶ]":"H",
|
||||
"[ぁ-ん]":"I",
|
||||
"[ァ-ヴーア-ン゙ー]":"K",
|
||||
"[a-zA-Za-zA-Z]":"A",
|
||||
"[0-90-9]":"N"
|
||||
}
|
||||
this.chartype_ = [];
|
||||
for (var i in patterns) {
|
||||
var regexp = new RegExp(i);
|
||||
this.chartype_.push([regexp, patterns[i]]);
|
||||
}
|
||||
|
||||
this.BIAS__ = -332
|
||||
this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378};
|
||||
this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920};
|
||||
this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266};
|
||||
this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352};
|
||||
this.BP2__ = {"BO":60,"OO":-1762};
|
||||
this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965};
|
||||
this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146};
|
||||
this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699};
|
||||
this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973};
|
||||
this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682};
|
||||
this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669};
|
||||
this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990};
|
||||
this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832};
|
||||
this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649};
|
||||
this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393};
|
||||
this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841};
|
||||
this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68};
|
||||
this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591};
|
||||
this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685};
|
||||
this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156};
|
||||
this.TW1__ = {"につい":-4681,"東京都":2026};
|
||||
this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216};
|
||||
this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287};
|
||||
this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865};
|
||||
this.UC1__ = {"A":484,"K":93,"M":645,"O":-505};
|
||||
this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646};
|
||||
this.UC3__ = {"A":-1370,"I":2311};
|
||||
this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646};
|
||||
this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831};
|
||||
this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387};
|
||||
this.UP1__ = {"O":-214};
|
||||
this.UP2__ = {"B":69,"O":935};
|
||||
this.UP3__ = {"B":189};
|
||||
this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422};
|
||||
this.UQ2__ = {"BH":216,"BI":113,"OK":1759};
|
||||
this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212};
|
||||
this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135};
|
||||
this.UW2__ = {",":-829,"、":-829,"〇":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568};
|
||||
this.UW3__ = {",":4889,"1":-800,"−":-1723,"、":4889,"々":-2311,"〇":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"1":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278};
|
||||
this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"〇":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637};
|
||||
this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"1":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343};
|
||||
this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"1":-270,"E1":306,"ル":-673,"ン":-496};
|
||||
|
||||
return this;
|
||||
}
|
||||
TinySegmenter.prototype.ctype_ = function(str) {
|
||||
for (var i in this.chartype_) {
|
||||
if (str.match(this.chartype_[i][0])) {
|
||||
return this.chartype_[i][1];
|
||||
}
|
||||
}
|
||||
return "O";
|
||||
}
|
||||
|
||||
TinySegmenter.prototype.ts_ = function(v) {
|
||||
if (v) { return v; }
|
||||
return 0;
|
||||
}
|
||||
|
||||
TinySegmenter.prototype.segment = function(input) {
|
||||
if (input == null || input == undefined || input == "") {
|
||||
return [];
|
||||
}
|
||||
var result = [];
|
||||
var seg = ["B3","B2","B1"];
|
||||
var ctype = ["O","O","O"];
|
||||
var o = input.split("");
|
||||
for (i = 0; i < o.length; ++i) {
|
||||
seg.push(o[i]);
|
||||
ctype.push(this.ctype_(o[i]))
|
||||
}
|
||||
seg.push("E1");
|
||||
seg.push("E2");
|
||||
seg.push("E3");
|
||||
ctype.push("O");
|
||||
ctype.push("O");
|
||||
ctype.push("O");
|
||||
var word = seg[3];
|
||||
var p1 = "U";
|
||||
var p2 = "U";
|
||||
var p3 = "U";
|
||||
for (var i = 4; i < seg.length - 3; ++i) {
|
||||
var score = this.BIAS__;
|
||||
var w1 = seg[i-3];
|
||||
var w2 = seg[i-2];
|
||||
var w3 = seg[i-1];
|
||||
var w4 = seg[i];
|
||||
var w5 = seg[i+1];
|
||||
var w6 = seg[i+2];
|
||||
var c1 = ctype[i-3];
|
||||
var c2 = ctype[i-2];
|
||||
var c3 = ctype[i-1];
|
||||
var c4 = ctype[i];
|
||||
var c5 = ctype[i+1];
|
||||
var c6 = ctype[i+2];
|
||||
score += this.ts_(this.UP1__[p1]);
|
||||
score += this.ts_(this.UP2__[p2]);
|
||||
score += this.ts_(this.UP3__[p3]);
|
||||
score += this.ts_(this.BP1__[p1 + p2]);
|
||||
score += this.ts_(this.BP2__[p2 + p3]);
|
||||
score += this.ts_(this.UW1__[w1]);
|
||||
score += this.ts_(this.UW2__[w2]);
|
||||
score += this.ts_(this.UW3__[w3]);
|
||||
score += this.ts_(this.UW4__[w4]);
|
||||
score += this.ts_(this.UW5__[w5]);
|
||||
score += this.ts_(this.UW6__[w6]);
|
||||
score += this.ts_(this.BW1__[w2 + w3]);
|
||||
score += this.ts_(this.BW2__[w3 + w4]);
|
||||
score += this.ts_(this.BW3__[w4 + w5]);
|
||||
score += this.ts_(this.TW1__[w1 + w2 + w3]);
|
||||
score += this.ts_(this.TW2__[w2 + w3 + w4]);
|
||||
score += this.ts_(this.TW3__[w3 + w4 + w5]);
|
||||
score += this.ts_(this.TW4__[w4 + w5 + w6]);
|
||||
score += this.ts_(this.UC1__[c1]);
|
||||
score += this.ts_(this.UC2__[c2]);
|
||||
score += this.ts_(this.UC3__[c3]);
|
||||
score += this.ts_(this.UC4__[c4]);
|
||||
score += this.ts_(this.UC5__[c5]);
|
||||
score += this.ts_(this.UC6__[c6]);
|
||||
score += this.ts_(this.BC1__[c2 + c3]);
|
||||
score += this.ts_(this.BC2__[c3 + c4]);
|
||||
score += this.ts_(this.BC3__[c4 + c5]);
|
||||
score += this.ts_(this.TC1__[c1 + c2 + c3]);
|
||||
score += this.ts_(this.TC2__[c2 + c3 + c4]);
|
||||
score += this.ts_(this.TC3__[c3 + c4 + c5]);
|
||||
score += this.ts_(this.TC4__[c4 + c5 + c6]);
|
||||
// score += this.ts_(this.TC5__[c4 + c5 + c6]);
|
||||
score += this.ts_(this.UQ1__[p1 + c1]);
|
||||
score += this.ts_(this.UQ2__[p2 + c2]);
|
||||
score += this.ts_(this.UQ3__[p3 + c3]);
|
||||
score += this.ts_(this.BQ1__[p2 + c2 + c3]);
|
||||
score += this.ts_(this.BQ2__[p2 + c3 + c4]);
|
||||
score += this.ts_(this.BQ3__[p3 + c2 + c3]);
|
||||
score += this.ts_(this.BQ4__[p3 + c3 + c4]);
|
||||
score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]);
|
||||
score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]);
|
||||
score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]);
|
||||
score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]);
|
||||
var p = "O";
|
||||
if (score > 0) {
|
||||
result.push(word);
|
||||
word = "";
|
||||
p = "B";
|
||||
}
|
||||
p1 = p2;
|
||||
p2 = p3;
|
||||
p3 = p;
|
||||
word += seg[i];
|
||||
}
|
||||
result.push(word);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
lunr.TinySegmenter = TinySegmenter;
|
||||
};
|
||||
|
||||
}));
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["src/templates/assets/stylesheets/palette/_scheme.scss","../../../../src/templates/assets/stylesheets/palette.scss","src/templates/assets/stylesheets/palette/_accent.scss","src/templates/assets/stylesheets/palette/_primary.scss","src/templates/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"AA2BA,cAGE,6BAME,sDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CACA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CAGA,mDAAA,CACA,gDAAA,CACA,yDAAA,CACA,4DAAA,CAGA,0BAAA,CACA,mCAAA,CAGA,iCAAA,CACA,kCAAA,CACA,mCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,+CAAA,CACA,6DAAA,CACA,gEAAA,CACA,4DAAA,CACA,4DAAA,CACA,6DAAA,CAGA,6CAAA,CAGA,+CAAA,CAGA,uDAAA,CACA,6DAAA,CACA,2DAAA,CAGA,iCAAA,CAGA,yDAAA,CACA,iEAAA,CAGA,mDAAA,CACA,mDAAA,CAGA,qDAAA,CACA,uDAAA,CAGA,8DAAA,CAKA,8DAAA,CAKA,0DAAA,CAzEA,iBCiBF,CD6DE,kHAEE,YC3DJ,CDkFE,yDACE,4BChFJ,CD+EE,2DACE,4BC7EJ,CD4EE,gEACE,4BC1EJ,CDyEE,2DACE,4BCvEJ,CDsEE,yDACE,4BCpEJ,CDmEE,0DACE,4BCjEJ,CDgEE,gEACE,4BC9DJ,CD6DE,0DACE,4BC3DJ,CD0DE,2OACE,4BC/CJ,CDsDA,+FAGE,iCCpDF,CACF,CCjDE,2BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD6CN,CCvDE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDoDN,CC9DE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD2DN,CCrEE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDkEN,CC5EE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDyEN,CCnFE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDgFN,CC1FE,kCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDuFN,CCjGE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD8FN,CCxGE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDqGN,CC/GE,6BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD4GN,CCtHE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDmHN,CC7HE,4BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCD6HN,CCpIE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDoIN,CC3IE,6BACE,yBAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCD2IN,CClJE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDkJN,CCzJE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDsJN,CE3JE,4BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwJN,CEnKE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgKN,CE3KE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwKN,CEnLE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgLN,CE3LE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwLN,CEnME,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgMN,CE3ME,mCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwMN,CEnNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgNN,CE3NE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwNN,CEnOE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgON,CE3OE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwON,CEnPE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFmPN,CE3PE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCF2PN,CEnQE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFmQN,CE3QE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCF2QN,CEnRE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgRN,CE3RE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwRN,CEnSE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BF4RN,CE5SE,kCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BFqSN,CEtRE,sEACE,4BFyRJ,CE1RE,+DACE,4BF6RJ,CE9RE,iEACE,4BFiSJ,CElSE,gEACE,4BFqSJ,CEtSE,iEACE,4BFySJ,CEhSA,8BACE,mDAAA,CACA,4DAAA,CACA,0DAAA,CACA,oDAAA,CACA,2DAAA,CAGA,4BFiSF,CE9RE,yCACE,+BFgSJ,CE7RI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCFiSN,CG7MI,mCD1EA,+CACE,8CF0RJ,CEvRI,qDACE,8CFyRN,CEpRE,iEACE,mCFsRJ,CACF,CGxNI,sCDvDA,uCACE,oCFkRJ,CACF,CEzQA,8BACE,kDAAA,CACA,4DAAA,CACA,wDAAA,CACA,oDAAA,CACA,6DAAA,CAGA,4BF0QF,CEvQE,yCACE,+BFyQJ,CEtQI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCF0QN,CEnQE,yCACE,6CFqQJ,CG9NI,0CDhCA,8CACE,gDFiQJ,CACF,CGnOI,0CDvBA,iFACE,6CF6PJ,CACF,CG3PI,sCDKA,uCACE,6CFyPJ,CACF","file":"palette.css"}
|
||||
@@ -0,0 +1,815 @@
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://docs.itpropartner.com/boxpilot/CHANGELOG/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="../../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
<title>BoxPilot Logistics — CHANGELOG - IT Pro Partner Docs</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||||
|
||||
|
||||
|
||||
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||||
<label class="md-overlay" for="__drawer"></label>
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#boxpilot-logistics-changelog" class="md-skip">
|
||||
Skip to content
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div data-md-component="announce">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href="../.." title="IT Pro Partner Docs" class="md-header__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
||||
</label>
|
||||
<div class="md-header__title" data-md-component="header-title">
|
||||
<div class="md-header__ellipsis">
|
||||
<div class="md-header__topic">
|
||||
<span class="md-ellipsis">
|
||||
IT Pro Partner Docs
|
||||
</span>
|
||||
</div>
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
BoxPilot Logistics — CHANGELOG
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
</label>
|
||||
<div class="md-search" data-md-component="search" role="dialog">
|
||||
<label class="md-search__overlay" for="__search"></label>
|
||||
<div class="md-search__inner" role="search">
|
||||
<form class="md-search__form" name="search">
|
||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||||
<label class="md-search__icon md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
||||
</label>
|
||||
<nav class="md-search__options" aria-label="Search">
|
||||
|
||||
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
|
||||
</a>
|
||||
|
||||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
</form>
|
||||
<div class="md-search__output">
|
||||
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
||||
<div class="md-search-result" data-md-component="search-result">
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
|
||||
<div class="md-container" data-md-component="container">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
||||
<div class="md-grid">
|
||||
<ul class="md-tabs__list">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="../.." class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Home
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="../../itpp-infrastructure/" class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<main class="md-main" data-md-component="main">
|
||||
<div class="md-main__inner md-grid">
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="../.." title="IT Pro Partner Docs" class="md-nav__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
IT Pro Partner Docs
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../.." class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Home
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_2">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../itpp-infrastructure/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Infrastructure
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../itpp-standards/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Standards
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../transitpin/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
TransitPin
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../homelab/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
HomeLab
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../scripts/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Scripts
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../fleettracker360/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
FleetTracker360
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../shark-game/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Shark Game
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../verdicttank/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
VerdictTank
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../apex-track/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Apex Track
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
BoxPilot
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../osint-tool/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
OSINT Tool
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../launchcheck/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
LaunchCheck
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Table of contents
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#2026-07-10-initial" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
2026-07-10 — Initial
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-content" data-md-component="content">
|
||||
|
||||
<article class="md-content__inner md-typeset">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h1 id="boxpilot-logistics-changelog">BoxPilot Logistics — CHANGELOG<a class="headerlink" href="#boxpilot-logistics-changelog" title="Permanent link">¶</a></h1>
|
||||
<h2 id="2026-07-10-initial">2026-07-10 — Initial<a class="headerlink" href="#2026-07-10-initial" title="Permanent link">¶</a></h2>
|
||||
<ul>
|
||||
<li>Created project repository and directory structure.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
</div>
|
||||
|
||||
|
||||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
|
||||
|
||||
Made with
|
||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||||
Material for MkDocs
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
<div class="md-dialog" data-md-component="dialog">
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.sections", "search.highlight", "search.share"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,943 @@
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://docs.itpropartner.com/boxpilot/">
|
||||
|
||||
|
||||
<link rel="prev" href="../apex-track/">
|
||||
|
||||
|
||||
<link rel="next" href="../osint-tool/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
<title>BoxPilot - IT Pro Partner Docs</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||||
|
||||
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||||
<label class="md-overlay" for="__drawer"></label>
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#boxpilot" class="md-skip">
|
||||
Skip to content
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div data-md-component="announce">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href=".." title="IT Pro Partner Docs" class="md-header__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
||||
</label>
|
||||
<div class="md-header__title" data-md-component="header-title">
|
||||
<div class="md-header__ellipsis">
|
||||
<div class="md-header__topic">
|
||||
<span class="md-ellipsis">
|
||||
IT Pro Partner Docs
|
||||
</span>
|
||||
</div>
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
BoxPilot
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
</label>
|
||||
<div class="md-search" data-md-component="search" role="dialog">
|
||||
<label class="md-search__overlay" for="__search"></label>
|
||||
<div class="md-search__inner" role="search">
|
||||
<form class="md-search__form" name="search">
|
||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||||
<label class="md-search__icon md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
||||
</label>
|
||||
<nav class="md-search__options" aria-label="Search">
|
||||
|
||||
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
|
||||
</a>
|
||||
|
||||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
</form>
|
||||
<div class="md-search__output">
|
||||
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
||||
<div class="md-search-result" data-md-component="search-result">
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
|
||||
<div class="md-container" data-md-component="container">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
||||
<div class="md-grid">
|
||||
<ul class="md-tabs__list">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href=".." class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Home
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item md-tabs__item--active">
|
||||
<a href="../itpp-infrastructure/" class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<main class="md-main" data-md-component="main">
|
||||
<div class="md-main__inner md-grid">
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href=".." title="IT Pro Partner Docs" class="md-nav__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
IT Pro Partner Docs
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href=".." class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Home
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_2">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../itpp-infrastructure/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Infrastructure
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../itpp-standards/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Standards
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../transitpin/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
TransitPin
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../homelab/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
HomeLab
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../scripts/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Scripts
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../fleettracker360/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
FleetTracker360
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../shark-game/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Shark Game
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../verdicttank/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
VerdictTank
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../apex-track/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Apex Track
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
|
||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
BoxPilot
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<a href="./" class="md-nav__link md-nav__link--active">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
BoxPilot
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Table of contents
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#tech-stack" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Tech Stack
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#quick-start" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Quick Start
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#related" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Related
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../osint-tool/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
OSINT Tool
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../launchcheck/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
LaunchCheck
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Table of contents
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#tech-stack" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Tech Stack
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#quick-start" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Quick Start
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#related" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Related
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-content" data-md-component="content">
|
||||
|
||||
<article class="md-content__inner md-typeset">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h1 id="boxpilot">boxpilot<a class="headerlink" href="#boxpilot" title="Permanent link">¶</a></h1>
|
||||
<blockquote>
|
||||
<p><strong>Owner:</strong> Germaine | <strong>Status:</strong> PLANNED
|
||||
<strong>Last Updated:</strong> 2026-08-09</p>
|
||||
</blockquote>
|
||||
<p>BoxPilot is a logistics operations platform for freight, shipping, and delivery management. Designed to streamline dispatch, route optimization, carrier management, and shipment tracking for logistics operations.</p>
|
||||
<h2 id="tech-stack">Tech Stack<a class="headerlink" href="#tech-stack" title="Permanent link">¶</a></h2>
|
||||
<ul>
|
||||
<li>TBD — architecture and stack decisions pending</li>
|
||||
</ul>
|
||||
<h2 id="quick-start">Quick Start<a class="headerlink" href="#quick-start" title="Permanent link">¶</a></h2>
|
||||
<div class="highlight"><pre><span></span><code>git<span class="w"> </span>clone<span class="w"> </span>https://git.itpropartner.com/ippadmin/boxpilot.git
|
||||
<span class="nb">cd</span><span class="w"> </span>boxpilot
|
||||
<span class="c1"># Project in early planning phase — implementation to follow</span>
|
||||
</code></pre></div>
|
||||
<h2 id="related">Related<a class="headerlink" href="#related" title="Permanent link">¶</a></h2>
|
||||
<ul>
|
||||
<li><a href="https://git.itpropartner.com/ippadmin/itpp-infrastructure">itpp-infrastructure</a> — server inventory, DNS</li>
|
||||
<li><a href="https://git.itpropartner.com/ippadmin/itpp-standards">itpp-standards</a> — docs standards and templates</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
</div>
|
||||
|
||||
|
||||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
|
||||
|
||||
Made with
|
||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||||
Material for MkDocs
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
<div class="md-dialog" data-md-component="dialog">
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.sections", "search.highlight", "search.share"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,874 @@
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://docs.itpropartner.com/fleettracker360/CHANGELOG/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="../../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
<title>FleetTracker360 — CHANGELOG - IT Pro Partner Docs</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||||
|
||||
|
||||
|
||||
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||||
<label class="md-overlay" for="__drawer"></label>
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#fleettracker360-changelog" class="md-skip">
|
||||
Skip to content
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div data-md-component="announce">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href="../.." title="IT Pro Partner Docs" class="md-header__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
||||
</label>
|
||||
<div class="md-header__title" data-md-component="header-title">
|
||||
<div class="md-header__ellipsis">
|
||||
<div class="md-header__topic">
|
||||
<span class="md-ellipsis">
|
||||
IT Pro Partner Docs
|
||||
</span>
|
||||
</div>
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
FleetTracker360 — CHANGELOG
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
</label>
|
||||
<div class="md-search" data-md-component="search" role="dialog">
|
||||
<label class="md-search__overlay" for="__search"></label>
|
||||
<div class="md-search__inner" role="search">
|
||||
<form class="md-search__form" name="search">
|
||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||||
<label class="md-search__icon md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
||||
</label>
|
||||
<nav class="md-search__options" aria-label="Search">
|
||||
|
||||
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
|
||||
</a>
|
||||
|
||||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
</form>
|
||||
<div class="md-search__output">
|
||||
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
||||
<div class="md-search-result" data-md-component="search-result">
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
|
||||
<div class="md-container" data-md-component="container">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
||||
<div class="md-grid">
|
||||
<ul class="md-tabs__list">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="../.." class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Home
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="../../itpp-infrastructure/" class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<main class="md-main" data-md-component="main">
|
||||
<div class="md-main__inner md-grid">
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="../.." title="IT Pro Partner Docs" class="md-nav__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
IT Pro Partner Docs
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../.." class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Home
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_2">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../itpp-infrastructure/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Infrastructure
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../itpp-standards/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Standards
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../transitpin/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
TransitPin
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../homelab/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
HomeLab
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../scripts/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Scripts
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
FleetTracker360
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../shark-game/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Shark Game
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../verdicttank/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
VerdictTank
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../apex-track/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Apex Track
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../boxpilot/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
BoxPilot
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../osint-tool/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
OSINT Tool
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../launchcheck/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
LaunchCheck
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Table of contents
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#2026-07-16-branding-gps-accuracy" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
2026-07-16 — Branding & GPS Accuracy
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="2026-07-16 — Branding & GPS Accuracy">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#branding" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Branding
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#gps-accuracy" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
GPS Accuracy
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#still-pending" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Still Pending
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-content" data-md-component="content">
|
||||
|
||||
<article class="md-content__inner md-typeset">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h1 id="fleettracker360-changelog">FleetTracker360 — CHANGELOG<a class="headerlink" href="#fleettracker360-changelog" title="Permanent link">¶</a></h1>
|
||||
<h2 id="2026-07-16-branding-gps-accuracy">2026-07-16 — Branding & GPS Accuracy<a class="headerlink" href="#2026-07-16-branding-gps-accuracy" title="Permanent link">¶</a></h2>
|
||||
<h3 id="branding">Branding<a class="headerlink" href="#branding" title="Permanent link">¶</a></h3>
|
||||
<ul>
|
||||
<li>Replaced Traccar logo SVG with FleetTracker360 (GPS dot + signal waves + gradient text)</li>
|
||||
<li>Created custom branded login page at <code>/login.html</code> — dark navy theme, animated grid background</li>
|
||||
<li>HTTPS proxy: Caddy on Core (gps.fleettracker360.com) → Traccar on app2 (152.53.39.202:8082)</li>
|
||||
<li>DNS: gps.fleettracker360.com moved from app2 direct to Core proxy (Cloudflare proxied)</li>
|
||||
</ul>
|
||||
<h3 id="gps-accuracy">GPS Accuracy<a class="headerlink" href="#gps-accuracy" title="Permanent link">¶</a></h3>
|
||||
<ul>
|
||||
<li>Server-side filtering enabled in Traccar config:</li>
|
||||
<li><code>filter.enable=true</code> (Kalman smoothing)</li>
|
||||
<li><code>filter.accuracy=30</code> (reject cell tower triangulation >30m)</li>
|
||||
<li><code>filter.distance=5</code> (ignore micro-jitter <5m)</li>
|
||||
<li><code>geolocation.enable=true</code> (road snapping via Nominatim)</li>
|
||||
<li>Computed attributes added to database:</li>
|
||||
<li><code>motion</code>: auto-detect transport mode (walking/cycling/driving/flying)</li>
|
||||
<li><code>gpsQuality</code>: tag fix accuracy (excellent/good/fair/poor)</li>
|
||||
</ul>
|
||||
<h3 id="still-pending">Still Pending<a class="headerlink" href="#still-pending" title="Permanent link">¶</a></h3>
|
||||
<ul>
|
||||
<li>Computed attribute device linking in UI</li>
|
||||
<li>Full community dashboard integration</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
</div>
|
||||
|
||||
|
||||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
|
||||
|
||||
Made with
|
||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||||
Material for MkDocs
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
<div class="md-dialog" data-md-component="dialog">
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.sections", "search.highlight", "search.share"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,869 @@
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://docs.itpropartner.com/homelab/CHANGELOG/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="../../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
<title>Home Lab Changelog - IT Pro Partner Docs</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||||
|
||||
|
||||
|
||||
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||||
<label class="md-overlay" for="__drawer"></label>
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#home-lab-changelog" class="md-skip">
|
||||
Skip to content
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div data-md-component="announce">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href="../.." title="IT Pro Partner Docs" class="md-header__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
||||
</label>
|
||||
<div class="md-header__title" data-md-component="header-title">
|
||||
<div class="md-header__ellipsis">
|
||||
<div class="md-header__topic">
|
||||
<span class="md-ellipsis">
|
||||
IT Pro Partner Docs
|
||||
</span>
|
||||
</div>
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Home Lab Changelog
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
</label>
|
||||
<div class="md-search" data-md-component="search" role="dialog">
|
||||
<label class="md-search__overlay" for="__search"></label>
|
||||
<div class="md-search__inner" role="search">
|
||||
<form class="md-search__form" name="search">
|
||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||||
<label class="md-search__icon md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
||||
</label>
|
||||
<nav class="md-search__options" aria-label="Search">
|
||||
|
||||
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
|
||||
</a>
|
||||
|
||||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
</form>
|
||||
<div class="md-search__output">
|
||||
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
||||
<div class="md-search-result" data-md-component="search-result">
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
|
||||
<div class="md-container" data-md-component="container">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
||||
<div class="md-grid">
|
||||
<ul class="md-tabs__list">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="../.." class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Home
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="../../itpp-infrastructure/" class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<main class="md-main" data-md-component="main">
|
||||
<div class="md-main__inner md-grid">
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="../.." title="IT Pro Partner Docs" class="md-nav__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
IT Pro Partner Docs
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../.." class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Home
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_2">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../itpp-infrastructure/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Infrastructure
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../itpp-standards/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Standards
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../transitpin/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
TransitPin
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
HomeLab
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../scripts/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Scripts
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../fleettracker360/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
FleetTracker360
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../shark-game/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Shark Game
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../verdicttank/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
VerdictTank
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../apex-track/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Apex Track
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../boxpilot/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
BoxPilot
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../osint-tool/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
OSINT Tool
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../launchcheck/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
LaunchCheck
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Table of contents
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#2026-07" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
2026-07
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<nav class="md-nav" aria-label="2026-07">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#added" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Added
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#changed" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Changed
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#added_1" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Added
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-content" data-md-component="content">
|
||||
|
||||
<article class="md-content__inner md-typeset">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h1 id="home-lab-changelog">Home Lab Changelog<a class="headerlink" href="#home-lab-changelog" title="Permanent link">¶</a></h1>
|
||||
<h2 id="2026-07">2026-07<a class="headerlink" href="#2026-07" title="Permanent link">¶</a></h2>
|
||||
<h3 id="added">Added<a class="headerlink" href="#added" title="Permanent link">¶</a></h3>
|
||||
<ul>
|
||||
<li><strong>Documentation repo initialized</strong> — Git-tracked home lab infrastructure docs</li>
|
||||
<li><strong>Host inventory:</strong> vm-host-01 (10.1.1.100), vm-host-02 (10.1.1.110), QNAP TS-1635 (10.1.1.40), docker-host-01 (10.1.1.14), MikroTik router (10.1.1.1)</li>
|
||||
<li><strong>SSH key:</strong> homelab ed25519 key pair created and deployed to all hosts</li>
|
||||
<li><strong>QNAP NFS storage:</strong> 3 exports configured — VM migration (2TB), backups (1TB), ISOs (1TB)</li>
|
||||
<li><strong>DNS chain documented:</strong> AdGuard Home primary (docker-host-01, 10.1.1.14:53), Technitium secondary (dns1.itpropartner.com), AdGuard tertiary (vm-host-01)</li>
|
||||
</ul>
|
||||
<h3 id="changed">Changed<a class="headerlink" href="#changed" title="Permanent link">¶</a></h3>
|
||||
<ul>
|
||||
<li><strong>vm-host-02 cleared</strong> — all VMs migrated to vm-host-01 or destroyed; host ready for GPU installation</li>
|
||||
<li><strong>VM consolidation:</strong> destroyed template VM, Graylog, Zabbix, and FOG VMs for later rebuild</li>
|
||||
</ul>
|
||||
<h3 id="added_1">Added<a class="headerlink" href="#added_1" title="Permanent link">¶</a></h3>
|
||||
<ul>
|
||||
<li><strong>State snapshot</strong> (<code>state-2026-07-21.md</code>) — VM inventory, service listing, and migration state captured</li>
|
||||
<li>Docker-host-01 service catalog: 13 containers including Mealie, n8n, Home Assistant, Jellyfin, media pipeline (Prowlarr/Radarr/Sonarr/Sabnzbd), AdGuard Home, NPM, Uptime Kuma, Dockhand, Browser-Use WebUI</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
</div>
|
||||
|
||||
|
||||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
|
||||
|
||||
Made with
|
||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||||
Material for MkDocs
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
<div class="md-dialog" data-md-component="dialog">
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.sections", "search.highlight", "search.share"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
+972
@@ -0,0 +1,972 @@
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://docs.itpropartner.com/">
|
||||
|
||||
|
||||
|
||||
<link rel="next" href="itpp-infrastructure/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
<title>IT Pro Partner Docs</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="assets/stylesheets/palette.ab4e12ef.min.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||||
|
||||
|
||||
|
||||
<script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||||
<label class="md-overlay" for="__drawer"></label>
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#it-pro-partner-documentation" class="md-skip">
|
||||
Skip to content
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div data-md-component="announce">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href="." title="IT Pro Partner Docs" class="md-header__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
||||
</label>
|
||||
<div class="md-header__title" data-md-component="header-title">
|
||||
<div class="md-header__ellipsis">
|
||||
<div class="md-header__topic">
|
||||
<span class="md-ellipsis">
|
||||
IT Pro Partner Docs
|
||||
</span>
|
||||
</div>
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Home
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
</label>
|
||||
<div class="md-search" data-md-component="search" role="dialog">
|
||||
<label class="md-search__overlay" for="__search"></label>
|
||||
<div class="md-search__inner" role="search">
|
||||
<form class="md-search__form" name="search">
|
||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||||
<label class="md-search__icon md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
||||
</label>
|
||||
<nav class="md-search__options" aria-label="Search">
|
||||
|
||||
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
|
||||
</a>
|
||||
|
||||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
</form>
|
||||
<div class="md-search__output">
|
||||
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
||||
<div class="md-search-result" data-md-component="search-result">
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
|
||||
<div class="md-container" data-md-component="container">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
||||
<div class="md-grid">
|
||||
<ul class="md-tabs__list">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item md-tabs__item--active">
|
||||
<a href="." class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Home
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="itpp-infrastructure/" class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<main class="md-main" data-md-component="main">
|
||||
<div class="md-main__inner md-grid">
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="." title="IT Pro Partner Docs" class="md-nav__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
IT Pro Partner Docs
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
|
||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Home
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<a href="." class="md-nav__link md-nav__link--active">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Home
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Table of contents
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#projects" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Projects
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#about" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
About
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_2">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="itpp-infrastructure/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Infrastructure
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="itpp-standards/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Standards
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="transitpin/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
TransitPin
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="homelab/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
HomeLab
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="scripts/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Scripts
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="fleettracker360/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
FleetTracker360
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="shark-game/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Shark Game
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="verdicttank/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
VerdictTank
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="apex-track/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Apex Track
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="boxpilot/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
BoxPilot
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="osint-tool/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
OSINT Tool
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="launchcheck/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
LaunchCheck
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Table of contents
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#projects" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Projects
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#about" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
About
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-content" data-md-component="content">
|
||||
|
||||
<article class="md-content__inner md-typeset">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h1 id="it-pro-partner-documentation">IT Pro Partner Documentation<a class="headerlink" href="#it-pro-partner-documentation" title="Permanent link">¶</a></h1>
|
||||
<p>Welcome to the IT Pro Partner centralized documentation site.</p>
|
||||
<h2 id="projects">Projects<a class="headerlink" href="#projects" title="Permanent link">¶</a></h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Project</th>
|
||||
<th>Description</th>
|
||||
<th>Repo</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="itpp-infrastructure/">ITPP Infrastructure</a></td>
|
||||
<td>Server inventory, DNS, architecture</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/itpp-infrastructure">Repo</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="itpp-standards/">ITPP Standards</a></td>
|
||||
<td>Documentation standards & templates</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/itpp-standards">Repo</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="transitpin/">TransitPin</a></td>
|
||||
<td>White-label transportation portal</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/transitpin">Repo</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="homelab/">HomeLab</a></td>
|
||||
<td>Home lab infrastructure automation</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/homelab">Repo</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="scripts/">Scripts</a></td>
|
||||
<td>Operations and automation scripts</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/scripts">Repo</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="fleettracker360/">FleetTracker360</a></td>
|
||||
<td>GPS fleet tracking platform</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/fleettracker360">Repo</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="shark-game/">Shark Game</a></td>
|
||||
<td>Shark Attack Fantasy League</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/shark-game">Repo</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="verdicttank/">VerdictTank</a></td>
|
||||
<td>Product review and validation platform</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/verdicttank">Repo</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="apex-track/">Apex Track</a></td>
|
||||
<td>Track event management</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/apex-track">Repo</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="boxpilot/">BoxPilot</a></td>
|
||||
<td>Logistics operations platform</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/boxpilot">Repo</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="osint-tool/">OSINT Tool</a></td>
|
||||
<td>OSINT people search & skip tracing</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/osint-tool">Repo</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="launchcheck/">LaunchCheck</a></td>
|
||||
<td>Startup validation SaaS</td>
|
||||
<td><a href="https://git.itpropartner.com/ippadmin/launchcheck">Repo</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="about">About<a class="headerlink" href="#about" title="Permanent link">¶</a></h2>
|
||||
<p>This site is auto-generated by <a href="https://squidfunk.github.io/mkdocs-material/">mkdocs-material</a>
|
||||
from source repositories hosted on <a href="https://git.itpropartner.com/">Gitea</a>.
|
||||
Rebuilt nightly via Gitea Actions.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
</div>
|
||||
|
||||
|
||||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
|
||||
|
||||
Made with
|
||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||||
Material for MkDocs
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
<div class="md-dialog" data-md-component="dialog">
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": ".", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.sections", "search.highlight", "search.share"], "search": "assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,816 @@
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://docs.itpropartner.com/itpp-infrastructure/CHANGELOG/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="../../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
<title>itpp-infrastructure — CHANGELOG - IT Pro Partner Docs</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||||
|
||||
|
||||
|
||||
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||||
<label class="md-overlay" for="__drawer"></label>
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#itpp-infrastructure-changelog" class="md-skip">
|
||||
Skip to content
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div data-md-component="announce">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href="../.." title="IT Pro Partner Docs" class="md-header__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
||||
</label>
|
||||
<div class="md-header__title" data-md-component="header-title">
|
||||
<div class="md-header__ellipsis">
|
||||
<div class="md-header__topic">
|
||||
<span class="md-ellipsis">
|
||||
IT Pro Partner Docs
|
||||
</span>
|
||||
</div>
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
itpp-infrastructure — CHANGELOG
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
</label>
|
||||
<div class="md-search" data-md-component="search" role="dialog">
|
||||
<label class="md-search__overlay" for="__search"></label>
|
||||
<div class="md-search__inner" role="search">
|
||||
<form class="md-search__form" name="search">
|
||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||||
<label class="md-search__icon md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
||||
</label>
|
||||
<nav class="md-search__options" aria-label="Search">
|
||||
|
||||
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
|
||||
</a>
|
||||
|
||||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
</form>
|
||||
<div class="md-search__output">
|
||||
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
||||
<div class="md-search-result" data-md-component="search-result">
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
|
||||
<div class="md-container" data-md-component="container">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
||||
<div class="md-grid">
|
||||
<ul class="md-tabs__list">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="../.." class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Home
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-tabs__item">
|
||||
<a href="../" class="md-tabs__link">
|
||||
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<main class="md-main" data-md-component="main">
|
||||
<div class="md-main__inner md-grid">
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="../.." title="IT Pro Partner Docs" class="md-nav__button md-logo" aria-label="IT Pro Partner Docs" data-md-component="logo">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
||||
|
||||
</a>
|
||||
IT Pro Partner Docs
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://git.itpropartner.com/ippadmin/itpp-docs" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
Git
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../.." class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Home
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_2">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
Projects
|
||||
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Infrastructure
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../itpp-standards/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
ITPP Standards
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../transitpin/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
TransitPin
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../homelab/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
HomeLab
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../scripts/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Scripts
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../fleettracker360/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
FleetTracker360
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../shark-game/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Shark Game
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../verdicttank/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
VerdictTank
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../apex-track/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Apex Track
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../boxpilot/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
BoxPilot
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../osint-tool/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
OSINT Tool
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../launchcheck/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
LaunchCheck
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||||
<div class="md-sidebar__scrollwrap">
|
||||
<div class="md-sidebar__inner">
|
||||
|
||||
|
||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__title" for="__toc">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Table of contents
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#2026-07-16-audit-remediation" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
2026-07-16 — Audit Remediation
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-content" data-md-component="content">
|
||||
|
||||
<article class="md-content__inner md-typeset">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h1 id="itpp-infrastructure-changelog">itpp-infrastructure — CHANGELOG<a class="headerlink" href="#itpp-infrastructure-changelog" title="Permanent link">¶</a></h1>
|
||||
<h2 id="2026-07-16-audit-remediation">2026-07-16 — Audit Remediation<a class="headerlink" href="#2026-07-16-audit-remediation" title="Permanent link">¶</a></h2>
|
||||
<ul>
|
||||
<li>Created CHANGELOG.md (missing per project documentation standard)</li>
|
||||
<li>Project directory: <code>/root/projects/itpp-infrastructure</code></li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
</div>
|
||||
|
||||
|
||||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
|
||||
|
||||
Made with
|
||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||||
Material for MkDocs
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
<div class="md-dialog" data-md-component="dialog">
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.sections", "search.highlight", "search.share"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user