Vincent Ritter

← back to projects

Sublime Ads

A privacy focused ad management service for your apps, websites and others.

Sublime Ads is a platform to allow you to manage and serve your very own ads in your own apps, on your websites, or other services using a simple API, or a lightweight drop-in JS script. You are in complete control on what you want to show, and how.

Everything is in one place and is easy to manage, no need to write your own custom solution. On top, Sublime Ads is privacy conscious to you and your users. Only taps/clicks will be registered for served ads and nothing else (can also be disabled per ad). I also don't use any tracking for the web application and other things, just like the internet is supposed to be.

Launched early 2021 as an MVP product to satisfy my very own needs as a developer with multiple apps and sites.

Visit the website here.

Project posts JSON/RSS Feed...

Hopefully I’ll spend one more evening/day on the category view for Sublime Ads, and then I’ll move onto the Ads themselves. I estimate a good week just for the Ad implementation. Then I need to get the API going too. Then I can invite people that are on the list!

Whoops! Thankfully I spotted my grave coding mistake whilst still working on it… by pure chance. Ah the joys. 😅

Category list view for Sublime Ads. Still very preliminary…

Slowly started working on the Categories view for Sublime Ads. Just getting started, and still loads to do. Here is the initial state… which no doubt I will tweak at least 50 times.

Fixed a few issues with the billing side on Sublime Ads. One service I was using for VAT rates was unexpectedly shutdown without any warning. Huge shame. Now I’m using something else though and it’s all working again.

Oh, don’t mind me adding even more language strings to my web app… and if you know what you’re looking at, you can see there is a lot there already and only covers 30% (or 100% of what I’ve built to date) of the app.

Made a few more tweaks to the billing section, on Sublime Ads, today. Address details can be changed now and also added a few more wording tweaks, like adding the price for your upcoming payments. Of course it all depends on your VAT status etc too.

Sublime Ads - Billing galore

Not going to lie, when I first thought of integrating billing, I thought it should be relatively straight forward given that my chosen payment provider would do everything for me.

Unfortunately that was not the case. I won't go into more detail here as I already wrote about it. Long story short, I went and integrated Stripe.

Tax nightmare

When you're a EU based business, things get complicated. Invoices have to be correct, they need to show the correct data and on top you need to make sure VAT is paid correctly for customers based in Europe. And if you want to make sure to charge customers the VAT rate for their country, things get even more complicated.

As I had to integrate payments myself, see above, I had to make sure I have all the data needed so I can keep the accountant and relevant tax authorities happy. As a one person business it's an absolute nightmare... but it has to be done. There is no choice. There of course was an easier option, but that would lead to a bad customer experience - so I decided not to do that. Instead I built a system that I can work with to file my proper returns, without doing too much manual labour.

So... let's get started with the lowdown.

Subscription

Sublime Ads is a subscription based business, which means it won't be free. I want to build something that I can sustain long-term, whilst at the same time sustain my own business models.

I decided that I will keep things super simple and there will be only one price to pay. There won't be upgrades or "team" account upgrades etc... Just one small monthly price.

At the start, I will keep it at a lower price point - gradually increasing the price as I go and add features. For anyone signing up early will always benefit from the price when they signed up (if you haven't cancelled). So no upgrades, no taking away features because you're on an early plan. Too many times have I seen that bullshit. That's not going to happen here!

Whilst I want to announce this next bit in a dedicated post, I'll give a hint here:

If for some reason you sign up but find yourself in a circumstance where even a small monthly payment is too much, it's my promise that I will waive fees for you - either by a discount or just a couple of free months. I know what it's like, I was there... and perhaps even will be there - nothing is a given. We are all human. We all have problems. And we all sometimes have money problems.

Taking a payment

I didn't want to take shortcuts with the billing section, even though it's something you touch once and then never look at again!

When you first start, you'll have a 30 day trial - no questions asked and no limits - no upfront credit card information needed. You don't have to pre-authorise your card when you walk into a shop, so you shouldn't have to do it on a web app - those things are only in place for people that forget at the end to cancel! Nothing like that here I'm afraid.

When you're ready, you can go over to the billing section. Depending when you do fully convert to a paid subscription, it will apply any trial days remaining and charge you at the end, or if there are less than 2 days remaining, or it has expired, it will go ahead and charge you straight away - for one month.

Filling out the form is straight forward, just your name and your billing address. I'll need this, because of my EU business presence. Plus it makes it more secure for me.

If you're based in the EU, I'll work out the correct VAT rate on the fly. This will get applied to the base price (to be decided).

Here is an image of what shows up as you enter your country and it's within the EU. In this case 23% on top the base price. I also give you precise information of the breakdown. I don't want to cheat you.

I do have the facility to add a VAT number to your account. This is an automatic process and will verify accordingly if it's valid or not. I'll mention more about that below, however here is what that would look like:

(Note that I changed my own VAT number to something random)

If you're in the EU, you know what that means.

Next, we want to subscribe. Payments are taken via the Stripe Checkout, as I quite like it. Stripe then talks to the web server via signed Webhooks. All quite cool in my eyes and it's been awesome working with the API.

Here is the subscribe button:

There is a little bit of information below the button. That's there just to confirm when payments will start (when on a trial) and also some more info about payments and EU VAT.

We then land on the checkout page:

I love the UI here and it's very clear what you're paying for. Stripe will also make sure to collect payments if a European card ever has to re-authorise later on. It's called Strong Customer Authentication, also know as SCA, if you're wondering. Not something I wanted to integrate as well. Stripe will take care of it and do the necessary things and talk to my web app at the same time. This probably saves me a good few days.

There were a few payment gems available that I could use for this, but I built it myself - because that's how I learn. Not to mention I need a few extra fields for reporting purpose.

You're subscribed!

Success! You're in! Now the fun starts.

The billing page is updated accordingly and gives you a few more things to do. First up is a confirmation of where your account is standing:

Simple enough. The wording changes depending if you're still within the trial period or not. Just a subtle change.

From there you'll be able to update your card details. I'll need to add the ability to change your address also... now that I think about it!

As you've subscribed, invoices will now become available. I left this quite simple but informative enough:

Depending on the status, the colour changes. If I ever refund one, that will also be reflected here. Pressing on "View" will go to a special link on Stripe where you can grab what you need. Stripe will also handle emailing these to you.

Oh, and everything of course is encrypted... here is my local data for invoices:

VAT

If you have a VAT number, you can get in touch so I can add it to the account. Once active, and verified, on your account, you'll get an email from Sublime Ads saying it's all there:

Again this is just specific to EU based customers. Every individual comes in different sizes and shapes and thought it would be useful.

There will be an extra section in your account too, just to confirm it's there:

I want to CANCEL

I got you covered here too, nothing too exciting here and the screenshot will do what it needs:

Again I want to concentrate on the wording more. Pressing cancel will in effect stop the subscription from renewing at the end of the current billing cycle.

If you decide to resubscribe, you can do so too:

Again the wording changes accordingly on the current account status. Resubscribing is as easy as pressing the button and will give you a bit more info before you commit.

If you do cancel, the app will tell you when it expires in the header too:

I won't email you to bug you about it. I get it!

Closing thoughts

I spent 1.5 weeks more on billing than I wanted to, but I'm super happy with the results and the flexibility. Sure, there will be edge cases, but I'm not too worried as the web app is manageable and I can fix things, where needed, quickly.

The design is still simple and I'm happy with the wording throughout the billing section. Again I'll tweak as I go.

Billing is a feature, so it was important to get it right. Without billing, there will be no web app... no business. I'm happy I tackled it now rather than later on.

For the next week I'm going to be finally working on categories and ads themselves. Pretty excited.

The billing section is now complete on Sublime Ads, which means I can move onto Ads and Categories 🥳 I’ll be doing a longer blog post about billing a little later in the week.

Added a dedicated “Cancel” section for Sublime Ads. It’s important!

Ooo, didn’t know you can delete ALL of your test data in Stripe:

I worked on invoices last night for Sublime Ads. Just finished the styling part too. Billing has been a long road, but it’s there now!

One of the details in Sublime Ads are the subtle wording changes throughout the app, for example: depending if you had a paid subscription, or if you’re still within the trial period, the wording differs when you cancel:

"Your subscription is active but will be cancelled on May, 11th 2020. No payment will be taken.” turns into:

"Your subscription is active but will be cancelled at the end of current billing cycle, on May, 11th 2020.”

Hoping to keep this trend up as I go. So far so good.

Knowing me, I’ll change most of the wording even more as I go. I kinda like that part.

Some more UI details for Sublime Ads when you have cancelled your subscription:

It will remain active until the last day of the billing cycle and you can resume any time. If you’re navigating around, you’ll see this in the header:

Clicking on that will take you to billing.

I was thinking about pricing for Sublime Ads… I’m going to have just one plan, to keep it simple, which then increases in price over the course of time. Everyone that subscribes will always be locked into the price when they signed up. I think that’s fair.