169 lines
5.0 KiB
Markdown
169 lines
5.0 KiB
Markdown
# Website Details - SpeedyFoxAI
|
||
|
||
**Domain:** speedyfoxai.com
|
||
**Hosted on:** deb2 (10.0.0.39)
|
||
**Web Root:** /root/html/ (Nginx serves from here, NOT /var/www/html/)
|
||
**Created:** February 13, 2026
|
||
**Created by:** Kimi (OpenClaw + Ollama) via SSH
|
||
|
||
## Critical Discovery
|
||
Nginx config (`/etc/nginx/sites-enabled/default`) sets `root /root/html;`
|
||
This means `/var/www/html/` is NOT the live document root - `/root/html/` is.
|
||
|
||
## Visitor Counter System
|
||
|
||
### Current Status
|
||
- **Count:** 288 (restored from Feb 13 backup)
|
||
- **Location:** `/root/html/count.txt`
|
||
- **Persistent storage:** `/root/html/.counter_total`
|
||
- **Script:** `/root/html/update_count_persistent.sh`
|
||
|
||
### Why It Reset
|
||
Old script read from nginx access.log which gets rotated by logrotate. When logs rotate, count drops to near zero. Lost ~350 visits (was ~400+, dropped to 46).
|
||
|
||
### Fix Applied
|
||
New persistent counter that:
|
||
1. Stores total in `.counter_total` file
|
||
2. Tracks last log line counted in `.counter_last_line`
|
||
3. Only adds NEW visits since last run
|
||
4. Handles log rotation gracefully
|
||
|
||
## Site Versions
|
||
|
||
### Current Live Version
|
||
- **File:** `/root/html/index.html` (served by nginx)
|
||
- **Source:** `/var/www/html/index.html` (edit here, copy to /root/html/)
|
||
- **Style:** Simple HTML/CSS (Rob's Tech Lab theme)
|
||
- **Features:** Visitor counter, 3 embedded YouTube videos
|
||
|
||
### Backup Version (Full Featured)
|
||
- **Location:** `/root/html_backup/20260213_155707/index.html`
|
||
- **Style:** Tailwind CSS, full SpeedyFoxAI branding
|
||
- **Features:** Dark mode, FAQ section, navigation, full counter
|
||
|
||
## YouTube Channel
|
||
**Name:** SpeedyFoxAI
|
||
**URL:** https://www.youtube.com/@SpeedyFoxAi
|
||
**Stats:** 5K+ subscribers, 51+ videos
|
||
|
||
### Embedded Videos
|
||
1. DIY AI Assistant Setup (kz-4l5roK6k)
|
||
2. Self-Hosted Tools Deep Dive (9IYNGK44EyM)
|
||
3. OpenClaw + Ollama Workflow (8Fncc5Sg2yg)
|
||
|
||
## File Structure
|
||
|
||
```
|
||
/root/html/ # LIVE site (nginx root)
|
||
├── index.html # Main page
|
||
├── count.txt # Visitor count (288)
|
||
├── .counter_total # Persistent count storage
|
||
├── .counter_last_line # Log line tracking
|
||
├── update_count_persistent.sh # Counter script
|
||
├── websitememory.md # Documentation
|
||
├── downloads.html
|
||
├── fox720.jpg
|
||
└── favicon.png
|
||
|
||
/root/html_backup/ # Backups with timestamps
|
||
├── 20260214_071243/ # Pre-counter-script backup
|
||
├── 20260214_070713/ # Before counter fix
|
||
├── 20260214_070536/ # Full backup
|
||
└── 20260213_155707/ # Full version with counter
|
||
|
||
/var/www/html/ # Edit source (copy to /root/html/)
|
||
└── index.html
|
||
```
|
||
|
||
## Technical Details
|
||
|
||
### Counter JavaScript
|
||
```javascript
|
||
fetch("/count.txt?t=" + Date.now())
|
||
.then(r => r.text())
|
||
.then(n => {
|
||
document.getElementById("visit-count").textContent =
|
||
parseInt(n || 0).toString().padStart(6, "0");
|
||
});
|
||
```
|
||
|
||
### Counter Display
|
||
- Location: Footer
|
||
- Format: "Visitors: 000288"
|
||
- Style: 10px font, opacity 0.5
|
||
|
||
### Backup Strategy
|
||
```bash
|
||
DT=$(date +%Y%m%d_%H%M%S)
|
||
mkdir -p /root/html_backup/${DT}
|
||
cp -r /root/html/* /root/html_backup/${DT}/
|
||
cp /var/www/html/* /root/html_backup/${DT}/
|
||
```
|
||
|
||
## SEO & Content
|
||
- **Title:** Rob's Tech Lab | Local AI & Self-Hosted Tools
|
||
- **Meta:** None (simple version)
|
||
- **Schema:** None (simple version)
|
||
- **Full version has:** Schema.org FAQPage, structured data
|
||
|
||
## Social Links
|
||
- YouTube: @SpeedyFoxAi
|
||
- Discord: mdkrush
|
||
- GitHub: mdkrush
|
||
- Twitter: mdkrush
|
||
|
||
## Creator
|
||
**Name:** Rob
|
||
**Brand:** SpeedyFoxAI
|
||
**Focus:** Self-hosting, local AI, automation tools
|
||
**Personality:** Comical/structured humor
|
||
|
||
## Status
|
||
- **Counter:** Working (shows 000288)
|
||
- **HTML:** Valid structure, no misaligned code
|
||
- **Backups:** Multiple timestamps available
|
||
- **Documentation:** /root/html/websitememory.md
|
||
|
||
Stored: February 14, 2026
|
||
|
||
|
||
## Relationship to YouTube
|
||
The SpeedyFoxAI.com website complements the YouTube channel @SpeedyFoxAi. It serves as a hub for video content, resources, and contact info, with embedded videos linking directly to the channel. Design and branding are consistent across both platforms.
|
||
|
||
|
||
---
|
||
|
||
## UPDATE - Feb 14, 07:21
|
||
|
||
### Counter Reset Issue - ROOT CAUSE FOUND
|
||
**Problem:** Count kept resetting to current nginx log lines (86, 89, etc.)
|
||
|
||
**Root Cause:** Old script `/root/html/update_count.sh` still existed and was running:
|
||
```bash
|
||
#!/bin/bash
|
||
COUNT=$(wc -l < /var/log/nginx/access.log 2>/dev/null || echo 0)
|
||
echo "$COUNT" > /root/html/count.txt
|
||
```
|
||
|
||
This script was periodically overwriting count.txt with nginx log line count, overriding the persistent counter.
|
||
|
||
**Fix Applied:**
|
||
- Removed `/root/html/update_count.sh`
|
||
- Restored count.txt to 288
|
||
- Persistent counter now working correctly
|
||
|
||
**Lesson:** Check for competing scripts before implementing fixes.
|
||
|
||
|
||
---
|
||
|
||
## Rule Added - Feb 14, 2026
|
||
**Always validate after changes.** No exceptions.
|
||
- Test functionality
|
||
- Verify file integrity
|
||
- Check permissions
|
||
- Confirm expected output
|
||
|
||
Applied retroactively to today’s counter fix.
|
||
|