J6: COMMUNICATIONS & INFORMATION SYSTEMS — MASTER SOP
1. PURPOSE
J6 is responsible for all digital infrastructure supporting Bronze Squadron. This includes the unit wiki, Forumify custom dashboards and pages, the JSOC Support Request System, the Awards Card System, the Live Streaming Dashboard, and the Warrior of the Week feature. J6 owns the platforms. Individual shops own the content within their sections.
J6 does not write or edit SOP content — J6 keeps the platforms running, accessible, and maintained.
2. J6 RESPONSIBILITIES
- Vercel deployment management and environment variable maintenance
- Supabase database health monitoring
- Admin access code creation, rotation, and revocation
- Onboarding new wiki editors and assigning correct permission levels
- Resolving broken pages, 404 errors, and rendering issues
- Dependency updates and security patches
- Anthropic API key rotation
- Maintaining Forumify API credentials, custom pages, and theme overrides
- Coordinating with shop leads when content requires technical support
3. BRONZE SQUADRON WIKI
Architecture Overview
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | Next.js 14 App Router | Page rendering, routing, admin UI |
| Database | Supabase (PostgreSQL) | Document storage, categories, glossary, acknowledgments, ask log |
| Hosting | Vercel | Deployment, CDN, serverless functions |
| AI | Anthropic Claude API | Ask the Wiki, AI Drafter, Consistency Checker, AI Edit Assistant, AI Formatter |
| Auth | Environment variable + Supabase admin_codes table | Owner and admin access control |
Local path: C:\BronzeSquadronWIKI
GitHub: MaximusDecimusAnthemus/bronzesquadwiki (private)
Live URL: wiki.bronzesquadron.com
Environment Variables
All sensitive credentials are stored as Vercel environment variables. J6 is responsible for keeping these current and rotating them when required.
| Variable | Purpose | Rotation Trigger |
|---|---|---|
| OWNER_PASSWORD | Master admin access — full permissions | Suspected compromise or personnel change |
| ANTHROPIC_API_KEY | Powers all AI features | Suspected compromise or billing concern |
| NEXT_PUBLIC_SUPABASE_URL | Supabase project URL | Project migration only |
| NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase public client key | Suspected compromise |
| SUPABASE_SERVICE_ROLE_KEY | Server-side Supabase writes | Suspected compromise |
| FORUMIFY_CLIENT_ID | J2 Intel Bot Forumify API client | Client credential change |
| FORUMIFY_CLIENT_SECRET | J2 Intel Bot Forumify API secret | Client credential change or suspected compromise |
| J2_ACCESS_CODE | Gate for J2 Intel Generator page | Quarterly rotation or suspected compromise |
| JSOC_SUPPORT_CLIENT_ID | JSOC Support Net Forumify API client | Client credential change |
| JSOC_SUPPORT_CLIENT_SECRET | JSOC Support Net Forumify API secret | Client credential change or suspected compromise |
| SUPPORT_REQUEST_CODE | Gate for Support Request page | Quarterly rotation or suspected compromise |
After changing any environment variable in Vercel, trigger a manual redeploy for the change to take effect.
Access Control
Owner access — granted via OWNER_PASSWORD. Full permissions including create, edit, delete, and admin code management. Only the wiki administrator holds this. Never share the owner password.
Admin access — granted via admin codes stored in the admin_codes Supabase table. Each code has a label, a can_edit flag, and a can_delete flag. Admin codes are created and revoked at wiki.bronzesquadron.com/admin/admins using the owner password.
Public access — all published documents are publicly readable. No login required to read the wiki.
Creating Admin Codes
Log in with the owner password and navigate to Admin → Manage Admins. Create a new code with a descriptive label (e.g. "J3 Lead — May 2026"). Set can_edit: true and can_delete based on their role. Share the code securely with the individual via Discord DM.
Revoking Access
Navigate to Admin → Manage Admins and find the code by label. Deactivate or delete it. The code stops working immediately — no redeploy needed.
Quarterly Access Audit
J6 should review all active admin codes every quarter. Remove codes for members who have left the unit or no longer need edit access.
Database — Supabase
The wiki database lives in Supabase project zdmcorlxevqgdwsrfntc.
| Table | Purpose |
|---|---|
| documents | All wiki documents — title, slug, content, category, status, display_order |
| categories | Document categories — title, slug, description, display_order |
| glossary | Glossary terms shown as tooltips in documents |
| acknowledgments | Read receipts — who has acknowledged each document |
| ask_log | Log of Ask the Wiki queries |
| admin_codes | Admin access codes with permission flags |
RLS is intentionally disabled on this project. All write access is enforced server-side through Next.js API routes using the service role key. The Supabase security warning email can be disregarded.
Deployment Procedure
All code changes go through Claude Code → GitHub → Vercel auto-deploy.
- Changes are made in Claude Code on the local machine at
C:\BronzeSquadronWIKI - Changes are committed and pushed to MaximusDecimusAnthemus/bronzesquadwiki on GitHub
- Vercel detects the push and automatically deploys to production
- Verify the deployment succeeded in the Vercel dashboard
- Hard refresh the live site to confirm changes are visible
Manual Redeploy: Go to Vercel dashboard → Deployments, find the latest deployment, click three dots → Redeploy.
Failed Deployments: Check the Vercel build log for the error. The previous deployment remains live — users are not affected. Fix the issue in the code and push again.
3.6 Wiki Features Overview
| Feature | Location | Notes |
|---|---|---|
| Document browsing | Public — all pages | Category and doc navigation |
| Full-text search | /search | Queries Supabase documents table |
| Ask the Wiki | /ask | Public, rate-limited, uses Anthropic API |
| AI Document Drafter | /admin/draft | Admin only, uses Anthropic API |
| AI Edit Assistant | On each document edit page | Admin only, uses Anthropic API |
| Consistency Checker | /admin/consistency-check | Admin only, uses Anthropic API |
| AI Formatter | On each document edit page | Admin only, uses Anthropic API |
| Revision history | On each document | Tracks all edits with AI diff |
| Document reorder | /admin/reorder | Admin only |
| Read acknowledgments | /admin/acknowledgments | Admin only |
| Glossary management | /admin/glossary | Admin only |
| Admin code management | /admin/admins | Owner only |
| J2 Intel Generator | /admin/j2-generator | Admin only, uses Forumify API + Anthropic |
| Support Request | /support-request | Unit access code gated |
3.7 AI Features — API Key Management
All AI features use the ANTHROPIC_API_KEY environment variable. If the key is revoked or expired, all AI features will return errors simultaneously. Wiki content and browsing will still work normally.
Signs the API key needs rotation:
- Ask the Wiki returns errors for all queries
- AI Drafter, Edit Assistant, or Consistency Checker fail on every attempt
- Vercel function logs show 401 responses from api.anthropic.com
To rotate the key:
- Go to console.anthropic.com → API Keys
- Create a new key
- Update ANTHROPIC_API_KEY in Vercel environment variables
- Trigger a manual redeploy
- Revoke the old key in the Anthropic console
3.8 Markdown and Formatting
Supported elements: headings, bold, italic, bullet lists, numbered lists, blockquotes, inline code, code blocks, horizontal rules, links, tables.
Callout blocks use this syntax:
<div class="callout callout-critical">
<div class="callout-label">CRITICAL</div>
Content here
</div>
<div class="callout callout-warning">
<div class="callout-label">WARNING</div>
Content here
</div>
<div class="callout callout-info">
<div class="callout-label">INFO</div>
Content here
</div>
<div class="callout callout-note">
<div class="callout-label">NOTE</div>
Content here
</div>
Cross-links between documents use relative paths:
[Link text](/category-slug/document-slug)
Never use the full https:// URL for internal links.
3.9 Troubleshooting — Wiki
| Issue | Likely Cause | Fix |
|---|---|---|
| 404 on a document page | Broken slug or document deleted | Check Supabase documents table for the slug |
| Document shows in category list but 404s | Slug mismatch | Check display_order and slug in Supabase |
| AI features all failing | Anthropic API key expired | Check Vercel logs for 401 from api.anthropic.com. Rotate key |
| Admin panel shows "Locked" after login | Session storage issue | Hard refresh. If persistent, clear browser session storage |
| Glossary tooltips not appearing | Term not matching | Check glossary table. Term must match exact text in document |
| Ask the Wiki rate limited | Too many queries from same IP | Rate limit resets automatically |
| Vercel deployment failed | Build error in code | Check Vercel build log. Previous deployment stays live |
| Content stale after edit | Next.js cache | The edit API calls revalidatePath automatically. If stale, trigger manual redeploy |
4. JSOC SUPPORT REQUEST SYSTEM
4.1 System Overview
The JSOC Support Request System lives at wiki.bronzesquadron.com/support-request. It is gated by a unit access code and automatically creates forum topics and Discord notifications when a support request is submitted.
API route: app/api/support-request/route.ts in the wiki codebase.
4.2 Forum and Discord Routing
| Element | Forum | Forum ID | Discord Channel |
|---|---|---|---|
| SEALs (Anvil + Hammer) | JSOC Support Request | 129 | SEAL team channel |
| RAVEN (24th STS) | JSOC Support Request | 129 | RAVEN channel |
| SOAR (Spartan / 160th) | JSOC Aviation Request | 130 | SOAR channel |
| Game Master (Odin) | ODIN Support Request | 131 | Odin channel |
SEALs and RAVEN share Forum 129 and are posted as a single combined topic when both are requested simultaneously.
4.3 Environment Variables
| Variable | Purpose |
|---|---|
| JSOC_SUPPORT_CLIENT_ID | Forumify API client ID |
| JSOC_SUPPORT_CLIENT_SECRET | Forumify API client secret |
| SUPPORT_REQUEST_CODE | Unit access code for the page gate |
4.4 Maintenance Responsibilities
- Maintain the JSOC Support Net API client credentials in Forumify
- Rotate the support request access code when required
- Update forum IDs and Discord webhooks in the route file if forums are reorganized or webhooks expire
- Monitor for failed submissions
If a submission fails, the submitter will see a red error row on the confirmation screen. They should notify J6 and submit a manual request via Discord until the issue is resolved.
5. AWARDS CARD SYSTEM
5.1 Architecture Overview
The Awards Card System is a Node.js pipeline at C:\RackGen that runs nightly via GitHub Actions, fetches soldier data from a hidden Forumify export page, generates SVG shadow box cards per soldier, commits changed cards to GitHub, and Vercel auto-deploys them. Cards appear on MILHQ soldier profiles via a Forumify Twig template override.
6. LIVE STREAMING DASHBOARD
6.1 Architecture Overview
The dashboard is a Forumify custom page with three tabs: Twig (page structure), CSS (styles), JavaScript (all dynamic behavior).
External dependencies:
| Service | Purpose | Auth Required |
|---|---|---|
| decapi.me | Twitch live status and viewer counts | None |
| jtvnw CDN | Stream preview thumbnails | None |
| Twitch embed | Player and chat embed | None |
| Discord webhook | Live notification to unit channel | Webhook URL only |
All external services are called client-side from the user's browser.
6.2 Streamer Roster Maintenance
The streamer roster is a JavaScript array in the JS tab. Each entry is a Twitch username string stored in lowercase.
To add a streamer: Back up all three tabs → open JS tab → add the Twitch username to the array → save → confirm on live page.
To remove a streamer: Back up → delete their entry → save → confirm.
To update a username: Back up → replace the existing string → save → confirm.
6.3 Clip Rail Maintenance
J4 submits clip additions and removals to J6. Each clip entry contains:
6.4 Discord Webhook Maintenance
The webhook URL is stored in the DISCORD_WEBHOOK variable near the top of the JavaScript tab. If the webhook URL changes, update the value and test by having a streamer go live.
6.5 Backup Procedure
Before making any change to a Forumify page, copy the full contents of all three tabs (Twig, CSS, JavaScript) into a local text file labeled with the date: streaming-dash-backup-YYYY-MM-DD.txt. There is no version control on Forumify pages — backup is the only recovery option.
6.6 Troubleshooting — Streaming Dashboard
| Issue | Likely Cause | Fix |
|---|---|---|
| Streamer not showing as live | Username mismatch or decapi.me delay | Verify exact Twitch username in array. decapi.me has up to 60 second delay |
| Player not auto-switching | JS timing on page load | Hard refresh. If persistent, check console for errors |
| Viewer count showing 0 | decapi.me rate limit or outage | Wait 60 seconds and refresh |
| Discord webhook not firing | Webhook URL expired | Get new URL, update DISCORD_WEBHOOK in JS tab |
| Clip thumbnail not displaying | Twitch thumbnail URL expired | Request replacement URL from J4, update thumbnail field |
| All streamers showing offline | decapi.me outage | Temporary — no action needed |
7. WARRIOR OF THE WEEK
7.1 Architecture Overview
| Component | Location | Purpose |
|---|---|---|
| Forum category | bronzesquadron.com/forum/warrior-of-the-week | Where J4 posts entries (Forum ID: 134) |
| CMS page | bronzesquadron.com/warrior-of-the-week | Public-facing display page |
The CMS page queries Forum 134 ordered by creation date descending. The most recently created topic becomes the featured warrior automatically. No manual page edits are needed when J4 posts a new entry.
7.2 Forum Configuration
- Forum ID: 134
- Slug: warrior-of-the-week
- Posting rights: J4 and UHQ only
- Reply rights: General members (configure in Forum ACL settings)
7.3 CMS Page Twig Template
Located in Forumify Admin → CMS → Pages → Warrior of the Week → Twig tab. The template queries Forum 134 and renders the featured entry and archive grid. If the template needs to be rebuilt, contact J6 and reference the J6 Technical SOP for the Warrior of the Week feature.
7.4 Troubleshooting — Warrior of the Week
| Issue | Likely Cause | Fix |
|---|---|---|
| Featured entry not updating | J4 posted to wrong forum | Check the topic URL — should be bronzesquadron.com/forum/warrior-of-the-week/... |
| Entry body not displaying | Topic was posted with no body content | Ask J4 to edit the topic and add body content |
| Formatting looks broken | Forum editor inserted hard line breaks | Direct J4 to the J4 SOP formatting rules — content must be typed paragraph by paragraph |
| Images not displaying | Image was hotlinked, not uploaded | Ask J4 to re-upload the image directly to the forum post |
| Page shows "No entries yet" | No topics in Forum 134 | J4 has not posted an entry yet |
8. FORUMIFY PAGE BUILDER CONSTRAINTS
These constraints apply to all edits in the Forumify page builder and must be followed to prevent silent failures or crashes:
- No non-ASCII characters — em dashes, curly quotes, and decorative unicode break the Twig lexer even inside comments. Use plain hyphens and straight quotes only
- No
{% continue %}inside{% if %}blocks — use wrapping gate logic instead - No
max()ormin()Twig filters — use ternary clamping instead - JS tab rules — raw JavaScript only, no
<script>tags, noasync/await, no arrow functions in top scope, noconst/let— usePromise.then()chains andvar - Always back up before saving — there is no undo in the page builder
9. DESIGN SYSTEM REFERENCE
| Element | Token | Value |
|---|---|---|
| Background | #090c10 | |
| Surface | #0f1620 | |
| Border | rgba(120,141,160,0.18) | |
| Bronze accent | #c9913a | |
| Bronze light | #e0b76c | |
| Text primary | #dfe8f2 | |
| Muted text | #708090 | |
| Font | JetBrains Mono, monospace |
10. POINTS OF CONTACT
| Issue | Contact |
|---|---|
| Page broken, 404, rendering error | J6 |
| Environment variable rotation | J6 |
| New admin code needed | J6 |
| Admin code revocation | J6 |
| Vercel deployment issues | J6 |
| Supabase database issues | J6 |
| Streamer roster changes | J6 |
| Clip rail content decisions | J4 |
| Clip rail updates to apply | J4 submits, J6 applies |
| SOP content incorrect or outdated | Relevant shop lead |
| New feature request | Shop lead submits to J6 for scoping |
| AI feature not working | J6 — check API key first |
| Awards card catalog update needed | J1 reports, J6 updates |
| Warrior of the Week page broken | J6 |
| Warrior of the Week content | J4 |