{"title": "web3radio", "logoImg": "bafkreifuvsvfoslpl3d4gx5lt6nzdatntykkd4eh5dgjzw5ncry4cdkqua", "website": "https://web3radio.it", "bannerImg": "bafkreifhfb3irqp7pe2tyut6iphecpfxq2pxuzmxjbdomfrrw2u2yopheq", "createdAt": 1722439812334, "userGithub": "matlemad", "credentials": {"github": {"type": ["VerifiableCredential"], "proof": {"type": "EthereumEip712Signature2021", "created": "2025-03-19T14:30:29.496Z", "@context": "https://w3id.org/security/suites/eip712sig-2021/v1", "proofValue": "0x732f55885723463fcd665eaf1081bb86e1ff072df8f8c931b5ff087d7b48c978446796f6ca03386648add1f6660589a26d5fb17e1535375fb3e444463db2ec961c", "eip712Domain": {"types": {"Proof": [{"name": "@context", "type": "string"}, {"name": "created", "type": "string"}, {"name": "proofPurpose", "type": "string"}, {"name": "type", "type": "string"}, {"name": "verificationMethod", "type": "string"}], "@context": [{"name": "nullifiers", "type": "NullifiersContext"}, {"name": "provider", "type": "string"}], "Document": [{"name": "@context", "type": "string[]"}, {"name": "credentialSubject", "type": "CredentialSubject"}, {"name": "expirationDate", "type": "string"}, {"name": "issuanceDate", "type": "string"}, {"name": "issuer", "type": "string"}, {"name": "proof", "type": "Proof"}, {"name": "type", "type": "string[]"}], "EIP712Domain": [{"name": "name", "type": "string"}], "CredentialSubject": [{"name": "@context", "type": "@context"}, {"name": "nullifiers", "type": "string[]"}, {"name": "id", "type": "string"}, {"name": "provider", "type": "string"}], "NullifiersContext": [{"name": "@container", "type": "string"}, {"name": "@type", "type": "string"}]}, "domain": {"name": "VerifiableCredential"}, "primaryType": "Document"}, "proofPurpose": "assertionMethod", "verificationMethod": "did:ethr:0xd6f8d6ca86aa01e551a311d670a0d1bd8577e5fb#controller"}, "issuer": "did:ethr:0xd6f8d6ca86aa01e551a311d670a0d1bd8577e5fb", "@context": ["https://www.w3.org/2018/credentials/v1", "https://w3id.org/vc/status-list/2021/v1"], "issuanceDate": "2025-03-19T14:30:29.496Z", "expirationDate": "2025-06-17T14:30:29.496Z", "credentialSubject": {"id": "did:pkh:eip155:1:0xC3F6e18b429b6BAf1bD31B1E504aee7827C7AAb5", "@context": {"provider": "https://schema.org/Text", "nullifiers": {"@type": "https://schema.org/Text", "@container": "@list"}}, "provider": "ClearTextGithubOrg#spaghettETH#35381854", "nullifiers": ["v0.0.0:+t2vChJBQjXT41j/GYMkrxi9mYJPbxFHgTKAtFcL5W0="]}}, "twitter": {"type": ["VerifiableCredential"], "proof": {"jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..a12VJj0KfUQxmAZ0a2YVUKBimbEHJUXxWsasPS8LrtOO4CEmhFS0-3TMn_I4Nl-hMwJ6uwBVxrByuvx_kwKICg", "type": "Ed25519Signature2018", "created": "2024-07-31T15:29:28.596Z", "proofPurpose": "assertionMethod", "verificationMethod": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC#z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC"}, "issuer": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC", "@context": ["https://www.w3.org/2018/credentials/v1"], "issuanceDate": "2024-07-31T15:29:28.596Z", "expirationDate": "2024-10-29T15:29:28.596Z", "credentialSubject": {"id": "did:pkh:eip155:1:0xC3F6e18b429b6BAf1bD31B1E504aee7827C7AAb5", "hash": "v0.0.0:SfqFoxUnLIOfPtezzHtFapYk5VgeUBOKGKtNuQdzlZ8=", "@context": [{"hash": "https://schema.org/Text", "provider": "https://schema.org/Text"}], "provider": "ClearTextTwitter#SpaghettEth"}}}, "description": "Introducing Web3radio.it by SpaghettETH\nV1 Main features\n\nSpaghettETH and YOMI are leveraging decentralized technology to reinvent community radio. Here’s some specifics of our V1 release:\n\n- Token Gated: only SpaghettETH Passport SBT holders can access the radio and its features. This is our iteration, think about other possibilities, like an Ethereum Radio for everyone owning more than 1 wei.\n\n- Login Agnostic: log in via your browser wallet or create a smart account via web2 login (Google, Apple) using Mego.tickets stack.\n\n- Dynamic Player: the Web3radio player always checks for any current livestream first, then switches to a community playlist if there is none.\n\n- Community Playlist: SBT holders can upload their own audio content (songs, interviews, podcasts) to a playlist smart contract using their preferred storage solution, such as IPFS, Swarm, Pinata URIs, Google Drive, or Dropbox — web3radio.it does not store any files. \n\n- Listeners can save currently playing audio to their favorites, contributing to a “most liked” leaderboard. Future improvements to the playlist ordering mechanism will incorporate this data for enhanced curation.\n\n- Live Schedule: SBT holders can schedule their own livestreams in advance using a calendar widget, booking 30-minute slots, with up to 10 slots per booking. Each SBT holder is limited to two bookings every 24 hours. Our player supports HLS streams (.m3u, .m3u8), YouTube, Twitch, Livepeer, and traditional servers, ensuring broad compatibility for broadcasters.\n\n\nCons\n\n- Centralized Frontend: at SpaghettETH, we fully appreciate the challenges of building decentralized frontends and fully on-chain applications. However, our mission within the Italian ecosystem has always been to educate and onboard users from traditional Web2 social media, while also iterating on our proof-of-concepts in real-time. For this reason, we have temporarily opted for a centralized frontend hosted on Digital Ocean, allowing us to refine the experience before transitioning to a fully decentralized solution.\n\n- Centralized link managing backend: not everyone is familiar with livestreaming or decentralized storage. Many users are unaware of Livepeer, Swarm, IPFS, and similar technologies. To bridge this gap, we have implemented a lightweight backend that can serve livestreams and storage links from more common platforms alongside decentralized ones, making the experience more accessible for all users.\n\n- SBT-contract ownership: we deeply value free speech, but we also prioritize healthy community interactions. Additionally, the European Digital Services Act (DSA) requires us to monitor and mitigate dangerous practices and hate speech on our webradio. To uphold these standards, our Passport SBT contract includes a mechanism that allows us to burn a user’s SBT, effectively revoking their access to the platform if they violate community guidelines.\n\n- Proxy contract: managing EOA wallets and traditional Web2 logins simultaneously is no small challenge. Balancing adoption and simplicity — not to mention covering transaction fees — often comes at the expense of ideological purity. To streamline the user experience while maintaining accessibility, most contract-writing calls are handled by a proxy relay operated by MEGO.\n\nAll these compromises are made purely for user-friendliness, because at SpaghettETH, we believe in baby steps when onboarding people into Web3. If you prefer a fully decentralized, Web2-free version, feel free to fork our project and build your own — we’d love to see it! Just don’t troll us on X for not being decentralization maximalists — we’re here to make things work for real people, not just for the purists.\nV2 Features (Coming Soon)\n\nWhat’s next for Unstoppable Radio? We’re working on exciting upgrades to make the experience even more community-driven, fair, and optimized.\n\n- Decentralized Advertising: Every live show will be able to sell advertising space during their broadcast via a dedicated smart contract. The price for each ad slot will be voted on by the community and calculated based on the average demand. This ensures fair pricing while keeping sponsorships transparent and community-approved.\n\n- Playlist Randomness Optimization: Random playback isn’t always fair — it’s just blind. We aim to replace the current system with a more intelligent algorithm that factors in: 1) The number of saves per song (while preventing a single track from dominating) ii) Genre diversity, so all styles get airtime iii) Submission date, ensuring newer tracks also get their moment", "logoImgData": {}, "bannerImgData": {}, "projectGithub": "spaghettETH", "projectTwitter": "spaghetteth"}