Admin

Admin Overview

This area lists recent updates and operational data for editors.

Recent batch backlog (counts by stage/status) is available at /data/batch_backlog.json.

To review recently updated pages, see the commit history or the “morning publish” run.

Crash Count
Crashes: Collisions involving cars, bikes, and pedestrians. 342,847
All Injuries: Any injury from a reported crash. 193,383
Moderate: Broken bones, concussions, and other serious injuries. 41,743
Serious: Life-altering injuries: amputations, paralysis, severe trauma. 2,510
Deaths: Lives lost to traffic violence. 1,103
Data from Jan 1, 2022 to Aug 15, 2025

GPT Usage (Last 7 Days)

This page shows GPT usage for the last 7 days. To refresh this data, run:

make export-gpt-usage && \
python -m newsroom.lib.gpt --export-json --show-savings --since "$(python - <<'PY'
from datetime import datetime, timedelta, timezone
print((datetime.now(timezone.utc)-timedelta(days=7)).strftime('%Y-%m-%dT%H:%M:%SZ'))
PY
)" --out hugo/data/gpt_usage_7d.json
<table>
  <thead>
    <tr>
      <th>Persona</th>
      <th style="text-align:right">Total Tokens</th>
      <th style="text-align:right">Total Cost</th>
      <th style="text-align:right">Requests</th>
      <th style="text-align:right">Cache Hits</th>
      <th style="text-align:right">Savings (tokens)</th>
      <th style="text-align:right">Savings (cost)</th>
    </tr>
  </thead>
  <tbody>
    
      <tr>
        <td>classifier</td>
        <td style="text-align:right">182355</td>
        <td style="text-align:right">$0.15</td>
        <td style="text-align:right">236</td>
        <td style="text-align:right">27</td>
        <td style="text-align:right">12969</td>
        <td style="text-align:right">$0.00</td>
      </tr>
    
      <tr>
        <td>finisher_persona</td>
        <td style="text-align:right">589617</td>
        <td style="text-align:right">$0.31</td>
        <td style="text-align:right">22</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">$0.00</td>
      </tr>
    
      <tr>
        <td>narrative_module</td>
        <td style="text-align:right">470401</td>
        <td style="text-align:right">$3.09</td>
        <td style="text-align:right">98</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">$0.00</td>
      </tr>
    
      <tr>
        <td>photo_editor_persona</td>
        <td style="text-align:right">29883</td>
        <td style="text-align:right">$0.03</td>
        <td style="text-align:right">19</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">$0.00</td>
      </tr>
    
      <tr>
        <td>reporter_persona</td>
        <td style="text-align:right">590589</td>
        <td style="text-align:right">$2.03</td>
        <td style="text-align:right">19</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">$0.00</td>
      </tr>
    
  </tbody>
</table>
<p style="margin-top:0.5rem;color:#666;font-size:0.9em">Generated: 2025-08-16T04:19:09.307389Z. Window:  → .</p>

GPT Usage Accounting

This page shows an aggregated view of GPT token usage, costs, cache hits, and estimated savings by persona. To refresh this data, run:

make export-gpt-usage

That command writes hugo/data/gpt_usage.json from the persisted usage log and this page will render the latest snapshot.

<table>
  <thead>
    <tr>
      <th>Persona</th>
      <th style="text-align:right">Total Tokens</th>
      <th style="text-align:right">Total Cost</th>
      <th style="text-align:right">Requests</th>
      <th style="text-align:right">Cache Hits</th>
      <th style="text-align:right">Savings (tokens)</th>
      <th style="text-align:right">Savings (cost)</th>
    </tr>
  </thead>
  <tbody>
    
      <tr>
        <td>classifier</td>
        <td style="text-align:right">182355</td>
        <td style="text-align:right">$0.15</td>
        <td style="text-align:right">236</td>
        <td style="text-align:right">27</td>
        <td style="text-align:right">12969</td>
        <td style="text-align:right">$0.00</td>
      </tr>
    
      <tr>
        <td>finisher_persona</td>
        <td style="text-align:right">589617</td>
        <td style="text-align:right">$0.31</td>
        <td style="text-align:right">22</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">$0.00</td>
      </tr>
    
      <tr>
        <td>narrative_module</td>
        <td style="text-align:right">470401</td>
        <td style="text-align:right">$3.09</td>
        <td style="text-align:right">98</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">$0.00</td>
      </tr>
    
      <tr>
        <td>photo_editor_persona</td>
        <td style="text-align:right">29883</td>
        <td style="text-align:right">$0.03</td>
        <td style="text-align:right">19</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">$0.00</td>
      </tr>
    
      <tr>
        <td>reporter_persona</td>
        <td style="text-align:right">590589</td>
        <td style="text-align:right">$2.03</td>
        <td style="text-align:right">19</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">0</td>
        <td style="text-align:right">$0.00</td>
      </tr>
    
  </tbody>
</table>
<p style="margin-top:0.5rem;color:#666;font-size:0.9em">Generated: 2025-08-16T04:19:08.388332Z. Window:  → .</p>