{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "indico--newdle",
    "name": "newdle",
    "tagline": "CERN's Doodle-style meeting poll with Exchange free/busy, configured through one Flask config file.",
    "shortTagline": "CERN's Doodle-style meeting poll",
    "description": "newdle, from the Indico team at CERN, lets an organiser propose candidate slots, see when participants are free from Exchange free/busy, and collect answers on a poll. It is a Flask backend with a React frontend, configured in newdle.cfg (SSO over OIDC, database, SMTP, free/busy providers) and shipped with Docker Compose. The JSON API behind the UI is not documented for agents.",
    "capabilities": [
      "adaptable"
    ],
    "vertical": "scheduling-staffing",
    "alternativeTo": [
      "Doodle"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "human-written",
    "codeStack": {
      "languages": [
        "Python",
        "JavaScript"
      ],
      "frameworks": [
        "Flask",
        "Flask-Multipass",
        "SQLAlchemy",
        "Alembic",
        "React"
      ],
      "packageManager": "pip",
      "database": [
        "PostgreSQL"
      ],
      "hostingTarget": [
        "docker"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/indico/newdle",
        "owner": "indico",
        "name": "newdle",
        "license": "MIT",
        "stars": 118,
        "lastCommit": "2026-04-24"
      }
    ],
    "interface": null,
    "operability": null,
    "recommendedWrapper": null,
    "reach": null,
    "editions": [
      {
        "name": "Free",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/indico/newdle"
          },
          {
            "kind": "container",
            "url": "https://github.com/indico/newdle/blob/master/docker-compose.yml",
            "command": "make docker-run"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or skills install target in the repo."
    },
    "customization": {
      "summary": "Copy newdle/newdle.cfg.example to newdle.cfg and set SECRET_KEY, SQLALCHEMY_DATABASE_URI, the MULTIPASS_AUTH_PROVIDER_LOGIN block with your OIDC metadata URL and client credentials, EMAIL_HOST and friends plus NOREPLY_ADDRESS, and FREE_BUSY_PROVIDERS (exchange, or random for testing) with the Exchange settings. PROXY, TOKEN_LIFETIME and NEWDLE_CODE_LENGTH tune behavior. docker-compose.yml runs the production-like stack.",
      "envVars": [],
      "configFiles": [
        "newdle/newdle.cfg.example",
        "newdle.cfg",
        "docker-compose.yml",
        ".env"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 4
    },
    "useWhen": [
      "my organization has SSO and Exchange and I want a when-are-you-free poll that stays inside our network",
      "I want a Doodle without ads or accounts for participants, backed by a team that runs it at CERN scale"
    ],
    "accounts": [
      "an OIDC identity provider",
      "Microsoft Exchange (free/busy, optional)"
    ],
    "active": true,
    "lastActivity": "2026-04-24",
    "gotchas": [
      "No local accounts: login requires an OIDC provider through Flask-Multipass; SKIP_LOGIN is for development only",
      "Free/busy is Exchange only; Google and CalDAV providers are 'work in progress' per the README",
      "Creating the final meeting in Indico is still unfinished",
      "Last push 2026-04-24, near the edge of the six-month window"
    ],
    "fit": {
      "adaptable": 3,
      "operable": 1
    },
    "evidence": {
      "formFactor": "README: Flask backend and React frontend served together; docker compose targets",
      "executionModel": "no model SDK or AI feature",
      "operability": "no documented API, MCP or CLI; the React app calls Flask JSON routes that are not documented for external use",
      "effort": "newdle/newdle.cfg.example read this run; every setting is commented",
      "editions": "README: MIT with the CERN privileges note; no hosted offering",
      "active": "shortlist pushedAt 2026-04-24"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.95,
      "operability": 0.8,
      "effort": 0.95,
      "reach": 0,
      "editions": 0.95
    },
    "openQuestions": [
      "Operable fit kept at 1 per triage because the Flask JSON API exists but is undocumented and session-authenticated; no Operable capability claimed. Curator to decide",
      "Is an OIDC provider a hard requirement, or does Flask-Multipass allow a local provider in production?"
    ],
    "sources": [
      {
        "url": "https://github.com/indico/newdle",
        "foundBy": "sourcing:scheduling-staffing:github"
      },
      {
        "url": "https://github.com/indico/newdle/blob/master/newdle/newdle.cfg.example",
        "foundBy": "analysis:scheduling-staffing"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "unverified",
      "reason": "Adaptable only: fully commented newdle.cfg under MIT from an institutional maintainer; SSO requirement narrows the SMB audience. No agent interface.",
      "disputed": []
    },
    "url": "apps/indico--newdle.html",
    "coverage": null,
    "paid": false,
    "source": "research/verified/indico--newdle.json"
  }
}
