---
html_theme:
  sidebar_secondary:
    remove: true
---

# ChatBHT Development Notes

Students already use commercial AI for academic work. ChatBHT was developed to provide equitable access through a university-run service, with institutional responsibility for data, usage rules and budgets.

## Changelog

```{raw} html
<details class="development-changelog-toggle">
<summary>March 2025 – September 2026</summary>
<div class="development-changelog">
  <section aria-label="2025">
    <h3>2025</h3>
    <dl>
      <div><dt><time datetime="2025-03">March</time><strong>Concept</strong></dt><dd>First ideas for a shared AI workspace.</dd></div>
      <div><dt><time datetime="2025-04">April</time><strong>API Access</strong></dt><dd>GWDG API key obtained. Initial work based on the SAIA documentation.</dd></div>
      <div><dt><time datetime="2025-05">May</time><strong>Development Record</strong></dt><dd>No separate milestone documented for this month.</dd></div>
      <div><dt><time datetime="2025-06">June</time><strong>First Release</strong></dt><dd>User accounts, streaming chat, image uploads, external knowledge access.</dd></div>
      <div><dt><time datetime="2025-07">July</time><strong>Document Management</strong></dt><dd>Document library, shared conversations, saved prompts, initial tool experiments.</dd></div>
      <div><dt><time datetime="2025-08">August</time><strong>Document Reliability</strong></dt><dd>Document management consolidated. Existing interface workflows refined.</dd></div>
      <div><dt><time datetime="2025-09">September</time><strong>Guest Access</strong></dt><dd>Guest dialogs refined. Interface behaviour made more consistent.</dd></div>
      <div><dt><time datetime="2025-10">October</time><strong>Adoption</strong></dt><dd>Further user registrations. No distinct feature milestone recorded.</dd></div>
      <div><dt><time datetime="2025-11">November</time><strong>OpenAI Integration</strong></dt><dd>Direct OpenAI access added with dedicated model configuration.</dd></div>
      <div><dt><time datetime="2025-12">December</time><strong>Unified Rendering</strong></dt><dd>Shared Markdown renderer introduced. Jupyter Book documentation expanded.</dd></div>
    </dl>
  </section>
  <section aria-label="2026">
    <h3>2026</h3>
    <dl>
      <div><dt><time datetime="2026-01">January</time><strong>Local Knowledge</strong></dt><dd>Vector search, Docling conversion, tool APIs, voice input, local Arcana projects.</dd></div>
      <div><dt><time datetime="2026-02">February</time><strong>Account Security</strong></dt><dd>Email action tokens added for account verification and recovery.</dd></div>
      <div><dt><time datetime="2026-03">March</time><strong>Stabilization</strong></dt><dd>Existing application workflows maintained and refined.</dd></div>
      <div><dt><time datetime="2026-04">April</time><strong>Invitations</strong></dt><dd>Invitation tokens extended. Navigation refined. English documentation expanded.</dd></div>
      <div><dt><time datetime="2026-05">May</time><strong>Agent Execution</strong></dt><dd>Persistent jobs, live events, workspace execution, source-code export.</dd></div>
      <div><dt><time datetime="2026-06">June</time><strong>Workspace Isolation</strong></dt><dd>Separate files and Git worktrees per conversation. Registration access links.</dd></div>
      <div><dt><time datetime="2026-07">July</time><strong>GitLab Identity</strong></dt><dd>ChatBHT becomes an identity provider for GitLab sign-in.</dd></div>
      <div><dt><time datetime="2026-08">August</time><strong>Conversation Archives</strong></dt><dd>Authorized GitLab archiving of conversations, files and metadata.</dd></div>
      <div><dt><time datetime="2026-09">September</time><strong>Integrated Workspace</strong></dt><dd>Gajae runtime, personal memory, private knowledge projects, background indexing, reproducible deployment.</dd></div>
    </dl>
  </section>
</div>
</details>
```

## Technology Selection

```{raw} html
<div class="cbht-orbits" data-language="en" role="region" aria-label="Current ChatBHT technologies">
  <noscript>Python, Django, PostgreSQL, Docker, JavaScript, HTMX, Alpine.js, Tailwind CSS, Vite, GWDG, KISSKI, OpenAI, pgvector, Docling, FastAPI, Gajae Code, TypeScript, Node.js, Celery, Redis, Git, GitLab.</noscript>
</div>
```

## to vibe

```{raw} html
<div class="development-vibe">
  <p class="development-vibe-lexical"><span class="development-vibe-ipa" aria-label="English pronunciation in IPA">/tə vaɪb/</span><span>verb · informal · in software development</span></p>
  <p><dfn>Vibing</dfn> here means developing software in dialogue with AI: expressing intent in language, generating code, evaluating and refining the result.</p>
  <p class="development-vibe-thesis">Taste becomes code.</p>
  <p>As coding intelligence gets cheaper and more available, the durable factors are not raw coding output.</p>
  <p class="development-vibe-prompt">What still matters:</p>
  <ul class="development-vibe-factors">
    <li>product taste</li><li>direction</li><li>system design</li><li>human trust</li><li>operational stability</li><li>judgment about what to build next</li>
  </ul>
  <p>In that world, the job of the human is not to out-type the machine. The job of the human is to decide what deserves to exist.</p>
</div>
```

## Development Timeline

First ideas in March 2025. GWDG API access in April 2025 marked the start of
implementation, guided by the [SAIA API documentation](https://docs.hpc.gwdg.de/services/ai-services/saia/index.html).

```{raw} html
<figure class="cbht-development-timeline">
  <a href="_static/development/timeline.png" aria-label="Open the development timeline at full resolution">
    <img src="_static/development/timeline.png" width="3000" height="5700" loading="lazy" alt="ChatBHT Development Timeline from April 2025 to September 2026: application milestones, integrated technologies, OpenAI releases and approximate coding model usage.">
  </a>
</figure>
```

## Licenses

ChatBHT code: **AGPL-3.0-only**. This documentation: **[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)**.
Main projects below; dependencies, model weights and logos retain their own licences and terms.

```{raw} html
<table class="development-licenses">
  <thead><tr><th scope="col">Project</th><th scope="col">Official Code Repository</th><th scope="col">License</th></tr></thead>
  <tbody>
    <tr><th scope="row">ChatBHT</th><td><a href="https://git.layerx.dev/applications/chatbht">applications/chatbht</a></td><td><a href="https://git.layerx.dev/applications/chatbht/-/blob/main/LICENSE">AGPL-3.0-only</a></td></tr>
    <tr><th scope="row">Python</th><td><a href="https://github.com/python/cpython">python/cpython</a></td><td><a href="https://github.com/python/cpython/blob/3.11/LICENSE">PSF-2.0</a></td></tr>
    <tr><th scope="row">Django</th><td><a href="https://github.com/django/django">django/django</a></td><td><a href="https://github.com/django/django/blob/stable/5.2.x/LICENSE">BSD-3-Clause</a></td></tr>
    <tr><th scope="row">PostgreSQL</th><td><a href="https://github.com/postgres/postgres">postgres/postgres</a></td><td><a href="https://github.com/postgres/postgres/blob/REL_16_STABLE/COPYRIGHT">PostgreSQL</a></td></tr>
    <tr><th scope="row">Docker Engine</th><td><a href="https://github.com/moby/moby">moby/moby</a></td><td><a href="https://github.com/moby/moby/blob/master/LICENSE">Apache-2.0</a></td></tr>
    <tr><th scope="row">Docker Compose</th><td><a href="https://github.com/docker/compose">docker/compose</a></td><td><a href="https://github.com/docker/compose/blob/main/LICENSE">Apache-2.0</a></td></tr>
    <tr><th scope="row">JavaScript</th><td><a href="https://github.com/tc39/ecma262">tc39/ecma262</a></td><td><a href="https://github.com/tc39/ecma262/blob/main/LICENSE.md">Ecma terms (specification)</a></td></tr>
    <tr><th scope="row">HTMX</th><td><a href="https://github.com/bigskysoftware/htmx">bigskysoftware/htmx</a></td><td><a href="https://github.com/bigskysoftware/htmx/blob/v2.0.4/LICENSE">0BSD</a></td></tr>
    <tr><th scope="row">Alpine.js</th><td><a href="https://github.com/alpinejs/alpine">alpinejs/alpine</a></td><td><a href="https://github.com/alpinejs/alpine/blob/v3.13.5/LICENSE.md">MIT</a></td></tr>
    <tr><th scope="row">Tailwind CSS</th><td><a href="https://github.com/tailwindlabs/tailwindcss">tailwindlabs/tailwindcss</a></td><td><a href="https://github.com/tailwindlabs/tailwindcss/blob/v3.4.1/LICENSE">MIT</a></td></tr>
    <tr><th scope="row">Vite</th><td><a href="https://github.com/vitejs/vite">vitejs/vite</a></td><td><a href="https://github.com/vitejs/vite/blob/main/LICENSE">MIT</a></td></tr>
    <tr><th scope="row"><a href="https://docs.hpc.gwdg.de/services/ai-services/saia/index.html">GWDG (SAIA)</a></th><td>Not applicable (API service)</td><td><a href="https://kisski.gwdg.de/dok/nutzungserklaerung.pdf">Service terms</a></td></tr>
    <tr><th scope="row"><a href="https://kisski.gwdg.de/en/leistungen/2-02-llm-service/">KISSKI</a></th><td>Not applicable (service)</td><td><a href="https://kisski.gwdg.de/dok/nutzungserklaerung.pdf">Service terms</a></td></tr>
    <tr><th scope="row">OpenAI API</th><td>Not applicable (API service)</td><td><a href="https://openai.com/policies/services-agreement/">Proprietary service terms</a></td></tr>
    <tr><th scope="row">pgvector</th><td><a href="https://github.com/pgvector/pgvector">pgvector/pgvector</a></td><td><a href="https://github.com/pgvector/pgvector/blob/master/LICENSE">PostgreSQL</a></td></tr>
    <tr><th scope="row">Docling</th><td><a href="https://github.com/docling-project/docling">docling-project/docling</a></td><td><a href="https://github.com/docling-project/docling/blob/main/LICENSE">MIT</a></td></tr>
    <tr><th scope="row">FastAPI</th><td><a href="https://github.com/fastapi/fastapi">fastapi/fastapi</a></td><td><a href="https://github.com/fastapi/fastapi/blob/master/LICENSE">MIT</a></td></tr>
    <tr><th scope="row">Gajae Code</th><td><a href="https://github.com/Yeachan-Heo/gajae-code">Yeachan-Heo/gajae-code</a></td><td><a href="https://github.com/Yeachan-Heo/gajae-code/blob/f6b7c475d24fb81aefe9e6475a713c1f364f6e80/LICENSE">MIT</a></td></tr>
    <tr><th scope="row">TypeScript</th><td><a href="https://github.com/microsoft/TypeScript">microsoft/TypeScript</a></td><td><a href="https://github.com/microsoft/TypeScript/blob/v5.8.3/LICENSE.txt">Apache-2.0</a></td></tr>
    <tr><th scope="row">Node.js</th><td><a href="https://github.com/nodejs/node">nodejs/node</a></td><td><a href="https://github.com/nodejs/node/blob/v22.x/LICENSE">MIT</a></td></tr>
    <tr><th scope="row">Celery</th><td><a href="https://github.com/celery/celery">celery/celery</a></td><td><a href="https://github.com/celery/celery/blob/main/LICENSE">BSD-3-Clause</a></td></tr>
    <tr><th scope="row">Redis 7.4</th><td><a href="https://github.com/redis/redis">redis/redis</a></td><td><a href="https://redis.io/legal/licenses/#about-past-licenses">RSALv2 or SSPLv1</a></td></tr>
    <tr><th scope="row">GitLab CE</th><td><a href="https://gitlab.com/gitlab-org/gitlab-foss">gitlab-org/gitlab-foss</a></td><td><a href="https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/LICENSE">MIT</a></td></tr>
    <tr><th scope="row">Git</th><td><a href="https://github.com/git/git">git/git</a></td><td><a href="https://github.com/git/git/blob/master/COPYING">GPL-2.0</a></td></tr>
    <tr><th scope="row">Jupyter Book 1</th><td><a href="https://github.com/jupyter-book/jupyter-book">jupyter-book/jupyter-book</a></td><td><a href="https://github.com/jupyter-book/jupyter-book/blob/v1.0.2/LICENSE">BSD-3-Clause</a></td></tr>
  </tbody>
</table>
```
