- Kotlin 72%
- TypeScript 17.3%
- CSS 3.6%
- JavaScript 3.2%
- Shell 2.1%
- Other 1.7%
|
|
||
|---|---|---|
| .github/workflows | ||
| app | ||
| data | ||
| deploy | ||
| docs | ||
| domain | ||
| e2e | ||
| gradle | ||
| graphics | ||
| kotlin-js-store | ||
| scripts | ||
| server | ||
| sync | ||
| ui | ||
| xmpp | ||
| .gitignore | ||
| build.gradle.kts | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| README.md | ||
| settings.gradle.kts | ||
Parlo
Client di messaggistica mobile-first, PWA installabile, che parla XMPP. Kotlin/JS. Codename del repo: WHAZZUP. Chi riprende il lavoro (persona o Claude) parte da CLAUDE.md: regole concordate, comandi, mappa del codice; gli errori gia' fatti sono in docs/TRAPPOLE.md. Decisioni in docs/DECISIONS.md, piano in docs/PLAN.md, stato in docs/PROGRESS.md, manutenzione e rilasci in docs/MANUTENZIONE.md, messa in produzione dietro Nginx Proxy Manager in docs/PRODUZIONE.md, grafica in docs/FIDELITY.md.
Requisiti
- JDK 21 (
source scripts/env.shusa quello in~/.local/jdk) - Node 18+ (per i test e2e; la build Kotlin scarica il proprio Node)
- Docker (server XMPP di sviluppo:
server/dev-up.sh, vedidocs/SERVER.md)
Comandi
source scripts/env.sh
./gradlew :domain:jvmTest :domain:jsNodeTest :data:jvmTest :data:jsNodeTest :sync:jvmTest :sync:jsNodeTest :xmpp:jsNodeTest # test della logica
./gradlew :app:jsBrowserDistribution # build di produzione in app/build/dist/js/productionExecutable
./gradlew :app:jsBrowserDevelopmentRun # dev server con hot reload
cd e2e && npm install
PARLO_CHROMIUM=/percorso/chrome npx playwright test # PARLO_CHROMIUM e' opzionale
server/dev-up.sh # server XMPP di sviluppo (docs/SERVER.md)
server/invite.sh # invito per registrare un account nuovo (link per l'app)
# nell'app: "Accedi" con alice@parlo.local / parlo-test-alice (scorciatoia, solo da localhost: /?xmpp=<jid>,<password>,<url ws>)
I test dei progetti Playwright xmpp (xmpp.spec.ts, xmpp-live.spec.ts) e xmpp-restart (riavvia il server, parte dopo xmpp; da solo con --no-deps) usano il server di sviluppo e si saltano se non risponde; per ripeterli: npx playwright test --project=xmpp --workers=1.
Il test di interoperabilita' di OMEMO usa un client indipendente in Python: e2e/tools/omemo-oracle/setup.sh lo prepara (una volta, serve la rete); senza, il test si salta. Lo stesso ambiente serve ai test sulle foto profilo (avatar.py). Le chiamate si provano con camera e microfono finti di Chromium e con il TURN di sviluppo (parlo-turn, parte con server/dev-up.sh).
Struttura
| Modulo | Contenuto |
|---|---|
domain |
modelli, stati dei messaggi, interfacce (Kotlin common) |
data |
repository: in memoria e IndexedDB |
sync |
coda di invio, retry, riconciliazione (Kotlin common) |
xmpp |
trasporto XMPP (libreria stanza) |
ui |
componenti DOM e skin |
app |
entry point, PWA, service worker |
e2e |
test Playwright, regressione visiva |
server |
Prosody e infrastruttura locale (sviluppo) |
deploy |
produzione: Prosody, sito e push in Docker dietro NPM, script di gestione (docs/PRODUZIONE.md) |
Versioni
Semver in gradle.properties. Ogni build stampa versione e id di build nel service worker: un sw.js diverso fa comparire il banner "Aggiorna" agli utenti con la versione precedente.