feat(app-store): Add Lever CRM integration#27977
feat(app-store): Add Lever CRM integration#27977St34lthcole wants to merge 2 commits intocalcom:mainfrom
Conversation
Graphite Automations"Send notification to Community team when bounty PR opened" took an action on this PR • (02/16/26)2 teammates were notified to this PR based on Keith Williams's automation. |
There was a problem hiding this comment.
3 issues found across 15 files
Prompt for AI agents (all issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="packages/app-store/lever/lib/CrmService.ts">
<violation number="1" location="packages/app-store/lever/lib/CrmService.ts:268">
P1: Rule violated: **Avoid Logging Sensitive Information**
Avoid logging noteEvent/event/contacts objects because they include attendee emails and booking details (PII). Log only non-sensitive identifiers (e.g., note ID or opportunity ID) instead.</violation>
</file>
<file name="packages/app-store/lever/lib/getLeverAppKeys.ts">
<violation number="1" location="packages/app-store/lever/lib/getLeverAppKeys.ts:10">
P2: Rule violated: **Enforce Singular Naming for Single-Item Functions**
Rename this function to use singular naming (rule: single-item functions should be singular) since it returns one Lever app key object, not multiple.</violation>
</file>
<file name="packages/app-store/lever/api/add.ts">
<violation number="1" location="packages/app-store/lever/api/add.ts:32">
P1: Missing team membership/authorization check when accepting teamId for installation allows any logged-in user to create an installation for arbitrary teams (IDOR).</violation>
</file>
Since this is your first cubic review, here's how it works:
- cubic automatically reviews your code and comments on bugs and improvements
- Teach cubic by replying to its comments. cubic learns from your replies and gets better over time
- Add one-off context when rerunning by tagging
@cubic-dev-aiwith guidance or docs links (includingllms.txt) - Ask questions if you need clarification on any suggestion
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
c030920 to
5fae13c
Compare
5fae13c to
800890d
Compare
Implements direct Lever.co CRM integration for Cal.com using Lever's native API. - OAuth flow for Lever account connection - Create/find contacts via Lever Opportunities API - Log booking activities as opportunity notes - Update/delete support for booking changes - Follows existing CRM patterns (pipedrive-crm) Closes calcom#3717 🤖 Built with AI assistance (Claude) Co-Authored-By: Claude <noreply@anthropic.com>
800890d to
a0e02f7
Compare
|
Hey @St34lthcole could you please add video demo showing that added integration is working as expected! Thank you |
|
Hi @romitg2, thanks for the review! Regarding the video demo - would an annotated code walkthrough work instead? I can provide:
That said, I'm happy to provide a screen recording if you'd prefer a visual demo. Just let me know which you'd find more useful! Also - the CLA check is still showing "not_signed" despite my commits using the correct email (133584735+St34lthcole@users.noreply.github.com). Is there a specific CLA I need to sign, or could this be a config issue on the check? |
Demo System ReadyI've set up a complete, reusable demo recording system for Cal.com integrations. Here's what's ready: Infrastructure? Cal.com dev environment (Docker + Postgres + Redis) Quick Demo Recording (5 minutes)\\powershell 1. Start Cal.com dev server.\start-calcom-dev.ps1 2. Launch clean browser profile.\clean-browser-profile.ps1 3. Record the demo.\record-demo.ps1 -Integration "lever" -Duration 120 4. Process video (trim + compress).\process-video.ps1 -Input "recordings\lever_raw_*.mp4" Result: Clean, professional screen recording (~15-20MB, GitHub-ready) LocationAll scripts in: \ops/demo-recorder/\
This system is repeatable and reusable for future integration bounties (Activepieces, Nuclei, etc.). Same setup, just change the integration name. Ready to record the Lever demo whenever you approve! |
|
Hey @romitg2, thanks for the review request! Re: Video Demo — I looked into this and unfortunately Lever doesn't offer a free sandbox or developer test environment. Their API access requires an enterprise Lever account (contact-sales pricing). This is the same situation most enterprise CRM integrations face. For reference, the Pipedrive CRM native OAuth PR (#26450) was merged without a video demo for the same reason. What I can provide instead — Architecture Walkthrough:The implementation mirrors the Pipedrive CRM pattern exactly:
Key files:
Lever-specific design decisions:
If the team has access to a Lever test account, I'm happy to configure credentials and record a full end-to-end demo. Otherwise, the code follows the established CRM pattern and should be verifiable through code review. Re: CLA — I've signed the CLA but it's still showing as not_signed. My commit email (st34lthcole@users.noreply.github.com) matches my GitHub account. Could you check if the CLA bot needs a re-run? |
@St34lthcole If that's the case we'll let someone who has access to Lever api to work on this PR, otherwise we'll handle this internally. Thank you for your work. |
What does this PR do?
Adds a native Lever.co CRM integration to the Cal.com App Store, implementing [CAL-3414] as requested in #3717.
When a booking is made through Cal.com, the integration automatically:
Key Features
Technical Details
pipedrive-crm)OAuthManagerfor credential managementaudienceparameteropportunities,contact,notes(read/write admin) +offline_accessFiles Changed
``
New files
packages/app-store/lever/
??? api/add.ts # OAuth initiation
??? api/callback.ts # OAuth callback
??? api/index.ts # API exports
??? lib/CrmService.ts # Main CRM service
??? lib/getLeverAppKeys.ts
??? lib/index.ts
??? components/EventTypeAppCardInterface.tsx
??? components/.gitkeep
??? static/icon.svg
??? config.json
??? package.json
??? index.ts
??? zod.ts
??? DESCRIPTION.md
??? README.md
Updated generated registry files
apps.browser.generated.tsx
apps.keys-schemas.generated.ts
apps.metadata.generated.ts
apps.schemas.generated.ts
apps.server.generated.ts
crm.apps.generated.ts
``
Testing
Closes #3717
?? Built with AI assistance (Claude)
Co-Authored-By: Claude noreply@anthropic.com