I launched WeddingLovely, my startup, nearly five years ago. WeddingLovely, in a nutshell, is a free online wedding planning guide and wedding vendor marketplace. My goal is to walk couples through their wedding planning in a simple and sane way, connecting them with awesome small-business and local wedding vendors.
The planning side of WeddingLovely is simple — you can sign up for the web app at WeddingLovely.com. Vendor-wise, WeddingLovely runs a network of specialized directories (like WeddingInviteLove and WeddingPhotoLove), which all tie into a general directory (The WeddingLovely Vendor Guide), and all of the listings on all of these properties also are imported into the planning app. Right now, we have 5,000 vendor listings across 10 different vendor directories. Last but not least, I also run a semi-popular weddings blog which gets ~40,000 page views per month.
To be honest, if I was to start over from scratch, I wouldn't make it so complicated, but that's a story for another time.
In addition to running all of the above (and by running, I mean planning, designing, programming, marketing, and upkeep), I also somehow got the time to self-publish my first book teaching web app development in Django: Hello Web App.
When I list it all out like this, it feels like I'm a superwoman, when in reality, I don't feel like I actually do a lot of work*. This is because the only way I could do all of the above is through taking a _lot_ of shortcuts, automating _everything_ I can, trusting my gut, and being okay with skipping lot of best practices. *
How I run this all by myself, TL;DR:
- I make sure it's easy as possible for the businesses in my marketplace to share and promote my sites.
- Marketing is set up so I only need to work one day a week and it'll look like we're active all week long.
- Heavy use of natural looking drip-marketing. Every email that can be automated, is.
- Every email that isn't automated is probably a canned response to save time.
- I launched a new product just so we'd have a new/different source of traffic to the businesses we work with.
- Churn decreases when we stay in touch with our users, so we launched a weddings blog to give an excuses to stay in contact all the time without being annoying (not to mention another source of revenue).
- The businesses I work with are happy to help out with content and imagery — I use free work offered by my users all the time to build new features.
- I also hire remote contractors from my users to help me out with tasks that can't be automated (on the marketing side).
- Still, I can't really run a startup like this solo 100% effectively — there are major trade-offs.
Here's a rundown of how I run WeddingLovely.
Onboarding: I have free accounts, and I rely on my users to spread the word and drive more users onto my platform.
The internal Django admin for WeddingLovely, where I can review new applications and approve/deny.
This one is kind of a "duh" topic but let me go into a bit more detail.
When I was launching the specialized vendor directories, I did a lot of cold emailing. I would make a spreadsheet, email hundreds of vendors, explain what I was doing in a friendly and down-to-earth way, and invite them to join my marketplace for free. Bam, signed up users.
Marketplaces have a chicken-and-egg problem, meaning that it's hard to get visitors to the marketplace without a lot of selection, and it's hard to get vendors/profiles signed up when you don't have a lot of traction — which means a lot of "do things that don't scale" (like hundreds of cold emails) early on.
Wedding vendors know other wedding vendors, and at this point near 100% of our signups comes from word of mouth. We would get more signups if I was able to spend time on marketing, of course, but the directories and our listings are growing at this point without any major time spent by WeddingLovely. Of course, this is only possible through freemium accounts — vendor onboarding would be 1000% harder if I wasn't giving away listings for free at the start.
Other small things I do to help user on-boarding without spending a lot of time on it:
- In your drip emails to users, I encourage them to share their profile on their social networks.
- Give pretty badges to add to their website ("Approved member of the WeddingLovely Vendor Network!") Also good for SEO, since they also link back to my site.
- Back in the day, I would follow thousands of wedding businesses on Twitter, because they would get an email saying we followed them along with our Twitter description and link to our sites. I would update the description to something like, "We're looking for new wedding stationers to list on our site for free! Sign up here:" and our website link would be displayed. But Twitter ruined it by launching their t.co shortener. Clicks to our website drastically dropped after the URL was obscured, since users couldn't see that we weren't some spammy website. I'm still mad about this.
Automated marketing: Heavy use of drip marketing and Buffer so I only need to work one day a week.
Once I approve a vendor to join WeddingLovely for free (which pretty much consists of a quick glance of the image they upload and their company description), I set active=True, which automatically adds them to a Mailchimp list and starts a drip marketing campaign.
All automated emails are written to make it look like a personal email. I don't recommend using HTML emails for newsletters as engagement goes way up if they don't look like a newsletter. The drip emails let the vendor know they're approved and implores them to share their profile, then introduces them over the next month to various features as well as an upsell to our paid accounts.
Mailchimp's automation screen where you can set up drip marketing.
To make sure our social media accounts look active throughout the week, I'm a heavy user of Buffer. We've built up quite a following on most social networks (6,000 followers on Twitter, 1,500 followers on Instagram, 24,000 followers on Pinterest, for example) and being active is really important. Content from our blog, general announcement tweets, and content from a few wedding blogs are collected and set up to go out over the week on one day.
WeddingLovely's Buffer account
The combination of these processes means that if I only have one day a week to maintain WeddingLovely, I can do it all at once, and then the rest of my week is free to work on development, or on side-projects like my book.
Traffic: I launched a free wedding planning app to drive potential customers to my users so I didn't have to rely on SEO.
Once my marketplace gained some traction, I could start relying on SEO to drive users to my listings — people who searched for "wedding photographers in San Jose" for example.
SEO is kind of hard though, and my rankings has been dropping over the years (I'm working on it, but SEO is kind of a long game so I don't have much in results right now.) I didn't want to be beholden to Google, so I diversified WeddingLovely by launching a free wedding planning app.
Originally a paid product because I wanted to diversify our income as well (long story short, decided that traffic/page-views to our vendors was more important than income so I made the app free to increase usage.) The wedding planning app is WeddingLovely's way to bring in and control the traffic that goes through to our vendors, and allows me to build features like in-app vendor booking and management. The big downside, of course, is that it's yet another product to maintain.
Reducing churn: I launched a blog so I have an excuse to repeatedly engage with my users.
Our weddings blog, which is run off of Wordpress.
I don't want to hound the vendors in our marketplace every week to sign up for our paid plans. A lot of vendor directories do this and vendors report to me that it feels very scummy. On the other hand, if the vendors forget that WeddingLovely exists, then there is no reason to move to a paid account.
I launched our weddings blog primarily as an excuse to constantly email our users without making it look like we're pestering them. **Our wedding blog is near-100% vendor-sourced content. I share the work that our vendors are doing, which produces a blog filled with lovely wedding inspiration without spending time writing content myself. The vendor gets a boost in page views and good feelings towards WeddingLovely (not to mention they share the posts and we get the traffic/page-views from that.) I can sneak in excuses to pitch them our paid vendor plans during these exchanges. We limit blog features to twice a year per vendor, so we can upsell them once they hit the limit on features.
The blog exposes us to new vendors for our marketplace and new users for our planning guide. Not to mention, we can sell sidebar advertisements and sponsored posts, which brings in more income too.
The blog is run on Wordpress, because Wordpress has too many can't-live-without-it features for running a popular blog. Unfortunately that means that the blog and our vendor profiles are on two different systems that can't (easily) talk to each other.
I need to link the blog features to the profile on our directories, which used to be manual but now is mostly-automated.
Every time a vendor is featured on the blog, we need to add the feature to their profile.
The internal admin add-feature form.
The output from using the form above — links already filled out — which I copy/paste into email to send to the vendor.
The admin-only form allows me or my blogging assistant to add the feature to our database and tie it with the vendor's profile while also creating the script we use to announce the blog post to the vendor (with social links and sharing filled out.) So by filling out one form with info, all the info is added into our backend and we also save time by having our announcement email created for us.
This is actually only one of many different admin forms I've built over the last couple years — for example, I also have a form where I can press a button and get a list of emails of vendors who aren't on paid accounts and who haven't been featured on our blog in the last six months, so I can email them directly and invite them to submit content as well as remind them about our paid plans. Now that I'm typing this, I probably could automate this with a cronjob, but it's still faster than logging into my server and running a database query.
Support: Heavy, heavy use of canned responses and Boomerang.
A few of my canned responses — there are even more after you scroll.
I send out newsletters to all our vendors about twice a month, asking for new content for our blog or announcing a new feature (of course, a subtle upsell included in the content as well.)
I normally get ~40 emails per day, if that, normally — but the days after a newsletter means I'll usually have hundreds of responses. The only way I could get through all of the email and keep "inbox zero" is by creating a canned response for nearly any kind of email I get.
Of course, these responses are crafted to look as natural and "human" as possible. I worry that some time someone will accuse me of being a robot but so far that hasn't happened yet.
Even responses that are only a line or so long will get added as a canned response if I find myself typing it at least twice.
I don't think I could do my job without Boomerang. I can set up feature announcements by setting them up on Sunday and scheduling them throughout the week. I can make sure I follow up to every sales-type email, since businesses often get busy and forget to respond. I use it to remind me about important emails months later (for example, if I a vendor moves to a paid account, three months later I'll get a reminder to follow up with them.) It's a key part of my email management strategy.
Hiring: I hire contractors/remote workers for any easily repeatable task.
Okay, I'm not 100% solo at WeddingLovely — I usually have at least one part-time remote contractor helping me out with various tasks.
I'm lucky that I work with thousands of small-businesses, folks who are already used to working for themselves at home. Years ago, I hired someone full-time from the Bay Area (back when WeddingLovely had funding) and ran out of money really quickly, and ended up needing to lay off the employee (who was also very good friend of mine — it was one of the hardest things I've ever had to do.)
I've had a lot more success breaking down my business into small pieces and hiring contractors to run those pieces, and I almost always hire from my vendor network. Right now I only have one contractor who puts together blog posts for me but I've worked with four at once before — one helping with vendor onboarding, one helping with sales, one running the blog imports and one managing the blog.
As WeddingLovely is bootstrapped, ergo low on cash nearly all the time, these remote contractors cost a fraction of hiring a Bay Area employee. They help me run my business more efficiently, and I help them bring in some extra cash.
Content and SEO: Take advantage of your users.
Of course, not in a mean way
The beautiful image on the WeddingLovely.com homepage, as well other images scattered throughout the site, were donated by Josh Gruetzmacher, an amazing San Francisco wedding photographer listed on my directories. He said he just wanted to help out, and I got amazing non-stock images to use for free.
I'm currently adding content to my search pages to help with SEO, and asked my vendors to volunteer their time to write 2-3 paragraph blurbs about their city and profession. I'm getting real, friendly advice from local businesses, rather than creating a template and writing poor content on my own.
I've found that being real about WeddingLovely and my mission, the small-businesses I work with root for me and my business and want to help out, providing content and imagery for free, which is huge when you're a bootstrapped business.
Caveats: I can only focus on one task at a time. Things fall through the cracks.
One of my biggest peeves is when I tell someone about my business and they immediately start giving me suggestions of what I should be doing. "But it would be so easy!" they say.
Running WeddingLovely is like needing to juggle ten balls when I can only juggle two max at a time. If I want to focus on something else, I need to drop a ball.
- One of the biggest holes in my business has been sales and creating a sales pipeline. It's technically easy — I just need to focus on it, and I can't when I'm running everything else too (and honestly, working on the product is more fun than working sales). Revenue could be a lot higher if I would just focus on this.
- I can't A/B test. I have to trust my gut with designs, and I know my gut is probably wrong a lot of time. But I have to go with "it's good enough."
- I have minor tests set up, but the majority of my code isn't covered by tests (oops).
- The wedding planning app has been mostly neglected over the last year since I've been working more on the directory side of my business lately. The design is looking stale.
- I'm aware there are still a lot of parts of the site that are broken on mobile.
I can go on forever of all the parts of the business I feel are broken or are being neglected.
Success? Not quite... but it does give me freedom.
WeddingLovely doesn't bring in a lot of money (one of the main reasons it's impossible for me to raise money at this point — if I haven't hit virality in four years of running the business, I probably won't ever. Oh the stories I can tell of thinking I could raise money last summer.)
It's super fucking fun though. I love building web apps (which is why I think more web designers should learn how to code). I'm writing this from a rented apartment in Budapest because I can travel when I want (plus, it's way cheaper than Silicon Valley! I highly recommend renting your apartment and working abroad for a few months.)
In a nutshell, WeddingLovely has become a minor force in the weddings world and it almost entirely runs itself. I'm proud about what I've built.
I hope this insight into my business helps you run yours! If you ever want to chat, I'm @limedaring on Twitter. Of course, if you're thinking of learning how to build web apps yourself, I highly recommend my book.
Happy to answer any questions in the comments!