Segment × service matrix, special databases, sender-number usage. Red badge = hits in last 7 days; color = days since last send.
Views, unique DOTs, call taps, pay clicks, "I already filed" claims — per service.
Hard stops, global stops, individual number status, resubscribe.
What the carrier sees. Enter a DOT to open its personalized page.
Verdict (must file / not required / not reported), tractors, MCS-150 date, BU-overdue badge. Search box on the page itself too.
~/environment/video_server/media/<service>.mp4 — subdomain ↔ filename (hut.mp4, ucr.mp4 …)sudo systemctl restart vidserverrm -f ~/environment/video_server/vid.db (only after data-shape changes)<svc>.dotvideo.us + add host to Caddy block + drop <svc>.mp4.Phones + DOTs + emails. Always-on in every sender. Pull fresh at the start of every run.
curl -s https://stopsms.hoffenmer.io/hard/all -H "X-Admin-Key: $STOP_ADMIN_KEY" # emails only, one per line curl -s https://stopsms.hoffenmer.io/hard/all -H "X-Admin-Key: $STOP_ADMIN_KEY" \ | python3 -c "import sys,json; [print(e) for e in json.load(sys.stdin)['emails']]"
source ~/.bashrc && echo $STOP_ADMIN_KEY (or /etc/stopserver.env).Per-service list of DOTs who tapped the button on their video page. giga8 pulls it when you type the slug at suppression.
DOTs already reached per service. giga8 asks "Skip DOTs already sent?" — default yes.
curl -s "https://campaigns.hoffenmer.io/sent/dots?service=2027%20HUT" -H "X-Admin-Key: KEY" # clear one segment × service curl -X DELETE "https://campaigns.hoffenmer.io/sent?service=CLH%20Queries&file=sms_01" -H "X-Admin-Key: KEY" # clear all sms_xx + pastdue history curl -X DELETE "https://campaigns.hoffenmer.io/sent/segments" -H "X-Admin-Key: KEY"
Always-on shield slot in giga8 — not yet wired. Needs the Deactivation Airtable base/table; giga8 prints a red warning every run until set.
~/environment/sms/giga_repo/giga8.py (alias giga)~/environment/sms/giga_repo/config.toml — concurrency, costs, creds../config.toml above the campaign folder — [messages] onlycd ~/environment/sms/<service>/<range>/single && gigalog.txt — answer prompts identically1 SELECT SENDER [1-5] Telnyx SC · [6] Twilio SC · [7-9] Telnyx TF · [10-12] Twilio TF
2 TARGETING op scope · CDL · tractors · MC · zone (E / C / Mtn+West)
3 SUPPRESSION hard stops (auto) · live STOPs · Airtable service + months
· filed-claims slug (hut / Enter) · clear send log? · skip already-sent?
4 PREVIEW LOOP text to your phone → Y / [e] edit config & re-preview / [c] cancel
5 CAMPAIGN SUMMARY sender · targeting · suppression · FILTERED OUT · queue+cost → CONFIRM
[1] 62985 [2] 87368 [3] 368767 [4] 827368 [5] 488368 Telnyx shortcodes [6] 52698 Twilio shortcode [7] (844) 264-8039 [8] (866) 894-0662 [9] (866) 381-3803 Telnyx toll-free [10] (844) 955-3705 [11] (844) 373-9426 [12] (844) 296-6983 Twilio toll-free
Text STOP → count replies (2 = Telnyx keyword engine still armed) → Desk STATUS → resubscribe → API test send → text START.
Read via one master token. App date = min(DATE field, createdTime); newest record per DOT.
The glue: answers the internet 24/7. Never Stop — only Reboot (auto-assigned IP). Elastic-IP migration pending before any resize.
stopserver · vidserver (8200) · campaignlog (8300) · caddy-hoffenmer~/environment/stopserver · video_server · campaign_log · everything~/Caddyfile — edit → sudo caddy validate --config ~/Caddyfile → sudo systemctl reload caddy-hoffenmer. Never restart.systemctl is-active stopserver vidserver campaignlog caddy-hoffenmer~/.bashrc · /etc/stopserver.envOutbound fire: SMS now, email next. Cloud9 may hibernate — nothing public lives here.
~/environment/sms/ — giga_repo + campaign folders~/environment/email/ — in progresssystemctl is-active stopserver 2>/dev/null && echo GATEWAY || echo SENDERsudo systemctl restart vidserver # video pages (2s blip) sudo systemctl restart campaignlog # heatmap sudo systemctl restart stopserver # unsub server — avoid mid-campaign sudo systemctl reload caddy-hoffenmer # Caddy config — reload, NEVER restart
{officer} {company} {dot} {state} {mc}
{filing} {start} → "Aug 2017" from any FMCSA date format
{drivers*} {vehicles*} → "3 drivers" / "1 driver" (also {driver*} {vehicle*})
{tractors} {hazmat} → line auto-removed when blank
{event_date} {event_info} → Motus event files only
{hut-reg} / {reg-hut} → === IRS 26 U.S.C. 4481 === (both orders; any service slug)
bu ucr hut clh random dq mvr txdmv ca policy rst
Anything else in { } → hard abort before sending.
SMS (19 cols) sms_00…19_<mmm##> · tx · ca · interstate · new60 · pastdue_jan…aug
askdeact_5yr · askdeact_never · no_mcs_mileage · cdl · semi
Motus (21) + EVENT_DATE, EVENT_INFO: motus_auth_events · motus_revoked · motus_insurance
motus_carrier_changes · authority_dead
Email (17) email_00…19 · semi_email (EMAIL_ADDRESS, no PHONE)
Segment id = filename minus date suffix (sms_16_aug27 → sms_16).
TRUCK_TRACTORS = owned+term+trip summed. Blank = unreported, never 0.
BU 390.19 · UCR 367 · HUT IRS 26 U.S.C. 4481 · CLH 382.701 · Random 382.305 DQ 391.51 · MVR 391.25 · TX 43 TAC 218 · CA CVC 34620 · Policy 382.601/385.5/390.3(e)/396.3 · RST 382.603