Session log: Flarum theme v2, Matomo analytics, Cloudflare proxy re-enabled
- Redesigned community forum CSS for readability (GitHub Dark inspired) - Installed Matomo 5.8.0 at analytics.azcomputerguru.com - Added tracking to all 3 sites (WordPress, Flarum, Astro) - Re-enabled Cloudflare proxy on community, radio, analytics subdomains - Fixed analytics DNS record (was pointing to wrong IP) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1346,6 +1346,25 @@ net use T: \\192.168.0.9\test
|
|||||||
- **AD2 has SMB1 disabled for security (post crypto-attack)**
|
- **AD2 has SMB1 disabled for security (post crypto-attack)**
|
||||||
- **All production credentials should be rotated regularly**
|
- **All production credentials should be rotated regularly**
|
||||||
|
|
||||||
|
### Matomo Analytics (analytics.azcomputerguru.com)
|
||||||
|
- **Service:** Self-hosted web analytics (Matomo 5.8.0)
|
||||||
|
- **URL:** https://analytics.azcomputerguru.com
|
||||||
|
- **Server:** IX (172.16.3.10), cPanel account `azcomputerguru`
|
||||||
|
- **Document Root:** `/home/azcomputerguru/public_html/analytics/`
|
||||||
|
- **Admin User:** MikeSwanson
|
||||||
|
- **Admin Password:** Mat0mo2026!CGS
|
||||||
|
- **Admin Email:** mike@azcomputerguru.com
|
||||||
|
- **DB Host:** localhost (on IX server)
|
||||||
|
- **DB Name:** azcompu_matomo
|
||||||
|
- **DB User:** azcompu_matomo
|
||||||
|
- **DB Password:** Mat0mo2026!CGS
|
||||||
|
- **Site ID 1:** AZ Computer Guru (azcomputerguru.com) - tracked via WP mu-plugin
|
||||||
|
- **Site ID 2:** Community Forum (community.azcomputerguru.com) - tracked via Flarum custom_header
|
||||||
|
- **Site ID 3:** Radio Show (radio.azcomputerguru.com) - tracked via HTML injection
|
||||||
|
- **Cron:** Every 5 min, `azcomputerguru` user, archive reports
|
||||||
|
- **Cloudflare:** Proxied (orange cloud), DNS A record to 72.194.62.5
|
||||||
|
- **Installed:** 2026-03-20
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Context Recovery Usage
|
## Context Recovery Usage
|
||||||
|
|||||||
958
projects/community-forum/theme-v2.less
Normal file
958
projects/community-forum/theme-v2.less
Normal file
@@ -0,0 +1,958 @@
|
|||||||
|
/* ═══════════════════════════════════════════════════════════
|
||||||
|
THE COMPUTER GURU SHOW COMMUNITY — Theme v2
|
||||||
|
Redesigned for readability. Inspired by GitHub Dark / Discord.
|
||||||
|
Font: Lexend | Accent: #fe7400 | Base: layered grays
|
||||||
|
═══════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Lexend:wght@100..900&display=swap');
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap');
|
||||||
|
|
||||||
|
:root {
|
||||||
|
/* ── Accent ──────────────────────────────────────── */
|
||||||
|
--g-orange: #fe7400;
|
||||||
|
--g-orange-hover: #ff8c2a;
|
||||||
|
--g-orange-muted: #e06800;
|
||||||
|
--g-orange-glow: rgba(254, 116, 0, 0.15);
|
||||||
|
--g-orange-subtle: rgba(254, 116, 0, 0.08);
|
||||||
|
|
||||||
|
/* ── Surfaces (layered, each step clearly distinct) ── */
|
||||||
|
--g-base: #0d1117; /* page background */
|
||||||
|
--g-surface-1: #161b22; /* cards, posts */
|
||||||
|
--g-surface-2: #1c2129; /* hover state, elevated */
|
||||||
|
--g-surface-3: #21262d; /* active/selected */
|
||||||
|
--g-overlay: #2d333b; /* dropdowns, modals */
|
||||||
|
|
||||||
|
/* ── Borders ─────────────────────────────────────── */
|
||||||
|
--g-border: #30363d;
|
||||||
|
--g-border-light: #3d444d;
|
||||||
|
--g-border-active: #fe7400;
|
||||||
|
|
||||||
|
/* ── Text (WCAG AA against surface-1) ────────────── */
|
||||||
|
--g-text-primary: #e6edf3; /* 13.5:1 on surface-1 */
|
||||||
|
--g-text-secondary: #9eaab6; /* 6.2:1 on surface-1 */
|
||||||
|
--g-text-muted: #6e7a86; /* 3.8:1 on surface-1 */
|
||||||
|
--g-text-link: #fe7400;
|
||||||
|
--g-text-bright: #ffffff;
|
||||||
|
|
||||||
|
/* ── Functional ──────────────────────────────────── */
|
||||||
|
--g-success: #3fb950;
|
||||||
|
--g-danger: #f85149;
|
||||||
|
--g-warning: #d29922;
|
||||||
|
|
||||||
|
/* ── Radii / Shadows / Motion ────────────────────── */
|
||||||
|
--g-radius: 8px;
|
||||||
|
--g-radius-lg: 12px;
|
||||||
|
--g-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3);
|
||||||
|
--g-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
|
||||||
|
--g-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);
|
||||||
|
--g-ease: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
GLOBAL FOUNDATION
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
body, .App {
|
||||||
|
font-family: 'Lexend', -apple-system, BlinkMacSystemFont, sans-serif !important;
|
||||||
|
background: var(--g-base) !important;
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
min-height: 100vh;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
HEADER
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.Header {
|
||||||
|
background: var(--g-surface-1) !important;
|
||||||
|
border-bottom: 1px solid var(--g-border) !important;
|
||||||
|
box-shadow: var(--g-shadow-sm) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Header-title {
|
||||||
|
font-weight: 700 !important;
|
||||||
|
font-size: 1.2em !important;
|
||||||
|
letter-spacing: -0.02em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Header-title a {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
text-decoration: none !important;
|
||||||
|
transition: color 0.2s var(--g-ease) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Header-title a:hover {
|
||||||
|
color: var(--g-orange) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header nav buttons */
|
||||||
|
.Header-controls .Button {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
font-weight: 500 !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
transition: all 0.2s var(--g-ease) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Header-controls .Button:hover {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
background: var(--g-surface-2) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sign Up button */
|
||||||
|
.Header .Button--primary,
|
||||||
|
.LogInModal .Button--primary,
|
||||||
|
.SignUpModal .Button--primary {
|
||||||
|
background: var(--g-orange) !important;
|
||||||
|
color: #fff !important;
|
||||||
|
border: none !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
font-weight: 600 !important;
|
||||||
|
font-size: 0.85em !important;
|
||||||
|
padding: 8px 18px !important;
|
||||||
|
box-shadow: 0 1px 4px rgba(254, 116, 0, 0.25) !important;
|
||||||
|
transition: all 0.2s var(--g-ease) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Header .Button--primary:hover,
|
||||||
|
.LogInModal .Button--primary:hover,
|
||||||
|
.SignUpModal .Button--primary:hover {
|
||||||
|
background: var(--g-orange-hover) !important;
|
||||||
|
box-shadow: 0 3px 12px rgba(254, 116, 0, 0.35) !important;
|
||||||
|
transform: translateY(-1px) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Log In button */
|
||||||
|
.Header .LogInButton,
|
||||||
|
.Header .Button:not(.Button--primary) {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Header .LogInButton:hover,
|
||||||
|
.Header .Button:not(.Button--primary):hover {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
HERO / WELCOME BANNER
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.Hero {
|
||||||
|
background: var(--g-surface-1) !important;
|
||||||
|
border-bottom: 1px solid var(--g-border) !important;
|
||||||
|
text-align: center !important;
|
||||||
|
padding: 2.5rem 2rem !important;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Subtle accent glow behind hero */
|
||||||
|
.Hero::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: 600px;
|
||||||
|
height: 100%;
|
||||||
|
background: radial-gradient(ellipse, rgba(254, 116, 0, 0.06) 0%, transparent 70%);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Hero .container {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Hero-title {
|
||||||
|
font-weight: 800 !important;
|
||||||
|
font-size: 2em !important;
|
||||||
|
letter-spacing: -0.03em !important;
|
||||||
|
color: var(--g-text-bright) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Hero-subtitle,
|
||||||
|
.Hero .container p {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
font-weight: 400 !important;
|
||||||
|
font-size: 1.05em !important;
|
||||||
|
max-width: 580px;
|
||||||
|
margin: 0.5em auto 0;
|
||||||
|
line-height: 1.6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide welcome banner dismiss X */
|
||||||
|
.Hero .Button--icon {
|
||||||
|
color: var(--g-text-muted) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Hero .Button--icon:hover {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
SIDEBAR / NAVIGATION
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.IndexPage-nav,
|
||||||
|
.sideNav {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.SideNav .Button {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
transition: all 0.15s var(--g-ease) !important;
|
||||||
|
font-weight: 500 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.SideNav .Button:hover {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
background: var(--g-surface-2) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.SideNav .Button.active {
|
||||||
|
color: var(--g-text-bright) !important;
|
||||||
|
background: var(--g-surface-3) !important;
|
||||||
|
border-left: 3px solid var(--g-orange) !important;
|
||||||
|
font-weight: 600 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tags in nav bar */
|
||||||
|
.SideNav a,
|
||||||
|
.TagLinkButton {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
font-size: 0.9em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.SideNav a:hover,
|
||||||
|
.TagLinkButton:hover {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.SideNav .icon,
|
||||||
|
.SideNav .Button .icon {
|
||||||
|
opacity: 0.85 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.TagLinkButton .TagLabel-text {
|
||||||
|
color: inherit !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Start Discussion button */
|
||||||
|
.IndexPage-newDiscussion .Button,
|
||||||
|
.IndexPage-toolbar .Button--primary {
|
||||||
|
background: var(--g-orange) !important;
|
||||||
|
color: #fff !important;
|
||||||
|
font-weight: 700 !important;
|
||||||
|
border: none !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
padding: 10px 20px !important;
|
||||||
|
box-shadow: 0 1px 4px rgba(254, 116, 0, 0.2) !important;
|
||||||
|
transition: all 0.2s var(--g-ease) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.IndexPage-newDiscussion .Button:hover,
|
||||||
|
.IndexPage-toolbar .Button--primary:hover {
|
||||||
|
background: var(--g-orange-hover) !important;
|
||||||
|
box-shadow: 0 3px 12px rgba(254, 116, 0, 0.3) !important;
|
||||||
|
transform: translateY(-1px) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
DISCUSSION LIST
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.DiscussionList {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DiscussionListItem {
|
||||||
|
background: var(--g-surface-1) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
margin-bottom: 6px !important;
|
||||||
|
transition: all 0.15s var(--g-ease) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DiscussionListItem:hover {
|
||||||
|
background: var(--g-surface-2) !important;
|
||||||
|
border-color: var(--g-border-light) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DiscussionListItem-content {
|
||||||
|
padding: 14px 18px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Discussion titles — high contrast */
|
||||||
|
.DiscussionListItem-title {
|
||||||
|
font-weight: 600 !important;
|
||||||
|
font-size: 1.02em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DiscussionListItem-title a {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
text-decoration: none !important;
|
||||||
|
transition: color 0.15s var(--g-ease) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DiscussionListItem-title a:hover {
|
||||||
|
color: var(--g-orange) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Discussion meta — clearly secondary but readable */
|
||||||
|
.DiscussionListItem-info,
|
||||||
|
.DiscussionListItem-info a,
|
||||||
|
.DiscussionListItem time {
|
||||||
|
color: var(--g-text-muted) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DiscussionListItem .username {
|
||||||
|
color: var(--g-orange) !important;
|
||||||
|
font-weight: 600 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reply count */
|
||||||
|
.DiscussionListItem-count {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DiscussionListItem-count strong {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sort dropdown */
|
||||||
|
.IndexPage-toolbar .Button {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
background: var(--g-surface-1) !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.IndexPage-toolbar .Button:hover {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
border-color: var(--g-border-light) !important;
|
||||||
|
background: var(--g-surface-2) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Refresh button */
|
||||||
|
.IndexPage-toolbar .Button--icon {
|
||||||
|
color: var(--g-text-muted) !important;
|
||||||
|
border: none !important;
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.IndexPage-toolbar .Button--icon:hover {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
TAGS / BADGES
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.TagLabel {
|
||||||
|
border-radius: 16px !important;
|
||||||
|
font-weight: 600 !important;
|
||||||
|
font-size: 0.72em !important;
|
||||||
|
text-transform: uppercase !important;
|
||||||
|
letter-spacing: 0.04em !important;
|
||||||
|
padding: 3px 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Badge {
|
||||||
|
border-radius: 50% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
DISCUSSION PAGE
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.DiscussionPage-discussion {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DiscussionHero {
|
||||||
|
background: var(--g-surface-1) !important;
|
||||||
|
border-bottom: 1px solid var(--g-border) !important;
|
||||||
|
padding: 2rem 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DiscussionHero-title {
|
||||||
|
font-weight: 800 !important;
|
||||||
|
font-size: 1.7em !important;
|
||||||
|
letter-spacing: -0.02em !important;
|
||||||
|
color: var(--g-text-bright) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Posts ──────────────────────────────────────────── */
|
||||||
|
|
||||||
|
.PostStream-item {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post {
|
||||||
|
background: var(--g-surface-1) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
border-radius: var(--g-radius-lg) !important;
|
||||||
|
margin-bottom: 12px !important;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-header {
|
||||||
|
padding: 14px 20px 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-header,
|
||||||
|
.Post-header a,
|
||||||
|
.Post-header time {
|
||||||
|
color: var(--g-text-muted) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-header .username,
|
||||||
|
.Post-header .username a {
|
||||||
|
color: var(--g-orange) !important;
|
||||||
|
font-weight: 600 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-body {
|
||||||
|
padding: 14px 20px 20px !important;
|
||||||
|
font-size: 0.95em !important;
|
||||||
|
line-height: 1.75 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-body,
|
||||||
|
.Post-body p,
|
||||||
|
.Post-body li {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Post typography ───────────────────────────────── */
|
||||||
|
|
||||||
|
.Post-body h2 {
|
||||||
|
color: var(--g-text-bright) !important;
|
||||||
|
font-weight: 700 !important;
|
||||||
|
font-size: 1.35em !important;
|
||||||
|
margin-top: 1.8em !important;
|
||||||
|
margin-bottom: 0.5em !important;
|
||||||
|
padding-bottom: 0.3em !important;
|
||||||
|
border-bottom: 1px solid var(--g-border) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-body h3 {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
font-weight: 600 !important;
|
||||||
|
font-size: 1.12em !important;
|
||||||
|
margin-top: 1.4em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-body a {
|
||||||
|
color: var(--g-orange) !important;
|
||||||
|
text-decoration: none !important;
|
||||||
|
transition: color 0.15s var(--g-ease) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-body a:hover {
|
||||||
|
color: var(--g-orange-hover) !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-body strong {
|
||||||
|
color: var(--g-text-bright) !important;
|
||||||
|
font-weight: 600 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inline code */
|
||||||
|
.Post-body code {
|
||||||
|
background: rgba(254, 116, 0, 0.08) !important;
|
||||||
|
color: var(--g-orange-hover) !important;
|
||||||
|
padding: 2px 6px !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
font-family: 'JetBrains Mono', 'Fira Code', monospace !important;
|
||||||
|
font-size: 0.87em !important;
|
||||||
|
border: 1px solid rgba(254, 116, 0, 0.12) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Code blocks */
|
||||||
|
.Post-body pre {
|
||||||
|
background: var(--g-base) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
border-left: 3px solid var(--g-orange) !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
padding: 16px 20px !important;
|
||||||
|
overflow-x: auto !important;
|
||||||
|
margin: 1.2em 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-body pre code {
|
||||||
|
background: none !important;
|
||||||
|
border: none !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
font-size: 0.85em !important;
|
||||||
|
line-height: 1.6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blockquotes */
|
||||||
|
.Post-body blockquote {
|
||||||
|
border-left: 3px solid var(--g-orange) !important;
|
||||||
|
background: var(--g-orange-subtle) !important;
|
||||||
|
padding: 10px 18px !important;
|
||||||
|
margin: 1em 0 !important;
|
||||||
|
border-radius: 0 var(--g-radius) var(--g-radius) 0 !important;
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-body hr {
|
||||||
|
border: none !important;
|
||||||
|
height: 1px !important;
|
||||||
|
background: var(--g-border) !important;
|
||||||
|
margin: 1.8em 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-body ul, .Post-body ol {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
padding-left: 1.5em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Post-body li {
|
||||||
|
margin-bottom: 0.35em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
COMPOSER
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.Composer {
|
||||||
|
background: var(--g-surface-1) !important;
|
||||||
|
border-top: 1px solid var(--g-border) !important;
|
||||||
|
box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.TextEditor-editor,
|
||||||
|
.TextEditor textarea {
|
||||||
|
background: var(--g-base) !important;
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
font-family: 'JetBrains Mono', monospace !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.TextEditor-editor:focus,
|
||||||
|
.TextEditor textarea:focus {
|
||||||
|
border-color: var(--g-orange) !important;
|
||||||
|
box-shadow: 0 0 0 2px var(--g-orange-glow) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
MODALS
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.Modal-content {
|
||||||
|
background: var(--g-overlay) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
border-radius: var(--g-radius-lg) !important;
|
||||||
|
box-shadow: var(--g-shadow-lg) !important;
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Modal-header {
|
||||||
|
background: var(--g-surface-3) !important;
|
||||||
|
border-bottom: 1px solid var(--g-border) !important;
|
||||||
|
border-radius: var(--g-radius-lg) var(--g-radius-lg) 0 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Modal-header h3 {
|
||||||
|
color: var(--g-text-bright) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Modal .Form-group input,
|
||||||
|
.Modal .Form-group textarea {
|
||||||
|
background: var(--g-base) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Modal .Form-group input:focus,
|
||||||
|
.Modal .Form-group textarea:focus {
|
||||||
|
border-color: var(--g-orange) !important;
|
||||||
|
box-shadow: 0 0 0 2px var(--g-orange-glow) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Modal .Form-group label {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
BUTTONS (GLOBAL)
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.Button {
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
transition: all 0.15s var(--g-ease) !important;
|
||||||
|
font-weight: 500 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Button--primary {
|
||||||
|
background: var(--g-orange) !important;
|
||||||
|
color: #fff !important;
|
||||||
|
border: none !important;
|
||||||
|
font-weight: 600 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Button--primary:hover {
|
||||||
|
background: var(--g-orange-hover) !important;
|
||||||
|
transform: translateY(-1px) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
FORM ELEMENTS
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="email"],
|
||||||
|
input[type="password"],
|
||||||
|
textarea,
|
||||||
|
select {
|
||||||
|
background: var(--g-base) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
transition: border-color 0.15s var(--g-ease) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"]:focus,
|
||||||
|
input[type="email"]:focus,
|
||||||
|
input[type="password"]:focus,
|
||||||
|
textarea:focus {
|
||||||
|
border-color: var(--g-orange) !important;
|
||||||
|
box-shadow: 0 0 0 2px var(--g-orange-glow) !important;
|
||||||
|
outline: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
DROPDOWN MENUS
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.Dropdown-menu {
|
||||||
|
background: var(--g-overlay) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
box-shadow: var(--g-shadow-md) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Dropdown-menu li > a,
|
||||||
|
.Dropdown-menu li > button,
|
||||||
|
.Dropdown-menu li > span {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Dropdown-menu li > a:hover,
|
||||||
|
.Dropdown-menu li > button:hover {
|
||||||
|
background: var(--g-surface-3) !important;
|
||||||
|
color: var(--g-orange) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
SEARCH
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.Search-input input {
|
||||||
|
background: var(--g-surface-2) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
border-radius: 20px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Search-input input::placeholder {
|
||||||
|
color: var(--g-text-muted) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Search-input input:focus {
|
||||||
|
border-color: var(--g-orange) !important;
|
||||||
|
background: var(--g-surface-1) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Search-results {
|
||||||
|
background: var(--g-overlay) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
TAGS PAGE
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.TagTile {
|
||||||
|
background: var(--g-surface-1) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
border-radius: var(--g-radius-lg) !important;
|
||||||
|
transition: all 0.15s var(--g-ease) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.TagTile:hover {
|
||||||
|
background: var(--g-surface-2) !important;
|
||||||
|
border-color: var(--g-border-light) !important;
|
||||||
|
transform: translateY(-1px) !important;
|
||||||
|
box-shadow: var(--g-shadow-md) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.TagTile-name {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
font-weight: 700 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.TagTile-description {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
font-size: 0.85em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
NOTIFICATIONS
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.NotificationList {
|
||||||
|
background: var(--g-overlay) !important;
|
||||||
|
border: 1px solid var(--g-border) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
AVATARS
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.Avatar {
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
LOADING
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.LoadingIndicator-container {
|
||||||
|
color: var(--g-orange) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide stuck loading bar */
|
||||||
|
.App > .loading-indicator {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
ALERTS
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.Alert {
|
||||||
|
border-radius: var(--g-radius) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Alert--success {
|
||||||
|
background: rgba(63, 185, 80, 0.12) !important;
|
||||||
|
border: 1px solid rgba(63, 185, 80, 0.25) !important;
|
||||||
|
color: #56d364 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
SCROLLBAR
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
background: var(--g-base);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: var(--g-border);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: var(--g-border-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
FOOTER & MISC
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.App-footer {
|
||||||
|
color: var(--g-text-muted) !important;
|
||||||
|
padding: 2rem 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 1100px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Empty state */
|
||||||
|
.DiscussionList-empty,
|
||||||
|
.Placeholder {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Selection */
|
||||||
|
::selection {
|
||||||
|
background: var(--g-orange) !important;
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
RESPONSIVE
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.Hero-title { font-size: 1.4em !important; }
|
||||||
|
.DiscussionHero-title { font-size: 1.3em !important; }
|
||||||
|
.Post-body { padding: 12px 14px 14px !important; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════
|
||||||
|
FLARUM BASE OVERRIDES
|
||||||
|
These target elements where Flarum's default CSS
|
||||||
|
applies dark text colors meant for light themes.
|
||||||
|
══════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
/* Global heading reset — Flarum sets h1-h6 to near-black */
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Discussion list — the main link wrapper */
|
||||||
|
.DiscussionListItem-main {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DiscussionListItem-main:hover {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Discussion title heading inside the list */
|
||||||
|
.DiscussionListItem-title h2,
|
||||||
|
.DiscussionListItem-title h3,
|
||||||
|
.DiscussionListItem .DiscussionListItem-title {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* All links inside discussion list items */
|
||||||
|
.DiscussionListItem a {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
transition: color 0.15s var(--g-ease) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DiscussionListItem a:hover {
|
||||||
|
color: var(--g-orange) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Keep username orange */
|
||||||
|
.DiscussionListItem .username,
|
||||||
|
.DiscussionListItem .username a {
|
||||||
|
color: var(--g-orange) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tag labels keep their own colors */
|
||||||
|
.DiscussionListItem .TagLabel a {
|
||||||
|
color: inherit !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Generic link color for the whole app */
|
||||||
|
a {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* But keep orange for primary/accent links */
|
||||||
|
.Post-body a,
|
||||||
|
.DiscussionHero a {
|
||||||
|
color: var(--g-orange) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navigation bar items */
|
||||||
|
.IndexPage-toolbar,
|
||||||
|
.IndexPage-results {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure all text in the app is readable */
|
||||||
|
.App-content {
|
||||||
|
color: var(--g-text-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fix the stuck loading bar */
|
||||||
|
.App > .loading-indicator,
|
||||||
|
.loading-indicator {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Discussion hero info text */
|
||||||
|
.DiscussionHero-items,
|
||||||
|
.DiscussionHero-items li,
|
||||||
|
.DiscussionHero .item-tags {
|
||||||
|
color: var(--g-text-secondary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Sidebar spacing fixes ─────────────────────────── */
|
||||||
|
|
||||||
|
/* Reduce top margin on sidebar list */
|
||||||
|
.IndexPage-nav > ul {
|
||||||
|
margin-top: 15px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tighter padding on sidebar links */
|
||||||
|
.IndexPage-nav .Dropdown-menu li > a,
|
||||||
|
.IndexPage-nav .Dropdown-menu li > button {
|
||||||
|
padding-top: 5px !important;
|
||||||
|
padding-bottom: 5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reduce separator gap */
|
||||||
|
.IndexPage-nav .Dropdown-separator {
|
||||||
|
margin-top: 5px !important;
|
||||||
|
margin-bottom: 5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tighter bottom margin on Start a Discussion */
|
||||||
|
.IndexPage-nav .item-newDiscussion {
|
||||||
|
margin-bottom: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reduce gap below nav dropdown container */
|
||||||
|
.IndexPage-nav .item-nav {
|
||||||
|
margin-bottom: 5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add left padding to sidebar items */
|
||||||
|
.IndexPage-nav .Dropdown-menu {
|
||||||
|
padding-left: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.IndexPage-nav > ul {
|
||||||
|
padding-left: 10px !important;
|
||||||
|
}
|
||||||
129
session-logs/2026-03-20-session.md
Normal file
129
session-logs/2026-03-20-session.md
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
# Session Log: 2026-03-20
|
||||||
|
|
||||||
|
## Session Summary
|
||||||
|
|
||||||
|
Continued work on azcomputerguru.com web properties. Three major accomplishments:
|
||||||
|
1. **Flarum community forum theme redesign** - Complete CSS rewrite for readability (v1 → v2)
|
||||||
|
2. **Matomo analytics setup** - Self-hosted analytics installed and tracking all 3 sites
|
||||||
|
3. **Cloudflare proxy re-enabled** - community, radio, and analytics subdomains back to orange cloud
|
||||||
|
|
||||||
|
## Work Completed
|
||||||
|
|
||||||
|
### 1. Flarum Forum Theme v2 (community.azcomputerguru.com)
|
||||||
|
|
||||||
|
**Problem:** The v1 theme had severe readability issues - dark text on dark backgrounds, discussion titles nearly invisible, overall muddy appearance.
|
||||||
|
|
||||||
|
**Root Cause:** Flarum's base CSS applies near-black heading colors (`rgb(17,17,17)`) and dark link colors meant for light themes. The v1 custom LESS used CSS variables (`var()`) and `!important` but Flarum's compiled CSS had higher specificity on key elements like `h2`, `.DiscussionListItem-main`.
|
||||||
|
|
||||||
|
**Solution:** Complete theme rewrite (v2) with:
|
||||||
|
- Replaced transparent navy overlays with **solid, layered gray surfaces** (GitHub Dark inspired)
|
||||||
|
- Color palette: `--g-base: #0d1117`, `--g-surface-1: #161b22`, `--g-surface-2: #1c2129`, etc.
|
||||||
|
- Text: `--g-text-primary: #e6edf3` (13.5:1 contrast ratio on surface-1)
|
||||||
|
- Added "Flarum Base Overrides" section targeting actual DOM elements (`h1-h6`, `.DiscussionListItem-main`, `.DiscussionListItem a`)
|
||||||
|
- Fixed sidebar spacing (reduced padding from 8px to 5px, separator margins from 8px to 5px)
|
||||||
|
- Added 10px left padding to sidebar nav items
|
||||||
|
|
||||||
|
**Theme file:** `/home/guru/ClaudeTools/projects/community-forum/theme-v2.less`
|
||||||
|
**Stored in:** Flarum DB `settings.custom_less`
|
||||||
|
**Backup of v1:** `/tmp/theme-v1-backup.less` on IX server
|
||||||
|
|
||||||
|
**Key lesson:** Flarum's LESS compiler caches aggressively. To force recompile:
|
||||||
|
1. Delete `public/assets/forum.css` and `rev-manifest.json`
|
||||||
|
2. Clear `storage/cache/*`, `storage/less-cache/*`, `storage/framework/cache/*`
|
||||||
|
3. Run `php flarum cache:clear`
|
||||||
|
4. Hit the site from an external client to trigger lazy CSS compilation
|
||||||
|
5. Hard refresh browser (`Ctrl+Shift+R`)
|
||||||
|
|
||||||
|
### 2. Matomo Analytics (analytics.azcomputerguru.com)
|
||||||
|
|
||||||
|
**Installed:** Matomo 5.8.0 on IX server
|
||||||
|
|
||||||
|
**Setup steps:**
|
||||||
|
- DNS record for `analytics.azcomputerguru.com` was pointing to wrong IP (52.52.94.202) — updated to 72.194.62.5
|
||||||
|
- Matomo files extracted to `/home/azcomputerguru/public_html/analytics/`
|
||||||
|
- Had to create `.htaccess` file (not included in Matomo zip for hidden files)
|
||||||
|
- Had to fix directory permissions (`chmod 755` on analytics dir)
|
||||||
|
- Web installer completed: system check, database, tables, superuser, first website, tracking code
|
||||||
|
|
||||||
|
**Sites configured:**
|
||||||
|
| Site ID | Name | URL | Tracking Method |
|
||||||
|
|---------|------|-----|-----------------|
|
||||||
|
| 1 | AZ Computer Guru | https://azcomputerguru.com | WordPress mu-plugin (`wp-content/mu-plugins/matomo-tracking.php`) |
|
||||||
|
| 2 | Community Forum | https://community.azcomputerguru.com | Flarum `custom_header` DB setting (appended) |
|
||||||
|
| 3 | Radio Show | https://radio.azcomputerguru.com | PHP script injected tracking into 204 HTML files before `</head>` |
|
||||||
|
|
||||||
|
**Cron job:** Added to `azcomputerguru` crontab:
|
||||||
|
```
|
||||||
|
*/5 * * * * /usr/local/bin/php /home/azcomputerguru/public_html/analytics/console core:archive --url=https://analytics.azcomputerguru.com > /dev/null 2>&1
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Cloudflare Changes
|
||||||
|
|
||||||
|
**Re-enabled proxy (orange cloud) on:**
|
||||||
|
- `community.azcomputerguru.com` (record ID: `a1d406f701d30957784fdb1cb1662748`)
|
||||||
|
- `radio.azcomputerguru.com` (record ID: `a7b1605203f9a72e146d7b290e840c45`)
|
||||||
|
- `analytics.azcomputerguru.com` (record ID: `a3e71224ef035b97160de99a8fff9980`) — also fixed IP from 52.52.94.202 → 72.194.62.5
|
||||||
|
|
||||||
|
**API used:** DNS token `DRRGkHS33pxAUjQfRDzDeVPtt6wwUU6FwtXqOzNj`
|
||||||
|
- Token has DNS read/write only — cannot check/change SSL/TLS mode or WAF rules
|
||||||
|
|
||||||
|
### 4. Research Completed
|
||||||
|
|
||||||
|
**Google Analytics:** No GA tracking on any of the 3 sites. WordPress has Site Kit installed with Search Console connected but no GA4. Deferred to future session.
|
||||||
|
|
||||||
|
**AI Crawler Rules:** Cloudflare has "AI Crawl Control" feature (free plan). Requires:
|
||||||
|
1. Proxy enabled (done)
|
||||||
|
2. Dashboard: AI Crawl Control > Crawlers tab
|
||||||
|
3. Allow: ChatGPT-User, Claude-Web, Perplexity-User (referral traffic)
|
||||||
|
4. Optional: GPTBot, ClaudeBot, Google-Extended (training)
|
||||||
|
5. Our API token lacks WAF permissions — must do via dashboard
|
||||||
|
|
||||||
|
**Self-hosted analytics comparison:** Evaluated Umami vs Matomo. Chose Matomo because it's pure PHP+MySQL (runs natively on cPanel) vs Umami requiring Node.js + reverse proxy.
|
||||||
|
|
||||||
|
## Credentials
|
||||||
|
|
||||||
|
### Matomo Analytics (analytics.azcomputerguru.com)
|
||||||
|
- **Admin User:** MikeSwanson / Mat0mo2026!CGS
|
||||||
|
- **Admin Email:** mike@azcomputerguru.com
|
||||||
|
- **DB Host:** localhost (on IX server 172.16.3.10)
|
||||||
|
- **DB Name:** azcompu_matomo
|
||||||
|
- **DB User:** azcompu_matomo
|
||||||
|
- **DB Password:** Mat0mo2026!CGS
|
||||||
|
|
||||||
|
### Flarum Forum (community.azcomputerguru.com) — unchanged
|
||||||
|
- **DB:** azcompu_flarum / azcompu_flarum / Fl@rum2026!CGS
|
||||||
|
- **API Key:** 581b6c8c162a383ba87757f41b4381e9bf8db61d71bd578ee97fe32b7aeac046
|
||||||
|
|
||||||
|
### IX Server SSH (from CachyOS workstation)
|
||||||
|
- **Must use:** `sshpass -p $'Gptf*77ttb!@#!@#' ssh -o StrictHostKeyChecking=no -o PubkeyAuthentication=no root@172.16.3.10`
|
||||||
|
- **Note:** `$'...'` quoting required for special chars in password — regular single quotes fail (exit code 5)
|
||||||
|
|
||||||
|
### Cloudflare
|
||||||
|
- **Zone ID:** 1beb9917c22b54be32e5215df2c227ce
|
||||||
|
- **DNS Token:** DRRGkHS33pxAUjQfRDzDeVPtt6wwUU6FwtXqOzNj (DNS read/write only)
|
||||||
|
- **NPM Token:** U1UTbBOWA4a69eWEBiqIbYh0etCGzrpTU4XaKp7w (broader, from Nginx Proxy Manager)
|
||||||
|
|
||||||
|
## Files Created/Modified
|
||||||
|
|
||||||
|
- `/home/guru/ClaudeTools/projects/community-forum/theme-v2.less` — new Flarum theme (created)
|
||||||
|
- IX: Flarum DB `settings.custom_less` — updated with theme v2
|
||||||
|
- IX: Flarum DB `settings.custom_header` — appended Matomo tracking (site ID 2)
|
||||||
|
- IX: `/home/azcomputerguru/public_html/analytics/` — Matomo installation (created)
|
||||||
|
- IX: `/home/azcomputerguru/public_html/analytics/.htaccess` — created for Apache
|
||||||
|
- IX: `/home/azcomputerguru/public_html/wp-content/mu-plugins/matomo-tracking.php` — WP tracking (created)
|
||||||
|
- IX: 204 HTML files in `/home/azcomputerguru/public_html/radio/` — Matomo tracking injected
|
||||||
|
- IX: `azcomputerguru` crontab — Matomo archive cron added
|
||||||
|
- `/home/guru/.claude/projects/-home-guru-ClaudeTools/memory/reference_matomo_analytics.md` — memory (created)
|
||||||
|
- `/home/guru/.claude/projects/-home-guru-ClaudeTools/memory/MEMORY.md` — updated index
|
||||||
|
- `/home/guru/ClaudeTools/credentials.md` — added Matomo section
|
||||||
|
|
||||||
|
## Pending/Incomplete Tasks
|
||||||
|
|
||||||
|
1. **Cloudflare SSL/TLS mode** — Verify it's "Full" or "Full (Strict)" in dashboard. Our API tokens can't check this.
|
||||||
|
2. **Cloudflare AI Crawl Control** — Configure in dashboard: allow ChatGPT-User, Claude-Web, Perplexity-User bots
|
||||||
|
3. **Google Analytics (GA4)** — Still needs setup. User deferred to future session. Need GA4 Measurement ID.
|
||||||
|
4. **WordPress Site Kit GA4** — Site Kit is installed on azcomputerguru.com with Search Console only. Can complete GA4 connection through Site Kit admin.
|
||||||
|
5. **Matomo API token** — Token came back empty during setup. May need to regenerate via Matomo admin panel.
|
||||||
|
6. **Radio site tracking durability** — HTML injection will be lost on next Astro rebuild/deploy. Should add to Astro layout component source instead.
|
||||||
|
7. **SSH key auth for IX** — Still using sshpass from CachyOS workstation. Should add ed25519 key.
|
||||||
|
8. **Broader Cloudflare API token** — Create one with WAF/Bot Management permissions for API-based AI crawler management.
|
||||||
Reference in New Issue
Block a user