No description
Find a file
Matt Lorentz f4ebc4e99e Video in calls (#135)
#135

This PR adds basic video functionality to our voice rooms. Again I followed the Discord UX for inspiration, so all video calls start as voice-only calls that gracefully upgrade (and downgrade) when someone turns on a video or starts screen sharing.

When a video feed is detected the Room page will change to display a grid of feeds. The grid logic is very basic, that's definitely an area to improve in the future. You can open the chat part of the room with a new button on the VoiceWidget - on the desktop layout this creates a split view with video on the left and chat on the right, but on mobile it switches to chat fullscreen. I also added a little pin icon you can use to focus on a single video feed (useful for screen sharing). There is a lot of tailwind I don't understand here, but it seems to work well enough.

I moved voice.ts into a new `call` folder and moved some of its stores into `call/stores.ts` which allowed me to keep most of the video logic in `call/video.ts`. It's not a perfect encapsulation as voice.ts does subscribe to some of the hooks for the livekit calls and passes some of the signals onto `video.ts`. This could probably be broken up better but for this PR I'd rather not focus on making it perfect if that's ok. Partly for the sake of time but also because I envision another PR that renames/reorganizes things and I think a larger UX evaluation is necessary and should include real user feedback. I'm not confident tha""t the Voice Room concept as a whole will stick going forward. Maybe all rooms in a livekit enabled server should be able to host a call (like a slack huddle), maybe users want to be able to schedule calls as events, or even have them start with an ad-hoc set of participants completely outside of a NIP-29 group, etc.

Co-authored-by: mplorentz <mplorentz@noreply.gitea.coracle.social>
Reviewed-on: https://gitea.coracle.social/coracle/flotilla/pulls/135
Co-authored-by: Matt Lorentz <mplorentz@noreply.coracle.social>
Co-committed-by: Matt Lorentz <mplorentz@noreply.coracle.social>
2026-04-08 17:10:20 +00:00
.gitea/workflows Use explicit image name in workflow file 2026-02-17 11:48:52 -08:00
.husky Get rid of overries, bump welshman to lockstep versioning 2025-05-15 15:52:17 -07:00
android Video in calls (#135) 2026-04-08 17:10:20 +00:00
assets Update app icon 2025-01-17 09:08:55 -08:00
ios Video in calls (#135) 2026-04-08 17:10:20 +00:00
src Video in calls (#135) 2026-04-08 17:10:20 +00:00
src-tauri Bootstrap Tauri desktop shell for evaluation (#66) 2026-03-09 21:12:10 -07:00
static feature/23-voice-room/poc (#93) 2026-03-16 20:38:05 +00:00
.ackrc Support unban/unallow 2026-03-09 21:12:10 -07:00
.dockerignore Fix env conventions again 2026-04-02 14:01:09 -07:00
.env 73-video-thumbnails (#142) 2026-04-08 16:07:11 +00:00
.fdignore Add manual invoice payment 2026-03-09 21:12:10 -07:00
.gitattributes Add indexer, maybe improve safe area support 2025-05-15 10:15:41 -07:00
.gitignore Fix fallback pull race after abort (#167) 2026-04-08 16:43:04 +00:00
.npmrc Initial commit 2024-08-01 16:49:32 -07:00
.nvmrc Update capacitor, get ios running 2025-01-31 13:14:29 -08:00
.prettierignore Initial commit 2024-08-01 16:49:32 -07:00
.prettierrc Moar upgrades 2026-01-23 10:53:50 -08:00
AGENTS.md Migrate Reports dialog to ActionItems dialog, add room join requests to queue 2026-03-19 15:40:34 +00:00
build-in-production.sh Bump welshman 2025-07-09 14:00:42 -07:00
build.sh Fix env conventions again 2026-04-02 14:01:09 -07:00
capacitor.config.ts feature/23-voice-room/poc (#93) 2026-03-16 20:38:05 +00:00
CHANGELOG.md Bump welshman to fix poll behavior 2026-04-02 07:02:57 -07:00
CONTRIBUTING.md Add contributing file 2026-04-02 13:31:37 -07:00
Dockerfile feature/23-voice-room/poc (#93) 2026-03-16 20:38:05 +00:00
eslint.config.js Lint 2024-08-16 11:56:35 -07:00
LICENSE Add license 2024-08-05 14:47:49 -07:00
link_deps Update link_deps 2026-03-09 21:12:10 -07:00
package.json Upgrade daisyui/tailwind 2026-04-07 15:31:35 -07:00
pnpm-lock.yaml Upgrade daisyui/tailwind 2026-04-07 15:31:35 -07:00
postcss.config.js Upgrade daisyui/tailwind 2026-04-07 15:31:35 -07:00
pwa-assets.config.js Fix env conventions again 2026-04-02 14:01:09 -07:00
README.md Fix env conventions again 2026-04-02 14:01:09 -07:00
rust-toolchain.toml Bootstrap Tauri desktop shell for evaluation (#66) 2026-03-09 21:12:10 -07:00
svelte.config.js Moar upgrades 2026-01-23 10:53:50 -08:00
tailwind.config.js Upgrade daisyui/tailwind 2026-04-07 15:31:35 -07:00
tsconfig.json Autoformat 2024-08-05 15:28:46 -07:00
vite.config.ts Fix env conventions again 2026-04-02 14:01:09 -07:00
zapstore.yaml Update zapstore.yaml 2026-03-09 21:12:51 -07:00

Flotilla

A discord-like nostr client based on the idea of "relays as groups".

If you would like to be interoperable with Flotilla, please check out this guide: https://habla.news/u/hodlbod@coracle.social/1741286140797

Environment

You can also optionally create an .env.local file and populate it with the following environment variables (see .env.template for examples):

  • VITE_DEFAULT_PUBKEYS - A comma-separated list of hex pubkeys for bootstrapping web of trust
  • VITE_PLATFORM_URL - The url where the app will be hosted
  • VITE_PLATFORM_NAME - The name of the app
  • VITE_PLATFORM_LOGO - A logo url for the app. Can be a local path or https link. Must be a PNG file.
  • VITE_PLATFORM_RELAYS - A list of comma-separated relay urls that will make flotilla operate in "platform mode". Disables all space browse/add/select functionality and makes the first platform relay the home page.
  • VITE_PLATFORM_ACCENT - A hex color for the app's accent color
  • VITE_PLATFORM_DESCRIPTION - A description of the app

These values won't be used for a built version. Instead, env variables should be provided to build.sh directly or to the built container.

If you're deploying a custom version of flotilla, be sure to remove the plausible.coracle.social script from app.html. This sends analytics to a server hosted by the developer.

Development

See CONTRIBUTING.md.

Deployment

To run your own Flotilla, it's as simple as:

pnpm install
pnpm run build
npx serve -s build

Or, if you prefer to use a container:

podman run -d -p 3000:3000 ghcr.io/coracle-social/flotilla:latest

Alternatively, you can copy the build files into a directory of your choice and serve it yourself:

mkdir ./mount
podman run -v ./mount:/app/mount ghcr.io/coracle-social/flotilla:latest bash -c 'cp -r build/* mount'