zKal - de-Googled community & group calendars Meta-award User Experience


The issue it addresses is our reliance on centralised systems, particularly Google Calendar, even among those who advocate for decentralisation. It’s tough to break free from Google Calendar because of its ingrained network effects and the varying technical abilities within groups.

We often face problems like confusion over meeting links—one person might be in Jitsi while another is in a Google Meet link that was automatically added. In larger groups, especially with over 400 or 500 invites, Google Calendar struggles and centralisation issues become apparent. Sharing data with Google allows them to create detailed shadow profiles, and the political centralisation of SaaS tools can create opacity between teammates. For instance, in an organisation like Berlin, different teams may miss each other’s meetings due to separate calendar feeds. This lack of transparency can be problematic during critical moments when reaching out to the community is essential.

ZKAL offers a solution by providing a self-hosted calendar feed with a web-based widget that integrates multiple .ICS feeds. This allows for a gradual transition away from Google Calendar. Users access it through Semaphore, maintaining anonymity while proving group membership. They can RSVP publicly within the Semaphore group, which is useful for organisational transparency. Additionally, users can add events anonymously while still providing their email addresses for follow-up.

ZKAL supports multiple ICS feeds, decentralising calendar administration so different rooms or groups can operate on various systems without needing an all-or-nothing switch from Google Calendar. This approach respects the busyness of our lives and the challenges of change.


As a developer returning after 10-15 years away, I’ve faced challenges adapting to new development patterns. I chose Svelte for its simplicity and small components but found most Web 3 APIs and SDKs are geared towards React. I encountered issues with ESM versus CJS while using Vite with Svelte and had to dig deep into libraries like Zupas and Semaphore to resolve these.

During this hackathon, I also managed night shifts at SDP’s help desk and assisted with setup tasks. Despite previous hackathons where I couldn’t submit my projects due to various frustrations, I was determined to submit this time despite the stress.


The technology used includes Svelte for its straightforward components and node adapter for easy deployment on Docker containers. It also uses Semaphore libraries and is configured through .env files.