Complete rewrite of the tile grid sizing algorithm addressing all review feedback from @matt across both reviews. Review #1 (Jitsi-style approach): - Tiles flex between 3:4 (portrait) and arbitrarily wide (no upper clamp on aspect ratio) to avoid overflow. - Mixed row sizes: when the last row is partial, those tiles are wider (16:9 'match heights') while full rows use square-ish tiles, creating a cohesive Jitsi-style look. - Example: 3 participants = 2 square-ish tiles on top + 1 centered 16:9 tile on bottom. Review #2 (n=2 half-off-screen bug + minimum size policy): - FIX: No upper-bound clamping on aspect ratio - tiles can be wider than 16:9 when the container is very wide. At n=2 on a wide desktop, tiles are 16:9 (889x500) with side whitespace instead of overflowing. - MIN_TILE_HEIGHT=120: only allows overflow (scroll) when all tiles fall below this threshold. At n=2 tiles are always fully visible. - For n=6-12 on a portrait phone, tiles shrink to fit within aspect bounds with no scroll. Inline code review feedback: - Full words everywhere: containerWidth, columnCount, tileWidth, tileHeight, aspectRatio, etc. - No 'key' naming: replaced with LayoutScore struct with named fields - Type renamed from UniformTileGrid to AdaptiveTileGrid + TileRow - No 'compareKeys' - replaced with compareScores on named fields Scoring: overflow penalty -> min-height penalty -> tile area -> whitespace -> aspect deviation. |
||
|---|---|---|
| .agents/skills | ||
| .gitea/workflows | ||
| .husky | ||
| android | ||
| assets | ||
| e2e | ||
| ios | ||
| scripts | ||
| src | ||
| static | ||
| .ackrc | ||
| .dockerignore | ||
| .env | ||
| .fdignore | ||
| .gitattributes | ||
| .gitignore | ||
| .npmrc | ||
| .nvmrc | ||
| .prettierignore | ||
| .prettierrc | ||
| AGENTS.md | ||
| build-in-production.sh | ||
| build.sh | ||
| capacitor.config.ts | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| Dockerfile | ||
| eslint.config.js | ||
| LICENSE | ||
| link_deps | ||
| package.json | ||
| playwright.config.ts | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| postcss.config.js | ||
| pwa-assets.config.js | ||
| README.md | ||
| server.js | ||
| skills-lock.json | ||
| svelte.config.js | ||
| tailwind.config.js | ||
| tsconfig.json | ||
| vite.config.server.ts | ||
| vite.config.ts | ||
| zapstore.yaml | ||
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):
Platform branding
VITE_PLATFORM_URL- The url where the app will be hostedVITE_PLATFORM_NAME- The name of the appVITE_PLATFORM_LOGO- A logo url for the app. Can be a local path or https link. Must be a PNG file.VITE_PLATFORM_ACCENT- A hex color for the app's accent color (used only for generated manifest, for more control create a custom theme file)VITE_PLATFORM_DESCRIPTION- A description of the appVITE_PLATFORM_TERMS- URL to your terms of service pageVITE_PLATFORM_PRIVACY- URL to your privacy policy page
Platform mode
VITE_PLATFORM_RELAYS- A comma-separated list of 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.
Defaults
VITE_DEFAULT_PUBKEYS- A comma-separated list of hex pubkeys for bootstrapping web of trustVITE_DEFAULT_SPACES- A comma-separated list of relay urls that new users will be automatically joined to on signup. Each one may optionally include an invite code, delimited by|, e.g.my.space.com|CODE.VITE_DEFAULT_RELAYS- A comma-separated list of relay urls used as default outbox/inbox relaysVITE_DEFAULT_MESSAGING_RELAYS- A comma-separated list of relay urls used for encrypted direct messagesVITE_DEFAULT_BLOSSOM_SERVERS- A comma-separated list of blossom server urls used for file uploads
Infrastructure
VITE_INDEXER_RELAYS- A comma-separated list of relay urls used for user profile/key lookupVITE_SIGNER_RELAYS- A comma-separated list of relay urls used for NIP-55 remote signersVITE_BLOCKED_RELAYS- A comma-separated list of relay urls that will be blockedVITE_PUSH_SERVER- URL of the push notification serverVITE_PUSH_BRIDGE- WebSocket URL of the push notification relay bridgeVITE_POMADE_SIGNERS- A comma-separated list of Pomade signer server URLs (3+ required to enable email signup)VITE_THUMBNAIL_URL- URL of the image thumbnail service
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
pnpm run start
Or, if you prefer to use a container:
docker run -d -p 3000:3000 gitea.coracle.social/coracle/flotilla:latest
Alternatively, you can copy the build files into a directory of your choice and serve it yourself:
mkdir ./mount
docker run -v ./mount:/app/mount gitea.coracle.social/coracle/flotilla:latest bash -c 'cp -r build/* mount'