MCPSERV.CLUB
Framadate

Framadate

Self-Hosted

Collaborative date & decision polls

Stale(40)
0stars
0views

Overview

Discover what makes Framadate powerful

Framadate is a lightweight, self‑hostable polling and event‑planning engine written in **Python** that runs on a standard LAMP/LEMP stack. It exposes a REST‑style JSON API for creating, updating and retrieving polls while also providing an intuitive web UI built with **Flask** and **Bootstrap**. The core of the application is a single‑table SQLite database, but it can be swapped for PostgreSQL or MySQL via SQLAlchemy without code changes. This makes Framadate a great fit for micro‑services or embedded use cases where a full‑blown database server is unnecessary.

Date and Classic Polls

Live Results

Export & Analytics

Security

Overview

Framadate is a lightweight, self‑hostable polling and event‑planning engine written in Python that runs on a standard LAMP/LEMP stack. It exposes a REST‑style JSON API for creating, updating and retrieving polls while also providing an intuitive web UI built with Flask and Bootstrap. The core of the application is a single‑table SQLite database, but it can be swapped for PostgreSQL or MySQL via SQLAlchemy without code changes. This makes Framadate a great fit for micro‑services or embedded use cases where a full‑blown database server is unnecessary.

Key Features

  • Date and Classic Polls – Two poll types: date polls for scheduling events and classic polls for quick decision making.
  • Live Results – Poll results are streamed to all participants using Server‑Sent Events (SSE) for real‑time updates.
  • Export & Analytics – Polls can be exported as CSV, JSON or PDF and visualized with simple charts rendered client‑side via Chart.js.
  • Security – Token‑based authentication for poll editors, optional password protection per poll, and CSRF protection in the web form.

Technical Stack

LayerTechnology
Web FrameworkFlask (Python 3.11+)
ORMSQLAlchemy (SQLite by default)
FrontendBootstrap 5, jQuery, Chart.js
Real‑timeServer‑Sent Events (Python’s sseclient)
DeploymentDocker image available on Docker Hub; can be run via docker-compose or manually with a WSGI server (Gunicorn)
CI/CDGitHub Actions for automated tests and Docker builds

The codebase follows PEP‑8 conventions, uses type hints (mypy), and is licensed under the AGPLv3, ensuring that any derivative work remains open source.

Core Capabilities & API

  • Poll CRUD – Endpoints /api/polls for creating, reading, updating and deleting polls.
  • Vote SubmissionPOST /api/polls/<id>/vote accepts JSON payloads with selected options.
  • Webhooks – Optional webhook URLs can be configured per poll; Framadate POSTs a payload when the poll closes.
  • Extensibility – The app ships with a plugin hook (framadate.plugins) that lets developers inject custom validation or rendering logic.
  • Internationalization – Locale files in po format; developers can add new languages by extending the Babel configuration.

Deployment & Infrastructure

Framadate is designed for single‑instance deployment but scales horizontally behind a load balancer because the application is stateless except for the database. Docker images expose ports 80/443 and can be run in Kubernetes pods with a persistent volume for the SQLite file or an external PostgreSQL service. The lightweight nature (≈ 30 MB Docker image) makes it suitable for edge devices, Raspberry Pi clusters or internal SaaS platforms.

Integration & Extensibility

  • OAuth / SSO – The Flask‑Login integration allows for custom authentication backends; developers can plug in LDAP, OAuth2 or SAML.
  • RESTful API – All core operations are exposed via JSON, enabling integration with CI/CD pipelines or custom front‑ends.
  • Webhooks & Callbacks – External services (Slack, Teams, email) can react to poll completions.
  • Custom Widgets – The frontend uses a component‑based approach; developers can replace the Chart.js chart with D3 or any other library.

Developer Experience

The project contains comprehensive documentation (docs/), a well‑structured test suite (pytest, coverage > 90 %), and an active community on GitHub. Issues are triaged quickly, and pull requests receive prompt reviews from maintainers who enforce coding standards. The code is modular: core logic lives in framadate/, while templates and static assets are isolated, making it easy to fork and extend.

Use Cases

ScenarioWhy Framadate?
Internal meeting scheduler for a distributed teamZero‑friction date polls, real‑time availability updates
Community decision making (e.g., open‑source project release dates)Open‑source license, no ads, easy self‑hosting
Quick surveys for event planning (e.g., hackathon theme)Classic polls with minimal setup
Embedded polling in a larger web applicationAPI‑first design, plugin hooks for custom UI

Advantages Over Alternatives

  • Open Source & AGPL – No hidden fees or vendor lock‑in; all modifications remain free.
  • Minimal Dependencies – A single Python package and optional database make it lightweight to ship in containers.
  • Real‑time Feedback – SSE support gives a near‑instant user experience without polling.
  • Extensible Architecture – Plugin system and webhook support allow developers to tailor Framadate to niche workflows.
  • Security‑First – Built‑in CSRF protection, token authentication, and optional encryption of sensitive polls.

Framadate offers developers a fully self‑hostable, highly configurable polling engine that balances simplicity with extensibility, making it an attractive choice for teams that need to maintain control over their data while providing a polished user experience.

Open SourceReady to get started?

Join the community and start self-hosting Framadate today