transient.chat/README.md

111 lines
3.2 KiB
Markdown
Raw Permalink Normal View History

2026-05-12 23:50:49 +00:00
# Transient Chat
> Everything is ephemeral.
**Transient.chat** is a lightweight, in-memory chat platform designed for real-time, impermanent conversation.
There are no profiles. No feeds. No likes.
Just temporary rooms, simple handles, message expiration, and live synced watchrooms.
---
## About
- All messages automatically disappear after **1 hour**
- Empty rooms are purged — nothing is saved
- Users are identified by transient handles, released when inactive
- No databases, no disk writes, no persistence of any kind
- **Watchrooms** allow embedded synced YouTube viewing and conversation
- Works without WebSockets using traditional HTTP polling
This project is a throwback to early internet chatrooms — lightweight, anonymous, and inherently temporary.
Perfect for those who miss casual chat with no expectations or archives.
---
## Features
- Regional and topical chatroom lists
- Synchronized YouTube playback in "watchparty" mode
- Ephemeral message and session design
- Audio indicators and user join/leave sounds
- Owner moderation (kick users from rooms)
- Admin panel for IP/username bans
- Admin routes protected by environment-based Basic Auth
- No database dependency (runs entirely in volatile memory)
---
## Deployment
This app is intended to be deployed on **[DigitalOcean App Platform](https://www.digitalocean.com/products/app-platform/)**
as a Python Flask application.
You should:
- Point DigitalOcean to this repo
- Specify Python as the runtime
- Set environment variables for your admin login:
```env
ADMIN_USERNAME=your_admin_name
ADMIN_PASSWORD=your_secure_password
```
---
## Project Structure
```
transient.chat/
├── app.py # Flask app factory and launcher
├── config.py # Loads environment variables
├── models/
│ ├── state.py # In-memory shared state
│ └── cleanup.py # Background cleanup thread
├── blueprints/ # Modular route definitions
│ ├── auth.py
│ ├── chat.py
│ ├── rooms.py
│ ├── admin.py
│ ├── watchparty.py
│ └── static_routes.py
├── static/
│ ├── index.html
│ ├── chat.html
│ ├── watchparty_chat.html
│ ├── server_list.html
│ ├── faq.html
│ ├── admin.html
│ └── assets/ # Frontend resources
│ ├── css/ # Stylesheets
│ │ └── styles.css
│ ├── js/ # JavaScript files
│ │ ├── admin.js
│ │ ├── chat.js
│ │ ├── faq.js
│ │ ├── index.js
│ │ ├── server_list.js
│ │ └── watchparty_chat.js
│ ├── sounds/ # .wav audio clips
│ │ ├── user-in.wav
│ │ ├── user-out.wav
│ │ └── message.wav
│ └── favicon.ico
└── requirements.txt # Python dependencies
```
---
## Contributing
Pull requests and issues are welcome.
If you'd like to add features, improve styling, or help build out exportable modules, feel free to fork and contribute to the project.
---
Nothing is archived.
Nothing is retained.
**Everything is ephemeral.**