-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Extension: Add Linkedin profile to Twenty #2413
Comments
Is someone working on it? |
I had a conversation with Felix about this issue on Discord. Please assign it to me so I can start working on this. |
Hi @mabdullahabaid just assigned you. Maybe @shavidze can help you? |
@Bonapara anytime |
Maybe the two of you can sync on Discord then 🤷♂️🤗 |
@FelixMalfait Here's the progress on Chrome Extension development. Had to upload the video to Google Drive due to the size of the file. Please turn on the audio for commentary. https://drive.google.com/file/d/1yWjdYmtDwP_vDXXzP9GBadANiE9tCIDk/view A few things to note:
Will work on connecting to the backend and storing data to the database if the current implementation looks good for now. |
Really great work @mabdullahabaid! A few suggestions:
Thanks a lot! |
Hi @FelixMalfait , sorry for the delay - busy week. Back to spending the weekend on this now.
|
Hi @Bonapara, followed your conversation on Discord and sounds like a great idea. Will need to switch the way in which we extract data using the extension, therefore I intend to push this requirement to the next iteration as mentioned in the reply to Felix above - will work on posting data to the Backend first and then find a more robust solution to data extraction. |
I was discussing with a friend that developed scrapers and he told me using the backend side was very risky and gets you banned very easily, so you probably picked the right path @mabdullahabaid - well done, I would have made the other choice 🙃 |
Oh, interesting. I tried avoiding the risk at first for the very reason, but built the extension using both the approaches in separate branches after receiving feedback - data scraping approach here and backend api approach here. Each took a couple weeks to build, but data turned out more consistent in the backend api approach, so I started stabilizing that version over the past couple weeks. Will switch back to data scraping branch, rebase my changes and get it working with NX before creating a PR. Could not integrate all of the suggestions above due to various challenges, but you should be able to try a working extension on your machine v soon. Apologies for such a long delay. |
Oh no! Sorry I didn't think it'd have such an impact when I said this. Honestly this is just one data point I got from someone so I'm not sure if we should base everything on that. Do you want to do a quick call with @charlesBochet next week to discuss it together? We can also discuss it async on Discord. But it's too bad if some of your work is lost because of a bad judgement on our side — let's be sure this time 😅 |
Learned a lot in the process, so some lost work should not be a problem 😅 However, building further would require locking up on one approach, and I think a call would provide more clarity to all of us at this point. That said, I do not want to mess up your calendars to plan this call, so if there are no empty slots in the coming week, we can definitely have an async conversation too, no worries. |
I have updated both the branches to work with NX. Will record a video to showcase the functionality (and issues) today/tomorrow, and create a PR with whatever method we decide in the call/discord this week. |
The first video demonstrates setting up the extension on your local machine and walks through the implemented functionality. The second video demonstrates a few bugs, a few implementation details behind-the-scenes, and a few things we can improve on generally. Excited to finally share a working version with you guys! Please turn on the volume while viewing the videos. |
Thanks @mabdullahabaid for this amazing contribution! Can't wait to add leads from LinkedIn to Twenty 🚀 |
Created a PR to close this issue. Tried including comments throughout the code to explain the implementation of certain things. Was a v fun issue for my first ever open source contribution and really appreciate the trust/support from all of you. |
We will take a look early this week @mabdullahabaid. Thanks a lot again! |
Scope & goals
Enable users to add People & Companies records to Twenty from LinkedIn's
People
orCompany
pages. This requires a Chrome Extension, which adds a button on LinkedIn pages and scrapes page content when pressed.Desired behavior
The extension logo should be the "Twenty" logo.
What we want to import
People
Companies
[parse most recent experience]
Tech specs
Create a basic chrome extension
Guide to create Chrome extensions:
https://developer.chrome.com/docs/extensions/mv3/getstarted/
For now you can create the extension in packages/twenty-chrome-extension
You can use a generator for React/Typescript like this one: https://github.com/guocaoyi/create-chrome-ext/tree/main/template-react-ts (it uses Vite while we use Webpack in other parts of this repo but I think it's okay to change since we might move to Vite. Also please use yarn and not npm).
Make sure to add a README that gives readers basic instructions on how to test the extension locally
Insert a button in DOM
Scrape data from Linkedin
Should we use a backend-api approach? E.g.
https://github.com/atul-gairola/LinkedIn-crm-extension/blob/6160e6cd4853225c5adf5b5c7ef2fa7a6a805696/src/pages/Background/index.js#L73
Or just scrape the frontend?
I'm not 100% sure what's the best approach. The backend approach feels more robust/stable, but if over-used it's more likely to get flagged and eventually get the account banned. Also if we go with the frontend approach, I'm not sure React will be enough to do this well and we probably need to introduce our good old friend jQuery in parallel.
Push data to Twenty
Create a company and contact via GraphQL API Call
See: https://docs.twenty.com/graphql/
I'm not sure the API support passing the company via
createOnePerson
to it might be safer to do a first API callcreateOneCompany
and then create the person.Create a basic settings page
Screen.Recording.2023-11-10.at.12.32.25.mov
https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twenty?type=design&node-id=15167-54916&mode=design&t=y0dkApZGbbNBw27k-11
Store info in the extension's local storage
Automatically open settings
Automatically open the settings page upon install and if the user clicks on the button but no API is in storage
For future iterations
Just as for context and to help you structure things, in the future we will likely:
The text was updated successfully, but these errors were encountered: