{"id":49575121,"url":"https://github.com/rollecode/raycast-confetti-server","last_synced_at":"2026-05-03T16:10:52.951Z","repository":{"id":355212960,"uuid":"878888094","full_name":"rollecode/raycast-confetti-server","owner":"rollecode","description":"A webhook server for Todoist, Pipedrive and Height.app - for Raycast confettis 🎉","archived":false,"fork":false,"pushed_at":"2024-10-27T17:30:51.000Z","size":24,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-02T13:33:32.079Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rollecode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-10-26T11:39:23.000Z","updated_at":"2024-10-27T17:30:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rollecode/raycast-confetti-server","commit_stats":null,"previous_names":["rollecode/raycast-confetti-server"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/rollecode/raycast-confetti-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollecode%2Fraycast-confetti-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollecode%2Fraycast-confetti-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollecode%2Fraycast-confetti-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollecode%2Fraycast-confetti-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rollecode","download_url":"https://codeload.github.com/rollecode/raycast-confetti-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollecode%2Fraycast-confetti-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32575387,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-03T16:10:51.991Z","updated_at":"2026-05-03T16:10:52.946Z","avatar_url":"https://github.com/rollecode.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# 🎉 Raycast Confetti Webhook Server\n\nThis project sets up a webhook server that triggers Raycast's confetti effect when certain events occur in Todoist, Pipedrive, and Height.app. Using this setup, confetti will appear in Raycast whenever:\n\n- A task is completed in Todoist\n- A deal is marked as \"won\" in Pipedrive\n- A task is completed in Height.app\n\n## Requirements\n\n- A remote SSH server\n- macOS with [raycast-confetti-receiver](https://github.com/ronilaukkarinen/raycast-confetti-receiver) set up\n- **Node.js** (v12+)\n- **Todoist API Token**\n- **Pipedrive API Access**\n- **Height.app API Access**\n\n## Setup instructions\n\n### Clone the repository\n\nClone the repository to your server or local machine:\n\n```bash\ngit clone https://github.com/ronilaukkarinen/raycast-confetti-server.git\ncd raycast-confetti-server\n```\n\n### Install dependencies\n\nInstall the necessary Node.js packages:\n\n```bash\nnpm install\n```\n\n### Configure the server script\n\nUpdate the `webhook-server.mjs` file (or `webhook-server.js` if using `\"type\": \"module\"` in `package.json`) to ensure it is listening on the correct port.\n\n### Configure `systemd` for automatic startup\n\n1. Create a `systemd` service file at `/etc/systemd/system/raycast-confetti.service`:\n\n   ```ini\n   [Unit]\n   Description=Webhook Server for Todoist, Pipedrive, and Height.app\n   After=network.target\n\n   [Service]\n   ExecStart=/usr/bin/node /path/to/your/project/webhook-server.mjs\n   WorkingDirectory=/path/to/your/project\n   Restart=always\n   User=your_username\n   Environment=NODE_ENV=production\n\n   [Install]\n   WantedBy=multi-user.target\n   ```\n\n   Replace `/path/to/your/project` and `your_username` with your actual project directory and username.\n\n2. Reload `systemd`, start the service, and enable it to run on startup:\n\n   ```bash\n   sudo systemctl daemon-reload\n   sudo systemctl start webhook-server\n   sudo systemctl enable webhook-server\n   ```\n\n3. Check the service status:\n\n   ```bash\n   sudo systemctl status webhook-server\n   ```\n\n### Watch the server output log\n\nTo watch the server output log, run:\n\n```bash\nsudo journalctl -u webhook-server -f\n```\n\n### Configure nginx as a reverse proxy\n\nIf you want to use a domain name with your webhook server, you can set up an nginx reverse proxy.\n\nAdd to `/etc/nginx/sites-enabled/your-domain`:\n\n```nginx\nserver {\n    listen 443 ssl http2;\n\n    server_name raycast-webhooks.yourdomain.com;\n\n    ssl_certificate /etc/letsencrypt/live/raycast-webhooks.yourdomain.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/raycast-webhooks.yourdomain.com/privkey.pem;\n\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\n    ssl_prefer_server_ciphers on;\n    ssl_dhparam /etc/ssl/certs/dhparam.pem;\n    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';\n    ssl_session_timeout 1d;\n    ssl_session_cache shared:SSL:50m;\n    ssl_stapling on;\n    ssl_stapling_verify on;\n    add_header Strict-Transport-Security max-age=15768000;\n\n    location /.well-known {\n        alias /var/www/raycast-webhooks.yourdomain.com/public_html/.well-known;\n    }\n\n    location /.well-known/ {\n       root /var/www/raycast-webhooks.yourdomain.com/public_html;\n    }\n\n    location / {\n      proxy_pass http://127.0.0.1:5462;\n      proxy_http_version 1.1;\n      proxy_set_header Upgrade $http_upgrade;\n      proxy_set_header Connection \"Upgrade\";\n      proxy_set_header Host $http_host;\n      proxy_set_header X-Real-IP $remote_addr;\n      proxy_set_header X-Forwarded-For $remote_addr;\n      proxy_set_header X-Forwarded-Port $server_port;\n      proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n\nserver {\n    listen 80;\n    server_name raycast-webhooks.yourdomain.com;\n\n    location ~ /.well-known {\n       allow all;\n       root /var/www/raycast-webhooks.yourdomain.com/public_html;\n    }\n\n    location ~ /\\.well-known/acme-challenge {\n        allow all;\n        root /var/www/raycast-webhooks.yourdomain.com/public_html;\n    }\n\n    location / {\n        return 301 https://$host$request_uri;\n    }\n}\n\nmap $http_upgrade $connection_upgrade {\n    default upgrade;\n    ''\tclose;\n}\n```\n\nAdd a cert, test the config and restart nginx.\n\n### Set up webhooks\n\nEach application requires specific settings to trigger the webhook server correctly.\n\n#### Todoist webhook\n\nUse the following `curl` command to create a webhook in Todoist for task completions:\n\n```bash\ncurl -X POST https://api.todoist.com/rest/v2/webhooks \\\n-H \"Authorization: Bearer YOUR_TODOIST_API_TOKEN\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n      \"url\": \"http://raycast-webhooks.yourdomain.com/todoist-webhook\",\n      \"event_name\": \"task:completed\"\n    }'\n```\n\n#### Pipedrive webhook\n\n1. Log into your **Pipedrive** account.\n2. Go to **Tools and Apps \u003e Webhooks**.\n3. Create a new webhook:\n   - **URL**: `http://raycast-webhooks.yourdomain.com/pipedrive-webhook`\n   - **Event Action**: `updated`\n   - **Object**: `deal`\n4. Save the webhook.\n\n#### Height.app webhook\n\n1. Log into your **Height.app** account.\n2. Go to **Settings \u003e Integrations \u003e Webhooks**.\n3. Create a new webhook:\n   - **URL**: `http://raycast-webhooks.yourdomain.com/height-webhook`\n   - **Event Type**: `task.updated`\n4. Save the webhook.\n\n### Testing the webhooks\n\nOnce the webhooks are set up, you can test them by:\n\n- Completing a task in Todoist\n- Marking a deal as \"won\" in Pipedrive\n- Completing a task in Height.app\n\nCheck the server logs to confirm that each webhook triggers the appropriate confetti action.\n\n### License\n\nThis project is licensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frollecode%2Fraycast-confetti-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frollecode%2Fraycast-confetti-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frollecode%2Fraycast-confetti-server/lists"}