```json
{
  "entry_points": [
    {
      "path": "/v1/chat/completions",
      "module": "app.proxy",
      "method": "POST",
      "description": "Accepts chat completion requests from clients and forwards them to the llama.cpp upstream service."
    },
    {
      "path": "/dashboard/*",
      "module": "app.main",
      "method": "GET",
      "description": "Renders dashboard pages that display aggregated statistics from the SQLite store."
    }
  ],
  "data_flow": [
    {
      "step": "Client request",
      "source": "FastAPI route /v1/chat/completions",
      "module": "app.proxy",
      "action": "Parse request body, extract user metadata (e.g., user_id, session_id)."
    },
    {
      "step": "Metadata recording",
      "module": "app.proxy",
      "action": "Create a run record in SQLite via app.store.insert_run, then create an llm_request record linked to that run."
    },
    {
      "step": "Forwarding",
      "module": "app.proxy",
      "action": "Send the request payload to the upstream llama.cpp service and stream the response back to the client."
    },
    {
      "step": "Response handling",
      "module": "app.proxy",
      "action": "Update the llm_request record with the response status, size, and timestamps."
    },
    {
      "step": "Dashboard rendering",
      "module": "app.reports",
      "action": "Query SQLite for aggregated metrics (e.g., request counts, latency, error rates) and pass them to the FastAPI template."
    },
    {
      "step": "Redaction",
      "module": "app.redaction",
      "action": "Before any request or response preview is sent to the client, strip or mask any sensitive fields (API keys, personal data)."
    }
  ],
  "risks": [
    {
      "module": "app.proxy",
      "risk": "Open proxy to external llama.cpp service",
      "details": "The proxy accepts arbitrary request bodies and forwards them without strict validation, potentially allowing injection or DoS attacks if the upstream service is compromised or misconfigured."
    },
    {
      "module": "app.store",
      "risk": "SQLite write operations",
      "details": "Direct SQL string concatenation could lead to injection if metadata is not sanitized. Also, SQLite may become a bottleneck under high concurrency."
    },
    {
      "module": "app.reports",
      "risk": "Aggregated query performance",
      "details": "Complex GROUP BY and COUNT queries on a growing SQLite table may degrade dashboard response times."
    },
    {
      "module": "app.redaction",
      "risk": "Incomplete redaction",
      "details": "If the redaction patterns miss certain secret fields, sensitive data could leak in previews or logs."
    },
    {
      "module": "app.main",
      "risk": "Route registration",
      "details": "Dynamic route registration without explicit whitelisting could expose unintended endpoints if the code changes."
    }
  ]
}
```