Uno stato, non un archivio.
Sostituisce la cronologia infinita e i profili-museo con un'unica frequenza culturale attiva.
Protocollo P2P decentralizzato su rete Zen.
Live demo: https://onepick-gamma.vercel.app
Relay P2P: delay.scobrudot.dev/zen
I social network tradizionali trasformano gli utenti in curatori di archivi passati e alimentano loop dopaminergici infiniti con metriche di vanità. onepick propone l'opposto:
- State over History: Non esiste archivio pubblico. Ogni trasmissione sovrascrive permanentemente quella precedente: chi si sintonizza sul tuo nodo vede e ascolta solo ciò che ti ossessiona ora.
- Attrito Positivo (Positive Friction): Prima di poter trasmettere la tua frequenza devi ascoltare la rete. Lo slot si sblocca solo dopo aver salvato un pick nel tuo Cassetto Privato o inviato un cenno silenzioso.
- Cenno Silenzioso (~): Nessun like pubblico né contatore di vanità visibile agli altri. Un semplice cenno discreto e privato all'autore.
- Cassetto Privato Locale: Il tuo archivio personale resta esclusivamente nel tuo browser (
localStorage), con possibilità di esportazione in formato JSON o Markdown.
- Scala FM a scorrimento interattivo con lancetta rossa e tacche di frequenza.
- Sintonizzazione fine per singoli incrementi o a salto casuale (
[ a caso ⚄ ]). - Generatore di fruscio bianco e disturbi analogici via Web Audio API sintetizzati al cambio stazione.
- Filtro tematico rapido per tag (
#sound,#read,#obscureweb,#art,#code).
Riconoscimento e streaming diretto in-page per:
- YouTube: player integrato senza cookie di tracciamento (
youtube-nocookie.com). - SoundCloud: widget nativo con autoplay e tracciamento audio.
- Bandcamp: player embedded con palette adattiva chiaro/scuro.
- TuneCamp / Subsonic Federation: risoluzione dei metadati decentralizzati e streaming nativo HTML5.
- Internet Archive (
archive.org): player embedded per l'enorme archivio di registrazioni storiche 78rpm, netlabels aperte e trasmissioni audio. - Audius: streaming decentralizzato Web3 via protocollo Audius con player compatto in-page.
- Mixcloud: streaming per DJ mix, sessioni ambient e programmi radiofonici.
- Spotify: widget per brani e playlist.
- Stream diretti MP3 / Audio: riproduzione continua con equalizzatore analogico animato.
Regola Tag
#sound: Se il nodo trasmette con affinità#sound, l'input accetta esclusivamente tracce riproducibili dai provider sopra elencati. Per gli altri tag culturali (#read,#obscureweb,#art,#code) il ricevitore è aperto a qualsiasi URL web valido.
- Centra a pieno schermo unicamente il box sintonizzatore della radio, nascondendo header, sezione trasmettitore e footer.
- Sfondo zen minimalista a trama di punti discreta.
- Controlli di attivazione rapida:
- Pulsante
[ ⛶ canvas ]nell'header e nel sintonizzatore. - Barra flottante fissa
[ ✕ esci dal canvas (Esc) ]. - Scorciatoie da tastiera: Esc per uscire, C per alternare la vista.
- Pulsante
Per garantire che la radio non sia mai silenziosa ("cold start" al lancio), è integrato un motore di seeding con 3 trasmettitori deterministici:
@radio-obscura(FM 105.04 MHz) — Lo-fi ambient tape loops e web sommerso (#obscureweb).@sound-transit(FM 95.17 MHz) — Field recordings, drone e paesaggi sonori (#sound).@ambient-zero(FM 96.88 MHz) — Sintesi modulare e quiete presente (#art).
Il meccanismo opera in due modalità:
- Nel Browser (Serverless Zero-Config):
- All'apertura della pagina, controlla se l'etere è vuoto o se l'ultima stazione ha più di 15 minuti.
- In caso positivo, irradia automaticamente un nuovo brano random dal catalogo curato.
- Un timer a 15 minuti mantiene viva la rotazione durante la sessione (con lock
localStoragecontro duplicati tra tab).
- Script CLI Standalone (
bot.js):- Eseguibile 24/7 su VPS o terminale locale:
npm run bot # Rotazione continua ogni 15 minuti npm run bot:once # Singola trasmissione ed uscita npm run bot:seed # Popola immediatamente tutte e 3 le stazioni
- Eseguibile 24/7 su VPS o terminale locale:
- Silenziamento Locale: nasconde istantaneamente qualsiasi frequenza dal tuo ricevitore personale.
- Community Jamming: segnalazioni crittografiche irradiate sulla rete Zen. Quando i nodi concordano su una segnalazione, l'etere simula un disturbo radio oscurando il contenuto preventivamente.
- Alternanza dinamica della lingua tramite il pulsante
[ EN ]/[ IT ]. - Guida interattiva e tutorial passo-passo in 5 step per i nuovi visitatori.
onepick/
├── index.html # Struttura semantica, modali e controlli radio
├── style.css # Design system terminal-zen, canvas mode e temi light/dark
├── app.js # Core engine, logica di sintesi audio, i18n e routing Zen P2P
├── seeder.js # Modulo autonomo di seeding e catalogo tracce (YouTube, SC, BC)
├── bot.js # CLI daemon headless per rotazione continua 15 min
├── zen.min.js # Runtime client decentralizzato Zen / GunDB P2P
├── crypto.wasm # Primitiva crittografica ad alte prestazioni
├── pen.wasm # Firma e verifica crittografica WASM
└── package.json # Script npm per bot e testing
Le chiavi crittografiche delle stazioni sono derivate direttamente nel client tramite Web Cryptography API:
- Algoritmo: PBKDF2 SHA-256 con 100.000 iterazioni.
- Salt univoco:
onepick:zen:station:<username>. - Nessuna credenziale o password inviata a server esterni: l'identità appartiene solo all'utente.
Non sono richieste dipendenze pesanti o bundler. Qualsiasi server HTTP statico è sufficiente:
# Avvio rapido con Python
python -m http.server 3000
# Oppure con Node
npx serve .Apri http://localhost:3000 nel browser.
Per avviare il bot di autopopolamento in locale:
npm run botUn progetto creato da scobru
Sito web: https://scobrudot.dev
Repository: https://github.com/scobru/onepick
Rilasciato sotto licenza MIT.