posted an update

## Update: Daily Briefing, GitLab MCP goes live, and a 3-minute demo

A lot has shipped since the first commit. Here's how Enterprise AI Without Leaks or Overspending (LLMai) has evolved this week:

### Demo video is up

Watch the full 3-minute walkthrough: youtu.be/V3Rda1kLSos — local agent loop, permission gates, GitLab MCP triage, and the new Briefing tab, all running on a laptop.

### GitLab integration is now real MCP (partner track )

LLMai no longer just talks about MCP — it launches GitLab's MCP server as a local stdio subprocess, discovers its tools at startup, and registers them as mcp__gitlab__* behind the same allow/ask/deny permission system as every built-in tool. We verified the full loop live: read an issue → inspect the failing pipeline → patch local code → open a fix MR.

### New: Daily Briefing — your local model earns its keep every morning

The local server now doubles as a morning dashboard at /briefing, embedded directly in the hosted site's Briefing tab:

  • DS interview practice — one question + model answer, generated by your local Ollama model; topic rotates daily across 8 areas
  • Korea morning news + US market headlines (Yahoo Finance RSS, with a MarketWatch fallback after Yahoo started 429-ing default user agents)
  • CEPR's AI Bubble Monitor charts — because an app about not overspending on AI should keep an eye on the AI bubble

It regenerates itself in the background whenever the server boots on a new day:

  @app.on_event("startup")
  async def _refresh_stale_briefing() -> None:
      """Regenerate the briefing in the background if it's missing or not today's."""
      if BRIEFING_PATH.exists():
          mtime = datetime.fromtimestamp(BRIEFING_PATH.stat().st_mtime)
          if mtime.date() == datetime.now().date():
              return
      asyncio.create_task(_generate_briefing())

   Security stayed the point

  The hosted site embeds the briefing from localhost — so we scoped CORS to exactly two path groups (/healthz, /briefing*) for exactly one origin. The WebSocket-token
  endpoint and everything else stay same-origin. Leak-free means the boring parts too.

  Polish round

  - Chat replies now render real Markdown (sanitized with DOMPurify) with syntax-highlighted code blocks
  - Stop button mid-generation, with partial responses preserved
  - Client-side history trimming so long conversations never hit the cloud proxy's limits
  - Promo page pause/replay fixed, branding unified to LLMai

  Try it: https://ll-mai.vercel.app · Code: https://github.com/sechan9999/LLMai

Log in or sign up for Devpost to join the conversation.