We want this page to be useful, so we just describe the most notable changes to our Widget and API.
Occasionally, we’ve listed a bug fix when it is of interest but usually we skip those so we don’t overwhelm this page.
Happy Holidays! Since updating the widget architecture, we’ve
kept an eye on it and fixed a few bugs.
The bulk of our development efforts have been focussed on the latest big change to our widget. We have accumulated
some technical debt and it was time to pay it down. We’re very excited about our
lighter, faster, stronger widget.
We have started to internally monitor for issues with any of our OAuth sources. We can detect issues with your Proxy URL,
or your OAuth app for Google, Yahoo, Outlook.com or Office365. If something seems amiss, we’ll reach out to you.
There was an bug with parsing VCards with multiple contacts, we squashed it.
Terra’s interface has changed so we updated our API to accommodate it.
You can now suppress the confirmation dialog when a user deselects all their selected contacts.
We’ve been hard at work laying the foundation for a newly architected version of the widget.
It’s going to be much faster and user fewer web requests to load fewer and smaller assets.
It’s a bit of repayment of some technical debt that we’ve accrued and it’s feeling great!
Customizing our stylesheet is OK if you want to make a couple simple changes like colors, margins, padding, borders, etc.
If you are interested in bigger changes like moving elements around or suppressing the mobile display then you
shouldn’t need to learn our CSS in depth to achieve your goals. Enter Themes! Each theme is a unique starting layout for our widget. You can further customize the theme with your own CSS.
Our first two themes are live.
If you want to propose something complete different, send us a mock up of what you’d like the widget to look like
and we’ll see what we can do.
LInkedin make some changes to their UI and zip file format so we are keeping pace as they bob and weave.
Themes have come to the widget, starting with a very basic one that suppresses the responsive layout.
If you are considering applying a custom style using the css option, reach out to us to ask about a new
SPA and Turbolinks support! You can now load the widget script in the head of the page and call
cloudsponge.init(...) whenever you need to (re)initialize the widget before launching it.
We’re always happy for a chance to improve the accessibility of our widget.
This change suppresses the tabstops on hidden elements in our UI to reduce confusion of screen readers.
In the few months since publishing our document on the Google OAuth review process,
there have been some changes and we’ve received feedback from a bunch of you who have run
into hurdles put up by Google. We’ve update the document with our most recent learnings.
Looking for a way to manage your CloudSponge payments in one place? Look no further! We are now part of the AWS Marketplace where you can
manage your CloudSponge subscription and payment directly within your AWS account.
Check out our listing!
You can now display phone numbers in the contact list and users can pick from multiple ones to submit.
It works on desktop and mobile UI.
Users can now search for contacts by the name of the group that they belong to.
Our widget was hiding the important messaging about refreshing your contacts from the source when there was nothing to display in the list.
Well that’s fixed now.
Mail.ru now returns more contacts! The OAuth APIs that Mail.ru exposes do not return a meaningful number of contacts that
have an email address. To improve the result, we changed the import type to accept a username and password. Don’t worry.
We’ve taken care of everything for you if you are using our widget.
We published an aptly named article about how Airbnb build one of the most successful referral programs ever.
Check it out here.
We fixed Linkedin CSV parsing when individual files are uploaded instead of the whole zip file.
Linkedin confusion has been reduced just a little bit more.
Lots of folks have been asking us about the new Google OAuth Review
process so we summarized our knowledge on how to navigate the new requirement.
The widget now uses a CSS class to indicate the current state on the container.
This means that it’s easy to do things like hide the UI only while an import is in progress using just CSS!
The afterImport callback is now invoked when popup closes prematurely so your app can immediately detect and respond if the user abandoned the import.
The new skipContactsDisplay allows you to declare that you want so suppress the contacts selection screen explicitly. We think it’s a lot clearer like this.
No longer does the onlyGroupedContacts option conflict with a custome filter. Both are given due respect.
Fixed imports from Linkedin and Yandex.
There were two big developments this month relating to Gmail and Linkedin.
Linkedin launched a whole new user interface and with it came a change to how they allow users to export their contacts.
We updated our service to accept the new data archive zip file and also present specific instructions to users to help guide them
through this new process.
Google imposed a manual review step on new OAuth developer accounts who requst access to ‘risky permissions’ like address books.
It’s a beneficial step because it will help keep the trust of users ensuring that they will continue to want to share their data.
However, it’s an extra step that all new customers must take to enable Gmail imports for their integration so we’ve provided
on how to navigate this new review process and continue to test while you wait.
Made our /events endpoint respond even faster.
Our widget causes security exceptions to be logged in the browser’s console. It doesn’t interfere with the widget behaviour but it
generates noise for customers who monitor for that sort of thing. We addressed many of these isses and are still working to address more.
Improved Widget: our iCloud 2-step verification documentation for widget users.
For too long we’ve heard that it’s hard to make simple changes to the email format in the
cover the common formatting cases,
We have a new option to always display the CTA on the contact selection screen of the widget.
By default we hide the CTA if there are no contacts selected and that’s not everyone’s bag of tea.
So you can change it with alwaysShowCTA.
We resolved an vague and mysterious issue where sometimes our widget would fail to work for some customers.
CSV uploads will parse a name field into a first and last name. In case you have a CSV file with the full name in one field.
decide how to let your users know when they’ve tried to select too many contacts.
is for you.
Some address books have lots of nameless email addresses. Some have a few. For some reason we used to
assume that these contacts were all named “Unknown” but then we asked around and it turns out that we
don’t know anybody by that name. So now we use the email address instead of ass-u-me-ing.
There was a weird bug on mobile devices on select sites. An empty native select UI would display for
contacts with 1 email address and it wouldn’t show up at all for contacts with multiple email addresses.
Users may have felt like they had been fed crazy pills. They had not. It was a bug. And we squashed it.
We fixed our Microsoft integrations to properly retrieve the owner contact from Outlook.com and Office365.
There’s at least three different ways that the owner contact is returned from these sources.
Anyway, we found that for some of the various possible combinations of developer accounts, OAuth flows and Contacts APIs, the owner contact was not in one of the three usual places. So we’re now looking in a fourth place to make sure we get it every time.
People do crazy things. Sometimes, users of our widget will even upload VCard data on the CSV import page! Can you imagine?
We now do the right thing in this nutty situation.
Our widget got some love too. The most interesting fix this month was to correct the display on mobile devices when there is more than one email for a contact.
OK, that wasn’t so interesting but we’re proud of it anyway.
We took some preventative measures and moved a bunch of non-urgent reporting queries to the read-replica to keep access on the master database need-to-write-only.
Everythings works more smoothly and our CPU graphs are oh so pretty.
Microsoft supports accessing Outlook.com and Office365 via a common API.
Existing branding just works™ with the new APIs.
However, you might want to update your Microsoft branding
to take advantage of simpler permissions.
We found out that the new Outlook.com API supports most Outlook.com email accounts.
Our system will still support the old version of the API until 100% of Outlook.com email accounts use the new API.
We were not closing the widget if the OAuth window was closed before the flow completed.
This left the widget UI waiting endlessesly. We taught the widget to know better and now it packs itself up when this happens.
selectLimit was hard to change after the widget had already loaded.
Now you can set this option to be a function that returns the value you want.
This is handy if your users may import multiple times on a single page load.
We published our first case study.
It’s about Gainfully who improved their product and their onboarding with our service.
We finally published this changelog page!
We updated the original widget include to serve the universal snippet bootstraping code.
This won’t migrate customers to the universal snippet automatically, but it will make the migration even easier.
An obscure CSV upload bug got squashed; sometimes the proper delimiter was not being detected properly in very small CSV files.
WindowsLive now supports the newer Office.com API and will fail back to using the deprecated Live Contacts API.
We will continue supporting the deprecated API while Microsoft migrates existing address books to Office.com support.
There is no change required to your integration.
French language support for the new widget! Just use locale: 'fr'.
We buttoned down CSS isolation in the new widget. Your site styles are beautiful on your site.
They don’t necessarily mix well into our widget UI.
Now displays the selection limit message as needed when a user clicks on “Select All”.
Environmental update: Reduce, Reuse, Recycle. This is an exciting improvement to the widget!
When a user attempts to connect their address book a second time, we can now instantly display it.
It is a big improvement to the UX with full transparency to the user.
This is also a great tool for customers to reduce integration complexity, reduce the scope of PII and reduce the cost of their
Numerous issues were affecting IE10 and below because we were using ECMAScript 5 features that were not supported.
Long contact names were breaking onto two lines which messed up the uniformity of the list of contacts. No longer!
An empty address book was raising an exception when displaying no contacts. This is fixed too.
When you went to add a team member to your account, you saw the hideous old widget UI!
Don’t worry, the soothing new widget is in place. We appologize for any eyes that were scratched out becuase of this oversight.
We added CORS support to our /c/csv endpoint to support our client libraray.
CSV files with alternative separators used to require quotation characters around each field.
We thought this was an unreasonable expectation when we found out about it breaking import for folks in non-North American markets.
We now show names in the widget, even when name is not specified in the list of fields to include.
Our script behaved badly when it was included multiple times on a single page.
Now it behaves properly if you accidentally on purpose, add it twice.
If you made a typo in your credentials in the new widget you couldn’t submit the form again unless you closed the widget.
Well it’s fixed now. Also we notify the user sooner when returning from the OAuth flow by throwing up the loading screen as soon as the widget code loads.
When the widget opens a popup window, it now opens in the centre of the browser window, right over top of the widget.
Several customers have asked for this over the past year and now that we see how much better it works, we wish that we’d made
time to change it sooner!
Fixed Web.de integration with the new widget
CORS! Any of our API endpoints will respond to an OPTIONS request in public. More CORS! The widget can now accept a file upload via CORS.
iCloud now supports users with 2-factor authentication enabled!
The widget now responds to dynamic HTML. If you add a link to the page, calling cloudsponge.init will find it and enable it to launch the widget!
The new widget offers standard translations for English, Brazilian Portuguese and Bulgarian.
The new widget is generally available! Read about the new features, why you should upgrade and some of the benefits.
QIP.ru source fix for changes in the source origin service
Mail2World source fix for changes in the source origin service
BOL source fix for changes in the source origin service
Naver source fix for changes in the source origin service
New Widget Beta was released.
Fix Rediff not importing contacts for different servers
Fix DOB in Mail.com the Mail.com date format change to DD.MM.YYYY
New Status Server structure, adding tests for all fields imported.
Fix QIP.Ru tests in status server
You made it!
We have been making changes for a lot longer than we've been publishing them.
As a reward for looking this far into the past, here's our commit graph for most of our history.