A decentralized calendar application built on the Internet Computer Protocol (ICP) that provides users with secure, private, and interoperable event management capabilities.
- π What is OpenCalendar?
- π₯ Demo Video
- π Why ICP for Calendar Applications?
- π Features
- π οΈ Technology Stack
- ποΈ Architecture Overview
- π Getting Started
- π Usage
- π§ Development
- π Deployment
- π€ Contributing
- π License
- π Resources
- π Support
OpenCalendar is a modern, full-featured calendar application that leverages the power of the Internet Computer blockchain to offer:
- Decentralized Storage: Your calendar data is stored on the Internet Computer, ensuring high availability and resistance to censorship
- Privacy-First: No centralized servers collecting your personal data - you own and control your calendar information
- Internet Identity Integration: Secure authentication using ICP's Internet Identity system
- Cross-Platform Access: Access your calendar from any device with a web browser
- Real-Time Synchronization: Changes are instantly reflected across all your devices
- Offline Resilience: Built-in caching ensures the app works even with poor connectivity
π¬ See OpenCalendar in Action!
Watch our comprehensive demo showcasing the current working version of OpenCalendar, including:
- Event creation and editing with unified UI/UX
- Separate date and time inputs for precise scheduling
- 9-color event categorization system
- Responsive design across different views (Month, Day, Year)
- Internet Identity authentication
- Real-time event management
The demo showcases the latest features including the modern, card-based event modals with consistent light theme UI/UX.
The Internet Computer Protocol provides unique advantages for calendar applications:
- Your calendar data is stored in canisters you control
- No risk of service shutdown or data loss from centralized providers
- Full data portability and export capabilities
- No third-party tracking or advertising
- End-to-end encryption for sensitive calendar data
- Compliance with privacy regulations by design
- Minimal hosting costs through ICP's reverse gas model
- No monthly subscription fees for users
- Sustainable economics for developers
- Standard calendar formats (iCal, CalDAV) for easy integration
- API access for third-party applications
- Cross-platform compatibility
- Distributed infrastructure with 99.9% uptime
- Automatic backups and disaster recovery
- No single points of failure
- π Multiple Calendar Views: Month, day, and year views with smooth navigation
- π Event Management: Create, edit, and delete events with rich metadata
- π Notifications: Built-in notification system for upcoming events
- π¨ Customizable UI: Dark/light themes and personalized settings
- π± Responsive Design: Works seamlessly on desktop and mobile devices
- π Secure Authentication: Internet Identity integration for passwordless login
- β‘ Fast Performance: Optimized for quick loading and smooth interactions
- πΎ Offline Support: Local caching for use without internet connection
- Framework: SvelteKit 2.0 with TypeScript
- Styling: Tailwind CSS for responsive design
- UI Components: Lucide icons and custom Svelte components
- Build Tool: Vite for fast development and optimized builds
- State Management: Svelte stores with persistent localStorage
- Runtime: Internet Computer canisters
- Language: Motoko for smart contract development
- Architecture: Microservices with specialized canisters:
calendar_canister_1: Event and calendar managementuser_registry: User profile and authenticationscheduling_canister: Event scheduling and conflictsnotification_canister: Event notifications and reminders
- Storage: Stable memory for data persistence
- Authentication: Internet Identity integration
OpenCalendar follows a microservices architecture with clear separation of concerns:
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Frontend β β User Registry β β Calendar β
β (SvelteKit) βββββΊβ Canister βββββΊβ Canister β
β β β β β β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β β β
β βββββββββββββββββββ βββββββββββββββββββ
βββββββββββββββΊβ Scheduling β β Notification β
β Canister βββββΊβ Canister β
β β β β
βββββββββββββββββββ βββββββββββββββββββ
- User Registry: Manages user profiles, authentication, and calendar ownership
- Calendar Canister: Handles event CRUD operations, calendar management, and data queries
- Scheduling Canister: Manages event scheduling, conflict detection, and availability
- Notification Canister: Handles event reminders and notification delivery
- Frontend: Serves the web application and manages user interactions
- Node.js 16.0.0 or higher
- npm 7.0.0 or higher
- DFX (Internet Computer SDK) 0.27.0 or higher
-
Clone the repository
git clone https://github.com/yourusername/icp-calendar.git cd icp-calendar -
Install dependencies
npm install
-
Start the local ICP replica
dfx start --background
-
Deploy the canisters
dfx deploy
-
Start the frontend development server
npm start
-
Open your browser Navigate to
http://localhost:8080to access the application
The application uses several configuration files:
dfx.json: ICP canister configurationsrc/frontend/vite.config.ts: Frontend build configurationsrc/frontend/tailwind.config.cjs: Styling configuration
- Click "Sign In" to access Internet Identity
- Follow the prompts to create or use an existing identity
- Grant calendar access permissions
- Click on any date or use the "+" button
- Fill in event details (title, description, time, etc.)
- Save the event to add it to your calendar
- Use the sidebar to create new calendars
- Toggle calendar visibility
- Customize calendar colors and settings
- Access settings via the gear icon in the header
- Customize themes, notifications, and display preferences
- Manage your profile and privacy settings
icp-calendar/
βββ src/
β βββ backend/ # Motoko canisters
β β βββ calendar/ # Calendar management
β β βββ user_registry/ # User profiles
β β βββ scheduling/ # Event scheduling
β β βββ notification/ # Notifications
β βββ frontend/ # SvelteKit application
β βββ src/
β β βββ lib/ # Shared components and utilities
β β βββ routes/ # Application pages
β β βββ stores/ # State management
β βββ static/ # Static assets
βββ dfx.json # ICP configuration
βββ package.json # Project dependencies
# Start local development
dfx start --background
dfx deploy
npm start
# Build for production
npm run build
# Run tests
npm test
# Format code
npm run format
# Lint code
npm run lint- Frontend: Add components in
src/frontend/src/lib/components/ - Backend: Modify Motoko files in
src/backend/ - Stores: Update state management in
src/frontend/src/lib/stores/ - Routes: Add new pages in
src/frontend/src/routes/
dfx deploy --network localdfx deploy --network icThe application automatically configures itself based on the deployment environment. No manual environment variable configuration is required.
We welcome contributions from the community! Please see our Contributing Guide for details on:
- Code style and standards
- Development workflow
- Testing requirements
- Pull request process
This project is licensed under the MIT License - see the LICENSE file for details.
- Internet Computer Documentation
- Motoko Programming Language
- SvelteKit Documentation
- Tailwind CSS Documentation
For questions, issues, or contributions:
- Create an issue on GitHub
- Join our community Discord
- Check the documentation wiki
OpenCalendar - Decentralized calendar management for the modern web, powered by the Internet Computer Protocol.