Subscribe to this blog using RSS
Tuesday 25 January 2022
Type.World Sign-In
In my quest to create a decentralized ecosystem for selling fonts, I’m excited to announce the next link in the chain: Type.World Sign-In.
It makes the existing Type.World user accounts accessible to third parties such as independent type foundries. The idea is to improve the font shopping experience at independent retailers insofar as users wouldn’t have to sign up for yet another user account, which is time consuming and annoying to most people, especially when entering address data is involved. Obviously, a new account needs to be created once, with benefits multiplying as Type.World adoption rate grows.
Similar to existing sign-in services such as Google, Apple, Github, etc, existing Type.World users would benefit from a vastly improved user experience when using the their Type.World account to log in with a font retailer. The service not only enhances the purchase experience, but also the subsequent font installation experience via the Type.World App, because the Sign-In eliminates the required additional step of manually onboarding the user’s Type.World account with the publisher for inviting that user to the new font subscription.
Signing in with Type.World Sign-In and making fonts availabe for installation through the Type.World App becomes one and the same process. The video above illustrates the process powerfully. What’s happening under the hood here is that once a user has completed the purchase, the publisher notifies the central Type.World server of the subscription change and invites the user, identified by their anonymous user ID that came with the data made available by the Sign-In service, to load that subscription in their Type.World app.
As usual, this is a paid service for publishers at competitive rates. Even though I would love to make something like this available for free, that would put the project at financial risk if the service gets adopted by a large website.
In line with the open-source spirit of Type.World, in the authorization step of the Sign-In procedure, users are presented (behind a button) with the precise raw data that Type.World makes available to the third party service. Of course users can revoke this authorization later through their Type.World user accounts. Type.World Sign-In is token-based and fully OAuth 2-compliant.
The Sign-In service complements the usage of the Type.World app excellently, with the two technologies converging in a very powerful way. When did you last buy a font and were able to use it in your apps only 10 seconds later? Not saying that speed is everything. But it comes with the bonus of not ever having to handle the fonts in terms of storage location, installation, backup and recovery etc. Once you’re using the Type.World app, you can forget about everything except your account login.
The reason I’m publishing the Sign-In service now before the font hosting service that I announced previously is because that hosting service will depend solely on Type.World user accounts.
Please read the developer documentation at type.world/developer/docs/signin
Please note that you don’t need to use Type.World user accounts for authentication on your website in order to have your customers use Type.World for font installation. You can still invite users to install your fonts using their email address for identification, or simply by offering a button on your website that will open the app, if installed.
Awesome Fonts
In the wake of creating Type.World Sign-In, I also created an imaginary type foundry website with a fake online shop that utilizes the Sign-In as well as font installation through the app. Please hop over to awesomefonts.appspot.com to fake-buy a few fonts and see the system play out for yourself. (Source code here)
For setting up Awesome Fonts, I implemented for the first time all my own recommendations for how to set up an API Endpoint under the Type.World JSON Protocol. Naturally, I found a few mistakes and omissions both in the central Type.World server as well as in the Dummy Flask Server that I corrected. In case you got frustrated playing with the code at some point in the past, you may want to try again now.
Credits
While it may seem obvious to offer Type.World accounts as a sign-in service, I didn’t always have that idea. I believe that I first heard it in Berlin from Jens Kutilek in a chat during the presentation I gave about Type.World at LucasFonts. So the credit to round off the decentralized font shopping experience with user accounts goes to Jens.
Patreon
By the way, Type.World’s the server costs are clocking in at around 100€/month currently with no measurable income as no one has adopted Type.World yet. The current Patreon donations are idling at a meagre $37/month.
If you feel like supporting the creation of open source software and a project aimed at improving the font industry for everyone, please pledge a monthly support on my Patreon page.
Tuesday 02 November 2021
October 2021 Update
I’m back
As promised, I’m back from the summer and continue to develop Type.World.
So far I’ve cleaned up my code and worked on a few loose ends that were left over from when I published Type.World 1.0 in spring, namely the messaging servers. They are responsible for the live update notifications that the app receives (if the publisher decides to use that functionality). Although I’m working in the Google Cloud ecosystem, I decided against using Google’s own Pub/Sub implementation for that, which is really simple to implement but is unfortunately limited to 10,000 topics and 10,000 subscribers per topic. So any way I put it I would have only been able to fit 10,000 combined users and subscriptions into this project, and that’s a limit I’d rather not be subjected to.
So instead I opted to implement my own messaging server using an open-source library called ZeroMQ. One such server can hold up to 65,000 users, and I can now easily scale the system up by adding servers. When I first decided to make a font installation technology, I really didn’t think I would have to spend so much time on messaging servers.
Open-Sourced The Central Server
Also, today is the day for a rather big announcement: I finally open-sourced the central server, otherwise known as https://type.world. It hosts not only the user-facing website, but also https://api.type.world that the GUI App and font publishers interface with to control and use the system, normally hidden from the user. Essentially, the type.world server is responsible for hosting the user accounts that you can create in the GUI App. It ties the room together.
It’s the last remaining part of the system that needed to be open-sourced. I held that back not just because I had to clean up my code before I could show it to the public, but also because I was simply afraid of publishing what is arguably the heartpiece of the whole operation, including the commercial part. I trust in open-source and the benefit it brings as people can spot mistakes and contribute fixes. I’m just not used to it and scared.
So without further ado, here is https://github.com/typeworld/appengine
What’s Next?
I want to create a separate platform for hosting fonts. Obviously, implementing an API Endpoint such as is required by the Type.World App is quite a hurdle for the average type shop. A very easy website where you can drop your fonts and send your clients invitations to use those fonts in the app will provide a low entry barrier to the adoption of the system.
This platform is aimed primarily at custom type projects, educational institutions, and maybe even design firms; anyone who would like to distribute fonts to a known user group in a controlled way and send font updates.
However, this will not be very suitable for normal retail type foundries. While the new platform will have its own API and you could theoretically interface with it and create a new font subscription for a new retail font customer of yours, you will have to implement that in your online shop’s code and it’s arguably not very different from implementing the whole API Endpoint while you’re at it. However, it could be a bit simpler. If that helps Type.World’s adoption, I would be happy about that.
Naturally, this new platform will be released as open-source, and I will run one instance of it myself commercially (with free entry-level tiers), while others can take the code and implement their own hosting solutions.
Type.World Map
At the end I have a small treat for you: A world map of Type.World’s usage. It shows Type.World users (by city, not by their precise location which is unknown to me), as well as servers used by Type.World and Google Cloud’s points of presence and actual internet cables. As you can see: No one is using Type.World yet. Let’s change that.
The map, obviously based on Google Maps, is rather interesting. I turned off borders and names of nation states, so it focuses on connections rather than separation. It’s quite fun to explore, often leaving a sense of uncertainty of the country you’re actually looking at.
Eventually I want to have a telcom-style control room with a wall-spanning projection of that map complete with blinking lights and sounds as users interact with the system.
Wednesday 16 June 2021
Hello Type.World
Roughly four years of development time, two of which I spent as part of my work with Google Fonts, come to their temporary conclusion.
Today I present to you the first stable version of the Type.Word App: Version 1.0. With it, I aim to improve both the user experience of frequent font users as well as the market position of independent font foundries alike.
There is lots to do still as the app is in a very simple state. It’s missing fundamental basics such as a search function. But everything is stable and usable, so I wanted to waste no more time and publish it officially, as I have a feeling that many interested parties were holding back their development to wait and see how everything plays out.
Most of the development was and probably always will be on the server side of things, hidden from the audience, in order to offer a polished experience.
I’m particularly happy that we can ship the app with Turkish and Spanish translations right from the start, thanks to Viviana Monsalve, Adolfo Jayme-Barrientos (initial Spanish contribution), and Ali Riza Esin, together with my own German translation. The effort that I invested in the translation interface paid off quickly. It’s a Google-Translate-assisted web-interface, so that translating the entire app into your language shouldn’t take more than two or three hours for languages that are well supported by Google Translate. Please get in touch if you want to contribute a translation into your own language.
Translations for Right-To-Left-written languages such as Arabic and Hebrew could theoretically already be contributed, but the app’s graphical user interface won’t be able to handle them yet until a later update. However, once I will work on supporting them, it would be great if I could already work with the real translation pairs.
The cards are all on the table now. It’s still an open source project, but turned partially commercial after I had to realize and accept that a business model needed to be in place in order to sustain the project long-term and gain the trust of professionals in the type industry.
A big thanks goes to Dave Crossland who let me develop the project part-time during my work for Google Fonts, as well as all Patrons of my Patreon page, as well as all other supporters and developers.
I will take a long summer off now as I have other obligations during summers with my brother. I will resume active development in October. In the meantime I will be available for supporting your API Endpoint implementation efforts, as well as fixing critical bugs in the app, should any surface.
Btw, the self-update functionality of the app appears to have been broken for a few versions now. So you may want to re-download the app rather than self-updating it.
Also, there’s no content really for you to try it out except for Jens Kutilek’s free font subscription which is linked on the download page below the app downloads. So for this thing to become really useful, we now need to wait for foundries to implement it. Sorry if it’s a bit anti-climactic ;)