{% extends "base.html" %} {% block title %}My Integrations{% endblock %} {% block content %} {% set me_page = 'integrations' %}

๐Ÿ”— Integrations

Connect your tools so the AI can pull real-time context into your daily briefing โ€” calendar prep notes, open PRs, assigned tickets, and Slack mentions.

{% if request.args.get('connected') %}
โœ“ {{ request.args.get('connected') | upper }} connected successfully!
{% endif %} {% set service_meta = { 'gcal': {'icon': '๐Ÿ“…', 'name': 'Google Calendar', 'desc': 'Today\'s events, meeting prep notes, attendee context', 'auth': 'oauth', 'unlocks': 'Meeting prep in your daily briefing โ€” attendee names, agenda summaries, and suggested talking points.'}, 'gmail': {'icon': '๐Ÿ“ง', 'name': 'Gmail', 'desc': 'Frequent contacts for customer import', 'auth': 'oauth', 'unlocks': 'Import frequent email contacts directly into your Customers map.'}, 'slack': {'icon': '๐Ÿ’ฌ', 'name': 'Slack', 'desc': 'Mentions, DMs, action items, briefing delivery', 'auth': 'oauth', 'unlocks': 'Slack mentions and action items in your briefing, plus optional Slack DM delivery each morning.'}, 'msgraph': {'icon': '๐Ÿ”ท', 'name': 'Microsoft 365', 'desc': 'Outlook Calendar ยท Mail ยท Teams briefing delivery', 'auth': 'oauth', 'unlocks': 'Meeting prep from Outlook Calendar, morning briefing via Outlook mail, and daily brief to your Teams chat.'}, 'github': {'icon': '๐Ÿ™', 'name': 'GitHub', 'desc': 'Assigned issues, open PRs & review requests', 'auth': 'pat', 'unlocks': 'Open PRs, review requests, and assigned issues pulled into your daily task list.'}, 'gitlab': {'icon': '๐ŸฆŠ', 'name': 'GitLab', 'desc': 'Merge requests, issues & CI status', 'auth': 'pat', 'unlocks': 'Open MRs, failing pipelines, and assigned issues in your briefing.'}, 'jira': {'icon': '๐ŸŽฏ', 'name': 'Jira', 'desc': 'Sprint board, assigned & overdue tickets', 'auth': 'apikey', 'unlocks': 'Your sprint board and overdue tickets prioritized in the daily task section.'}, 'linear': {'icon': '๐Ÿ“', 'name': 'Linear', 'desc': 'Cycles, issues & priorities', 'auth': 'apikey', 'unlocks': 'Current cycle issues and unblocked priorities in your briefing.'}, 'notion': {'icon': '๐Ÿ“', 'name': 'Notion', 'desc': 'Pages & databases as knowledge context', 'auth': 'apikey', 'unlocks': 'Notion pages indexed as background knowledge for AI responses.'}, } %}
{% for svc in all_services %} {% set meta = service_meta.get(svc, {}) %} {% set conn = integrations.get(svc) %} {% set is_connected = conn and conn.status == 'active' %}
{{ meta.get('icon','๐Ÿ”—') }}
{{ meta.get('name', svc) }}
{{ meta.get('desc','') }}
{% if is_connected %} โœ“ Connected {% else %} Not connected {% endif %}
{% if is_connected %} {% if conn.last_sync_at %}
Last sync: {{ conn.last_sync_at[:16] }}
{% endif %}
{% else %}
๐Ÿ”“ Unlock: {{ meta.get('unlocks','Connect to enable briefing integration.') }}
{% if meta.get('auth') == 'oauth' %} Connect with OAuth {% else %} {% endif %}
{% if svc in ('jira', 'linear') %} {% endif %}
{% endif %}
{% endfor %}
{% include "includes/iqe_query_widget.html" %} {% endblock %}