Rename project from KeepItTalking to DS Chat

Renames the app's display name everywhere (page titles, PWA manifest,
TopBar, email subject lines, HMAC signature header) and its internal
technical slug from chatapp to ds-chat/ds_chat: the Python package name
and console script, the systemd unit and its user/group/paths, the deploy
scripts, the Docker container names, and the Postgres database name.

The live dev Postgres role stays "chatapp" -- renaming a role requires
disconnecting the session using it, which needed a temporary superuser
role Claude's auto-mode classifier correctly declined to create
unsupervised. Functionally invisible (it's just a login credential), but
worth knowing about if this ever needs fully cleaning up by hand.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-15 21:11:41 -06:00
co-authored by Claude Sonnet 5
parent 62e4760c8a
commit 14dc340174
29 changed files with 145 additions and 145 deletions
@@ -1,8 +1,8 @@
# /etc/systemd/system/chatapp.service
# /etc/systemd/system/ds-chat.service
#
# Install: sudo cp deploy/systemd/chatapp.service /etc/systemd/system/
# Install: sudo cp deploy/systemd/ds-chat.service /etc/systemd/system/
# sudo systemctl daemon-reload
# sudo systemctl enable --now chatapp
# sudo systemctl enable --now ds-chat
#
# See ../../DEPLOYMENT.md for the full app-server setup this fits into.
# TLS termination and public-facing reverse proxying are handled by an
@@ -10,17 +10,17 @@
# unit just needs to be reachable on the TCP port below.
[Unit]
Description=KeepItTalking chat service app server
Description=DS Chat app server
After=network.target
[Service]
# No Type= override -- defaults to "simple", which is correct here since
# gunicorn runs in the foreground (no --daemon flag below) and doesn't send
# systemd's sd_notify readiness protocol.
User=chatapp
Group=chatapp
WorkingDirectory=/srv/chatapp/backend
EnvironmentFile=/etc/chatapp/env
User=ds-chat
Group=ds-chat
WorkingDirectory=/srv/ds-chat/backend
EnvironmentFile=/etc/ds-chat/env
Environment=PYTHONUNBUFFERED=1
# 0.0.0.0 because Nginx Proxy Manager runs on a separate host -- the actual
@@ -28,7 +28,7 @@ Environment=PYTHONUNBUFFERED=1
# port to NPM's IP specifically, not the bind address. If NPM reaches this
# box over a private network interface, bind to that private IP instead
# for defense in depth (belt-and-suspenders on top of the firewall rule).
ExecStart=/srv/chatapp/backend/.venv/bin/gunicorn app.main:app \
ExecStart=/srv/ds-chat/backend/.venv/bin/gunicorn app.main:app \
-k uvicorn.workers.UvicornWorker \
--workers 4 \
--bind 0.0.0.0:8000 \