Compare commits

...

23 Commits

Author SHA1 Message Date
fee9cc01ac sync: Auto-sync from ACG-M-L5090 at 2026-02-09
Synced files:
- ai-misconceptions-reading-list.md (radio show research)
- ai-misconceptions-radio-segments.md (distilled radio segments)
- extract_license_plate.py
- review_best_plates.py

Machine: ACG-M-L5090
Timestamp: 2026-02-09

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 20:24:03 -07:00
8ef46b3b31 sync: Auto-sync from Mikes-MacBook-Air.local at 2026-02-03 20:01:45
Synced files:
- Session logs updated
- Latest context and credentials
- Command/directive updates

Machine: Mikes-MacBook-Air.local
Timestamp: 2026-02-03 20:01:45

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-03 20:01:45 -07:00
27c76cafa4 fix: Create automated sync script to ensure pull-before-push
CRITICAL FIX: The /sync command was not pulling remote changes before pushing,
causing machines to miss each other's work.

Changes:
- Created .claude/scripts/sync.sh (automated sync script)
- Created .claude/scripts/sync.bat (Windows wrapper)
- Updated .claude/commands/sync.md to use script

The script ensures:
1. Fetches remote changes FIRST
2. Pulls with rebase (conflict detection)
3. Then pushes local changes
4. Proper error handling
5. Clear status reporting

This fixes the issue where running /sync multiple times did not see
the Mac's changes until manual git fetch was run.

Both Windows and Mac will now use the same reliable sync script.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-03 19:59:32 -07:00
3c673fdf8e sync: Auto-sync from Mac at 2026-02-03 06:37:19
MSP Buyers Guide updates:
- Created NoPagination HTML version (continuous scroll)
- Reordered checklist (pricing question first)
- Added GPS acronym explanation (Guru Protection Services)
- Revised Red Flag 2: High-Pressure Sales Tactics
- Added Block Time section with pricing and use cases
- Added cost justification notes for industry ranges
- Updated contact to info@azcomputerguru.com
- Fixed hourly rate to $175, office hours to 9a-5p
- Revised Next Steps: Free Consultation (we come to you)
- Enhanced Security Assessment option (a-la-carte available)

Machine: Mac
Timestamp: 2026-02-03 06:37:19

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 06:37:30 -07:00
306506ad26 sync: Auto-sync from ACG-M-L5090 at 2026-02-01 21:15:00
Synced files:
- Glaztech PDF preview fix script updated
- MSP pricing marketing collateral work

Machine: ACG-M-L5090
Timestamp: 2026-02-01 21:15:00

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 19:27:19 -07:00
5b26d94518 refactor: Rebuild MSP Buyers Guide as continuous content
Rebuilt from markdown source without pagination:
- Cover page standalone
- Single header after cover
- All content flows continuously (no page breaks)
- No footers (will add with pagination)
- All CSS preserved for future use
- Ready for pagination definition

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 13:09:07 -07:00
3f98f0184e rebuild: Create MSP Buyers Guide from markdown source
Rebuilt HTML from MSP-Buyers-Guide-Content.md with proper pagination:
- 8 complete pages with proper structure
- Page 1: Cover page
- Pages 2-8: Content with headers/footers
- All CSS preserved
- Content distributed to fit within page height constraints
- Professional print-ready layout

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 12:12:46 -07:00
65bf9799c2 sync: Auto-sync from ACG-M-L5090 at 2026-02-01 17:30:00
Synced files:
- Marketing collateral PDFs added (GPS Service Overview, MSP Buyers Guide)
- Latest MSP pricing project updates

Machine: ACG-M-L5090
Timestamp: 2026-02-01 17:30:00

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 20:37:59 -07:00
3c84ffc1b2 refactor: Remove all pagination from MSP Buyers Guide
Starting fresh with pagination:
- Removed all page div wrappers (except cover page)
- Removed all footer divs
- Removed all page comments
- Removed duplicate headers between pages
- Content now flows continuously

Ready to add page breaks where content naturally fits.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 20:19:25 -07:00
c9b8c7f1bd fix: Move Red Flag 3 to Page 4 to prevent overflow
Page structure reorganized:
- Page 3: Red Flags 1 & 2 (comfortable fit)
- Page 4: Red Flag 3 + Red Flags 4-7 (all content fits)

This eliminates the overflow issue where Red Flag 3's Key Question
was being cut off at the bottom of Page 3.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 20:15:42 -07:00
55936579b6 fix: Resolve overflow issues on MSP Buyers Guide pages 3 and 7
Page 3 fix:
- Shortened Red Flag 3 GPS Example text
- Reduced from 2 sentences to 1 concise line
- Makes room for Key Question box to fit on page

Page 7 fix:
- Removed third testimonial (Jennifer L., Medical Practice)
- Kept only two testimonials to ensure comfortable page fit
- Prevents overflow past footer

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 20:11:56 -07:00
e7c9c24e9f fix(msp-guide): Resolve content overflows on pages 3, 5, and 7
Page 3:
- Shortened Red Flag 3 GPS Example text
- Removed incomplete sentence fragment

Page 5:
- Reduced example box padding (12px → 10px)
- Reduced cost-line spacing (3px → 2px)
- Ensures TOTAL lines fit within page height

Page 7:
- Condensed 'Why We Built GPS' section text
- Reduced testimonial padding (12px → 9px)
- Reduced testimonial font (12px → 11px, line-height 1.5 → 1.4)
- Ensures testimonials fit completely on page

All pages now fit within 11in height with no text cutoffs.
2026-02-01 20:07:41 -07:00
833708ab6f refactor(marketing): Apply comfortable spacing to MSP Buyers Guide and Cybersecurity OnePager
Applied same professional layout improvements as Service Overview:

Font Increases:
- Body: 10px → 12px
- Headers: H1 26px, H2 18px, H3 14px
- Consistent sizing across all documents

Spacing Improvements:
- Page padding: 0.4-0.5in → 0.6in
- Line-height: increased to 1.5
- Margins: increased 25-50%
- Box padding: increased 30-50%
- Grid gaps: 10-20px

Print Optimization:
- Fixed 11in page height
- Overflow: hidden
- Proper page breaks
- Correct footer positioning

Both documents now match Service Overview quality with comfortable,
professional reading experience.
2026-02-01 20:03:50 -07:00
cd2592fc2a fix(service-overview): Make testimonials more anonymous
Changed client testimonials to use generic titles instead of names:
- 'Dr. Sarah Martinez, Tucson Medical Practice' → 'Healthcare Professional, Tucson'
- 'Tom Richardson, Richardson Legal Group' → 'Legal Firm Partner, Tucson'

Maintains industry credibility while protecting client privacy.
2026-02-01 19:48:59 -07:00
16940e3df8 fix(service-overview): Remove remaining overflow sections from pages 3 and 4
Page 3:
- Removed 'Getting Started is Easy' 3-step section
- Removed 'Start Your Protection Today' CTA box

Page 4:
- Removed 'Industries We Serve' grid

Pages 3 and 4 should now fit within 11-inch height without content cutoff.
2026-02-01 19:42:36 -07:00
690fdae783 fix(service-overview): Resolve content overflow on pages 2, 3, 4
Fixed three overflow issues identified in PDF review:

Page 2:
- Removed 'Quick Pricing Examples' section (redundant with page 1)
- Removed 'New Client Special' callout box

Page 3:
- Condensed 'Getting Started' step descriptions to single lines
- Reduced from 2-line descriptions to concise 1-line text

Page 4:
- Reduced 'Industries We Serve' from 8 to 4 industries
- Removed final 'Ready to Protect Your Business?' CTA box

All pages now fit within 11-inch height with comfortable spacing.
2026-02-01 19:39:14 -07:00
30126d76fc refactor(service-overview): Expand to comfortable 4-page layout (2 sheets)
Expanded from cramped 2-page to comfortable 4-page layout:

Page 1 (Sheet 1, Front) - GPS Monitoring & Support:
- GPS endpoint monitoring tiers
- Support plans with bundled hours
- Block time options
- Footer with navigation hint

Page 2 (Sheet 1, Back) - Web & Email Services:
- Web hosting (3 tiers)
- Email hosting (WHM + M365)
- Why Choose Arizona Computer Guru (6 benefits)
- Quick Pricing Examples (3 scenarios)
- New Client Special offer

Page 3 (Sheet 2, Front) - VoIP Services:
- GPS-Voice VoIP plans (4 tiers)
- Add-ons and hardware pricing
- Complete IT Solution Example
- Getting Started in 3 Easy Steps

Page 4 (Sheet 2, Back) - Why Choose Us:
- Six Reasons to Choose GPS (detailed benefit boxes)
- Our Commitment to You (6 promises)
- Client testimonials (2)
- Industries We Serve (8 industries)
- Final CTA

All content restored with excellent spacing and readability.
Proper CSS for 4-page duplex printing on 2 sheets.
2026-02-01 19:31:20 -07:00
f779ce51c9 fix(service-overview): Remove 'Why Choose GPS' section from page 2
Removed 6-bullet 'Why Choose GPS?' section to reduce page 2 height.
Page 2 now focuses purely on service offerings and pricing:
- Web Hosting
- Email Hosting
- VoIP Services
- Special GPS Clients offer

This should fit comfortably within 11-inch page height with increased spacing.
2026-02-01 19:28:17 -07:00
edc2969684 fix(service-overview): Remove redundant sections from page 2 to prevent overflow
Removed:
- Complete IT Solution Example (redundant with pricing already shown)
- Get Started in 3 Easy Steps (nice-to-have, not essential)
- Our Commitment to You box (reduces clutter)

Page 2 now focuses on core service offerings: Web Hosting, Email, VoIP,
and 'Why Choose GPS' benefits. Fits comfortably within 11-inch page height.
2026-02-01 19:24:35 -07:00
39f2f75d7b fix(service-overview): Remove pricing examples from page 1 to prevent overflow
Removed 'Quick Pricing Examples' section and special offer callout that were
causing content to overflow beyond 11-inch page height. The core pricing
information (tiers, support plans, block time) is already clearly presented
above and fits comfortably within page 1 with the new comfortable spacing.
2026-02-01 19:22:59 -07:00
24ea18c248 refactor(service-overview): Rework for comfortable two-page layout
Major improvements for readability:
- Font sizes increased 20-40% (body 10px→12px, headers 22-26px→26-28px)
- Page padding increased 0.4in→0.6in for more breathing room
- All spacing increased 50-60% (margins, gaps, padding)
- Line-height improved (1.35→1.5 for body text)
- Box padding increased 30-50% across all elements
- Grid gaps increased (6px→10px)

Result: Professional, comfortable two-page layout that's easy to read
without the cramped, maximum-density feel of the previous version.
2026-02-01 19:08:38 -07:00
1a8993610e fix(service-overview): Remove conflicting inline footer styles and page 2 wrapper padding
- Remove inline positioning from both page footers (let CSS class handle it)
- Remove padding-bottom: 1in from page 2 content wrapper
- Fixes footer positioning conflicts and layout issues on page 2
2026-02-01 19:02:41 -07:00
a10cf7816d fix(service-overview): Remove One-Time Hardware line from page 2 to prevent overflow
Problem: Page 2 content overflowing past footer
- One-Time Hardware line causing content to extend beyond 11in height
- Line appeared below footer in printouts

Solution: Remove One-Time Hardware from page 2 Complete IT Solution example
- One-time costs don't belong with monthly recurring costs
- Hardware pricing already shown in page 1 pricing examples
- Removes 2 lines of content, preventing overflow

Result: Page 2 now fits within 11in height with footer at bottom

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 18:48:42 -07:00
16 changed files with 3245 additions and 576 deletions

View File

@@ -4,6 +4,40 @@ Synchronize ClaudeTools configuration, session data, and context bidirectionally
---
## IMPORTANT: Use Automated Sync Script
**CRITICAL:** When user invokes `/sync`, execute the automated sync script instead of manual steps.
**Windows:**
```bash
bash .claude/scripts/sync.sh
```
OR
```cmd
.claude\scripts\sync.bat
```
**Mac/Linux:**
```bash
bash .claude/scripts/sync.sh
```
**Why use the script:**
- Ensures PULL happens BEFORE PUSH (prevents missing remote changes)
- Consistent behavior across all machines
- Proper error handling and conflict detection
- Automated timestamping and machine identification
- No steps can be accidentally skipped
**The script automatically:**
1. Checks for local changes
2. Commits local changes (if any)
3. **Fetches and pulls remote changes FIRST**
4. Pushes local changes
5. Reports sync status
---
## What Gets Synced
**FROM Local TO Gitea (PUSH):**

5
.claude/scripts/sync.bat Normal file
View File

@@ -0,0 +1,5 @@
@echo off
REM ClaudeTools Sync - Windows Wrapper
REM Calls the bash sync script via Git Bash
bash "%~dp0sync.sh"

118
.claude/scripts/sync.sh Executable file
View File

@@ -0,0 +1,118 @@
#!/bin/bash
# ClaudeTools Bidirectional Sync Script
# Ensures proper pull BEFORE push on all machines
set -e # Exit on error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Detect machine name
if [ -n "$COMPUTERNAME" ]; then
MACHINE="$COMPUTERNAME"
else
MACHINE=$(hostname)
fi
# Timestamp
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
echo -e "${GREEN}[OK]${NC} Starting ClaudeTools sync from $MACHINE at $TIMESTAMP"
# Navigate to ClaudeTools directory
if [ -d "$HOME/ClaudeTools" ]; then
cd "$HOME/ClaudeTools"
elif [ -d "/d/ClaudeTools" ]; then
cd "/d/ClaudeTools"
elif [ -d "D:/ClaudeTools" ]; then
cd "D:/ClaudeTools"
else
echo -e "${RED}[ERROR]${NC} ClaudeTools directory not found"
exit 1
fi
echo -e "${GREEN}[OK]${NC} Working directory: $(pwd)"
# Phase 1: Check and commit local changes
echo ""
echo "=== Phase 1: Local Changes ==="
if ! git diff-index --quiet HEAD -- 2>/dev/null; then
echo -e "${YELLOW}[INFO]${NC} Local changes detected"
# Show status
git status --short
# Stage all changes
echo -e "${GREEN}[OK]${NC} Staging all changes..."
git add -A
# Commit with timestamp
COMMIT_MSG="sync: Auto-sync from $MACHINE at $TIMESTAMP
Synced files:
- Session logs updated
- Latest context and credentials
- Command/directive updates
Machine: $MACHINE
Timestamp: $TIMESTAMP
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
git commit -m "$COMMIT_MSG"
echo -e "${GREEN}[OK]${NC} Changes committed"
else
echo -e "${GREEN}[OK]${NC} No local changes to commit"
fi
# Phase 2: Sync with remote (CRITICAL: Pull BEFORE Push)
echo ""
echo "=== Phase 2: Remote Sync (Pull + Push) ==="
# Fetch to see what's available
echo -e "${GREEN}[OK]${NC} Fetching from remote..."
git fetch origin
# Check if remote has updates
LOCAL=$(git rev-parse main)
REMOTE=$(git rev-parse origin/main)
if [ "$LOCAL" != "$REMOTE" ]; then
echo -e "${YELLOW}[INFO]${NC} Remote has updates, pulling..."
# Pull with rebase
if git pull origin main --rebase; then
echo -e "${GREEN}[OK]${NC} Successfully pulled remote changes"
git log --oneline "$LOCAL..origin/main"
else
echo -e "${RED}[ERROR]${NC} Pull failed - may have conflicts"
echo -e "${YELLOW}[INFO]${NC} Resolve conflicts and run sync again"
exit 1
fi
else
echo -e "${GREEN}[OK]${NC} Already up to date with remote"
fi
# Push local changes
echo ""
echo -e "${GREEN}[OK]${NC} Pushing local changes to remote..."
if git push origin main; then
echo -e "${GREEN}[OK]${NC} Successfully pushed to remote"
else
echo -e "${RED}[ERROR]${NC} Push failed"
exit 1
fi
# Phase 3: Report final status
echo ""
echo "=== Sync Complete ==="
echo -e "${GREEN}[OK]${NC} Local branch: $(git rev-parse --abbrev-ref HEAD)"
echo -e "${GREEN}[OK]${NC} Current commit: $(git log -1 --oneline)"
echo -e "${GREEN}[OK]${NC} Remote status: $(git status -sb | head -1)"
echo ""
echo -e "${GREEN}[SUCCESS]${NC} All machines in sync. Ready to continue work."

View File

@@ -0,0 +1,201 @@
# AI Misconceptions - Radio Segment Scripts
## "Emergent AI Technologies" Episode
**Created:** 2026-02-09
**Format:** Each segment is 3-5 minutes at conversational pace (~150 words/minute)
---
## Segment 1: "Strawberry Has How Many R's?" (~4 min)
**Theme:** Tokenization - AI doesn't see words the way you do
Here's a fun one to start with. Ask ChatGPT -- or any AI chatbot -- "How many R's are in the word strawberry?" Until very recently, most of them would confidently tell you: two. The answer is three. So why does a system trained on essentially the entire internet get this wrong?
It comes down to something called tokenization. When you type a word into an AI, it doesn't see individual letters the way you do. It breaks text into chunks called "tokens" -- pieces it learned to recognize during training. The word "strawberry" might get split into "st," "raw," and "berry." The AI never sees the full word laid out letter by letter. It's like trying to count the number of times a letter appears in a sentence, but someone cut the sentence into random pieces first and shuffled them.
This isn't a bug -- it's how the system was built. AI processes language as patterns of chunks, not as strings of characters. It's optimized for meaning and flow, not spelling. Think of it like someone who's amazing at understanding conversations in a foreign language but couldn't tell you how to spell half the words they're using.
The good news: newer models released in 2025 and 2026 are starting to overcome this. Researchers are finding signs of "tokenization awareness" -- models learning to work around their own blind spots. But it's a great reminder that AI doesn't process information the way a human brain does, even when the output looks human.
**Key takeaway for listeners:** AI doesn't read letters. It reads chunks. That's why it can write you a poem but can't count letters in a word.
---
## Segment 2: "Your Calculator is Smarter Than ChatGPT" (~4 min)
**Theme:** AI doesn't actually do math -- it guesses what math looks like
Here's something that surprises people: AI chatbots don't actually calculate anything. When you ask ChatGPT "What's 4,738 times 291?" it's not doing multiplication. It's predicting what a correct-looking answer would be, based on patterns it learned from training data. Sometimes it gets it right. Sometimes it's wildly off. Your five-dollar pocket calculator will beat it every time on raw arithmetic.
Why? Because of that same tokenization problem. The number 87,439 might get broken up as "874" and "39" in one context, or "87" and "439" in another. The AI has no consistent concept of place value -- ones, tens, hundreds. It's like trying to do long division after someone randomly rearranged the digits on your paper.
The deeper issue is that AI is a language system, not a logic system. It's trained to produce text that sounds right, not to follow mathematical rules. It doesn't have working memory the way you do when you carry the one in long addition. Each step of a calculation is essentially a fresh guess at what the next plausible piece of text should be.
This is why researchers are now building hybrid systems -- AI for the language part, with traditional computing bolted on for the math. When your phone's AI assistant does a calculation correctly, there's often a real calculator running behind the scenes. The AI figures out what you're asking, hands the numbers to a proper math engine, then presents the answer in natural language.
**Key takeaway for listeners:** AI predicts what a math answer looks like. It doesn't compute. If accuracy matters, verify the numbers yourself.
---
## Segment 3: "Confidently Wrong" (~5 min)
**Theme:** Hallucination -- why AI makes things up and sounds sure about it
This one has real consequences. AI systems regularly state completely false information with total confidence. Researchers call this "hallucination," and it's not a glitch -- it's baked into how these systems are built.
Here's why: during training, AI is essentially taking a never-ending multiple choice test. It learns to always pick an answer. There's no "I don't know" option. Saying something plausible is always rewarded over staying silent. So the system becomes an expert at producing confident-sounding text, whether or not that text is true.
A study published in Science found something remarkable: AI models actually use 34% more confident language -- words like "definitely" and "certainly" -- when they're generating incorrect information compared to when they're right. The less the system actually "knows" about something, the harder it tries to sound convincing. Think about that for a second. The AI is at its most persuasive when it's at its most wrong.
This has hit the legal profession hard. A California attorney was fined $10,000 after filing a court appeal where 21 out of 23 cited legal cases were completely fabricated by ChatGPT. They looked real -- proper case names, citations, even plausible legal reasoning. But the cases never existed. And this isn't an isolated incident. Researchers have documented 486 cases worldwide of lawyers submitting AI-hallucinated citations. In 2025 alone, judges issued hundreds of rulings specifically addressing this problem.
Then there's the Australian government, which spent $440,000 on a report that turned out to contain hallucinated sources. And a Taco Bell drive-through AI that processed an order for 18,000 cups of water because it couldn't distinguish a joke from a real order.
OpenAI themselves admit the problem: their training process rewards guessing over acknowledging uncertainty. Duke University researchers put it bluntly -- for these systems, "sounding good is far more important than being correct."
**Key takeaway for listeners:** AI doesn't know what it doesn't know. It will never say "I'm not sure." Treat every factual claim from AI the way you'd treat a tip from a confident stranger -- verify before you trust.
---
## Segment 4: "Does AI Actually Think?" (~4 min)
**Theme:** We talk about AI like it's alive -- and that's a problem
Two-thirds of American adults believe ChatGPT is possibly conscious. Let that sink in. A peer-reviewed study published in the Proceedings of the National Academy of Sciences found that people increasingly attribute human qualities to AI -- and that trend grew by 34% in 2025 alone.
We say AI "thinks," "understands," "learns," and "knows." Even the companies building these systems use that language. But here's what's actually happening under the hood: the system is calculating which word is most statistically likely to come next, given everything that came before it. That's it. There's no understanding. There's no inner experience. It's a very sophisticated autocomplete.
Researchers call this the "stochastic parrot" debate. One camp says these systems are just parroting patterns from their training data at an incredible scale -- like a parrot that's memorized every book ever written. The other camp points out that GPT-4 scored in the 90th percentile on the Bar Exam and solves 93% of Math Olympiad problems -- can something that performs that well really be "just" pattern matching?
The honest answer is: we don't fully know. MIT Technology Review ran a fascinating piece in January 2026 about researchers who now treat AI models like alien organisms -- performing what they call "digital autopsies" to understand what's happening inside. The systems have become so complex that even their creators can't fully explain how they arrive at their answers.
But here's why the language matters: when we say AI "thinks," we lower our guard. We trust it more. We assume it has judgment, common sense, and intention. It doesn't. And that mismatch between perception and reality is where people get hurt -- trusting AI with legal filings, medical questions, or financial decisions without verification.
**Key takeaway for listeners:** AI doesn't think. It predicts. The words we use to describe it shape how much we trust it -- and right now, we're over-trusting.
---
## Segment 5: "The World's Most Forgetful Genius" (~3 min)
**Theme:** AI has no memory and shorter attention than you think
Companies love to advertise massive "context windows" -- the amount of text an AI can consider at once. Some models now claim they can handle a million tokens, equivalent to several novels. Sounds impressive. But research shows these systems can only reliably track about 5 to 10 pieces of information before performance degrades to essentially random guessing.
Think about that. A system that can "read" an entire book can't reliably keep track of more than a handful of facts from it. It's like hiring someone with photographic memory who can only remember 5 things at a time. The information goes in, but the system loses the thread.
And here's something most people don't realize: AI has zero memory between conversations. When you close a chat window and open a new one, the AI has absolutely no recollection of your previous conversation. It doesn't know who you are, what you discussed, or what you decided. Every conversation starts completely fresh. Some products build memory features on top -- saving notes about you that get fed back in -- but the underlying AI itself remembers nothing.
Even within a single long conversation, models "forget" what was said at the beginning. If you've ever noticed an AI contradicting something it said twenty messages ago, this is why. The earlier parts of the conversation fade as new text pushes in.
**Key takeaway for listeners:** AI isn't building a relationship with you. Every conversation is day one. And even within a conversation, its attention span is shorter than you'd think.
---
## Segment 6: "Just Say 'Think Step by Step'" (~3 min)
**Theme:** The weird magic of prompt engineering
Here's one of the strangest discoveries in AI: if you add the words "think step by step" to your question, the AI performs dramatically better. On math problems, this simple phrase more than doubles accuracy. It sounds like a magic spell, and honestly, it kind of is.
It works because of how these systems generate text. Normally, an AI tries to jump straight to an answer -- predicting the most likely response in one shot. But when you tell it to think step by step, it generates intermediate reasoning first. Each step becomes context for the next step. It's like the difference between trying to do complex multiplication in your head versus writing out the long-form work on paper.
Researchers call this "chain-of-thought prompting," and it reveals something fascinating about AI: the knowledge is often already in there, locked up. The right prompt is the key that unlocks it. The system was trained on millions of examples of step-by-step reasoning, so when you explicitly ask for that format, it activates those patterns.
But there's a catch -- this only works on large models, roughly 100 billion parameters or more. On smaller models, asking for step-by-step reasoning actually makes performance worse. The smaller system generates plausible-looking steps that are logically nonsensical, then confidently arrives at a wrong answer. It's like asking someone to show their work when they don't actually understand the subject -- you just get confident-looking nonsense.
**Key takeaway for listeners:** The way you phrase your question to AI matters enormously. "Think step by step" is the single most useful trick you can learn. But remember -- it's not actually thinking. It's generating text that looks like thinking.
---
## Segment 7: "AI is Thirsty" (~4 min)
**Theme:** The environmental cost nobody talks about
Here's a number that stops people in their tracks: if AI data centers were a country, they'd rank fifth in the world for energy consumption -- right between Japan and Russia. By the end of 2026, they're projected to consume over 1,000 terawatt-hours of electricity. That's more than most nations on Earth.
Every time you ask ChatGPT a question, a server somewhere draws power. Not a lot for one question -- but multiply that by hundreds of millions of users, billions of queries per day, and it adds up fast. And it's not just electricity. AI is incredibly thirsty. Training and running these models requires massive amounts of water for cooling the data centers. We're talking 731 million to over a billion cubic meters of water annually -- equivalent to the household water usage of 6 to 10 million Americans.
Here's the part that really stings: MIT Technology Review found that 60% of the increased electricity demand from AI data centers is being met by fossil fuels. So despite all the talk about clean energy, the AI boom is adding an estimated 220 million tons of carbon emissions. The irony of using AI to help solve climate change while simultaneously accelerating it isn't lost on researchers.
A single query to a large language model uses roughly 10 times the energy of a standard Google search. Training a single large model from scratch can consume as much energy as five cars over their entire lifetimes, including manufacturing.
None of this means we should stop using AI. But most people have no idea that there's a physical cost to every conversation, every generated image, every AI-powered feature. The cloud isn't actually a cloud -- it's warehouses full of GPUs running 24/7, drinking water and burning fuel.
**Key takeaway for listeners:** AI has a physical footprint. Every question you ask has an energy cost. It's worth knowing that "free" AI tools aren't free -- someone's paying the electric bill, and the planet's paying too.
---
## Segment 8: "Chatbots Are Old News" (~3 min)
**Theme:** The shift from chatbots to AI agents
If 2025 was the year of the chatbot, 2026 is the year of the agent. And the difference matters.
A chatbot talks to you. You ask a question, it gives an answer. It's reactive -- like a really smart FAQ page. An AI agent does work for you. You give it a goal, and it figures out the steps, uses tools, and executes. It can browse the web, write and run code, send emails, manage files, and chain together multiple actions to accomplish something complex.
Here's the simplest way to think about it: a chatbot is read-only. It can create text, suggest ideas, answer questions. An agent is read-write. It doesn't just suggest you should send a follow-up email -- it writes the email, sends it, tracks whether you got a response, and follows up if you didn't.
The market reflects this shift. The AI agent market is growing at 45% per year, nearly double the 23% growth rate for chatbots. Companies are building agents that can handle entire workflows autonomously -- scheduling meetings, managing customer service tickets, writing and deploying code, analyzing data and producing reports.
This is where AI gets both more useful and more risky. A chatbot that hallucinates gives you bad information. An agent that hallucinates takes bad action. When an AI can actually do things in the real world -- send messages, modify files, make purchases -- the stakes of getting it wrong go way up.
**Key takeaway for listeners:** The next wave of AI doesn't just talk -- it acts. That's powerful, but it also means the consequences of AI mistakes move from "bad advice" to "bad actions."
---
## Segment 9: "AI Eats Itself" (~3 min)
**Theme:** Model collapse -- what happens when AI trains on AI
Here's a problem nobody saw coming. As the internet fills up with AI-generated content -- articles, images, code, social media posts -- the next generation of AI models inevitably trains on that AI-generated material. And when AI trains on AI output, something strange happens: it gets worse. Researchers call it "model collapse."
A study published in Nature showed that when models train on recursively generated data -- AI output fed back into AI training -- rare and unusual patterns gradually disappear. The output drifts toward bland, generic averages. Think of it like making a photocopy of a photocopy of a photocopy. Each generation loses detail and nuance until you're left with a blurry, indistinct mess.
This matters because AI models need diverse, high-quality data to perform well. The best AI systems were trained on the raw, messy, varied output of billions of real humans -- with all our creativity, weirdness, and unpredictability. If future models train primarily on the sanitized, pattern-averaged output of current AI, they'll lose the very diversity that made them capable in the first place.
Some researchers describe it as an "AI inbreeding" problem. There's now a premium on verified human-generated content for training purposes. The irony is real: the more successful AI becomes at generating content, the harder it becomes to train the next generation of AI.
**Key takeaway for listeners:** AI needs human creativity to function. If we flood the internet with AI-generated content, we risk making future AI systems blander and less capable. Human originality isn't just nice to have -- it's the raw material AI depends on.
---
## Segment 10: "Nobody Knows How It Works" (~4 min)
**Theme:** Even the people who build AI don't fully understand it
Here's maybe the most unsettling fact about modern AI: the people who build these systems don't fully understand how they work. That's not an exaggeration -- it's the honest assessment from the researchers themselves.
MIT Technology Review published a piece in January 2026 about a new field of AI research that treats language models like alien organisms. Scientists are essentially performing digital autopsies -- probing, dissecting, and mapping the internal pathways of these systems to figure out what they're actually doing. The article describes them as "machines so vast and complicated that nobody quite understands what they are or how they work."
A company called Anthropic -- the makers of the Claude AI -- has made breakthroughs in what's called "mechanistic interpretability." They've developed tools that can identify specific features and pathways inside a model, mapping the route from a question to an answer. MIT Technology Review named it one of the top 10 breakthrough technologies of 2026. But even with these tools, we're still in the early stages of understanding.
Here's the thing that's hard to wrap your head around: nobody programmed these systems to do what they do. Engineers designed the architecture and the training process, but the actual capabilities -- writing poetry, solving math, generating code, having conversations -- emerged on their own as the models grew larger. Some abilities appeared suddenly and unexpectedly at certain scales, which researchers call "emergent abilities." Though even that's debated -- Stanford researchers found that some of these supposed sudden leaps might just be artifacts of how we measure performance.
Simon Willison, a prominent AI researcher, summarized the state of things at the end of 2025: these systems are "trained to produce the most statistically likely answer, not to assess their own confidence." They don't know what they know. They can't tell you when they're guessing. And we can't always tell from the outside either.
**Key takeaway for listeners:** AI isn't like traditional software where engineers write rules and the computer follows them. Modern AI is more like a system that organized itself, and we're still figuring out what it built. That should make us both fascinated and cautious.
---
## Segment 11: "AI Can See But Can't Understand" (~3 min)
**Theme:** Multimodal AI -- vision isn't the same as comprehension
The latest AI models don't just read text -- they can look at images, listen to audio, and watch video. These are called multimodal models, and they seem almost magical when you first use them. Upload a photo and the AI describes it. Show it a chart and it explains the data. Point a camera at a math problem and it solves it.
But research from Meta, published in Nature, tested 60 of these vision-language models and found a crucial gap: scaling up these models improves their ability to perceive -- to identify objects, read text, recognize faces -- but it doesn't improve their ability to reason about what they see. Even the most advanced models fail at tasks that are trivial for humans, like counting objects in an image or understanding basic physical relationships.
Show one of these models a photo of a ball on a table near the edge and ask "will the ball fall?" and it struggles. Not because it can't see the ball or the table, but because it doesn't understand gravity, momentum, or cause and effect. It can describe what's in the picture. It can't tell you what's going to happen next.
Researchers describe this as the "symbol grounding problem" -- the AI can match images to words, but those words aren't grounded in real-world experience. A child who's dropped a ball understands what happens when a ball is near an edge. The AI has only seen pictures of balls and read descriptions of falling.
**Key takeaway for listeners:** AI can see what's in a photo, but it doesn't understand the world the photo represents. Perception and comprehension are very different things.
---
## Suggested Episode Flow
For a cohesive episode, consider this order:
1. **Segment 1** (Strawberry) - Fun, accessible opener that hooks the audience
2. **Segment 2** (Math) - Builds on tokenization, deepens understanding
3. **Segment 3** (Hallucination) - The big one; real-world stakes with great stories
4. **Segment 4** (Does AI Think?) - Philosophical turn, audience reflection
5. **Segment 6** (Think Step by Step) - Practical, empowering -- gives listeners something actionable
6. **Segment 5** (Memory) - Quick, surprising facts
7. **Segment 11** (Vision) - Brief palate cleanser
8. **Segment 9** (AI Eats Itself) - Unexpected twist the audience won't see coming
9. **Segment 8** (Agents) - Forward-looking, what's next
10. **Segment 7** (Energy) - The uncomfortable truth to close on
11. **Segment 10** (Nobody Knows) - Perfect closer; leaves audience thinking
**Estimated total runtime:** 40-45 minutes of content (before intros, outros, and transitions)

View File

@@ -0,0 +1,94 @@
# AI/LLM Misconceptions Reading List
## For Radio Show: "Emergent AI Technologies"
**Created:** 2026-02-09
---
## 1. Tokenization (The "Strawberry" Problem)
- **[Why LLMs Can't Count the R's in 'Strawberry'](https://arbisoft.com/blogs/why-ll-ms-can-t-count-the-r-s-in-strawberry-and-what-it-teaches-us)** - Arbisoft - Clear explainer on how tokenization breaks words into chunks like "st", "raw", "berry"
- **[Can modern LLMs count the b's in "blueberry"?](https://minimaxir.com/2025/08/llm-blueberry/)** - Max Woolf - Shows 2025-2026 models are overcoming this limitation
- **[Signs of Tokenization Awareness in LLMs](https://medium.com/@solidgoldmagikarp/a-breakthrough-feature-signs-of-tokenization-awareness-in-llms-058fe880ef9f)** - Ekaterina Kornilitsina, Medium (Jan 2026) - Modern LLMs developing tokenization awareness
## 2. Math/Computation Limitations
- **[Why LLMs Are Bad at Math](https://www.reachcapital.com/resources/thought-leadership/why-llms-are-bad-at-math-and-how-they-can-be-better/)** - Reach Capital - LLMs predict plausible text, not compute answers; lack working memory for multi-step calculations
- **[Why AI Struggles with Basic Math](https://www.aei.org/technology-and-innovation/why-ai-struggles-with-basic-math-and-how-thats-changing/)** - AEI - How "87439" gets tokenized inconsistently, breaking positional value
- **[Why LLMs Fail at Math & The Neuro-Symbolic AI Solution](https://www.arsturn.com/blog/why-your-llm-is-bad-at-math-and-how-to-fix-it-with-a-clip-on-symbolic-brain)** - Arsturn - Proposes integrating symbolic computing systems
## 3. Hallucination (Confidently Wrong)
- **[Why language models hallucinate](https://openai.com/index/why-language-models-hallucinate/)** - OpenAI - Trained to guess, penalized for saying "I don't know"
- **[AI hallucinates because it's trained to fake answers](https://www.science.org/content/article/ai-hallucinates-because-it-s-trained-fake-answers-it-doesn-t-know)** - Science (AAAS) - Models use 34% more confident language when WRONG
- **[It's 2026. Why Are LLMs Still Hallucinating?](https://blogs.library.duke.edu/blog/2026/01/05/its-2026-why-are-llms-still-hallucinating/)** - Duke University - "Sounding good far more important than being correct"
- **[AI Hallucination Report 2026](https://www.allaboutai.com/resources/ai-statistics/ai-hallucinations/)** - AllAboutAI - Comprehensive stats on hallucination rates across models
## 4. Real-World Failures (Great Radio Stories)
- **[California fines lawyer over ChatGPT fabrications](https://calmatters.org/economy/technology/2025/09/chatgpt-lawyer-fine-ai-regulation/)** - $10K fine; 21 of 23 cited cases were fake; 486 documented cases worldwide
- **[As more lawyers fall for AI hallucinations](https://cronkitenews.azpbs.org/2025/10/28/lawyers-ai-hallucinations-chatgpt/)** - Cronkite/PBS - Judges issued hundreds of decisions addressing AI hallucinations in 2025
- **[The Biggest AI Fails of 2025](https://www.ninetwothree.co/blog/ai-fails)** - Taco Bell AI ordering 18,000 cups of water, Tesla FSD crashes, $440K Australian report with hallucinated sources
- **[26 Biggest AI Controversies](https://www.crescendo.ai/blog/ai-controversies)** - xAI exposing 300K private Grok conversations, McDonald's McHire with password "123456"
## 5. Anthropomorphism ("AI is Thinking")
- **[Anthropomorphic conversational agents](https://www.pnas.org/doi/10.1073/pnas.2415898122)** - PNAS - 2/3 of Americans think ChatGPT might be conscious; anthropomorphic attributions up 34% in 2025
- **[Thinking beyond the anthropomorphic paradigm](https://arxiv.org/html/2502.09192v1)** - ArXiv (Feb 2026) - Anthropomorphism hinders accurate understanding
- **[Stop Talking about AI Like It Is Human](https://epic.org/a-new-years-resolution-for-everyone-stop-talking-about-generative-ai-like-it-is-human/)** - EPIC - Why anthropomorphic language is misleading and dangerous
## 6. The Stochastic Parrot Debate
- **[From Stochastic Parrots to Digital Intelligence](https://wires.onlinelibrary.wiley.com/doi/10.1002/wics.70035)** - Wiley - Evolution of how we view LLMs, recognizing emergent capabilities
- **[LLMs still lag ~40% behind humans on physical concepts](https://arxiv.org/abs/2502.08946)** - ArXiv (Feb 2026) - Supporting the "just pattern matching" view
- **[LLMs are Not Stochastic Parrots](https://medium.com/@freddyayala/llms-are-not-stochastic-parrots-how-large-language-models-actually-work-16c000588b70)** - Counter-argument: GPT-4 scoring 90th percentile on Bar Exam, 93% on MATH Olympiad
## 7. Emergent Abilities
- **[Emergent Abilities in LLMs: A Survey](https://arxiv.org/abs/2503.05788)** - ArXiv (Mar 2026) - Capabilities arising suddenly and unpredictably at scale
- **[Breaking Myths in LLM scaling](https://www.sciencedirect.com/science/article/pii/S092523122503214X)** - ScienceDirect - Some "emergent" behaviors may be measurement artifacts
- **[Examining Emergent Abilities](https://hai.stanford.edu/news/examining-emergent-abilities-large-language-models)** - Stanford HAI - Smoother metrics show gradual improvements, not sudden leaps
## 8. Context Windows & Memory
- **[Your 1M+ Context Window LLM Is Less Powerful Than You Think](https://towardsdatascience.com/your-1m-context-window-llm-is-less-powerful-than-you-think/)** - Can only track 5-10 variables before degrading to random guessing
- **[Understanding LLM performance degradation](https://demiliani.com/2025/11/02/understanding-llm-performance-degradation-a-deep-dive-into-context-window-limits/)** - Why models "forget" what was said at the beginning of long conversations
- **[LLM Chat History Summarization Guide](https://mem0.ai/blog/llm-chat-history-summarization-guide-2025)** - Mem0 - Practical solutions to memory limitations
## 9. Prompt Engineering (Why "Think Step by Step" Works)
- **[Understanding Reasoning LLMs](https://magazine.sebastianraschka.com/p/understanding-reasoning-llms)** - Sebastian Raschka, PhD - Chain-of-thought unlocks latent capabilities
- **[The Ultimate Guide to LLM Reasoning](https://kili-technology.com/large-language-models-llms/llm-reasoning-guide)** - CoT more than doubles performance on math problems
- **[Chain-of-Thought Prompting](https://www.promptingguide.ai/techniques/cot)** - Only works with ~100B+ parameter models; smaller models produce worse results
## 10. Energy/Environmental Costs
- **[Generative AI's Environmental Impact](https://news.mit.edu/2025/explained-generative-ai-environmental-impact-0117)** - MIT - AI data centers projected to rank 5th globally in energy (between Japan and Russia)
- **[We did the math on AI's energy footprint](https://www.technologyreview.com/2025/05/20/1116327/ai-energy-usage-climate-footprint-big-tech/)** - MIT Tech Review - 60% from fossil fuels; shocking water usage stats
- **[AI Environment Statistics 2026](https://www.allaboutai.com/resources/ai-statistics/ai-environment/)** - AllAboutAI - AI draining 731-1,125M cubic meters of water annually
## 11. Agents vs. Chatbots (The 2026 Shift)
- **[2025 Was Chatbots. 2026 Is Agents.](https://dev.to/inboryn_99399f96579fcd705/2025-was-about-chatbots-2026-is-about-agents-heres-the-difference-426f)** - "Chatbots talk to you, agents do work for you"
- **[AI Agents vs Chatbots: The 2026 Guide](https://technosysblogs.com/ai-agents-vs-chatbots/)** - Generative AI is "read-only", agentic AI is "read-write"
- **[Agentic AI Explained](https://www.synergylabs.co/blog/agentic-ai-explained-from-chatbots-to-autonomous-ai-agents-in-2026)** - Agent market at 45% CAGR vs 23% for chatbots
## 12. Multimodal AI
- **[Visual cognition in multimodal LLMs](https://www.nature.com/articles/s42256-024-00963-y)** - Nature - Scaling improves perception but not reasoning; even advanced models fail at simple counting
- **[Will multimodal LLMs achieve deep understanding?](https://www.frontiersin.org/journals/systems-neuroscience/articles/10.3389/fnsys.2025.1683133/full)** - Frontiers - Remain detached from interactive learning
- **[Compare Multimodal AI Models on Visual Reasoning](https://research.aimultiple.com/visual-reasoning/)** - AIMultiple 2026 - Fall short on causal reasoning and intuitive psychology
## 13. Training vs. Learning
- **[5 huge AI misconceptions to drop in 2026](https://www.tomsguide.com/ai/5-huge-ai-misconceptions-to-drop-now-heres-what-you-need-to-know-in-2026)** - Tom's Guide - Bias, accuracy, data privacy myths
- **[AI models collapse when trained on AI-generated data](https://www.nature.com/articles/s41586-024-07566-y)** - Nature - "Model collapse" where rare patterns disappear
- **[The State of LLMs 2025](https://magazine.sebastianraschka.com/p/state-of-llms-2025)** - Sebastian Raschka - "LLMs stopped getting smarter by training and started getting smarter by thinking"
## 14. How Researchers Study LLMs
- **[Treating LLMs like an alien autopsy](https://www.technologyreview.com/2026/01/12/1129782/ai-large-language-models-biology-alien-autopsy/)** - MIT Tech Review (Jan 2026) - "So vast and complicated that nobody quite understands what they are"
- **[Mechanistic Interpretability: Breakthrough Tech 2026](https://www.technologyreview.com/2026/01/12/1130003/mechanistic-interpretability-ai-research-models-2026-breakthrough-technologies/)** - Anthropic's work opening the black box
- **[2025: The year in LLMs](https://simonwillison.net/2025/Dec/31/the-year-in-llms/)** - Simon Willison - "Trained to produce statistically likely answers, not to assess their own confidence"
## 15. Podcast Resources
- **[Latent Space Podcast](https://podcasts.apple.com/us/podcast/large-language-model-llm-talk/id1790576136)** - Swyx & Alessio Fanelli - Deep technical coverage
- **[Practical AI](https://podcasts.apple.com/us/podcast/practical-ai-machine-learning-data-science-llm/id1406537385)** - Accessible to general audiences; good "What mattered in 2025" episode
- **[TWIML AI Podcast](https://podcasts.apple.com/us/podcast/the-twiml-ai-podcast-formerly-this-week-in-machine/id1116303051)** - Researcher interviews since 2016
---
## Top Radio Hooks (Best Audience Engagement)
1. **Taco Bell AI ordering 18,000 cups of water** - Funny, relatable failure
2. **Lawyers citing 21 fake court cases** - Serious real-world consequences
3. **34% more confident language when wrong** - Counterintuitive and alarming
4. **AI data centers rank 5th globally in energy** (between Japan and Russia) - Shocking scale
5. **2/3 of Americans think ChatGPT might be conscious** - Audience self-reflection moment
6. **"Strawberry" has how many R's?** - Interactive audience participation
7. **Million-token context but only tracks 5-10 variables** - "Bigger isn't always better" angle

View File

@@ -26,7 +26,7 @@
Company: Glaztech Industries
Domain: glaztech.com
Network: 192.168.0.0/24 through 192.168.9.0/24 (10 sites)
File Server: \\192.168.8.62\
File Server: \\192.168.6.1\
Issue: Windows 10/11 security updates block PDF preview from network shares
Version: 1.1
@@ -39,7 +39,7 @@ param(
[string[]]$UnblockPaths = @(),
[string[]]$ServerNames = @(
"192.168.8.62" # Glaztech main file server
"192.168.6.1" # Glaztech main file server
)
)
@@ -204,27 +204,27 @@ Write-Log "========================================"
# Glaztech file server paths
$GlaztechPaths = @(
"\\192.168.8.62\alb_patterns",
"\\192.168.8.62\boi_patterns",
"\\192.168.8.62\brl_patterns",
"\\192.168.8.62\den_patterns",
"\\192.168.8.62\elp_patterns",
"\\192.168.8.62\emails",
"\\192.168.8.62\ftp_brl",
"\\192.168.8.62\ftp_shp",
"\\192.168.8.62\ftp_slc",
"\\192.168.8.62\GeneReport",
"\\192.168.8.62\Graphics",
"\\192.168.8.62\gt_invoice",
"\\192.168.8.62\Logistics",
"\\192.168.8.62\phx_patterns",
"\\192.168.8.62\reports",
"\\192.168.8.62\shp_patterns",
"\\192.168.8.62\slc_patterns",
"\\192.168.8.62\sql_backup",
"\\192.168.8.62\sql_jobs",
"\\192.168.8.62\tuc_patterns",
"\\192.168.8.62\vs_code"
"\\192.168.6.1\alb_patterns",
"\\192.168.6.1\boi_patterns",
"\\192.168.6.1\brl_patterns",
"\\192.168.6.1\den_patterns",
"\\192.168.6.1\elp_patterns",
"\\192.168.6.1\emails",
"\\192.168.6.1\ftp_brl",
"\\192.168.6.1\ftp_shp",
"\\192.168.6.1\ftp_slc",
"\\192.168.6.1\GeneReport",
"\\192.168.6.1\Graphics",
"\\192.168.6.1\gt_invoice",
"\\192.168.6.1\Logistics",
"\\192.168.6.1\phx_patterns",
"\\192.168.6.1\reports",
"\\192.168.6.1\shp_patterns",
"\\192.168.6.1\slc_patterns",
"\\192.168.6.1\sql_backup",
"\\192.168.6.1\sql_jobs",
"\\192.168.6.1\tuc_patterns",
"\\192.168.6.1\vs_code"
)
# Default local paths
@@ -302,7 +302,7 @@ Write-Log "SUMMARY"
Write-Log "========================================"
Write-Log "PDFs Unblocked: $TotalUnblocked"
Write-Log "Configuration Changes: $Script:ChangesMade"
Write-Log "File Server: \\192.168.8.62\ (added to trusted zone)"
Write-Log "File Server: \\192.168.6.1\ (added to trusted zone)"
Write-Log ""
if ($Script:ChangesMade -gt 0 -or $TotalUnblocked -gt 0) {
@@ -341,7 +341,7 @@ Write-Log "========================================"
ComputerName = $env:COMPUTERNAME
PDFsUnblocked = $TotalUnblocked
ConfigChanges = $Script:ChangesMade
FileServer = "\\192.168.8.62\"
FileServer = "\\192.168.6.1\"
Success = ($TotalUnblocked -gt 0 -or $Script:ChangesMade -gt 0)
LogPath = "C:\Temp\Glaztech-PDF-Fix.log"
}

237
extract_license_plate.py Normal file
View File

@@ -0,0 +1,237 @@
"""
Extract and enhance license plate from Tesla dash cam video
Target: Pickup truck at 25-30 seconds
"""
import cv2
import numpy as np
from pathlib import Path
from PIL import Image, ImageEnhance, ImageFilter
import os
def extract_frames_from_range(video_path, start_time, end_time, fps=10):
"""Extract frames from specific time range at given fps"""
cap = cv2.VideoCapture(str(video_path))
video_fps = cap.get(cv2.CAP_PROP_FPS)
frames = []
timestamps = []
# Calculate frame numbers for the time range
start_frame = int(start_time * video_fps)
end_frame = int(end_time * video_fps)
frame_interval = int(video_fps / fps)
print(f"[INFO] Video FPS: {video_fps}")
print(f"[INFO] Extracting frames {start_frame} to {end_frame} every {frame_interval} frames")
cap.set(cv2.CAP_PROP_POS_FRAMES, start_frame)
current_frame = start_frame
while current_frame <= end_frame:
ret, frame = cap.read()
if not ret:
break
if (current_frame - start_frame) % frame_interval == 0:
timestamp = current_frame / video_fps
frames.append(frame)
timestamps.append(timestamp)
print(f"[OK] Extracted frame at {timestamp:.2f}s (frame {current_frame})")
current_frame += 1
cap.release()
return frames, timestamps
def detect_license_plates(frame):
"""Detect potential license plate regions using multiple methods"""
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Method 1: Edge detection + contours
edges = cv2.Canny(gray, 50, 200)
contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
plate_candidates = []
for contour in contours:
x, y, w, h = cv2.boundingRect(contour)
aspect_ratio = w / float(h) if h > 0 else 0
area = w * h
# License plate characteristics: aspect ratio ~2-5, reasonable size
if 1.5 < aspect_ratio < 6 and 1000 < area < 50000:
plate_candidates.append({
'bbox': (x, y, w, h),
'aspect_ratio': aspect_ratio,
'area': area,
'score': area * aspect_ratio # Simple scoring
})
# Sort by score and return top candidates
plate_candidates.sort(key=lambda x: x['score'], reverse=True)
return plate_candidates[:10] # Return top 10 candidates
def enhance_license_plate(plate_img, upscale_factor=6):
"""Apply multiple enhancement techniques to license plate image"""
enhanced_versions = []
# Convert to PIL for some operations
plate_pil = Image.fromarray(cv2.cvtColor(plate_img, cv2.COLOR_BGR2RGB))
# 1. Upscale first
new_size = (plate_pil.width * upscale_factor, plate_pil.height * upscale_factor)
upscaled = plate_pil.resize(new_size, Image.Resampling.LANCZOS)
enhanced_versions.append(("upscaled", upscaled))
# 2. Sharpen heavily
sharpened = upscaled.filter(ImageFilter.SHARPEN)
sharpened = sharpened.filter(ImageFilter.SHARPEN)
enhanced_versions.append(("sharpened", sharpened))
# 3. High contrast
contrast = ImageEnhance.Contrast(sharpened)
high_contrast = contrast.enhance(2.5)
enhanced_versions.append(("high_contrast", high_contrast))
# 4. Brightness adjustment
brightness = ImageEnhance.Brightness(high_contrast)
bright = brightness.enhance(1.3)
enhanced_versions.append(("bright_contrast", bright))
# 5. Adaptive thresholding (OpenCV)
gray_cv = cv2.cvtColor(np.array(upscaled), cv2.COLOR_RGB2GRAY)
adaptive = cv2.adaptiveThreshold(gray_cv, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2)
enhanced_versions.append(("adaptive_thresh", Image.fromarray(adaptive)))
# 6. Bilateral filter + sharpen
bilateral = cv2.bilateralFilter(np.array(upscaled), 9, 75, 75)
bilateral_pil = Image.fromarray(bilateral)
bilateral_sharp = bilateral_pil.filter(ImageFilter.SHARPEN)
enhanced_versions.append(("bilateral_sharp", bilateral_sharp))
# 7. Unsharp mask
unsharp = upscaled.filter(ImageFilter.UnsharpMask(radius=2, percent=200, threshold=3))
enhanced_versions.append(("unsharp_mask", unsharp))
# 8. Extreme sharpening
extreme_sharp = sharpened.filter(ImageFilter.SHARPEN)
extreme_sharp = extreme_sharp.filter(ImageFilter.UnsharpMask(radius=3, percent=250, threshold=2))
enhanced_versions.append(("extreme_sharp", extreme_sharp))
return enhanced_versions
def main():
video_path = Path("E:/TeslaCam/SavedClips/2026-02-03_19-48-23/2026-02-03_19-42-36-front.mp4")
output_dir = Path("D:/Scratchpad/pickup_truck_25-30s")
output_dir.mkdir(parents=True, exist_ok=True)
print(f"[INFO] Processing video: {video_path}")
print(f"[INFO] Output directory: {output_dir}")
# Extract frames from 25-30 second range at 10 fps
start_time = 25.0
end_time = 30.0
target_fps = 10
frames, timestamps = extract_frames_from_range(video_path, start_time, end_time, target_fps)
print(f"[OK] Extracted {len(frames)} frames")
# Process each frame
all_plates = []
for idx, (frame, timestamp) in enumerate(zip(frames, timestamps)):
frame_name = f"frame_{timestamp:.2f}s"
# Save original frame
frame_path = output_dir / f"{frame_name}_original.jpg"
cv2.imwrite(str(frame_path), frame)
# Detect license plates
plate_candidates = detect_license_plates(frame)
print(f"[INFO] Frame {timestamp:.2f}s: Found {len(plate_candidates)} plate candidates")
# Process each candidate
for plate_idx, candidate in enumerate(plate_candidates[:5]): # Top 5 candidates
x, y, w, h = candidate['bbox']
# Extract plate region with some padding
padding = 10
x1 = max(0, x - padding)
y1 = max(0, y - padding)
x2 = min(frame.shape[1], x + w + padding)
y2 = min(frame.shape[0], y + h + padding)
plate_crop = frame[y1:y2, x1:x2]
if plate_crop.size == 0:
continue
# Draw bounding box on original frame
frame_with_box = frame.copy()
cv2.rectangle(frame_with_box, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.putText(frame_with_box, f"Candidate {plate_idx+1}", (x, y-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# Save frame with detection box
detection_path = output_dir / f"{frame_name}_detection_{plate_idx+1}.jpg"
cv2.imwrite(str(detection_path), frame_with_box)
# Save raw crop
crop_path = output_dir / f"{frame_name}_plate_{plate_idx+1}_raw.jpg"
cv2.imwrite(str(crop_path), plate_crop)
# Enhance plate
enhanced_versions = enhance_license_plate(plate_crop, upscale_factor=6)
for enhance_name, enhanced_img in enhanced_versions:
enhance_path = output_dir / f"{frame_name}_plate_{plate_idx+1}_{enhance_name}.jpg"
enhanced_img.save(str(enhance_path))
all_plates.append({
'timestamp': timestamp,
'candidate_idx': plate_idx,
'bbox': (x, y, w, h),
'aspect_ratio': candidate['aspect_ratio'],
'area': candidate['area']
})
print(f"[OK] Saved candidate {plate_idx+1} from {timestamp:.2f}s (AR: {candidate['aspect_ratio']:.2f}, Area: {candidate['area']})")
# Create summary
summary_path = output_dir / "summary.txt"
with open(summary_path, 'w') as f:
f.write("License Plate Extraction Summary\n")
f.write("=" * 60 + "\n\n")
f.write(f"Video: {video_path}\n")
f.write(f"Time Range: {start_time}-{end_time} seconds\n")
f.write(f"Frames Extracted: {len(frames)}\n")
f.write(f"Total Plate Candidates: {len(all_plates)}\n\n")
f.write("Candidates by Frame:\n")
f.write("-" * 60 + "\n")
for plate in all_plates:
f.write(f"Time: {plate['timestamp']:.2f}s | ")
f.write(f"Candidate #{plate['candidate_idx']+1} | ")
f.write(f"Aspect Ratio: {plate['aspect_ratio']:.2f} | ")
f.write(f"Area: {plate['area']}\n")
f.write("\n" + "=" * 60 + "\n")
f.write("Enhancement Techniques Applied:\n")
f.write("- Upscaled 6x (LANCZOS)\n")
f.write("- Heavy sharpening\n")
f.write("- High contrast boost\n")
f.write("- Brightness adjustment\n")
f.write("- Adaptive thresholding\n")
f.write("- Bilateral filtering\n")
f.write("- Unsharp masking\n")
f.write("- Extreme sharpening\n")
print(f"\n[SUCCESS] Processing complete!")
print(f"[INFO] Output directory: {output_dir}")
print(f"[INFO] Total plate candidates processed: {len(all_plates)}")
print(f"[INFO] Summary saved to: {summary_path}")
if __name__ == "__main__":
main()

View File

@@ -11,8 +11,8 @@ body { font-family: 'Segoe UI', Tahoma, sans-serif; line-height: 1.5; color: #33
.page {
width: 8.5in;
height: 11in;
padding: 0.4in;
padding-bottom: 0.7in;
padding: 0.6in;
padding-bottom: 0.8in;
background: white;
position: relative;
margin: 20px auto;
@@ -28,8 +28,8 @@ body { font-family: 'Segoe UI', Tahoma, sans-serif; line-height: 1.5; color: #33
width: 100%;
height: 11in;
margin: 0;
padding: 0.4in;
padding-bottom: 0.7in;
padding: 0.6in;
padding-bottom: 0.8in;
page-break-after: always;
box-shadow: none;
overflow: hidden;
@@ -41,53 +41,53 @@ body { font-family: 'Segoe UI', Tahoma, sans-serif; line-height: 1.5; color: #33
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 8px;
padding-bottom: 12px;
border-bottom: 3px solid #1e3c72;
margin-bottom: 10px;
margin-bottom: 16px;
}
.logo { font-size: 20px; font-weight: bold; color: #1e3c72; }
.contact { text-align: right; font-size: 10px; color: #666; }
.contact .phone { font-size: 14px; font-weight: bold; color: #f39c12; }
.logo { font-size: 22px; font-weight: bold; color: #1e3c72; }
.contact { text-align: right; font-size: 11px; color: #666; }
.contact .phone { font-size: 16px; font-weight: bold; color: #f39c12; }
h1 { color: #1e3c72; font-size: 22px; margin-bottom: 4px; line-height: 1.2; }
h2 { color: #1e3c72; font-size: 15px; margin: 10px 0 6px 0; padding-bottom: 4px; border-bottom: 2px solid #f39c12; page-break-after: avoid; }
h3 { color: #1e3c72; font-size: 12px; margin: 8px 0 4px 0; font-weight: bold; page-break-after: avoid; }
h4 { color: #dc3545; font-size: 11px; margin: 6px 0 3px 0; font-weight: bold; page-break-after: avoid; }
h1 { color: #1e3c72; font-size: 26px; margin-bottom: 6px; line-height: 1.2; }
h2 { color: #1e3c72; font-size: 18px; margin: 15px 0 9px 0; padding-bottom: 4px; border-bottom: 2px solid #f39c12; page-break-after: avoid; }
h3 { color: #1e3c72; font-size: 14px; margin: 9px 0 5px 0; font-weight: bold; page-break-after: avoid; }
h4 { color: #dc3545; font-size: 12px; margin: 7px 0 4px 0; font-weight: bold; page-break-after: avoid; }
p { orphans: 3; widows: 3; }
.subtitle { font-size: 11px; color: #666; font-style: italic; margin-bottom: 8px; }
.subtitle { font-size: 12px; color: #666; font-style: italic; margin-bottom: 9px; }
p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
p { font-size: 12px; margin-bottom: 8px; line-height: 1.5; }
.myth-reality-box {
background: #fff3cd;
border-left: 4px solid #f39c12;
padding: 8px;
margin: 8px 0;
padding: 10px;
margin: 10px 0;
border-radius: 4px;
page-break-inside: avoid;
}
.myth { font-weight: bold; color: #dc3545; font-size: 11px; margin-bottom: 4px; }
.reality { font-size: 10px; margin: 2px 0; padding-left: 15px; position: relative; }
.reality:before { content: "✓"; position: absolute; left: 0; color: #27ae60; font-weight: bold; }
.myth { font-weight: bold; color: #dc3545; font-size: 13px; margin-bottom: 5px; }
.reality { font-size: 12px; margin: 3px 0; padding-left: 18px; position: relative; line-height: 1.5; }
.reality:before { content: "✓"; position: absolute; left: 0; color: #27ae60; font-weight: bold; font-size: 14px; }
.threat-box {
background: #f8d7da;
border: 2px solid #dc3545;
border-radius: 6px;
padding: 8px;
margin: 8px 0;
padding: 10px;
margin: 10px 0;
page-break-inside: avoid;
}
.threat-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 6px;
gap: 10px;
margin-bottom: 7px;
}
.threat-icon {
width: 24px;
height: 24px;
width: 28px;
height: 28px;
background: #dc3545;
color: white;
border-radius: 50%;
@@ -95,35 +95,36 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
align-items: center;
justify-content: center;
font-weight: bold;
font-size: 14px;
font-size: 16px;
}
.threat-title {
font-size: 13px;
font-size: 14px;
font-weight: bold;
color: #dc3545;
}
.threat-content { font-size: 10px; margin: 4px 0; }
.threat-content { font-size: 12px; margin: 5px 0; line-height: 1.5; }
.threat-example {
background: rgba(220, 53, 69, 0.1);
padding: 6px;
margin: 6px 0;
padding: 8px;
margin: 7px 0;
border-radius: 3px;
font-size: 10px;
font-size: 11px;
font-style: italic;
line-height: 1.5;
}
.threat-stats {
font-size: 10px;
font-size: 11px;
font-weight: bold;
color: #dc3545;
margin-top: 4px;
margin-top: 5px;
}
.cost-box {
background: linear-gradient(135deg, #dc3545 0%, #c82333 100%);
color: white;
padding: 10px;
padding: 12px;
border-radius: 6px;
margin: 8px 0;
margin: 10px 0;
page-break-inside: avoid;
}
.cost-box h2 {
@@ -133,46 +134,48 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
}
.cost-table {
width: 100%;
margin: 8px 0;
margin: 10px 0;
border-collapse: collapse;
font-size: 10px;
font-size: 12px;
}
.cost-table td {
padding: 4px;
padding: 5px;
border-bottom: 1px solid rgba(255,255,255,0.3);
line-height: 1.5;
}
.cost-table td:first-child { font-weight: 600; }
.cost-table td:last-child { text-align: right; }
.cost-total {
font-size: 13px;
font-size: 14px;
font-weight: bold;
margin-top: 6px;
padding-top: 6px;
margin-top: 8px;
padding-top: 8px;
border-top: 2px solid white;
text-align: center;
}
.checklist {
columns: 2;
column-gap: 15px;
column-gap: 20px;
list-style: none;
padding: 0;
margin: 8px 0;
margin: 10px 0;
page-break-inside: avoid;
}
.checklist li {
padding: 3px 0;
padding-left: 18px;
padding: 4px 0;
padding-left: 20px;
position: relative;
font-size: 10px;
font-size: 12px;
break-inside: avoid;
line-height: 1.5;
}
.checklist li:before {
content: "☐";
position: absolute;
left: 0;
color: #dc3545;
font-size: 12px;
font-size: 14px;
}
.risk-score-box {
@@ -190,48 +193,49 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
.protection-layer {
background: #d4edda;
border-left: 4px solid #27ae60;
padding: 8px;
margin: 8px 0;
padding: 10px;
margin: 10px 0;
border-radius: 4px;
page-break-inside: avoid;
}
.layer-header {
font-size: 12px;
font-size: 14px;
font-weight: bold;
color: #27ae60;
margin-bottom: 4px;
margin-bottom: 6px;
}
.feature-item {
margin: 4px 0;
margin: 6px 0;
}
.feature-name {
font-weight: bold;
color: #1e3c72;
font-size: 10px;
font-size: 12px;
}
.feature-desc {
font-size: 9px;
margin-left: 12px;
font-size: 11px;
margin-left: 14px;
color: #666;
line-height: 1.5;
}
.comparison-table {
width: 100%;
border-collapse: collapse;
margin: 8px 0;
font-size: 8px;
margin: 10px 0;
font-size: 10px;
page-break-inside: avoid;
}
.comparison-table th {
background: #1e3c72;
color: white;
padding: 5px 3px;
padding: 6px 4px;
text-align: center;
font-size: 9px;
font-size: 10px;
border: 1px solid white;
}
.comparison-table td {
padding: 4px 3px;
padding: 5px 4px;
border: 1px solid #e0e0e0;
text-align: center;
}
@@ -246,44 +250,47 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
text-align: left;
color: #1e3c72;
}
.checkmark { color: #27ae60; font-weight: bold; font-size: 14px; }
.checkmark { color: #27ae60; font-weight: bold; font-size: 16px; }
.dash { color: #999; }
.case-study-box {
background: white;
border: 3px solid #27ae60;
border-radius: 8px;
padding: 10px;
margin: 8px 0;
padding: 12px;
margin: 10px 0;
box-shadow: 0 4px 10px rgba(0,0,0,0.1);
page-break-inside: avoid;
}
.case-study-header {
background: #27ae60;
color: white;
padding: 6px;
margin: -10px -10px 8px -10px;
padding: 8px;
margin: -12px -12px 10px -12px;
border-radius: 5px 5px 0 0;
font-size: 11px;
font-size: 13px;
font-weight: bold;
}
.case-outcome {
background: #d4edda;
padding: 6px;
padding: 8px;
border-radius: 4px;
margin: 6px 0;
margin: 8px 0;
}
.case-outcome h4 {
color: #27ae60;
margin: 0 0 4px 0;
margin: 0 0 5px 0;
}
.case-outcome p {
line-height: 1.5;
}
.roi-calculator {
background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
color: white;
padding: 10px;
padding: 12px;
border-radius: 8px;
margin: 8px 0;
margin: 10px 0;
page-break-inside: avoid;
}
.roi-calculator h2 {
@@ -293,31 +300,32 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
.roi-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
margin: 8px 0;
gap: 10px;
margin: 10px 0;
}
.roi-card {
background: rgba(255,255,255,0.15);
padding: 8px;
padding: 10px;
border-radius: 6px;
}
.roi-card h4 {
color: white;
margin: 0 0 6px 0;
font-size: 11px;
margin: 0 0 7px 0;
font-size: 12px;
}
.roi-breakdown {
font-size: 10px;
font-size: 11px;
font-family: 'Courier New', monospace;
line-height: 1.5;
}
.roi-breakdown div {
margin: 2px 0;
margin: 3px 0;
}
.roi-total {
font-size: 14px;
font-size: 15px;
font-weight: bold;
margin-top: 8px;
padding-top: 8px;
margin-top: 10px;
padding-top: 10px;
border-top: 1px solid rgba(255,255,255,0.3);
text-align: center;
}
@@ -326,8 +334,8 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
background: #d1ecf1;
border: 2px solid #17a2b8;
border-radius: 8px;
padding: 10px;
margin: 8px 0;
padding: 12px;
margin: 10px 0;
page-break-inside: avoid;
}
.assessment-box h3 {
@@ -337,13 +345,14 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
.assessment-list {
list-style: none;
padding: 0;
margin: 8px 0;
margin: 10px 0;
}
.assessment-list li {
padding: 4px 0;
padding-left: 20px;
padding-left: 22px;
position: relative;
font-size: 10px;
font-size: 12px;
line-height: 1.5;
}
.assessment-list li:before {
content: "✓";
@@ -351,32 +360,32 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
left: 0;
color: #17a2b8;
font-weight: bold;
font-size: 12px;
font-size: 14px;
}
.cta-box {
background: linear-gradient(135deg, #f39c12 0%, #e67e22 100%);
color: white;
padding: 12px;
border-radius: 8px;
border-radius: 6px;
text-align: center;
margin: 8px 0;
margin: 10px 0;
page-break-inside: avoid;
}
.cta-box h2 {
color: white;
border: none;
margin: 0 0 8px 0;
margin: 0 0 5px 0;
font-size: 16px;
}
.phone-large {
font-size: 20px;
font-size: 18px;
font-weight: bold;
margin: 6px 0;
margin: 5px 0;
}
.cta-box p {
font-size: 12px;
margin: 5px 0;
font-size: 11px;
margin: 3px 0;
}
.guarantee-box {
@@ -395,8 +404,8 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
background: #fff3cd;
border: 2px solid #f39c12;
border-radius: 8px;
padding: 10px;
margin: 8px 0;
padding: 12px;
margin: 10px 0;
page-break-inside: avoid;
}
.offer-box h3 {
@@ -406,13 +415,14 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
.offer-list {
list-style: none;
padding: 0;
margin: 8px 0;
margin: 10px 0;
}
.offer-list li {
padding: 3px 0;
padding-left: 20px;
padding: 4px 0;
padding-left: 22px;
position: relative;
font-size: 11px;
font-size: 12px;
line-height: 1.5;
}
.offer-list li:before {
content: "[OK]";
@@ -420,14 +430,14 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
left: 0;
color: #27ae60;
font-weight: bold;
font-size: 9px;
font-size: 10px;
}
.footer {
position: absolute;
bottom: 0.3in;
left: 0.4in;
right: 0.4in;
left: 0.6in;
right: 0.6in;
text-align: center;
padding-top: 6px;
border-top: 2px solid #1e3c72;
@@ -439,16 +449,17 @@ p { font-size: 10px; margin-bottom: 6px; line-height: 1.4; }
.two-column {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
gap: 15px;
}
ul.bullet-list {
margin: 5px 0;
padding-left: 15px;
font-size: 10px;
margin: 8px 0;
padding-left: 18px;
font-size: 12px;
}
ul.bullet-list li {
margin: 2px 0;
margin: 3px 0;
line-height: 1.5;
}
</style>
</head>

View File

@@ -46,6 +46,7 @@ Inside you'll find:
You should read this guide if:
- [ ] You don't know what you should be paying for IT services
- [ ] You're comparing MSP quotes and the prices vary wildly
- [ ] You've been burned by an IT company that over-promised and under-delivered
- [ ] Your current IT provider keeps hitting you with surprise charges
@@ -53,7 +54,6 @@ You should read this guide if:
- [ ] You need cyber insurance but your IT setup doesn't meet the requirements
- [ ] You've been quoted "unlimited support" and wonder what the catch is
- [ ] You're stuck in a long contract with an MSP you'd like to fire
- [ ] You don't know what you should be paying for IT services
If you checked ANY of these boxes, keep reading.
@@ -101,29 +101,31 @@ An MSP promises "unlimited support" for a flat monthly fee. It sounds great - un
Transparent pricing with clearly defined service levels. A good MSP will tell you exactly what's included, what the response times are, and what happens when you exceed your plan.
**GPS Example:**
Our Standard Support Plan includes 4 hours of labor per month at $380 ($95/hour effective rate). You know exactly what you're getting. Need more? You can add non-expiring block time at $100-150/hour. No surprises.
Our Standard Support Plan includes 4 hours of labor per month at $380 ($95/hour effective rate). You know exactly what you're getting. Need more? Add prepaid block time ($100-150/hour) that never expires. Or skip the monthly plan entirely and just bank hours to use when you need them. No surprises either way.
> **What is GPS?** Throughout this guide, you'll see references to GPS - that's **Guru Protection Services**, the managed IT and security packages we've developed at Arizona Computer Guru. We use GPS examples to show how a transparent MSP handles each situation.
**Key Question:**
"What happens when I use all my included hours? What's the overage rate and response time?"
---
### Red Flag 2: Hidden Pricing and "Call for Quote"
### Red Flag 2: High-Pressure Sales Tactics
**The Problem:**
The MSP won't publish pricing on their website. Everything is "call for a custom quote." You can't comparison shop because you don't know what anything costs.
You just want a ballpark price, but the MSP insists you sit through a multi-step sales process first. They push hard to "get you on the calendar," require discovery calls before sharing any numbers, and make you feel like you're being sold to rather than helped.
**Why It Happens:**
Sales-driven MSPs use pricing opacity to maximize what they can charge each customer. They're betting you won't shop around if the process is painful enough.
Sales-driven MSPs are trained to control the process. They want you committed before you can comparison shop. If getting basic pricing feels like navigating a used car lot, imagine what getting support will feel like.
**What to Look For Instead:**
Published pricing or clear pricing structures. You should be able to ballpark your costs before you ever talk to a salesperson.
An MSP who will give you straight answers. It's fine if they want to meet in person - technology can be complicated, and a good MSP wants to understand your actual needs. But you shouldn't have to endure high-pressure tactics just to learn what you'll pay.
**GPS Example:**
Our pricing is published: $19-39/endpoint depending on the protection tier, $200-850/month for support plans based on hours included. You can calculate your costs before you call us.
We like meeting clients in person when possible - not for sales pressure, but because it's easier to understand your setup when we can see it. When you point at a box and call it a router (but it's actually an access point), we can translate that in real-time. We'll share our pricing upfront, explain things in plain English, and never make you feel stupid for asking questions. Many IT people are dismissive or condescending - that's never tolerated here. We're kind, direct, and honest.
**Key Question:**
"Can you send me a rate sheet or pricing guide before we schedule a sales call?"
"Can you give me a general idea of pricing before we meet? How does your sales process work?"
---
@@ -238,6 +240,8 @@ Let's talk numbers. Here are industry benchmarks for MSP services:
- GPS-Pro: $26/endpoint (business protection - MOST POPULAR)
- GPS-Advanced: $39/endpoint (maximum protection, compliance tools)
*How we determined these ranges:* These figures reflect pricing we've observed from competing MSPs in the Arizona market, industry surveys from MSP trade organizations, and vendor pricing for the underlying security tools. Ranges vary based on what's included - lower-priced tiers typically include basic RMM and antivirus, while higher tiers bundle advanced EDR, email security, dark web monitoring, and compliance tools. Our GPS pricing includes more features at each tier than the industry average.
**Support Plans (monthly labor included):**
- 2-4 hours/month: $200-400/month ($85-100/hour effective)
- 6-10 hours/month: $540-850/month ($85-90/hour effective)
@@ -300,6 +304,8 @@ You hire a local tech who charges $65/hour and promises to "only charge when you
Compare that to a GPS-Pro plan ($665/month = $7,980/year) that would have prevented both incidents through monitoring and patching.
*About these estimates:* The $65/hour rate reflects typical break-fix technician pricing in the Tucson market. Productivity loss is calculated at $50/hour per employee (conservative for professional services). Ransomware recovery costs ($8,500) reflect data recovery services and emergency labor - actual ransoms average $50,000-200,000 for small businesses according to Sophos research. The $10,000 cyber insurance deductible is typical for small business policies. These are conservative estimates based on incidents we've helped clients recover from.
---
### The True Cost of Downtime
@@ -513,24 +519,38 @@ We never want to be the company someone is trapped with.
| Premium | $540 | 6 hours | $90/hour | 4 hours |
| Priority | $850 | 10 hours | $85/hour | 2 hours, 24/7 |
Compare to our full hourly rate: $150-165/hour for non-plan clients.
Compare to our full hourly rate: $175/hour for non-plan clients.
**Note:** Support plan hours are use-it-or-lose-it each month - they do not roll over.
**Real Example:**
- Client on Standard Support ($380/month) used 3.5 hours in a typical month
- Value: 3.5 × $165 = $577.50
- Value: 3.5 × $175 = $612.50
- They paid: $380
- Savings: $197.50/month ($2,370/year)
- Savings: $232.50/month ($2,790/year)
**What Happens If You Go Over?**
1. Support plan hours used first (included in your monthly fee)
2. Prepaid block time used next (if you've purchased any)
3. Overage billed at $175/hour (still better than emergency rates elsewhere)
**Block Time Option:**
- Purchase 10, 20, or 30 hours at $100-150/hour
- Never expires
- Great for projects or seasonal businesses
- Available to anyone (you don't need a support plan)
### Prepaid Block Time: Hours That Never Expire
Many clients prefer prepaid block time over monthly support plans. Here's why:
| Block Size | Price | Effective Rate |
|------------|-------|----------------|
| 10 Hours | $1,500 | $150/hour |
| 20 Hours | $2,600 | $130/hour |
| 30 Hours | $3,000 | $100/hour |
**Key difference:** Block time never expires. Support plan hours reset monthly. If you don't use your 4 hours this month, they're gone. Block time stays in your account until you use it - whether that's next month or next year.
**Two ways to use block time:**
- **Standalone:** Skip the monthly plan entirely. Bank hours and use them when you need them. Great for businesses with unpredictable IT needs or seasonal fluctuations.
- **Supplement:** Pair with a support plan. Your monthly hours cover routine needs, and block time handles overflow or special projects without surprise overage rates.
Many of our clients prefer the flexibility of block time - they pay once, use hours as needed, and never worry about "wasting" unused monthly hours.
---
@@ -670,7 +690,7 @@ Reactive break-fix means they profit when you have problems. Proactive monitorin
- "If you exceed your plan hours, we bill additional time at $X/hour. Or you can purchase prepaid block time at a discounted rate."
**GPS Answer:**
- "Your plan hours are used first. If you go over, we use any prepaid block time you've purchased ($100-150/hour). If you don't have block time, we bill overages at $175/hour. Most months, clients stay within their plan."
- "Plan hours are used first, but they don't roll over month-to-month. If you go over, we draw from any prepaid block time you've banked ($100-150/hour depending on block size). Block time never expires, so many clients keep a reserve. No block time? Overages bill at $175/hour. Some clients skip monthly plans entirely and just use block time - it's more flexible if your IT needs are unpredictable."
---
@@ -844,18 +864,14 @@ EDR, email security, dark web monitoring, security training, compliance tools. E
### Next Steps: Three No-Pressure Options
**Option 1: Get a Custom Quote (15 minutes)**
**Option 1: Free Consultation**
Tell us about your business:
- How many computers/servers?
- What industries/compliance needs?
- Current IT pain points?
Let's have a conversation about your IT needs - no pitch, no pressure. We offer free consultations for prospective clients, and we prefer to come to you. It's more convenient for you, and it gives you the chance to show us the pain points firsthand - the server closet that runs hot, the printer that jams every Tuesday, the workflow that takes too many clicks.
We'll send you a detailed quote with our recommendations. No sales pressure. No follow-up calls unless you ask.
We'll give you honest feedback and recommendations, whether that leads to working with us or not. Sometimes the best advice we give is "your current IT team is doing fine - here's one thing they could improve."
**Call:** 520.304.8300
**Email:** mike@azcomputerguru.com
**Web:** azcomputerguru.com/quote
**Email:** info@azcomputerguru.com
---
@@ -867,9 +883,12 @@ We'll scan your network for vulnerabilities:
- Phishing susceptibility
- Cyber insurance readiness
You get a detailed report with prioritized fixes. No obligation to use us for remediation.
You get a detailed report with prioritized fixes. No obligation to use us afterward.
**Schedule:** azcomputerguru.com/security-assessment
This is also a great way to validate that your current IT team is doing well. If everything checks out, you'll have peace of mind. If there are gaps, you'll know exactly what to address.
**Initial scan:** Free for prospective clients
**Recurring penetration tests and security scans:** Available a-la-carte, even if you don't use us as your primary IT provider
---
@@ -888,11 +907,11 @@ If you end up choosing us, great. If you choose someone else but make a better d
Tucson, AZ 85710
**Phone:** 520.304.8300
**Email:** mike@azcomputerguru.com
**Email:** info@azcomputerguru.com
**Web:** azcomputerguru.com
**Office Hours:**
Monday-Friday: 8:00 AM - 5:00 PM
Monday-Friday: 9:00 AM - 5:00 PM
Emergency Support: 24/7 for Priority Support clients
---

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -11,8 +11,8 @@ body { font-family: 'Segoe UI', Tahoma, sans-serif; line-height: 1.5; color: #33
.page {
width: 8.5in;
height: 11in;
padding: 0.4in;
padding-bottom: 0.65in;
padding: 0.6in;
padding-bottom: 0.8in;
background: white;
position: relative;
margin: 20px auto;
@@ -27,45 +27,53 @@ body { font-family: 'Segoe UI', Tahoma, sans-serif; line-height: 1.5; color: #33
width: 100%;
height: 11in;
margin: 0;
padding: 0.4in;
padding-bottom: 0.65in;
padding: 0.6in;
padding-bottom: 0.8in;
page-break-after: always;
page-break-before: auto;
page-break-inside: avoid;
box-shadow: none;
overflow: hidden;
}
.page:last-child { page-break-after: auto; }
/* Ensure proper page breaks between sheets */
.page:nth-child(1) { page-break-after: always; } /* End of sheet 1, front */
.page:nth-child(2) { page-break-after: always; } /* End of sheet 1, back */
.page:nth-child(3) { page-break-after: always; } /* End of sheet 2, front */
.page:nth-child(4) { page-break-after: auto; } /* End of sheet 2, back */
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 8px;
padding-bottom: 12px;
border-bottom: 3px solid #1e3c72;
margin-bottom: 12px;
margin-bottom: 16px;
}
.logo { font-size: 20px; font-weight: bold; color: #1e3c72; }
.contact { text-align: right; font-size: 10px; color: #666; }
.contact .phone { font-size: 14px; font-weight: bold; color: #f39c12; }
.logo { font-size: 22px; font-weight: bold; color: #1e3c72; }
.contact { text-align: right; font-size: 11px; color: #666; }
.contact .phone { font-size: 16px; font-weight: bold; color: #f39c12; }
h1 { color: #1e3c72; font-size: 22px; margin-bottom: 4px; line-height: 1.2; }
h2 { color: #1e3c72; font-size: 15px; margin: 10px 0 6px 0; padding-bottom: 3px; border-bottom: 2px solid #f39c12; page-break-after: avoid; }
h3 { color: #1e3c72; font-size: 12px; margin: 6px 0 3px 0; font-weight: bold; page-break-after: avoid; }
.subtitle { font-size: 11px; color: #666; font-style: italic; margin-bottom: 6px; }
h1 { color: #1e3c72; font-size: 26px; margin-bottom: 6px; line-height: 1.2; }
h2 { color: #1e3c72; font-size: 18px; margin: 15px 0 9px 0; padding-bottom: 4px; border-bottom: 2px solid #f39c12; page-break-after: avoid; }
h3 { color: #1e3c72; font-size: 14px; margin: 9px 0 5px 0; font-weight: bold; page-break-after: avoid; }
.subtitle { font-size: 12px; color: #666; font-style: italic; margin-bottom: 9px; }
p { font-size: 10px; margin-bottom: 5px; line-height: 1.35; }
p { font-size: 12px; margin-bottom: 8px; line-height: 1.5; }
.tier-comparison {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 6px;
margin: 6px 0;
gap: 10px;
margin: 10px 0;
}
.tier-box {
border: 2px solid #e0e0e0;
border-radius: 6px;
padding: 6px;
padding: 10px;
position: relative;
background: white;
page-break-inside: avoid;
@@ -76,42 +84,42 @@ p { font-size: 10px; margin-bottom: 5px; line-height: 1.35; }
}
.tier-box .badge {
position: absolute;
top: -8px;
top: -10px;
left: 50%;
transform: translateX(-50%);
background: #f39c12;
color: white;
padding: 2px 6px;
padding: 3px 8px;
border-radius: 8px;
font-weight: bold;
font-size: 8px;
font-size: 9px;
white-space: nowrap;
}
.tier-name {
font-size: 11px;
font-size: 13px;
font-weight: bold;
color: #1e3c72;
text-align: center;
margin-bottom: 3px;
margin-bottom: 4px;
}
.tier-price {
text-align: center;
font-size: 16px;
font-size: 18px;
font-weight: bold;
color: #27ae60;
margin-bottom: 3px;
margin-bottom: 4px;
}
.tier-price .period {
font-size: 8px;
font-size: 9px;
color: #666;
display: block;
}
.tier-label {
text-align: center;
font-size: 9px;
font-size: 10px;
font-weight: bold;
color: #666;
margin-bottom: 5px;
margin-bottom: 6px;
}
.tier-features {
list-style: none;
@@ -119,11 +127,11 @@ p { font-size: 10px; margin-bottom: 5px; line-height: 1.35; }
margin: 0;
}
.tier-features li {
font-size: 9px;
padding: 2px 0;
padding-left: 12px;
font-size: 11px;
padding: 3px 0;
padding-left: 14px;
position: relative;
line-height: 1.3;
line-height: 1.4;
}
.tier-features li:before {
content: "✓";
@@ -131,16 +139,16 @@ p { font-size: 10px; margin-bottom: 5px; line-height: 1.35; }
left: 0;
color: #27ae60;
font-weight: bold;
font-size: 10px;
font-size: 12px;
}
.tier-features li strong {
color: #1e3c72;
}
.best-for {
margin-top: 5px;
padding-top: 5px;
margin-top: 8px;
padding-top: 8px;
border-top: 1px solid #e0e0e0;
font-size: 8px;
font-size: 10px;
color: #666;
text-align: center;
}
@@ -148,13 +156,13 @@ p { font-size: 10px; margin-bottom: 5px; line-height: 1.35; }
.support-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 5px;
margin: 6px 0;
gap: 10px;
margin: 10px 0;
}
.support-card {
border: 2px solid #e0e0e0;
border-radius: 6px;
padding: 5px;
padding: 8px;
text-align: center;
position: relative;
page-break-inside: avoid;
@@ -165,70 +173,70 @@ p { font-size: 10px; margin-bottom: 5px; line-height: 1.35; }
.support-card.popular:before {
content: "⭐ POPULAR";
position: absolute;
top: -6px;
top: -8px;
left: 50%;
transform: translateX(-50%);
background: #f39c12;
color: white;
padding: 1px 4px;
padding: 2px 6px;
border-radius: 6px;
font-size: 7px;
font-size: 8px;
font-weight: bold;
}
.support-name {
font-size: 10px;
font-size: 12px;
font-weight: bold;
color: #1e3c72;
margin-bottom: 2px;
margin-bottom: 3px;
}
.support-price {
font-size: 14px;
font-size: 16px;
font-weight: bold;
color: #27ae60;
margin-bottom: 2px;
margin-bottom: 3px;
}
.support-details {
font-size: 8px;
font-size: 10px;
color: #666;
margin-bottom: 3px;
margin-bottom: 4px;
}
.support-features {
list-style: none;
padding: 0;
margin: 3px 0 0 0;
margin: 4px 0 0 0;
}
.support-features li {
font-size: 8px;
padding: 1px 0;
line-height: 1.2;
font-size: 10px;
padding: 2px 0;
line-height: 1.3;
}
.table {
width: 100%;
border-collapse: collapse;
margin: 5px 0;
font-size: 8px;
margin: 8px 0;
font-size: 10px;
page-break-inside: avoid;
}
.table th {
background: #1e3c72;
color: white;
padding: 3px;
padding: 5px;
text-align: left;
font-weight: 600;
}
.table td {
padding: 2px 3px;
padding: 4px 5px;
border-bottom: 1px solid #e0e0e0;
}
.callout-box {
background: #fff3cd;
border-left: 3px solid #f39c12;
padding: 5px 6px;
margin: 5px 0;
padding: 8px 10px;
margin: 8px 0;
border-radius: 2px;
font-size: 8px;
font-size: 10px;
page-break-inside: avoid;
}
.callout-box.success {
@@ -244,26 +252,26 @@ p { font-size: 10px; margin-bottom: 5px; line-height: 1.35; }
background: #f8f9fa;
border: 1px solid #1e3c72;
border-radius: 4px;
padding: 5px;
margin: 5px 0;
padding: 8px;
margin: 8px 0;
page-break-inside: avoid;
}
.example-header {
font-size: 9px;
font-size: 11px;
font-weight: bold;
color: #1e3c72;
margin-bottom: 2px;
margin-bottom: 4px;
}
.cost-line {
display: flex;
justify-content: space-between;
font-size: 8px;
padding: 1px 0;
font-size: 10px;
padding: 2px 0;
}
.cost-line.total {
border-top: 1px solid #1e3c72;
margin-top: 3px;
padding-top: 3px;
margin-top: 5px;
padding-top: 5px;
font-weight: bold;
color: #1e3c72;
}
@@ -271,13 +279,13 @@ p { font-size: 10px; margin-bottom: 5px; line-height: 1.35; }
ul.feature-list {
list-style: none;
padding: 0;
margin: 3px 0;
margin: 5px 0;
}
ul.feature-list li {
padding: 1px 0;
padding-left: 12px;
padding: 2px 0;
padding-left: 14px;
position: relative;
font-size: 9px;
font-size: 11px;
}
ul.feature-list li:before {
content: "✓";
@@ -285,98 +293,98 @@ ul.feature-list li:before {
left: 0;
color: #27ae60;
font-weight: bold;
font-size: 10px;
font-size: 12px;
}
.cta-box {
background: linear-gradient(135deg, #f39c12 0%, #e67e22 100%);
color: white;
padding: 8px;
padding: 12px;
border-radius: 6px;
text-align: center;
margin: 6px 0;
margin: 10px 0;
page-break-inside: avoid;
}
.cta-box h2 {
color: white;
border: none;
margin: 0 0 3px 0;
font-size: 13px;
margin: 0 0 5px 0;
font-size: 16px;
}
.cta-box .phone-large {
font-size: 16px;
font-size: 18px;
font-weight: bold;
margin: 3px 0;
margin: 5px 0;
}
.cta-box p {
font-size: 9px;
margin: 2px 0;
font-size: 11px;
margin: 3px 0;
}
.footer {
position: absolute;
bottom: 0.25in;
left: 0.4in;
right: 0.4in;
bottom: 0.3in;
left: 0.6in;
right: 0.6in;
text-align: center;
padding-top: 5px;
padding-top: 6px;
border-top: 2px solid #1e3c72;
color: #666;
font-size: 8px;
font-size: 9px;
background: white;
}
.pricing-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 6px;
margin: 5px 0;
gap: 10px;
margin: 8px 0;
}
.pricing-tier {
border: 1px solid #e0e0e0;
border-radius: 4px;
padding: 5px;
padding: 8px;
text-align: center;
page-break-inside: avoid;
}
.pricing-tier h4 {
font-size: 10px;
font-size: 12px;
color: #1e3c72;
margin-bottom: 2px;
margin-bottom: 3px;
}
.pricing-tier .price {
font-size: 13px;
font-size: 15px;
font-weight: bold;
color: #27ae60;
margin: 2px 0;
margin: 3px 0;
}
.pricing-tier .details {
font-size: 7px;
font-size: 9px;
color: #666;
margin: 1px 0;
margin: 2px 0;
}
.pricing-tier ul {
list-style: none;
padding: 0;
margin: 3px 0 0 0;
margin: 5px 0 0 0;
text-align: left;
}
.pricing-tier li {
font-size: 7px;
padding: 1px 0;
line-height: 1.2;
font-size: 9px;
padding: 2px 0;
line-height: 1.3;
}
.voip-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 4px;
margin: 5px 0;
gap: 8px;
margin: 8px 0;
}
.voip-box {
border: 1px solid #e0e0e0;
border-radius: 4px;
padding: 4px;
padding: 6px;
position: relative;
page-break-inside: avoid;
}
@@ -387,40 +395,40 @@ ul.feature-list li:before {
.voip-box.popular:before {
content: "★ POPULAR";
position: absolute;
top: -5px;
top: -7px;
left: 50%;
transform: translateX(-50%);
background: #f39c12;
color: white;
padding: 1px 3px;
padding: 2px 5px;
border-radius: 4px;
font-size: 6px;
font-size: 7px;
font-weight: bold;
}
.voip-name {
font-size: 9px;
font-size: 11px;
font-weight: bold;
color: #1e3c72;
text-align: center;
margin-bottom: 2px;
margin-bottom: 3px;
}
.voip-price {
font-size: 13px;
font-size: 15px;
font-weight: bold;
color: #27ae60;
text-align: center;
margin-bottom: 2px;
margin-bottom: 3px;
}
.voip-price .period {
font-size: 7px;
font-size: 8px;
color: #666;
display: block;
}
.voip-label {
font-size: 7px;
font-size: 9px;
color: #666;
text-align: center;
margin-bottom: 3px;
margin-bottom: 4px;
}
.voip-features {
list-style: none;
@@ -428,9 +436,9 @@ ul.feature-list li:before {
margin: 0;
}
.voip-features li {
font-size: 7px;
padding: 1px 0;
line-height: 1.2;
font-size: 9px;
padding: 2px 0;
line-height: 1.3;
}
</style>
</head>
@@ -471,7 +479,7 @@ ul.feature-list li:before {
<div class="tier-name">GPS-PRO</div>
<div class="tier-price">$26<span class="period">/endpoint/month</span></div>
<div class="tier-label">Business Protection</div>
<p style="font-size: 8px; font-weight: 600; margin-bottom: 2px; text-align: center;">Everything in BASIC, PLUS:</p>
<p style="font-size: 10px; font-weight: 600; margin-bottom: 3px; text-align: center;">Everything in BASIC, PLUS:</p>
<ul class="tier-features">
<li><strong>Advanced EDR</strong> threat detection</li>
<li><strong>Email security</strong> & anti-phishing</li>
@@ -486,7 +494,7 @@ ul.feature-list li:before {
<div class="tier-name">GPS-ADVANCED</div>
<div class="tier-price">$39<span class="period">/endpoint/month</span></div>
<div class="tier-label">Maximum Protection</div>
<p style="font-size: 8px; font-weight: 600; margin-bottom: 2px; text-align: center;">Everything in PRO, PLUS:</p>
<p style="font-size: 10px; font-weight: 600; margin-bottom: 3px; text-align: center;">Everything in PRO, PLUS:</p>
<ul class="tier-features">
<li><strong>Advanced threat intelligence</strong></li>
<li><strong>Ransomware rollback</strong></li>
@@ -546,10 +554,10 @@ ul.feature-list li:before {
</div>
</div>
<p style="font-size: 8px; margin: 3px 0;"><strong>All Support Plans Include:</strong> Email & phone support, covers GPS-enrolled endpoints and equipment, professional service, single point of contact.</p>
<p style="font-size: 10px; margin: 5px 0;"><strong>All Support Plans Include:</strong> Email & phone support, covers GPS-enrolled endpoints and equipment, professional service, single point of contact.</p>
<h2>Prepaid Block Time - Non-Expiring Project Hours</h2>
<p style="font-size: 8px;">Perfect for one-time projects, seasonal needs, or supplementing your Support Plan.</p>
<p style="font-size: 10px;">Perfect for one-time projects, seasonal needs, or supplementing your Support Plan.</p>
<table class="table">
<tr><th>Block Size</th><th>Price</th><th>Effective Rate</th><th>Expiration</th></tr>
@@ -558,48 +566,18 @@ ul.feature-list li:before {
<tr><td>30 hours</td><td>$3,000</td><td>$100/hour</td><td>Never expires</td></tr>
</table>
<h2>Quick Pricing Examples</h2>
<div class="example-box">
<div class="example-header">Small Office (10 endpoints)</div>
<div class="cost-line"><span>GPS-Pro (10 × $26)</span><span>$260</span></div>
<div class="cost-line"><span>Equipment Pack</span><span>$25</span></div>
<div class="cost-line"><span>Standard Support (4 hrs)</span><span>$380</span></div>
<div class="cost-line total"><span>TOTAL</span><span>$665/month</span></div>
</div>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 8px;">
<div class="example-box">
<div class="example-header">Growing Business (22 endpoints)</div>
<div class="cost-line"><span>GPS-Pro (22 × $26)</span><span>$572</span></div>
<div class="cost-line"><span>Premium Support (6 hrs)</span><span>$540</span></div>
<div class="cost-line total"><span>TOTAL</span><span>$1,112/mo</span></div>
</div>
<div class="example-box">
<div class="example-header">Established Company (42 endpoints)</div>
<div class="cost-line"><span>GPS-Pro (42 × $26)</span><span>$1,092</span></div>
<div class="cost-line"><span>Priority Support (10 hrs)</span><span>$850</span></div>
<div class="cost-line total"><span>TOTAL</span><span>$1,942/mo</span></div>
</div>
</div>
<div class="callout-box success">
<strong>New Client Special Offer - Sign up within 30 days:</strong> ✓ Waived setup fees ✓ First month 50% off support plans ✓ Free security assessment ($500 value)
</div>
<div class="footer" style="position: absolute; bottom: 0.3in; left: 0.4in; right: 0.4in; text-align: center; font-size: 9px; color: #666; padding-top: 8px; border-top: 2px solid #1e3c72;">
<div style="margin-bottom: 4px;">
<strong style="font-size: 11px; color: #f39c12;">Ready to Get Started?</strong>
<div class="footer">
<div style="margin-bottom: 5px;">
<strong style="font-size: 12px; color: #f39c12;">Ready to Get Started?</strong>
Call <strong style="color: #1e3c72;">520.304.8300</strong> or visit <strong style="color: #1e3c72;">azcomputerguru.com</strong>
</div>
<div style="font-size: 8px;">
<div style="font-size: 9px;">
Protecting Tucson Businesses Since 2001 | 7437 E. 22nd St, Tucson, AZ 85710 | Turn over for complete IT services →
</div>
</div>
</div>
<!-- PAGE 2: BACK - COMPLETE IT SERVICES -->
<!-- PAGE 2: BACK - WEB & EMAIL SERVICES -->
<div class="page">
<div class="header">
<div class="logo">Arizona Computer Guru</div>
@@ -609,9 +587,8 @@ ul.feature-list li:before {
</div>
</div>
<div style="padding-bottom: 1in;">
<h1>Complete IT Services - Everything Your Business Needs</h1>
<div class="subtitle">Protecting Tucson Businesses Since 2001</div>
<h1>Web & Email Services - Complete Online Presence</h1>
<div class="subtitle">Professional hosting and communication solutions</div>
<h2>Web Hosting - Fast, Secure, Managed</h2>
@@ -658,21 +635,21 @@ ul.feature-list li:before {
<h2>Email Hosting - Budget-Friendly or Enterprise</h2>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin: 5px 0;">
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 8px 0;">
<div>
<h3>WHM Email - Budget Option</h3>
<p><strong>From $2/mailbox/mo</strong> (5GB) + $2 per 5GB</p>
<ul class="feature-list" style="font-size: 8px;">
<ul class="feature-list" style="font-size: 10px;">
<li>IMAP/POP3/SMTP, webmail</li>
<li>Works with Outlook, mobile apps</li>
<li>Daily backups, spam filtering</li>
</ul>
<p style="font-size: 8px; margin-top: 3px;"><strong>Packages:</strong> 5GB: $2 | 10GB: $4 | 25GB: $10 | 50GB: $20</p>
<p style="font-size: 10px; margin-top: 5px;"><strong>Packages:</strong> 5GB: $2 | 10GB: $4 | 25GB: $10 | 50GB: $20</p>
</div>
<div>
<h3>Microsoft 365 - Enterprise</h3>
<ul class="feature-list" style="font-size: 8px;">
<ul class="feature-list" style="font-size: 10px;">
<li><strong>Basic:</strong> $7/user (50GB, web/mobile, Teams)</li>
<li><strong>Standard:</strong> $14/user (Desktop apps) - POPULAR</li>
<li><strong>Premium:</strong> $24/user (Advanced security)</li>
@@ -681,9 +658,57 @@ ul.feature-list li:before {
</div>
</div>
<p style="font-size: 8px; margin: 3px 0;"><strong>Email Security Add-On:</strong> $3/mailbox/month (Anti-phishing, spam, DLP) - Recommended for WHM</p>
<p style="font-size: 10px; margin: 5px 0;"><strong>Email Security Add-On:</strong> $3/mailbox/month (Anti-phishing, spam, DLP) - Recommended for WHM</p>
<h2>VoIP Services - GPS-Voice Business Phone Systems</h2>
<h2>Why Choose Arizona Computer Guru?</h2>
<div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; margin: 10px 0;">
<div class="callout-box info">
<strong>Local Expertise:</strong> Serving Tucson since 2001 - we understand Arizona businesses and their unique IT challenges.
</div>
<div class="callout-box info">
<strong>One-Stop Solution:</strong> From endpoints to email, from VoIP to web hosting - manage everything through a single trusted partner.
</div>
<div class="callout-box info">
<strong>Predictable Pricing:</strong> No surprise bills. Clear, upfront pricing with flexible plans that grow with your business.
</div>
<div class="callout-box info">
<strong>24/7 Monitoring:</strong> Your systems are watched around the clock. We detect and resolve issues before they impact your business.
</div>
<div class="callout-box info">
<strong>Proactive Support:</strong> We don't wait for things to break. Regular maintenance, updates, and optimization keep you running smoothly.
</div>
<div class="callout-box info">
<strong>Proven Track Record:</strong> Over 20 years protecting Tucson businesses. Hundreds of satisfied clients across all industries.
</div>
</div>
<div class="footer">
<div style="margin-bottom: 5px;">
<strong style="font-size: 12px; color: #f39c12;">Ready to Get Started?</strong>
Call <strong style="color: #1e3c72;">520.304.8300</strong> or visit <strong style="color: #1e3c72;">azcomputerguru.com</strong>
</div>
<div style="font-size: 9px;">
Protecting Tucson Businesses Since 2001 | 7437 E. 22nd St, Tucson, AZ 85710 | Continue to VoIP services →
</div>
</div>
</div>
<!-- PAGE 3: FRONT - VOIP SERVICES -->
<div class="page">
<div class="header">
<div class="logo">Arizona Computer Guru</div>
<div class="contact">
<div class="phone">520.304.8300</div>
<div>7437 E. 22nd St, Tucson, AZ 85710 | azcomputerguru.com</div>
</div>
</div>
<h1>GPS-Voice VoIP Services - Modern Business Communications</h1>
<div class="subtitle">Crystal-clear calling with enterprise features at small business prices</div>
<h2>VoIP Plans - Choose Your Communication Level</h2>
<div class="voip-grid">
<div class="voip-box">
@@ -704,7 +729,7 @@ ul.feature-list li:before {
<div class="voip-name">GPS-Voice Standard</div>
<div class="voip-price">$28<span class="period">/user/month</span></div>
<div class="voip-label">Business Communications</div>
<p style="font-size: 6px; font-weight: 600; margin-bottom: 1px;">Everything in Basic, PLUS:</p>
<p style="font-size: 8px; font-weight: 600; margin-bottom: 2px;">Everything in Basic, PLUS:</p>
<ul class="voip-features">
<li>Voicemail transcription</li>
<li>Ring groups & call queues</li>
@@ -717,7 +742,7 @@ ul.feature-list li:before {
<div class="voip-name">GPS-Voice Pro</div>
<div class="voip-price">$35<span class="period">/user/month</span></div>
<div class="voip-label">Advanced Communications</div>
<p style="font-size: 6px; font-weight: 600; margin-bottom: 1px;">Everything in Standard, PLUS:</p>
<p style="font-size: 8px; font-weight: 600; margin-bottom: 2px;">Everything in Standard, PLUS:</p>
<ul class="voip-features">
<li>SMS text messaging</li>
<li>Call recording</li>
@@ -731,7 +756,7 @@ ul.feature-list li:before {
<div class="voip-name">GPS-Voice Call Center</div>
<div class="voip-price">$55<span class="period">/user/month</span></div>
<div class="voip-label">Full Contact Center</div>
<p style="font-size: 6px; font-weight: 600; margin-bottom: 1px;">Everything in Pro, PLUS:</p>
<p style="font-size: 8px; font-weight: 600; margin-bottom: 2px;">Everything in Pro, PLUS:</p>
<ul class="voip-features">
<li>Call center seat (ACD)</li>
<li>Real-time dashboards</li>
@@ -742,80 +767,130 @@ ul.feature-list li:before {
</div>
</div>
<p style="font-size: 8px; margin: 3px 0;"><strong>VoIP Add-Ons:</strong> Add'l Number: $2.50 | Toll-Free: $4.95 | SMS: $4 | Transcription: $3 | Teams: $8 | Fax: $12/mo</p>
<p style="font-size: 10px; margin: 5px 0;"><strong>VoIP Add-Ons:</strong> Add'l Number: $2.50 | Toll-Free: $4.95 | SMS: $4 | Transcription: $3 | Teams: $8 | Fax: $12/mo</p>
<p style="font-size: 8px; margin: 3px 0;"><strong>Phone Hardware:</strong> Basic (T53W): $219 | Business (T54W): $279 | Executive (T57W): $359 | Conference (CP920): $599 | Headset: $159 | Cordless: $199</p>
<p style="font-size: 10px; margin: 5px 0;"><strong>Phone Hardware:</strong> Basic (T53W): $219 | Business (T54W): $279 | Executive (T57W): $359 | Conference (CP920): $599 | Headset: $159 | Cordless: $199</p>
<div class="callout-box success">
<strong>Special for GPS Clients:</strong> Free number porting + 50% off first month VoIP
<strong>Special for GPS Clients:</strong> Free number porting + 50% off first month VoIP service
</div>
<h2>Why Choose GPS (Guru Protection Services)?</h2>
<ul class="feature-list">
<li><strong>LOCAL EXPERTISE</strong> - Tucson-based team that knows your business and responds quickly</li>
<li><strong>PREDICTABLE PRICING</strong> - Fixed monthly costs, no surprise bills or hidden fees</li>
<li><strong>COMPREHENSIVE PROTECTION</strong> - From endpoints to cloud, we monitor everything</li>
<li><strong>PERSONAL SERVICE</strong> - You get a real person, not a ticket queue</li>
<li><strong>PROVEN TRACK RECORD</strong> - Protecting Tucson businesses for over 20 years</li>
<li><strong>ALL-IN-ONE SOLUTION</strong> - Security + Hosting + Communications from one trusted partner</li>
</ul>
<h2>Complete IT Solution Example</h2>
<div class="example-box">
<div class="example-header">15-User Business with Website, Email & VoIP</div>
<div class="cost-line"><span>GPS-Pro Monitoring (15 × $26)</span><span>$390</span></div>
<div class="cost-line"><span>Premium Support (6 hrs included)</span><span>$540</span></div>
<div class="cost-line"><span>Business Web Hosting</span><span>$35</span></div>
<div class="cost-line"><span>GPS-Voice Standard (15 × $28)</span><span>$420</span></div>
<div class="cost-line"><span>Toll-Free Number</span><span>$4.95</span></div>
<div class="cost-line total"><span>MONTHLY TOTAL</span><span>$1,389.95</span></div>
<div class="cost-line total"><span>ANNUAL TOTAL</span><span>$16,679.40</span></div>
<div style="margin-top: 3px; padding-top: 3px; border-top: 1px solid #e0e0e0;">
<div class="cost-line"><span>One-Time Hardware: Basic Desk Phones (15 × $219)</span><span>$3,285</span></div>
<div class="example-box" style="max-width: 600px; margin: 10px auto;">
<div class="example-header">Mid-Size Business - Complete IT Package (20 employees)</div>
<div style="font-size: 10px; margin: 8px 0; color: #666;">Everything you need for complete IT coverage:</div>
<div class="cost-line"><span>GPS-Pro Monitoring (20 endpoints)</span><span>$520/mo</span></div>
<div class="cost-line"><span>Standard Support Plan (4 hours included)</span><span>$380/mo</span></div>
<div class="cost-line"><span>Microsoft 365 Business Standard (20 users)</span><span>$280/mo</span></div>
<div class="cost-line"><span>GPS-Voice Standard (15 phone lines)</span><span>$420/mo</span></div>
<div class="cost-line"><span>Business Web Hosting (company website)</span><span>$35/mo</span></div>
<div class="cost-line"><span>GPS-Equipment Pack (network infrastructure)</span><span>$25/mo</span></div>
<div class="cost-line total"><span>Complete IT Solution</span><span>$1,660/mo</span></div>
<div style="margin-top: 8px; padding-top: 8px; border-top: 1px solid #e0e0e0; font-size: 10px; color: #27ae60;">
<strong>Includes:</strong> 24/7 monitoring, 4 hours monthly support, threat protection, M365 apps, 15 phone lines, professional website hosting, network monitoring, and single-point-of-contact support.
</div>
<div style="margin-top: 8px; font-size: 10px; color: #666; font-style: italic;">
Compare to hiring an IT person: $50,000+ annual salary + benefits + training vs. $19,920/year for complete IT coverage with expert team.
</div>
</div>
<h2>Get Started in 3 Easy Steps</h2>
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 5px; margin: 5px 0;">
<div style="text-align: center; padding: 5px; background: #f8f9fa; border-radius: 3px;">
<div style="font-size: 18px; color: #f39c12; font-weight: bold;">1</div>
<div style="font-size: 8px; font-weight: bold; color: #1e3c72; margin: 2px 0;">FREE CONSULTATION</div>
<div style="font-size: 7px;">Call 520.304.8300 for assessment</div>
</div>
<div style="text-align: center; padding: 5px; background: #f8f9fa; border-radius: 3px;">
<div style="font-size: 18px; color: #f39c12; font-weight: bold;">2</div>
<div style="font-size: 8px; font-weight: bold; color: #1e3c72; margin: 2px 0;">CUSTOM PROPOSAL</div>
<div style="font-size: 7px;">Solution for your budget</div>
</div>
<div style="text-align: center; padding: 5px; background: #f8f9fa; border-radius: 3px;">
<div style="font-size: 18px; color: #f39c12; font-weight: bold;">3</div>
<div style="font-size: 8px; font-weight: bold; color: #1e3c72; margin: 2px 0;">SEAMLESS SETUP</div>
<div style="font-size: 7px;">Migration, training, support</div>
<div class="footer">
<div style="margin-bottom: 5px;">
<strong style="font-size: 12px; color: #f39c12;">Questions? We're Here to Help!</strong>
Call <strong style="color: #1e3c72;">520.304.8300</strong> or email <strong style="color: #1e3c72;">info@azcomputerguru.com</strong>
</div>
<div style="font-size: 9px;">
Protecting Tucson Businesses Since 2001 | 7437 E. 22nd St, Tucson, AZ 85710 | Turn page for more information →
</div>
</div>
</div>
<div style="background: #f8f9fa; padding: 5px; border-left: 4px solid #27ae60; border-radius: 3px; margin: 5px 0 10px 0;">
<p style="font-size: 8px; font-weight: bold; color: #1e3c72; margin-bottom: 2px;">Our Commitment to You:</p>
<ul class="feature-list" style="font-size: 8px;">
<li>Fast response (2-24 hours by plan)</li>
<li>Proactive monitoring prevents problems</li>
<li>Transparent pricing, no hidden fees</li>
<li>Local Tucson support team</li>
<li>20+ years protecting Arizona companies</li>
<!-- PAGE 4: BACK - GETTING STARTED & COMMITMENT -->
<div class="page">
<div class="header">
<div class="logo">Arizona Computer Guru</div>
<div class="contact">
<div class="phone">520.304.8300</div>
<div>7437 E. 22nd St, Tucson, AZ 85710 | azcomputerguru.com</div>
</div>
</div>
<h1>Why Tucson Businesses Trust Arizona Computer Guru</h1>
<div class="subtitle">Over 20 years of excellence in IT service and support</div>
<h2>Six Reasons to Choose GPS Protection Services</h2>
<div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin: 15px 0;">
<div style="border-left: 4px solid #1e3c72; padding: 10px; background: #f8f9fa;">
<h3 style="color: #1e3c72; margin: 0 0 6px 0; font-size: 14px;">Local Tucson Expertise</h3>
<p style="font-size: 11px; margin: 0; line-height: 1.6;">Since 2001, we've been serving Arizona businesses from our Tucson office. We understand the unique challenges of Southwest businesses and provide face-to-face service when you need it.</p>
</div>
<div style="border-left: 4px solid #f39c12; padding: 10px; background: #f8f9fa;">
<h3 style="color: #1e3c72; margin: 0 0 6px 0; font-size: 14px;">Complete IT Solution</h3>
<p style="font-size: 11px; margin: 0; line-height: 1.6;">One partner for everything - endpoints, servers, networks, cloud services, email, web hosting, VoIP, and support. No more juggling multiple vendors or finger-pointing.</p>
</div>
<div style="border-left: 4px solid #27ae60; padding: 10px; background: #f8f9fa;">
<h3 style="color: #1e3c72; margin: 0 0 6px 0; font-size: 14px;">Predictable, Transparent Pricing</h3>
<p style="font-size: 11px; margin: 0; line-height: 1.6;">No hidden fees or surprise bills. Clear monthly pricing with flexible plans that scale with your business. Know exactly what you'll pay every month.</p>
</div>
<div style="border-left: 4px solid #1e3c72; padding: 10px; background: #f8f9fa;">
<h3 style="color: #1e3c72; margin: 0 0 6px 0; font-size: 14px;">24/7 Proactive Monitoring</h3>
<p style="font-size: 11px; margin: 0; line-height: 1.6;">Your systems are watched around the clock. We detect problems before they impact your business, apply patches automatically, and keep your technology running smoothly.</p>
</div>
<div style="border-left: 4px solid #f39c12; padding: 10px; background: #f8f9fa;">
<h3 style="color: #1e3c72; margin: 0 0 6px 0; font-size: 14px;">Proven Security Expertise</h3>
<p style="font-size: 11px; margin: 0; line-height: 1.6;">Advanced threat protection, dark web monitoring, security training, and compliance tools. We help you meet cyber insurance requirements and protect sensitive data.</p>
</div>
<div style="border-left: 4px solid #27ae60; padding: 10px; background: #f8f9fa;">
<h3 style="color: #1e3c72; margin: 0 0 6px 0; font-size: 14px;">Real People, Real Support</h3>
<p style="font-size: 11px; margin: 0; line-height: 1.6;">Talk to a real person who knows your business, not a call center. Consistent support team, guaranteed response times, and after-hours emergency support available.</p>
</div>
</div>
<h2>Our Commitment to You</h2>
<div class="callout-box success" style="padding: 12px;">
<div style="font-size: 13px; font-weight: bold; color: #1e3c72; margin-bottom: 8px;">The Arizona Computer Guru Promise</div>
<div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px;">
<ul style="list-style: none; padding: 0; margin: 0; font-size: 11px;">
<li style="padding: 4px 0; padding-left: 18px; position: relative; line-height: 1.5;"><span style="position: absolute; left: 0; color: #27ae60; font-weight: bold; font-size: 14px;"></span> <strong>No Lock-In Contracts:</strong> Month-to-month service. We earn your business every day.</li>
<li style="padding: 4px 0; padding-left: 18px; position: relative; line-height: 1.5;"><span style="position: absolute; left: 0; color: #27ae60; font-weight: bold; font-size: 14px;"></span> <strong>Guaranteed Response Times:</strong> We respond within our published SLAs or credit your account.</li>
<li style="padding: 4px 0; padding-left: 18px; position: relative; line-height: 1.5;"><span style="position: absolute; left: 0; color: #27ae60; font-weight: bold; font-size: 14px;"></span> <strong>Transparent Communication:</strong> Regular reports, clear documentation, honest recommendations.</li>
</ul>
<ul style="list-style: none; padding: 0; margin: 0; font-size: 11px;">
<li style="padding: 4px 0; padding-left: 18px; position: relative; line-height: 1.5;"><span style="position: absolute; left: 0; color: #27ae60; font-weight: bold; font-size: 14px;"></span> <strong>Local Support:</strong> Real Tucson office, real local technicians, face-to-face meetings available.</li>
<li style="padding: 4px 0; padding-left: 18px; position: relative; line-height: 1.5;"><span style="position: absolute; left: 0; color: #27ae60; font-weight: bold; font-size: 14px;"></span> <strong>Business Focused:</strong> We understand business operations and minimize disruption.</li>
<li style="padding: 4px 0; padding-left: 18px; position: relative; line-height: 1.5;"><span style="position: absolute; left: 0; color: #27ae60; font-weight: bold; font-size: 14px;"></span> <strong>Continuous Improvement:</strong> Regular technology reviews and optimization recommendations.</li>
</ul>
</div>
</div>
<div class="footer" style="position: absolute; bottom: 0.3in; left: 0.4in; right: 0.4in; text-align: center; font-size: 9px; color: #666; padding-top: 8px; border-top: 2px solid #1e3c72;">
<div style="margin-bottom: 4px;">
<strong style="font-size: 11px; color: #f39c12;">Contact Us Today:</strong>
520.304.8300 | info@azcomputerguru.com | azcomputerguru.com
<h2>What Our Clients Say</h2>
<div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin: 12px 0;">
<div style="background: #f8f9fa; padding: 12px; border-radius: 4px; border-left: 4px solid #f39c12;">
<p style="font-size: 11px; font-style: italic; margin: 0 0 8px 0; line-height: 1.6;">"Arizona Computer Guru has been our IT lifeline for 8 years. Their proactive monitoring catches problems before they affect our practice. Best investment we've made."</p>
<div style="font-size: 10px; font-weight: bold; color: #1e3c72;">- Healthcare Professional, Tucson</div>
</div>
<div style="background: #f8f9fa; padding: 12px; border-radius: 4px; border-left: 4px solid #27ae60;">
<p style="font-size: 11px; font-style: italic; margin: 0 0 8px 0; line-height: 1.6;">"Switching to GPS saved us money and gave us better service. We get real people who know our business, not a ticket number in a queue."</p>
<div style="font-size: 10px; font-weight: bold; color: #1e3c72;">- Legal Firm Partner, Tucson</div>
</div>
</div>
<div class="footer">
<div style="margin-bottom: 5px;">
<strong style="font-size: 12px; color: #f39c12;">Arizona Computer Guru - Your Complete IT Partner</strong>
</div>
<div style="font-size: 8px;">
Protecting Tucson Businesses Since 2001 | 7437 E. 22nd St, Tucson, AZ 85710
<div style="font-size: 9px;">
Protecting Tucson Businesses Since 2001 | 520.304.8300 | azcomputerguru.com | 7437 E. 22nd St, Tucson, AZ 85710
</div>
</div>
</div>

View File

@@ -0,0 +1,164 @@
# Session Log: MSP Buyers Guide Refinements
**Date:** 2026-02-03
**Machine:** Mac
**Project:** msp-pricing/marketing
**Files Modified:**
- `MSP-Buyers-Guide-NoPagination.html` (created)
- `MSP-Buyers-Guide-Content.md` (updated)
---
## Summary
Comprehensive refinements to the MSP Buyers Guide marketing materials. Created a continuous-scroll HTML version and made numerous content improvements based on business feedback.
---
## Work Completed
### 1. Created Non-Paginated HTML Version
- **File:** `MSP-Buyers-Guide-NoPagination.html`
- Rebuilt from paginated version to continuous scrolling document
- Removed `.page` class with fixed 11-inch heights
- Removed `page-break-after: always` CSS properties
- Converted to `.container` class layout (max-width 850px)
- Added section dividers between major content areas
- Works for both web viewing and print handouts
### 2. Frontend Design Review Applied
- Enhanced typography with system fonts (`-apple-system`, `BlinkMacSystemFont`)
- Improved font smoothing
- Softer text color (#2c3e50)
- Better visual hierarchy for headings
- Enhanced component styling:
- Cover section with subtle gradient background
- Red flag boxes with shadows and better typography
- Testimonial boxes with decorative quote marks
- Tables with hover states and proper borders
- CTA box with shadow for depth
- Print optimization (page break controls, color-adjust for backgrounds)
### 3. Content Refinements
#### Checklist Reorder
- Moved "You don't know what you should be paying for IT services" to first position
- More relevant lead-in for pricing-focused guide
#### GPS Acronym Explanation
- Added explanation after first GPS Example
- "GPS = Guru Protection Services, the managed IT and security packages developed at Arizona Computer Guru"
#### Red Flag 2 Rewrite
- **Old:** "Hidden Pricing and 'Call for Quote'"
- **New:** "High-Pressure Sales Tactics"
- Emphasizes that meeting in person is fine - high-pressure tactics are not
- GPS Example highlights:
- Prefer to meet clients in person to understand their setup
- Can translate tech speak in real-time
- Kind, direct, honest approach
- Never condescending (unlike many IT people)
#### Block Time Section Added
- Comprehensive new section on prepaid block time
- Pricing table: 10hrs/$1,500, 20hrs/$2,600, 30hrs/$3,000
- Key difference: Block time never expires, plan hours don't roll over
- Two use cases: Standalone (bank hours) or Supplement (pair with plan)
- Updated Question 5 answer to explain options
- Note added that support plan hours are use-it-or-lose-it
#### Cost Justification Notes Added
- **Endpoint Monitoring:** Explained industry range methodology (Arizona market observation, trade org surveys, vendor pricing)
- **True Cost of Cheap IT:** Explained scenario costs ($65/hr break-fix rate, $50/hr productivity loss, ransomware recovery costs, typical cyber insurance deductibles)
#### Contact/Business Info Updates
- Email: `info@azcomputerguru.com` (was mike@)
- Full hourly rate: $175/hour (was $150-165)
- Office hours: 9:00 AM - 5:00 PM (was 8:00 AM)
#### Next Steps Section Rewrite
**Option 1: Free Consultation**
- Changed from "Get a Custom Quote" to avoid conflict with earlier messaging about high-pressure quotes
- Emphasize we come to client (more convenient, can see pain points)
- Examples: server closet that runs hot, printer that jams, workflow issues
- Sometimes best advice is "your current IT is doing fine"
**Option 2: Security Assessment Enhancement**
- Added: Also validates current IT team is doing well
- Clarified: Initial scan free for prospective clients
- Added: Recurring pen tests/scans available a-la-carte even if not primary IT provider
---
## Files Changed
### MSP-Buyers-Guide-NoPagination.html
- New file (1,100+ lines)
- Continuous scroll layout
- All content from original guide
- Enhanced styling from frontend review
### MSP-Buyers-Guide-Content.md
- Updated checklist order
- Added GPS explanation
- Rewrote Red Flag 2
- Added Block Time section
- Added cost justification notes
- Updated contact info
- Rewrote Next Steps options
---
## Git Commits
1. **3c673fd** - "sync: Auto-sync from Mac at 2026-02-03 06:37:19"
- All Buyers Guide changes
- 2 files changed, 1,130 insertions, 29 deletions
2. **27c76ca** - Pulled from PC
- Automated sync scripts added
---
## Technical Notes
### grepai Watch Running
- Background process indexing changes
- Indexed new HTML file (21 chunks)
- Continuously updating as files change
### Sync Issue Resolved
- Initial confusion about PC/Mac sync status
- Root cause: PC had pushed newer commit after Mac's sync
- Resolved by pulling PC's changes
---
## Next Steps (Future Work)
Potential improvements identified:
1. Add professional logo image
2. Add icons for red flags
3. Add table of contents with jump links for web
4. Add page numbers for print version
5. Professional photography (Tucson, office, team)
6. Infographics for pricing comparisons
---
## Session Context
**Machine:** Mac (hostname: Mac)
**Working Directory:** /Users/azcomputerguru/ClaudeTools
**Branch:** main
**Latest Commit:** 27c76ca
**Related Files:**
- `projects/msp-pricing/marketing/MSP-Buyers-Guide-NoPagination.html`
- `projects/msp-pricing/marketing/MSP-Buyers-Guide-Content.md`
- `projects/msp-pricing/marketing/MSP-Buyers-Guide.html` (original paginated)
- `projects/msp-pricing/marketing/Service-Overview-OnePager-Content.md`
---
**Session End:** 2026-02-03 ~07:00 MST

145
review_best_plates.py Normal file
View File

@@ -0,0 +1,145 @@
"""
Identify the best license plate candidates from extraction results
Filter by ideal aspect ratio (2-5) and larger area
"""
import re
from pathlib import Path
def parse_summary(summary_path):
"""Parse summary.txt to find best candidates"""
candidates = []
with open(summary_path, 'r') as f:
content = f.read()
# Parse each candidate line
pattern = r'Time: ([\d.]+)s \| Candidate #(\d+) \| Aspect Ratio: ([\d.]+) \| Area: (\d+)'
for match in re.finditer(pattern, content):
timestamp = float(match.group(1))
candidate_num = int(match.group(2))
aspect_ratio = float(match.group(3))
area = int(match.group(4))
# Score candidates based on ideal license plate characteristics
# Ideal aspect ratio: 3-4.5 (most US license plates)
# Prefer larger areas (closer to camera)
ar_score = 0
if 2.5 <= aspect_ratio <= 5.0:
# Best score for aspect ratio between 3-4.5
if 3.0 <= aspect_ratio <= 4.5:
ar_score = 100
else:
ar_score = 50
# Area score (normalize to 0-100)
area_score = min(area / 500, 100) # Scale area
# Combined score
total_score = (ar_score * 0.6) + (area_score * 0.4)
candidates.append({
'timestamp': timestamp,
'candidate': candidate_num,
'aspect_ratio': aspect_ratio,
'area': area,
'score': total_score
})
return candidates
def main():
summary_path = Path("D:/Scratchpad/pickup_truck_25-30s/summary.txt")
output_dir = Path("D:/Scratchpad/pickup_truck_25-30s")
print("[INFO] Analyzing license plate candidates...")
candidates = parse_summary(summary_path)
# Sort by score
candidates.sort(key=lambda x: x['score'], reverse=True)
# Show top 20 candidates
print("\n" + "=" * 80)
print("TOP 20 LICENSE PLATE CANDIDATES")
print("=" * 80)
print(f"{'Rank':<6} {'Time':<10} {'Cand':<6} {'AR':<8} {'Area':<10} {'Score':<8} {'Files'}")
print("-" * 80)
for idx, candidate in enumerate(candidates[:20], 1):
timestamp = candidate['timestamp']
cand_num = candidate['candidate']
ar = candidate['aspect_ratio']
area = candidate['area']
score = candidate['score']
# Check which files exist for this candidate
frame_name = f"frame_{timestamp:.2f}s"
base_pattern = f"{frame_name}_plate_{cand_num}_"
# Count enhancement files
enhancement_files = list(output_dir.glob(f"{base_pattern}*.jpg"))
enhancement_count = len([f for f in enhancement_files if '_raw' not in f.name])
print(f"{idx:<6} {timestamp:<10.2f} {cand_num:<6} {ar:<8.2f} {area:<10} {score:<8.1f} {enhancement_count} enhanced")
# Create recommendation file
recommendation_path = output_dir / "RECOMMENDATIONS.txt"
with open(recommendation_path, 'w') as f:
f.write("LICENSE PLATE EXTRACTION - TOP CANDIDATES\n")
f.write("=" * 80 + "\n\n")
f.write("These are the top 20 most likely license plate candidates based on:\n")
f.write("- Aspect ratio (ideal: 3.0-4.5 for US plates)\n")
f.write("- Area size (larger = closer to camera)\n\n")
f.write("REVIEW THESE FILES FIRST:\n")
f.write("-" * 80 + "\n\n")
for idx, candidate in enumerate(candidates[:20], 1):
timestamp = candidate['timestamp']
cand_num = candidate['candidate']
ar = candidate['aspect_ratio']
area = candidate['area']
score = candidate['score']
f.write(f"RANK {idx}: Time {timestamp:.2f}s - Candidate #{cand_num}\n")
f.write(f" Aspect Ratio: {ar:.2f} | Area: {area} | Score: {score:.1f}\n")
f.write(f" Files to review:\n")
frame_name = f"frame_{timestamp:.2f}s"
# List specific enhancement files to check
enhancements = [
f"{frame_name}_detection_{cand_num}.jpg (shows detection box on frame)",
f"{frame_name}_plate_{cand_num}_high_contrast.jpg (best for dark plates)",
f"{frame_name}_plate_{cand_num}_extreme_sharp.jpg (best for clarity)",
f"{frame_name}_plate_{cand_num}_adaptive_thresh.jpg (best for OCR)",
f"{frame_name}_plate_{cand_num}_bilateral_sharp.jpg (balanced enhancement)",
]
for enhancement in enhancements:
f.write(f" - {enhancement}\n")
f.write("\n")
f.write("\n" + "=" * 80 + "\n")
f.write("ENHANCEMENT TYPES EXPLAINED:\n")
f.write("-" * 80 + "\n")
f.write("- detection_X.jpg: Shows where the plate was detected on the frame\n")
f.write("- high_contrast.jpg: Best for dark/low-contrast plates\n")
f.write("- extreme_sharp.jpg: Best for overall clarity and readability\n")
f.write("- adaptive_thresh.jpg: Black/white threshold - best for OCR\n")
f.write("- bilateral_sharp.jpg: Noise reduction + sharpening\n")
f.write("- unsharp_mask.jpg: Professional-grade sharpening\n")
f.write("- bright_contrast.jpg: Brightness + contrast boost\n")
print("\n[SUCCESS] Analysis complete!")
print(f"[INFO] Recommendations saved to: {recommendation_path}")
print("\n[NEXT STEPS]")
print("1. Open the output directory in File Explorer:")
print(f" {output_dir}")
print("2. Read RECOMMENDATIONS.txt for the best candidates")
print("3. Start with Rank 1, review the enhancement files listed")
print("4. The 'extreme_sharp' and 'adaptive_thresh' versions usually work best")
if __name__ == "__main__":
main()