chore: harmonize STLP abbreviation and correct company naming

This commit is contained in:
2026-01-22 12:46:28 -05:00
parent 083c2d5f74
commit ba3ba63e00
9 changed files with 107 additions and 220 deletions

100
AGENTS.md Normal file
View File

@@ -0,0 +1,100 @@
# AGENTS.md - Starting Line Productions Shop Book
This document helps agents understand this codebase and work effectively with it.
## Project Overview
This is a **mdBook** project that creates the Starting Line Productions (STL) Shop Guide - a comprehensive manual for a fabrication lab rental business. The project documents tools, equipment, supplies, and procedures across different shop areas (Cleanfab, Dirtyfab, E3ds, Kitchen, HPCLab, RackRental).
## Essential Commands
### Building the Book
```bash
mdbook build # Build the book to `book/` directory
mdbook serve # Start live development server (usually on localhost:3000)
mdbook clean # Clean build artifacts
```
### PDF Generation (Optional)
The `book.toml` contains commented PDF configuration. To generate PDF:
1. Uncomment the `[output.pdf]` section in book.toml
2. Ensure you have a Chromium-based browser installed
3. Run `mdbook build`
## Code Organization
```
├── src/ # Source markdown files
│ ├── SUMMARY.md # Book structure/table of contents
│ ├── welcome.md # Introduction page
│ ├── version-history.md # Version tracking
│ └── [shop-area]-*.md # Content files organized by shop area
├── book.toml # mdBook configuration
└── SourceMaterialTomerge/ # Binary source files (ODT, PDF, etc.)
```
### Content Structure
The book is organized by shop areas:
- **Cleanfab**: Clean fabrication shop
- **Dirtyfab**: Dirty fabrication shop
- **E3ds**: Electronics/3D printing area
- **Kitchen**: Kitchen facilities
- **HPCLab**: High Performance Computing Lab
- **RackRental**: Server rack rental operations
Each area has:
- `*-overview.md`: Area introduction
- `*-tools.md`: Available tools
- `*-equipment.md`: Equipment inventory
- `*-supplies.md`: Supplies list
## File Naming Conventions
- Use kebab-case for all filenames
- Shop area prefixes: `cleanfab-`, `dirtyfab-`, `e3ds-`, `kitchen-`, `hpclab-`, `rackrental-`
- Suffixes indicate content type: `-overview`, `-tools`, `-equipment`, `-supplies`
- Standard files: `welcome.md`, `version-history.md`, `SUMMARY.md`
## Content Patterns
### Markdown Structure
- Use ATX-style headers (`#`, `##`, etc.)
- Include links to vendor/product documentation
- Add equipment pictures when available (files stored in `SourceMaterialTomerge/`)
### SUMMARY.md Structure
- Must match actual files in `src/` directory
- Order: Welcome → Version History → Safety/Security → Area-specific content
- Use relative paths: `./filename.md`
## Important Gotchas
### Broken Links in SUMMARY.md
There's a known issue in SUMMARY.md line 2: `[Version History](./version-history.)` should point to `./version-history.md` (missing `.md` extension).
### File Extensions
Ensure all markdown files in SUMMARY.md have the `.md` extension - mdBook requires exact matches.
### SourceMaterialTomerge/
This directory contains binary files (ODT, PDF, etc.) that are referenced in the content but not directly processed by mdBook.
## Style Guidelines
- Write comprehensive, detailed descriptions
- Focus on reproducibility - aim for the lab to be fully reproducible by anyone
- Include vendor documentation links
- Add plenty of images to showcase the shop setup
- Maintain consistent structure across shop areas
## Testing
After making changes:
1. Run `mdbook build` to verify syntax is correct
2. Run `mdbook serve` to check the book renders properly
3. Check all internal links work in the generated book
4. Verify SUMMARY.md entries point to existing files
## External Resources
- Project issues: https://projects.knownelement.com/project/reachableceo-vptechnicaloperations/kanban
- Discussion: https://community.turnsys.com/g/STLProducrtions

View File

@@ -1,7 +1,6 @@
[book]
authors = ["ReachableCEO Enterprises LLC"]
authors = ["Starting Line Productions LLC"]
language = "en"
multilingual = false
src = "src"
title = "Starting Line Productions HQ Franchie Shop Manual"

View File

@@ -1,37 +0,0 @@
# [SHOP NAME] Inventory Template
## Equipment
| Item | Model/Part Number | Serial Number | Purchase Date | Purchase Price | Current Value | Location | Condition | Notes |
|------|-------------------|---------------|---------------|----------------|---------------|----------|-----------|-------|
| Example Equipment | ABC-123 | SN001234 | 2024-01-15 | $1,200.00 | $800.00 | Shelf A1 | Good | Warranty expires 2026 |
## Tools
| Item | Model/Part Number | Serial Number | Purchase Date | Purchase Price | Current Value | Location | Condition | Notes |
|------|-------------------|---------------|---------------|----------------|---------------|----------|-----------|-------|
| Example Tool | DEF-456 | SN005678 | 2024-02-10 | $300.00 | $250.00 | Toolbox B | Excellent | |
## Supplies
| Item | Model/Part Number | Quantity | Unit Cost | Total Value | Location | Expiration Date | Notes |
|------|-------------------|----------|-----------|-------------|----------|-----------------|-------|
| Example Supply | GHI-789 | 50 | $5.00 | $250.00 | Cabinet C | 2025-12-31 | |
## Consumables
| Item | Model/Part Number | Quantity | Unit Cost | Total Value | Location | Expiration Date | Notes |
|------|-------------------|----------|-----------|-------------|----------|-----------------|-------|
| Example Consumable | JKL-012 | 100 | $2.50 | $250.00 | Storage D | 2025-06-30 | |
---
**Total Equipment Value:** $X,XXX.XX
**Total Tool Value:** $X,XXX.XX
**Total Supply Value:** $X,XXX.XX
**Total Consumables Value:** $X,XXX.XX
**Grand Total:** $X,XXX.XX
**Last Updated:** [DATE]
**Updated By:** [NAME]

View File

@@ -1,147 +0,0 @@
#!/usr/bin/env python3
"""
Convert markdown inventory files to TSV format for asset database import.
Processes markdown tables and extracts inventory data.
"""
import re
import csv
import sys
import os
from pathlib import Path
import argparse
from datetime import datetime
def parse_markdown_table(content, section_name):
"""Parse a markdown table and return rows as dictionaries."""
items = []
# Find the section
section_pattern = rf'## {section_name}\s*\n'
section_match = re.search(section_pattern, content, re.IGNORECASE)
if not section_match:
return items
# Extract content from this section until next section or end
start_pos = section_match.end()
next_section = re.search(r'\n## ', content[start_pos:])
if next_section:
section_content = content[start_pos:start_pos + next_section.start()]
else:
section_content = content[start_pos:]
# Find table
table_pattern = r'\|([^|]+\|)+\s*\n\|[-\s|:]+\|\s*\n((?:\|[^|]*\|.*\n?)*)'
table_match = re.search(table_pattern, section_content)
if not table_match:
return items
# Parse header
header_line = table_match.group(0).split('\n')[0]
headers = [h.strip() for h in header_line.split('|')[1:-1]]
# Parse data rows
data_section = table_match.group(2)
for line in data_section.strip().split('\n'):
if line.strip() and '|' in line:
values = [v.strip() for v in line.split('|')[1:-1]]
if values and values[0]: # Skip empty rows
item = dict(zip(headers, values))
item['Category'] = section_name
items.append(item)
return items
def extract_shop_name(content):
"""Extract shop name from markdown title."""
title_match = re.search(r'^#\s*(.+)', content, re.MULTILINE)
if title_match:
return title_match.group(1).strip()
return "Unknown Shop"
def process_markdown_file(file_path):
"""Process a single markdown file and extract all inventory items."""
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
shop_name = extract_shop_name(content)
all_items = []
# Process each section
sections = ['Equipment', 'Tools', 'Supplies', 'Consumables']
for section in sections:
items = parse_markdown_table(content, section)
for item in items:
item['Shop'] = shop_name
item['Source_File'] = os.path.basename(file_path)
all_items.append(item)
return all_items
except Exception as e:
print(f"Error processing {file_path}: {e}", file=sys.stderr)
return []
def write_tsv(items, output_file):
"""Write items to TSV file."""
if not items:
print("No items to write.")
return
# Get all unique fields
all_fields = set()
for item in items:
all_fields.update(item.keys())
# Standard field order
standard_fields = ['Shop', 'Category', 'Item', 'Model/Part Number', 'Serial Number',
'Purchase Date', 'Purchase Price', 'Current Value', 'Location',
'Condition', 'Quantity', 'Unit Cost', 'Total Value', 'Expiration Date',
'Notes', 'Source_File']
# Arrange fields with standard ones first
fieldnames = [f for f in standard_fields if f in all_fields]
fieldnames.extend([f for f in all_fields if f not in standard_fields])
with open(output_file, 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames, delimiter='\t')
writer.writeheader()
writer.writerows(items)
def main():
parser = argparse.ArgumentParser(description='Convert markdown inventory to TSV')
parser.add_argument('input', nargs='*', help='Input markdown files or directories')
parser.add_argument('-o', '--output', default='inventory.tsv', help='Output TSV file')
parser.add_argument('-r', '--recursive', action='store_true', help='Process directories recursively')
args = parser.parse_args()
if not args.input:
# Default to current directory src folder
args.input = ['src/']
all_items = []
for input_path in args.input:
path = Path(input_path)
if path.is_file() and path.suffix == '.md':
all_items.extend(process_markdown_file(path))
elif path.is_dir():
pattern = '**/*.md' if args.recursive else '*.md'
for md_file in path.glob(pattern):
if 'inventory' in md_file.name.lower() or 'equipment' in md_file.name.lower() or 'tools' in md_file.name.lower():
all_items.extend(process_markdown_file(md_file))
if all_items:
write_tsv(all_items, args.output)
print(f"Processed {len(all_items)} items and wrote to {args.output}")
else:
print("No inventory items found in the specified files.")
if __name__ == '__main__':
main()

View File

@@ -1,29 +0,0 @@
# Sample Clean Fabrication Shop Inventory
## Equipment
| Item | Model/Part Number | Serial Number | Purchase Date | Purchase Price | Current Value | Location | Condition | Notes |
|------|-------------------|---------------|---------------|----------------|---------------|----------|-----------|-------|
| Soldering Station | Hakko FX-888D | SN123456 | 2023-03-15 | $149.99 | $120.00 | Bench A | Excellent | Under warranty |
| Hot Air Station | Quick 861DW | SN789012 | 2023-05-22 | $89.99 | $75.00 | Bench B | Good | |
## Tools
| Item | Model/Part Number | Serial Number | Purchase Date | Purchase Price | Current Value | Location | Condition | Notes |
|------|-------------------|---------------|---------------|----------------|---------------|----------|-----------|-------|
| Digital Multimeter | Fluke 87V | SN345678 | 2023-01-10 | $389.99 | $350.00 | Toolbox 1 | Excellent | Calibrated 2024 |
| Oscilloscope | Rigol DS1054Z | SN901234 | 2023-04-12 | $349.99 | $300.00 | Bench C | Good | |
## Supplies
| Item | Model/Part Number | Quantity | Unit Cost | Total Value | Location | Expiration Date | Notes |
|------|-------------------|----------|-----------|-------------|----------|-----------------|-------|
| Solder Wire | Kester 63/37 | 5 | $24.99 | $124.95 | Cabinet A | | 1lb spools |
| Flux Paste | Kester 186 | 3 | $12.99 | $38.97 | Cabinet A | 2025-12-31 | |
## Consumables
| Item | Model/Part Number | Quantity | Unit Cost | Total Value | Location | Expiration Date | Notes |
|------|-------------------|----------|-----------|-------------|----------|-----------------|-------|
| Solder Wick | Chemtronics 80-3-5 | 10 | $4.99 | $49.90 | Drawer B | | |
| Isopropyl Alcohol | 99% IPA | 2 | $8.99 | $17.98 | Chemical Cabinet | | 1L bottles |

View File

@@ -1,5 +1,5 @@
- [Welcome](./Welcome.md)
- [Version History](./version-history.)
- [Version History](./version-history.md)
- [Shop Health / Safety / Security information](./shss.md)
- [First Aid](./first-aid.md)
- [Emergency Action Plan](./emactplan.md)

1
src/Welcome.md Normal file
View File

@@ -0,0 +1 @@
# Welcome

View File

@@ -1,3 +1,3 @@
# TSYS High Performance Computing Lab Overview
Currently, TSYS Group (Starting Line Productions parent company) operates an HPC cluster to run various medium/large engineering workloads. TSYS is considering making some capacity on this cluster available to STL customers at some point in the future.
Currently, **Turnkey Network Systems LLC** (part of the **TSYS Group**) operates an HPC cluster to run various medium/large engineering workloads. We are considering making some capacity on this cluster available to STLP customers at some point in the future.

View File

@@ -1,11 +1,11 @@
# Starting Line Productions Shop Guide
Welcome to Starting Line Productions (STL)!
Welcome to Starting Line Productions (STLP)!
We created STL to serve the needs of our parent corporation (Turnkey Network Systems) and support R&D at Suborbital Systems (high altitude balloons) and MeetMorse (ground stations and subscriber equipment). We have spare capacity in between hardware revisions and wanted to monetize the asset base. Hence, we are making it available to the public at industry leading breakthrough pricing and access hours.
We created STLP to serve the needs of our parent corporation, **Turnkey Network Systems LLC** (part of the **TSYS Group**), and support R&D at Suborbital Systems (high altitude balloons) and MeetMorse (ground stations and subscriber equipment). We have spare capacity in between hardware revisions and wanted to monetize the asset base. Hence, we are making it available to the public at industry leading breakthrough pricing and access hours.
This document provides a comprehensive overview of the tools, equipment and supplies provided as part of your rental. It covers all the rental areas, what is provided with each and
links to vendor/product documentation. A big goal of STL is to have the lab be fully reproducible by anyone!
links to vendor/product documentation. A big goal of STLP is to have the lab be fully reproducible by anyone!
We include pictures of all the areas and tools/equipment. We put quite a bit of work into building this shop and want to show it off!