FastCalendar is a lightweight, customizable web-based calendar application built with FastHTML. It's designed to be easily deployed directly from a GitHub repository, allowing event submissions via Pull Requests. This makes it ideal for community-driven event calendars or personal event tracking.
A live version can be viewed at https://tech-for-good.events/
- Interactive calendar view with month navigation
- Agenda view for upcoming events
- Location-based event filtering
- RSS feed for event subscriptions
- Customizable title and about section
- Social media links integration
- Static logo display
- Markdown support for event descriptions and about section
- Easy event submission via GitHub Pull Requests
- Python 3.11+
- FastHTML
- SQLite
- YAML for configuration and event data
- Python 3.11+
- uv
-
Clone the repository:
git clone https://github.com/your-username/awesome-calendar.git cd awesome-calendar
-
Create and activate a virtual environment:
uv venv --python 3.11
-
Install the required packages:
uv sync
-
Create a
custom_settings.yaml
file in the project root with the following structure:title: My Awesome Calendar about_content: | # About This is my awesome calendar application. ## Features - Easy to use - Customizable - Markdown support website_url: https://example.com github_url: https://github.com/your-username/awesome-calendar default_locations: - Online - London social_links: - name: RSS url: /rss icon: rss-simple - name: Discord url: https://discord.gg/your-server icon: discord-logo
-
Create an
events.yaml
file in the project root to populate your calendar with events:- id: 1 title: Team Meeting date: 2024-09-15 description: | # Weekly Team Sync-up ## Agenda - Project updates - Upcoming deadlines - Q&A session Join us at [Google Meet](https://meet.google.com/abc-defg-hij) url: https://meet.google.com/abc-defg-hij location: Online - id: 2 title: Project Deadline date: 2024-09-30 description: | **Final submission for Q3 project** Make sure to: - Complete all deliverables - Review documentation - Prepare presentation slides url: "" location: London
-
Add your logo image file (e.g.,
logo.png
) to thestatic
folder in the project root.
-
Run the application:
python main.py
-
Open a web browser and navigate to
http://localhost:5001
(or the port specified in your configuration). -
Use the calendar view to browse events, switch to the agenda view, or filter events by location.
-
Click on events to view details. Event descriptions support Markdown formatting.
-
Use the social media buttons in the footer to access linked platforms or subscribe to the RSS feed.
- Modify the
custom_settings.yaml
file to change the application title, about content, website URL, GitHub URL, default locations, and social media links. - Edit the
events.yaml
file to add, remove, or modify events. Event descriptions support Markdown formatting. - Replace the
logo.png
file in thestatic
folder to change the application logo.
FastCalendar is designed to be deployed directly from a GitHub repository. You can use services like Vercel, Netlify, or GitHub Pages for easy deployment. Specific deployment instructions will depend on your chosen platform.
To submit a new event:
- Fork the repository
- Add your event to the
events.yaml
file - Create a Pull Request with your changes
The repository maintainer will review and merge your PR, updating the calendar.
To update the application or event data:
- Pull the latest changes from the main repository
- Update your
custom_settings.yaml
orevents.yaml
as needed - Redeploy your application
- Location names: The current version of FastCalendar only supports single-word location names. Multi-word location names may not function correctly for filtering and display purposes. We're working on improving this in future updates.
If you encounter any issues:
- Ensure all dependencies are correctly installed
- Check that your
custom_settings.yaml
andevents.yaml
files are correctly formatted - Verify that your Python version is 3.11 or higher
- Remember that location names should be single words
For more help, please open an issue on the GitHub repository.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.