Self-hosted live translation and event audio management.
ablaut-App as a receiver on Android phones.
iOS app to be released soon.
ablaut [ˈap.laʊt] uses the [aʊ] mark for the logo - in linguistics, ablaut is a systematic variation of vowels within the same root or affix to indicate changes in grammatical function or meaning, particularly in Indo-European languages.
This project's goal to provide sub-second live translation or an assisted-listening solution for events, HOW, on-campus or out-of-campus non-profit organizations. The "ablaut" is connected in meaning to the core of the project on the linguistic side of things, as this project sprung from a need to cover the misunderstanding based of the variations in the Indo-European languages, but, of course, not only of the vowels.
The back-end and the front-end: a Payload CMS 3 + Next.js app that creates events, channels, listener links, speaker links, QR codes. All this on top of LiveKit audio rooms. It is built to deploy as one Docker Compose stack with PostgreSQL and LiveKit included.
Built with Cursor-assisted development.
ablaut is intended to provide accessible live translation and event-audio tools for charity organizations, churches, community groups, and low-income associations.
The project is not intended to be commercially exploited in ways that take advantage of those communities. Commercial use is discouraged unless it directly supports this mission, contributes improvements back, or is arranged with the project maintainer.
- Create organisations, events and language/audio channels.
- Generate listener and speaker links with QR codes.
- Let speakers publish microphone audio through LiveKit.
- Let listeners connect from browser or mobile app.
- Manage users with
super_admin,admin, andmoderatorroles. - Run locally, on LAN, or in cloud from the same Compose stack.
- Next.js 15
- Payload CMS 3
- TypeScript
- PostgreSQL
- LiveKit
- Docker Compose
- Tailwind CSS
Start here for a server install:
PORTAINER_EASY_STACK_DEPLOYMENT.md
It includes the copy-paste stack flow, environment variables, proxy setup, and required ports. For the shortest path, paste PORTAINER_STACK_COPY_PASTE.yml into a Portainer stack and replace the CHANGE_ME values.
cp .env.example .env
docker compose up -d --buildOpen:
http://localhost:3000
For LAN phone testing, open the app from your computer's LAN address instead:
http://192.168.x.x:3000
QR codes use the host you opened the app with, so LAN URLs work on phones and cloud URLs work in production.
Android APK downloads are published through the ablaut-App GitHub Releases page:
app: Next.js + Payloaddb: PostgreSQLlivekit: self-hosted LiveKit WebRTC servermaildev: optional local email catcher
Persistent volumes:
ablaut_dbablaut_uploads
Do not delete these volumes during redeploys unless you intend to wipe data.
docs/ARCHITECTURE.mddocs/API.mddocs/ROUTES.mddocs/LIVEKIT.mddocs/DEPLOYMENT.mddocs/PORTAINER.mdPORTAINER_EASY_STACK_DEPLOYMENT.mdPORTAINER_STACK_COPY_PASTE.ymlPORTAINER_STACK_PINNED.ymldocs/SECURITY.mddocs/MIGRATION.mddocs/ANDROID_COMPATIBILITY.mddocs/TESTING.md
- Change every secret in
.env. - Use HTTPS in production.
- Point
PUBLIC_BASE_URLandNEXT_PUBLIC_APP_URLto the public app URL. - Point
LIVEKIT_URLto the browser-reachable LiveKit WebSocket URL. - Proxy
ablaut.example.comto app port3000. - Proxy
livekit.example.comto LiveKit port7880with WebSocket support. - Forward LiveKit RTC ports
7881/tcpand50000-50100/udp. - Back up
ablaut_dbandablaut_uploads.
GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).
See LICENSE.