Rounds out the phoenix rebrand for assets the earlier logo.svg swap missed: - public/icon-192.png / icon-512.png (PWA install icons, referenced by manifest.webmanifest) still had the old bolt-on-circle mark. - Android's push-notification status-bar icon (ic_stat_ditto, all densities) was carrying an even older mark — a ringed-planet icon from 'Ditto', the project two forks back. Regenerated as a white phoenix silhouette (status-bar icons must be flat white on transparent; the OS tints them). - android/.../splash_icon_vector.xml, the actual live Android 12+ splash icon (wired via styles.xml's windowSplashScreenAnimatedIcon), had the old double-bolt path hardcoded. Replaced with the phoenix path and recomputed the scale/center math for its 1446x1246 viewBox. - ios/.../Splash.imageset (wired into LaunchScreen.storyboard) had an even older blue crossed-arrow mark predating Agora. Regenerated as the brand-orange phoenix on white, matching the existing small centered-mark proportions. Also deleted the legacy per-density drawable*/splash.png and drawable/splash_icon.png rasters: confirmed unreferenced by any theme, manifest, or code (the app fully migrated to the Android 12 SplashScreen API / splash_icon_vector.xml), so they were dead weight carrying outdated branding no user could ever see. generate-icons.sh now produces all of the above so future logo changes regenerate everything in one pass instead of missing assets again. Note: unlike the web assets, the Android/iOS changes here only take effect on the next native app build + store release — there's no web deploy step for them. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Eranos
Power to the people.
Eranos is a Nostr client focused on community ownership, expressive identity, and censorship resistance. This repository is the Eranos-branded app, a Grin-only fork of Agora (itself built from the Ditto codebase). All Bitcoin and Lightning payment rails have been removed; Grin payments land in a later phase.
eranos.fund | Upstream: Agora
What This Repo Is
- Eranos product identity (name, theme, assets, native IDs)
- Ditto-derived implementation with broad Nostr feature coverage
- Configurable deployment defaults via
eranos.json
Features
- Community-first social client: notes, articles, comments, reposts, reactions, and rich event rendering
- Theming system: built-in presets + custom color/font/background themes that can be shared as events
- Private messaging: NIP-04 and NIP-17 direct messages
- Mobile app shell: Capacitor-powered Android/iOS wrappers
- Self-hostable: static web build + configurable relay and upload infrastructure
Getting Started
Prerequisites
- Node.js 22+
- npm 10.9.4+
Development
git clone <this-repo>
cd eranos
npm install
npm run dev
Development server: http://localhost:8080
Docker Getting Started
Use Docker Compose when you want the nginx reverse-proxy stack (necessary if you want decryptable media in messages - kind 15s of NIP 17):
git clone <this-repo>
cd eranos
cp .env.example .env
docker compose up --build
Proxy URL: http://localhost:8083
This starts:
viteservice on the internal Docker network (vite:8080)webservice (nginx) on host port8082, proxying to Vite with websocket support
Stop stack:
docker compose down
Production-style container build:
docker compose -f docker-compose.prod.yml up --build
Build
npm run build
Build output: dist/
Validate
npm test
This runs type-checking, linting, unit tests, and production build checks.
Configuration
Build-time config is read from eranos.json (gitignored by default so each deployment can provide its own values).
{
"theme": "dark",
"relayMetadata": {
"relays": [
{ "url": "wss://relay.ditto.pub", "read": true, "write": true },
{ "url": "wss://relay.primal.net", "read": true, "write": true },
{ "url": "wss://relay.damus.io", "read": true, "write": true }
]
},
"blossomServers": [
"https://blossom.ditto.pub",
"https://blossom.primal.net/"
]
}
Configuration priority (highest first):
- User settings (local storage)
- Build config (
eranos.json) - Hardcoded app defaults
Use a custom config path:
CONFIG_FILE=./my-config.json npm run build
Deployment
Eranos builds to static files and can be deployed to any static host.
- GitLab/GitHub Pages
- Netlify/Vercel
- VPS or any web server with SPA routing fallback
For Android:
npm run build
npx cap sync
npx cap open android
Tech Stack
| Layer | Technology |
|---|---|
| Framework | React 18 |
| Build | Vite |
| Language | TypeScript |
| Styling | TailwindCSS 3 + shadcn/ui |
| Routing | React Router |
| Data | TanStack Query |
| Nostr | Nostrify + nostr-tools |
| Mobile | Capacitor |
| Testing | Vitest + React Testing Library |
Contributing
Read CONTRIBUTING.md before opening a merge request.
License
🤖 Built with AI pair-programming assistance (Claude)