Contents

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

LayerTechnologyPurpose
FrontendNext.js 14 App RouterPage rendering, routing, admin UI
DatabaseSupabase (PostgreSQL)Document storage, categories, glossary, acknowledgments, ask log
HostingVercelDeployment, CDN, serverless functions
AIAnthropic Claude APIAsk the Wiki, AI Drafter, Consistency Checker, AI Edit Assistant, AI Formatter
AuthEnvironment variable + Supabase admin_codes tableOwner 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.

VariablePurposeRotation Trigger
OWNER_PASSWORDMaster admin access — full permissionsSuspected compromise or personnel change
ANTHROPIC_API_KEYPowers all AI featuresSuspected compromise or billing concern
NEXT_PUBLIC_SUPABASE_URLSupabase project URLProject migration only
NEXT_PUBLIC_SUPABASE_ANON_KEYSupabase public client keySuspected compromise
SUPABASE_SERVICE_ROLE_KEYServer-side Supabase writesSuspected compromise
FORUMIFY_CLIENT_IDJ2 Intel Bot Forumify API clientClient credential change
FORUMIFY_CLIENT_SECRETJ2 Intel Bot Forumify API secretClient credential change or suspected compromise
J2_ACCESS_CODEGate for J2 Intel Generator pageQuarterly rotation or suspected compromise
JSOC_SUPPORT_CLIENT_IDJSOC Support Net Forumify API clientClient credential change
JSOC_SUPPORT_CLIENT_SECRETJSOC Support Net Forumify API secretClient credential change or suspected compromise
SUPPORT_REQUEST_CODEGate for Support Request pageQuarterly 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.

TablePurpose
documentsAll wiki documents — title, slug, content, category, status, display_order
categoriesDocument categories — title, slug, description, display_order
glossaryGlossary terms shown as tooltips in documents
acknowledgmentsRead receipts — who has acknowledged each document
ask_logLog of Ask the Wiki queries
admin_codesAdmin 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.

  1. Changes are made in Claude Code on the local machine at C:\BronzeSquadronWIKI
  2. Changes are committed and pushed to MaximusDecimusAnthemus/bronzesquadwiki on GitHub
  3. Vercel detects the push and automatically deploys to production
  4. Verify the deployment succeeded in the Vercel dashboard
  5. 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

FeatureLocationNotes
Document browsingPublic — all pagesCategory and doc navigation
Full-text search/searchQueries Supabase documents table
Ask the Wiki/askPublic, rate-limited, uses Anthropic API
AI Document Drafter/admin/draftAdmin only, uses Anthropic API
AI Edit AssistantOn each document edit pageAdmin only, uses Anthropic API
Consistency Checker/admin/consistency-checkAdmin only, uses Anthropic API
AI FormatterOn each document edit pageAdmin only, uses Anthropic API
Revision historyOn each documentTracks all edits with AI diff
Document reorder/admin/reorderAdmin only
Read acknowledgments/admin/acknowledgmentsAdmin only
Glossary management/admin/glossaryAdmin only
Admin code management/admin/adminsOwner only
J2 Intel Generator/admin/j2-generatorAdmin only, uses Forumify API + Anthropic
Support Request/support-requestUnit 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:

  1. Go to console.anthropic.com → API Keys
  2. Create a new key
  3. Update ANTHROPIC_API_KEY in Vercel environment variables
  4. Trigger a manual redeploy
  5. 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

IssueLikely CauseFix
404 on a document pageBroken slug or document deletedCheck Supabase documents table for the slug
Document shows in category list but 404sSlug mismatchCheck display_order and slug in Supabase
AI features all failingAnthropic API key expiredCheck Vercel logs for 401 from api.anthropic.com. Rotate key
Admin panel shows "Locked" after loginSession storage issueHard refresh. If persistent, clear browser session storage
Glossary tooltips not appearingTerm not matchingCheck glossary table. Term must match exact text in document
Ask the Wiki rate limitedToo many queries from same IPRate limit resets automatically
Vercel deployment failedBuild error in codeCheck Vercel build log. Previous deployment stays live
Content stale after editNext.js cacheThe 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

ElementForumForum IDDiscord Channel
SEALs (Anvil + Hammer)JSOC Support Request129SEAL team channel
RAVEN (24th STS)JSOC Support Request129RAVEN channel
SOAR (Spartan / 160th)JSOC Aviation Request130SOAR channel
Game Master (Odin)ODIN Support Request131Odin channel

SEALs and RAVEN share Forum 129 and are posted as a single combined topic when both are requested simultaneously.

4.3 Environment Variables

VariablePurpose
JSOC_SUPPORT_CLIENT_IDForumify API client ID
JSOC_SUPPORT_CLIENT_SECRETForumify API client secret
SUPPORT_REQUEST_CODEUnit 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:

ServicePurposeAuth Required
decapi.meTwitch live status and viewer countsNone
jtvnw CDNStream preview thumbnailsNone
Twitch embedPlayer and chat embedNone
Discord webhookLive notification to unit channelWebhook 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

IssueLikely CauseFix
Streamer not showing as liveUsername mismatch or decapi.me delayVerify exact Twitch username in array. decapi.me has up to 60 second delay
Player not auto-switchingJS timing on page loadHard refresh. If persistent, check console for errors
Viewer count showing 0decapi.me rate limit or outageWait 60 seconds and refresh
Discord webhook not firingWebhook URL expiredGet new URL, update DISCORD_WEBHOOK in JS tab
Clip thumbnail not displayingTwitch thumbnail URL expiredRequest replacement URL from J4, update thumbnail field
All streamers showing offlinedecapi.me outageTemporary — no action needed

7. WARRIOR OF THE WEEK

7.1 Architecture Overview

ComponentLocationPurpose
Forum categorybronzesquadron.com/forum/warrior-of-the-weekWhere J4 posts entries (Forum ID: 134)
CMS pagebronzesquadron.com/warrior-of-the-weekPublic-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

IssueLikely CauseFix
Featured entry not updatingJ4 posted to wrong forumCheck the topic URL — should be bronzesquadron.com/forum/warrior-of-the-week/...
Entry body not displayingTopic was posted with no body contentAsk J4 to edit the topic and add body content
Formatting looks brokenForum editor inserted hard line breaksDirect J4 to the J4 SOP formatting rules — content must be typed paragraph by paragraph
Images not displayingImage was hotlinked, not uploadedAsk J4 to re-upload the image directly to the forum post
Page shows "No entries yet"No topics in Forum 134J4 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() or min() Twig filters — use ternary clamping instead
  • JS tab rules — raw JavaScript only, no <script> tags, no async/await, no arrow functions in top scope, no const/let — use Promise.then() chains and var
  • Always back up before saving — there is no undo in the page builder

9. DESIGN SYSTEM REFERENCE

ElementTokenValue
Background#090c10
Surface#0f1620
Borderrgba(120,141,160,0.18)
Bronze accent#c9913a
Bronze light#e0b76c
Text primary#dfe8f2
Muted text#708090
FontJetBrains Mono, monospace

10. POINTS OF CONTACT

IssueContact
Page broken, 404, rendering errorJ6
Environment variable rotationJ6
New admin code neededJ6
Admin code revocationJ6
Vercel deployment issuesJ6
Supabase database issuesJ6
Streamer roster changesJ6
Clip rail content decisionsJ4
Clip rail updates to applyJ4 submits, J6 applies
SOP content incorrect or outdatedRelevant shop lead
New feature requestShop lead submits to J6 for scoping
AI feature not workingJ6 — check API key first
Awards card catalog update neededJ1 reports, J6 updates
Warrior of the Week page brokenJ6
Warrior of the Week contentJ4

READ ACKNOWLEDGMENT

REVISION HISTORY
Capt ANTHEMJul 15, 2026, 07:44 PM

Replaced JSOC Support Request System SOP with J6 Communications & Information Systems master SOP, broadening scope to cover wiki, Forumify dashboards, awards system, and streaming infrastructure alongside the support request system.

Capt ANTHEMJul 15, 2026, 07:39 PM

Reorganized troubleshooting and badge maintenance sections with new subsection headers (progressionGroups, singletons, deviceBadges) and added warrior of the week technology to maintenance documentation.

Capt ANTHEMJul 13, 2026, 05:12 PM

Restructured document: removed outdated "Adding a New Wiki Editor" section and tool migration table from admin access management; added new "Troubleshooting" section and comprehensive "J6 TECHNICAL - AWARDS CARD SYSTEM SOP" with architecture overview documenting the Node.js awards card generation pipeline.

Capt ANTHEMJul 10, 2026, 02:56 AM

Added "Troubleshooting Guide" and "Wiki Overview" sections with platform architecture details, role definitions for J6 and shop owners, and comprehensive documentation of J6's infrastructure responsibilities including deployment management, database monitoring, access control, and technical support.

CPT ANTHEMJul 9, 2026, 06:55 PM

Added new section "Live Streaming Dashboard — Technical Infrastructure" documenting J6's technical responsibilities for maintaining the dashboard, including streamer roster management, Discord webhook maintenance, and design system compliance.