NLnet Grant Application for Domain
This is my application to get NLnet funding to work on Domain as part of the User-Operated Internet Fund1
I feel it’s important that such grant applications are made public so everyone has visibility into the process. This will allow us to collectively learn from the experience and perhaps even to improve the process itself.
As such, I’ll be making my end of the process as public as possible by not only sharing my original grant application but any subsequent communication I receive during the process. And I urge you to do the same on your own site when applying for similar grants.
Public money, public process, public code.
- Thematic call: User-Operated Internet Fund
- Your name: Aral Balkan
- Email address: firstname.lastname@example.org
- Phone numbers: (not including it here for privacy reasons)
- Organisation: Small Technology Foundation
- Country: Ireland
General project information
- Project name: Domain
- Website/wiki: https://codeberg.org/domain/app
Abstract: Can you explain the whole project and its expected outcome(s). (1200 characters)
Domain aims to democratise the ownership of web sites and commoditise the gatekeepers.
“The best thing about the internet is that … [f]rom the edges inwards, users themselves can collectively own, operate and rewrite every aspect of the technology and infrastructure they depend on.” – User-Operated Internet Fund
Yes, we can. But it is technically difficult to do so.
This is the problem Domain aims to solve.
Think about what you have to do today to have your own web site (or self-hosted web application) running on your own server:
Buy a domain name from a commercial domain name registrar.
Sign up with a commercial web host (e.g., DigitalOcean, Hetzner, etc.)
Provision a server (e.g., virtual private server) with your web host.
Configure your Domain Name System (DNS) records to point to your server.
Install or configure a web server, the site (or app) you want to host, as well as any other required software (database, etc.).
Ensure your server is sufficiently secure.
Maintain your server by installing updates to your operating system and other related software on a regular basis.
While none of this is terribly difficult for seasoned developers or system administrators to tackle, it is not a process you would expect someone without technical skills to undertake without a considerable investment of time and effort.
And we want everyone to have their own place on the Web, not just those of us who have the relevant technical knowledge.
Furthermore, it can easily take at least half an hour even for technically-savvy folks to go through all those steps to set up a simple site or app (and longer still if you have to configure databases, message queues, etc.) I once watched an experienced software engineer struggle to set up his own Mastodon instance for an afternoon before giving up. ’Nuff said.
The goal of Domain is to reduce this process to under a minute.
(So we’re talking about an order of magnitude difference or more.)
Here’s a video of Domain creating and running a new Owncast server in under a minute.
How does it work?
Domain is being built for use by two different audiences:
Hosts: Organisations/technically-savvy individuals who run domain as a service for their communities.
Everyday people: Who use the Domain instances set up by hosts to commission, own, and control their own web sites and apps.
Domain enables organisations and individuals to provide web hosting services for small (personal) web sites and apps to the general public.
As a prerequisite, hosts need to sign up for the following constituent services:
A DNS provider (initially only DNSimple will be supported).
Optionally, an account with a payment provider if they plan to charge for hosting (initially only Stripe will be supported).
Once a host has acquired the required accounts and their domain is on the Public Suffix List, they will use the simple online administration interface provided by Domain to enter the relevant API keys for each of these services.
Domain combines these fundamental services into a simple and seamless flow to enable everyday people to sign up for their own sites and apps at their own domain.
Hosts can decide which apps and sites people can install. These apps are defined in the online interface by their installation and configuration instructions in a standard format known as cloud-init. It is currently possible in the Domain prototype to install Owncast, for example, as well as a generic Site.js web site.
Domain will democratise the process of being a web host and enable small organisations and even individuals to host sites and apps for their local communities.
The Small Web design of Domain sets natural limits on how large a host can grow. Our goal is to encourage a community of lots of small, independent, and ideally not-for-profit hosts around the world. Each of which, of course, can customise Domain for their own needs and culture, given that it is released under AGPL version 3. This license also means that any improvements to Domain must be shared back into the commons, thereby strengthening it for everyone. (And it prevents, for example, a venture-capital-funded startup in the future from taking the software, spending a few million dollars to improve it, and then keeping those improvements to themselves to create fragmentation and lock-in.)
Domain is being built with an integrated web server and web development platform called Kitten (previously known as NodeKit).
Kitten is being developed alongside Domain, with Domain’s requirements determining its features.
Kitten will also be used to create and serve small web sites that can be installed with Domain and will be a useful tool itself in lowering the barrier of entry to developing and hosting your own web site or app. While Kitten is not the focus of this grant application, it is important to understand that it is impossible to separate the two as they are being developed in parallel and any support for our development work will benefit both of these intertwined projects.
For everyday people
For everyday people, Domain presents a very simple interface:
Choose a domain and select an app to install. Optionally, provide payment information and, within a minute, you’re up and running with your own site at your own domain.
As far as I’m aware, there is currently nothing that approaches this in terms of ease of use.
The speed and ease with which everyday people can set up their own sites and apps at their own servers is at least an order of magnitude faster than what’s available today. We believe that this will have a substantial impact in democratising the Web by enabling more people to own and control their own place on it.
Have you been involved with projects or organisations relevant to this project before? And if so, can you tell us a bit about your contributions?
“Technology should be a commons for everyone to enjoy and contribute to, without gatekeepers or persistent threats.” – User-Operated Internet Fund
We formed Ind.ie in 2013 and have been working towards this very ideal ever since. In the intervening years, as our understanding of the problem grew, we honed our focus and limited resources on effecting change were we feel it will be most impactful and least likely to be threatened by proprietary systems and corporate control: the open web.
In 2017-2018 we worked with the City of Ghent, in Belgium, on prototyping the Indienet project. The goal was to demonstrate how citizens could have their own web sites (at a .gent domain) and own and control their own data when interacting among themselves and with the municipality. Sadly, a conservative local government was elected and our funding for the project was cut.
The Indienet project was the spiritual predecessor to Domain.
The Indienet project taught me several things: first, not to rely on public funding which might be taken away at any moment when the winds of politics change and, secondly, that we must build our own tools and frameworks at all levels of the stack to radically simplify the development and deployment of personal web sites and apps.
As part of our research and development efforts, I’ve been iterating on a personal web server and web development platform since 2019, when I first launched HTTPS Server which became Indie Web Server, and finally Site.js. The latter currently powers all our sites, including https://small-tech.org, my blog at https://ar.al, and, of course, https://sitejs.org itself.
Domain is being written in and will be powered by Kitten.
(An earlier iteration of Kitten was called NodeKit and used Svelte instead of htmx. The current prototype of Domain in written in NodeKit and is being ported over to Kitten. The current prototype is able to deploy sites using Site.js. In fact, it’s how we set up our streaming server for Small Technology Foundation at https://owncast.small-web.org.)
Requested amount: €50,000
Explain what the requested budget will be used for. Does the project have other funding sources, both past and present? (If you want, you can in addition attach a budget at the bottom of the form):
The requested budget will be used, after taxes, to pay me, a software developer with over two decades of professional development experience, to work on the project for the next 12 months (at a rate that’s less than half of what I was earning working in the mainstream two decades ago).
Our funding sources for Small Technology Foundation are and have been:
- (Past) An initial crowdfunding round in 2013.
- (Past) My selling two family homes in Turkey.
- (Past and present) Patrons and donors.
- (Present) Laura’s contracting work with Stately.
Compare your own project with existing or historical efforts.
The closest existing tools and projects to Domain are:
- Hosting providers like DigitalOcean, Hetzner, etc. when combined with commercial domain name registration services.
These suffer from the complexity problem mentioned above and are profit-oriented corporate initiatives that do not have any sort of social mission to democratise the Web or technology.
- Free and open source self-hosting platforms like Yunohost.
These systems provide web site/app installation functionality but they must themselves be hosted (which requires all the steps that Domain automates and streamlines). To illustrate, you could use Domain to create a server running Yunohost.
What are significant technical challenges you expect to solve during the project, if any?)
In terms of feasibility, I don’t believe there are any major questions left unexplored (as I have been working on the underlying infrastructure and design for several years now and I already have a functional prototype of Domain).
In the coming days, I will be porting Domain from NodeKit to Kitten and evolving Kitten to handle any unmet requirements this process might uncover in it. I feel very good about this as the replacement of Svelte with htmx has removed a large chunk of complexity from (the already lightweight) framework and developing with it feels excellent so far.
Now that the architectural decisions have been locked down, I expect a rather straightforward and sustained development effort with ongoing releases of both Kitten and Domain in the coming year.
Describe the ecosystem of the project, and how you will engage with relevant actors and promote the outcomes?
Initially, my goal is to launch our own Domain instance at https://small-web.org to demonstrate how it works and so it can start bringing in income for Small Technology Foundation. (Our goal is to become sustainable so we can keep working on the Small Web.) I envision that the initial people who play with it to set up their own sites and apps will be people who hear about it because they follow me on the fediverse.
I hope that once other developers see that it works, they might want to start becoming hosts themselves (either individually or with their organisations). My goal is to eventually see a healthy ecosystem of independent (and ideally not-for-profit hosts) around the world using Domain to empower their communities to own and control their own places on the World Wide Web.
I would love to see community groups, cooperatives, municipalities, and other organisations experimenting with alternative means of sustaining such efforts. The token ‘payment’ system in Domain, for example, could be used by a city to mail out codes to all its citizens that they can then use in lieu of payment to set up their own web sites and apps. (This is the model we were exploring with the City of Ghent.)
Finally, although Kitten is not the focus of this grant proposal, since it is being developed in parallel with Domain (and given that Domain is being written in it and will be powered by it), I believe that Kitten will also open up web development to a wider group of people by removing the complexities inherent in current corporate stacks. I foresee it being used to teach web development (at the very least, I foresee myself using it to teach web development).
(Please see links in the body of the proposal.)
How may we handle your information
When your project gets selected, we will legally need to retain your information for compliance purposes for at least seven years. Also, in case you are submitting to one of the NGI related funds, at that point we will need to share some information with our (not-for-profit) partner organisations in order so they may assist you with mentoring as well as complementary services e.g. accessibility, documentation, localisation, packaging, etc. By submitting a proposal you grant us permission to handle the data in the proposal in the manner described.
What should we do in the other case, e.g. when your project is not immediately selected?
- I allow NLnet Foundation to keep the information I submit on record, should future funding opportunities arise
- Send me a copy of this application.
I do wish they had called it the Person-Operated or Human-Operated Internet Fund (or even just the Personal Internal Fund) instead of using the Silicon Valley word ‘user’, which is inherently colonial/ethnographic in nature. This is why we refer to people as ‘people’ in small technology. ↩︎
While initially only a single web host, DNS provider, and payment provider will be supported, our hope is to add other providers so that, eventually, Domain can commoditise these services. The greatest challenge there is that commercial providers usually have custom Application Programming Interfaces (APIs) as part of their business model of locking people into their own services. So our goal will be to work towards better interoperability between service providers as well as abstracting away the differences on our end. ↩︎
Domain makes use of the Public Suffix List in order to bypass the commercial domain name system and enable fully-functional sites to be set up at their own domains in under a minute.
A domain like small-web.org – where Small Technology Foundation will be running our own instance of Domain – which is on the Public Suffix List is, for all intents and purposes, equivalent to a top-level domain and can provide all the privacy and security guarantees that any other top-level domain can (e.g., .com, .org, etc.) ↩︎