Making startup swag cool again using APIs and vCards

Lean how we finally managed to find, what we call, swag market fit with our Startup Select cards and everything we tried doing before that...

2 years ago   •   15 min read

By Vedran Cindrić
Table of contents
Learn how to get the most out of conferences like Startup Grind Global or WebSummit as a startup. Psst, the answer is: bring cool swag that resonates with the audience at the conference!

Not a Fan of Flying But...

I've never shared this before publicly, but I'm not a huge fan of flying. I wouldn't say I'm afraid to a point where I don't want to get on a plane, but I'm definitely not comfortable flying. Every bump or gust of wind has me worrying, scheming and remembering all the Plane crash investigations I watched on NatGeo. In practical terms, this means that I'm awake while everyone else is sleeping and "enjoying" their flight. It was no different this time around. 2 hours into an 11 hour flight from San Francisco to Paris I'm typing up the words your reading right now 😬

As you know I like to start these posts with some music so I don't plan on disappointing this time around. I used to be a big fan of Las Vegas, a TV show about running a casino with the legendary James Caan. It was ages ago but it was also the first place I ever heard the song Ooh la la by Goldfrapp. Stuck with me ever since and it seemed appropriate for this one. So...

The Road to Swag Market Fit

The reason why I was on a red-eye from San Francisco to Paris was Startup Grind Global, a conference held in Redwood City, California that brings together some great speakers and startups alike. This year, after all the COVID-19 problems, it was finally held in person 🎊. The kind people from Startup grind invited us as one of the select startups from the entire world πŸ™πŸ». Only 80 startups got the invite so you don't say no to opportunities like that. In total it lasted three days. The first day was dedicated to startups only and featured some awesome startup-focused content. The second day was open to the general public and featured many great talks and panels. The third and last day was the day we had our exhibition space and 1-minute pitch on the main stage. The event was also a great way to learn more about the Silicon Valley scene and test out our newest swag idea and see if we'll get to what I call swag market fit πŸ˜‚.

But before we go through what we did for Startup Grind Global let's actually take a stroll down memory lane and see what we did at some previous conferences.

Early vCard traction at Infobip Shift

Startup Grind Global marked the third event we officially attended since founding Treblle. The first one was Infobip Shift in Zadar, Croatia, originally started by a friend and fellow founder Ivan Burazin. It was our first event after founding the company and we kinda kicked off this tradition of preparing a little something-something for every event we attended. For that conference, we wanted to do something with SMS because Infobip, the company organizing the event, is in the business of sending SMS messages. The conference coincided with our new business cards. They were sleek, minimal and had a QR code on them. We wanted to make the QR code pretty flexible and easily editable after we print it. The only way I could think of was to have the QR code point to a URL. Yup, you've heard me right - good old URLs. So instead of hard coding all the contact details like the first name, last name, phone number...into the QR code itself we simply used a URL like this one: https://treblle.com/vc/vedran.

Now in case you didn't know, having a QR code with a lot of information on it means that the QR code itself is more complicated. Think of all the little shapes you see on the QR code. All those are actually coded pieces of information. The more information you have the more shapes you need. The more shapes you have the bigger the QR code needs to be in order to be readable. So there is a fine line between how big your QR code needs to be in print for it to be readable and how much information you need to cram into it. We wanted the QR code to be pretty tiny on our business cards and hence using URLs was the only option. We knew that we wanted to return a full vCard with all the contact information once you visit that URL. The way we approached it at that time, given it was only the three of us, was we simply added all the contact information into our Mac Contacts app and exported each contact as .vcf. In the Mac app, you can add everything you need for the contact details including an image of the person. We uploaded those .vcf files to AWS CloudFront and every time you would visit a link like https://treblle.com/vc/vedran we would actually redirect you directly to the matching .vcf file hosted on AWS CloudFront. Why CloudFront? Because it's FAST and CHEAP 😁 In case you didn't know when you give iOS or Android a .vcf file they will recognize that and they'll know you're trying to show contact details from someone. In that case, both iOS and Android will essentially prompt a new contact sheet and show you all the details. You're literally one click away from saving that into your contacts. You can also make it as rich as you want in terms of information.

Thx to URLs we managed to keep the QR code really small and we got it to work with these vCards that we can edit or adjust when needed. As soon as I got that working I thought - wouldn't it be really great if we can see who scans our cards and from where. For a moment I wanted to make a small dashboard where I would keep track of the scans but then I realized that we've already built such a thing and it's called Treblle. Essentially what I did is simple: each time someone scans a card (aka visits a URL) I make an API call that has Treblle enabled on it 🀩. This actually allowed us to see, in real-time, who was scanning our cards, from where in the world, whose card and using what device. People always ask me for Treblle uses cases, well here's one for you. Bet you didn't see that one coming.

To round it all off and make it super sexy for the Infobip guys we used their SMS service to send a message with a sharable link to the request on Treblle. In case you didn't know, with Treblle you can easily share requests with anyone using our auto expiring links. When you send someone that link they can access it for a limited amount of time and they can see all the details they might need like: request/response data, user location, user device and similar. Whenever someone would scan a card it would trigger an API call. That would get recorded on Treblle and that person would get an SMS with the link to the request itself 🀯. Now that's cool, right?. People did seem to like it and it was a great party trick, as the Americans say.

Gathering Experience at WebSummit

WebSummit ended up being a learning moment for us, but let's call it a gathering experience ;) We wanted to do even more but there were a few problems. Number one, there are rules on what you can and can not bring to the conference. Number two, we have to be able to transport the swag via a plane. So it has to be small, it can't be a huge banner or something heavy and bulky. At one point ideas we were floating by were: Starbucks gift cards, branded water, branded candy...The logistics of all those got complicated and we decided to go with the traditional startup swag like stickers, some flyers, branded and a custom paper folder. We were assuming you were going to get a s**t ton of flyers so we made a folder you can carry them in. It looked cool and was quite useful actually. Anyway, we got to the event and most of the people were refusing to take any paper flyers because they didn't want to produce more paper waste. See we didn't think of that one πŸ˜‚ So we adjusted and didn't hand out as many flyers but focused on our business cards and laces. We also made sure we actually talked to people who walked by our booth and explained what we do. Probably talked more that day than 3 months prior to that combined.

Having some experience under our belt we knew that we were not bringing flyers to Startup Grind 😎 Nobody had a clear idea of what we can do and what will make sense. We had some laces laying around and the plan was to bring those. I again returned to the idea of Starbucks gift cards simply because I know everybody walks around these things with cups from Starbucks in hand. The rest of the team didn't go for it, again, so I lost that battle for good. As time flew by we didn't have a lot of time to think and concentrate on this. We were growing like crazy, launching our native apps and a million other things.

One of those million other things was our Startup package. We were building a special package that would include a discounted version of Treblle, some of the content we were producing for startups and access to our network of developers and VCs. The problem I had with that package is that almost everyone who has a SaaS company has a package like that. From all the top brands like AWS, Microsoft, HubSpot, Mixpanel to the little ones like us. And everybody was trying to differentiate and be "value add" (for all my VC friends) 😁 In a perfect world the ability to get a discounted version of Treblle that helps you save a lot of time on developing your API, writing documentation for it, testing it, debugging, monitoring, measuring should be enough but unfortunately it isn't. You need to spray that with some pizazz.

Stumbling Upon Gold?

Did we strike it on purpose or did we end up stumbling upon gold? Probably a bit of both!It was the last week of March and basically around 10 days left until the Startup grind conference. Our rough plan was to build a landing page where people would sign up for our Startup package and call it a day. There were suggestions of QR codes that would allow the users to scan them and directly go to our startups page but I felt kind of tired of QR codes. Darko and I were sitting in his office and got to talking about how easy our jobs would be if we were a fintech company like Wise, Revolut or others because we could just give people physical cards which looked cool. I took the opportunity to make a pivoting joke and asked if we were doing NFTs next πŸ€ͺ. But the idea stuck with me to be honest. I started thinking out loud and we landed on an idea of a simple card that would have a card number, just like the real credit cards do, and that number would essentially unlock the startup membership. So one would visit our startups page, enter the number from the card and they would get our startup package.

I was into the idea mainly for one reason: it's something we could physically give to someone. Something they can feel. See and touch. Why? Well I've been in the software business for a long time. I've given our clients so much free stuff in terms of development hours, new features, code upgrades, designs...all of that is great and everyone says "thank you" but I always felt like they never understood the true value of it. You might ask why? Well, I'll quote Matthew McConaughey from that famous scene in The Wolf of Wall Street: "Fugayzi, fugazi. It's a whazy. It's a woozie. It's fairy dust. It doesn't exist. It's never landed. It is no matter. It's not on the elemental chart. It's not f*****g real." That's why!

Getting back to the idea, the more we thought about each of the cards having a different number on them the more we realized it would simply be too expensive and simply not doable before the conference. Finding a print shop that will produce a quality print in a reasonable amount of time in 2022. is like hearing your company API docs are up to date - you've heard people say that but you were never able to confirm it 😜.

Days go by and I can't let go of the idea. We essentially became hell bent on making these cards and we finally landed on the topic of NFC. I knew Android had support for NFC based cards and iOS added support for it in recent years. The only question was how good or bad the experience was. The only way to get answers to questions like this is quite simple: test it in real life. So within a day Darko got a hold of your run of the mill NFC card in hand. Once you buy an NFC card it will probably be empty. Empty NFC cards won't be read by iPhones. iOS will simply ignore the cards and nothing will happen once you "scan them". Android on the other hand will tell you that the card is empty. This is just a PRO tip so you don't go crazy like us while testing 😝 Now, to program an NFC card on the iPhone you can use an app called NFC Tools by wakadev. It works like a charm. It's one of those things and apps that simply put just works. You can use the app to program the card to do basically anything: open a link, connect to a wifi network, open app...anything.

We knew we wanted users to go to a special link where they would simply sign up to claim the startup package and that's it. So the plan was to program each of the cards with a link that has a unique identifier, for example, treblle.com/startups/9c2a0e6a-c008-11ec-9d64-0242ac120002. That would speed up the entire process a lot and be more elegant. We were super happy and pumped about the idea. I told Darko to start designing. We wanted the card to be minimal, sleek, mysterious...Darko literally nailed it from the first go. He created two versions: black and blue. Both were so good that I couldn't even decide which one to pick. I gave the marketing guys the task to come up with some suggestions for our "program" and they also nailed it from the get go. Treblle Startup Select was born 🀩 We wanted to indicate that the program was special, invite-only and that not everyone can get it. You had to either be invited or given the card to get our special Startup package.

Everything was coming together nicely but there was a problem. We called a lot of print shops in Zagreb and they laughed at us over the phone when we told them we wanted 100 cards in 5 days. One did however say that it might be possible to do. We were so happy they didn't say no, that we sat in the car and drove there directly. We explained the idea, showed the design and they said it's impossible. "Nobody can print a design like that on an NFC card, it's unheard of"..."nobody has black NFC cards, they all come in white"...But again, they didn't completely say no. We agreed to try to adjust the design to make it easier and they agreed to try to print them out using one of their partners in Italy. And so the cards were being printed πŸ₯³

We went back and started working on the website that would make all this work. In the middle of it I felt like we could do more and I remembered the QR code idea we did for the Infobip Shift conference. It was beautiful. It's was one of those things were you just go "oh f***k" and realize that something can work. Basically the idea I had was: if we can somehow track when someone used the card to activate their Startup package, using the unique identifier on that card, we can tie it to a user ID, and then, the next time they scan it we actually return a vCard with their information 🀯. That way the card we gave you is no longer this single purpose thing but rather becomes something you can use for yourself. A cool party trick that YOU will show. Not me. You.

I've learned to not celebrate ideas like that before actually trying them out, but after 10 minutes of testing we were in action. Everything worked like a charm. Behind the scenes we do the following: we have a database table of all the unique identifiers that are coded on to the NFC cards using URLs. Each new entry in that table can be associated with a user but by default that user is NULL and it stays that way until someone scans the card and "activates" it by signing up.. As long as they don't sign up we will always show them the Startup Select activation page. Once they do sign up we will associate a user with that unique code (card) and we will know that card has been activated. The next time someone scans that card we will simply return a vCard instead of the Startup Select activation page. Since we know which user activated the card we can go to our users database and fetch all the various information we need like first name, last name, company name, phone number and similar. We take that data and return it in vCard format using an off the shelf Laravel plugin https://github.com/Astrotomic/laravel-vcard. And guess what - it worked perfectly. If the card is activated it serves as your business card and opens the same UI to add a contact on iOS and Android.

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use JeroenDesloovere\VCard\VCard;
use App\Models\{User, Code};

class StartupController extends Controller {

    public function view($uuid, Request $request) {

        $code = Code::firstWhere('uuid', $uuid);

        if(!$code) {

            return redirect('startups');

        }

        if(!is_null($code->user_id)) {

            $user = User::with('customSettings')->find($code->user_id);

            $vcard = new VCard();
            $vcard->addName($user->last_name, $user->first_name);
            $vcard->addCompany($user->customSettings->where('setting_key', 'company')->first()->setting_value);
            $vcard->addEmail($user->email);
            $vcard->addPhoneNumber($user->customSettings->where('setting_key', 'phone_number')->first()->setting_value, 'PREF;WORK');
            $vcard->addURL($user->customSettings->where('setting_key', 'url')->first()->setting_value, 'TYPE=WORK');
            $vcard->addURL($user->customSettings->where('setting_key', 'linkedin')->first()->setting_value,'TYPE=linkedin');
            $vcard->addNote($user->customSettings->where('setting_key', 'pithc')->first()->setting_value);
            $vcard->addAddress(null, null, null, $user->customSettings->where('setting_key', 'city')->first()->setting_value, null, null, $user->customSettings->where('setting_key', 'country')->first()->setting_value);


            return Response::make(
                $vcard->getOutput(),
                200,
                $vcard->getHeaders(true)
            );
        }

        return view('site.startups.view', compact('code'));

    }

}

But we didn't stop there though. We also added the ability for you to see scans in your Treblle dashboard as API calls just like we did with the original QR code idea. As the final over-the-top feature we added some gamification to the card. The more the card is scanned aka used as a business card the more free API calls you get each month πŸ”₯

We also knew that we needed a sleeve for them, just like the ones you get for your hotel room. And trust me we did try to get them done but the print shops said we were nuts and this time were adamant about the deadline. So they are being printed :D We also managed to include some puns into the card sleeve. So on the front, it says GET /startupselect and on the back are instructions on what the card does and how to use it.

The feedback

We brought around 100 cards to the Startup Grind Global and we came home with literally 0. All 100 of them are in the hands of various startup founders who are looking to bring their API monitoring to the next level. The reactions were simply incredible. People were super happy and thrilled. They all loved the design, the level of complexity and thought that was put into it and the fact that this was something they can touch and feel. If we gave people a bunch of codes it simply wouldn't be the same. You wouldn't get the smiles, the "aha moments" and the taps on the back with codes. One guy even brought 5 of his friends just so we could explain how the tech behind it works. Hence the blog post πŸ€“It was one of the best things we did to get to the wholly grail of marketing and growth which is - word of mouth recommendations.

Now in case you wanna get your hands on one of these. There are two ways:

  • 1. you go to this link: https://treblle.com/startups/ and apply for a membership where we review your application and if all is good we ship it out to you
  • 2. You meet us at our next conference and grab one of them in person. In that case you don't need to apply, you get the membership automatically. The next event is actually closer than you might think πŸ˜‰

Would love to hear what you think so if you feel like sharing you can always join our little Slack community right here. We'll be waiting πŸ€™

Spread the word

Keep reading