172 lines
8.9 KiB
Markdown
172 lines
8.9 KiB
Markdown
# The Amsterdam Web Communities System
|
|
|
|
A self-hosted platform for running _thoughtful, human-scale_ online communities.
|
|
|
|
## Description
|
|
|
|
Amsterdam is a self-hosted platform for running multiple virtual communities.
|
|
|
|
It provides:
|
|
* Multiple communities hosted on a single site
|
|
* A discussion system featuring the linear conferencing model
|
|
* Long-form conversation spaces
|
|
* User identities shared acrioss communities
|
|
* Moderation and community management tools
|
|
|
|
It is designed for _human-scale communities_ - hundreds or thousands of users, rather than millions.
|
|
|
|
Amsterdam is intended to become a modern platform styled after the first generation of online communities, designed for
|
|
resilience, autonomy, and human-scale interaction.
|
|
|
|
The first public version of Amsterdam has feature parity with the platform that successfully hosted the original Electric Minds
|
|
community from 2000-2006, but rebuilt in a modern environment with updated rendering. Future versions will extend the functionality
|
|
from there.
|
|
|
|
## Live Demo
|
|
|
|
A live version of Amsterdam may be found at [https://electricminds.org](https://electricminds.org). This site, "Electric Minds Reborn,"
|
|
includes actual community data from Electric Minds circa 2006.
|
|
|
|
## Why This Exists
|
|
|
|
Communities from the early days of the Web, like Electric Minds, began as small, independent, and deeply conversational sites.
|
|
People gathered in discussion spaces that felt more like shared living rooms than global broadcast platforms.
|
|
|
|
Over time, most of these communities were largely supplanted by the major social media sites, which displaced many smaller,
|
|
community-run spaces by optimizing for a massive, global scale, engagement metrics, and advertising.
|
|
|
|
Now we're seeing what happens as a result:
|
|
|
|
* Networks that use algorithms to prioritize feeding users ads and propaganda over genuine human interaction.
|
|
* The gradual "enshittification" _(to use Cory Doctorow's term)_ of services, first to benefit business customers over users,
|
|
then to benefit shareholders over both.
|
|
* Entire established social networks being taken over by billionaires or co-opted by governments to promote their political agendas.
|
|
* A loss of trust, safety, agency, and democratic control.
|
|
|
|
We need _human-scale_ community again. Amsterdam can be a baseline for bringing that back...because its heritage lies in those
|
|
older systems that _worked,_ and sustained _real communities_ in the process. It was built by someone who's _been there,_ who not
|
|
only wrote the code, but was an active participant in the community that used it.
|
|
|
|
Electric Minds Reborn is both a historical preservation project and a living experiment into whether those ideas can work in a modern Web.
|
|
|
|
### Project Vision & Values
|
|
|
|
Amsterdam as a project intends to prioritize certain things:
|
|
|
|
* Human-scale over global scale. Hundreds or thousands of users, not billions.
|
|
* Resilience over growth, and _especially_ over growth for growth's sake.
|
|
* Many smaller sites, not one big one. These sites should work _together,_ not act as more silos.
|
|
* Future versions of Amsterdam may support this directly, allowing interaction between independent sites while still providing
|
|
for autonomous, self-hosted communities.
|
|
* Tools that serve _community members, moderators, and hosts,_ not shareholders.
|
|
* Contribution quality over ideology or factionalism. Contributors of _all backgrounds_ are welcome, with a focus on the quality
|
|
of the final product.
|
|
|
|
### Why "Amsterdam"?
|
|
|
|
The first implementation of this concept was in Durand Communications' CommunityWare software, which was code-named "Rome" when it
|
|
was in development. Rome was a center of community in the ancient world.
|
|
|
|
The second implementation was the Java code I wrote to rescue Electric Minds; I named it "Venice," which was a center of community
|
|
during the Renaissance.
|
|
|
|
This new implementation is named "Amsterdam," which was a center of community during the Age of Exploration, in particular, the
|
|
Dutch Golden Age.
|
|
|
|
## Key Features
|
|
|
|
* Multiple communities hosted on a single site
|
|
* A discussion system featuring the linear conferencing model
|
|
* Long-form conversation spaces
|
|
* User identities shared acrioss communities
|
|
* Moderation and community management tools
|
|
* Archival support for historic communities
|
|
* Modern HTML rendering
|
|
|
|
## Project status
|
|
|
|
Amsterdam is in its first (early) public release.
|
|
|
|
The software is capable of running a full community site, and is currently being used to host [Electric Minds Reborn](https://electricminds.org).
|
|
|
|
The project is under active development, and APIs and internal structures may change between releases.
|
|
|
|
---
|
|
|
|
## Building Amsterdam
|
|
|
|
From the root of the source tree, just run `go build` to build the `amsterdam` executable.
|
|
|
|
To regenerate the `tailwind.css` file (located in `ui/static/css`), you will need the Tailwind CSS command-line executable.
|
|
Download it from [the Tailwind GitHub](https://github.com/tailwindlabs/tailwindcss/releases/) and install it as `tailwindcss`
|
|
in your `PATH`. Then run `go generate` to regenerate the CSS file before you run `go build` to build the executable.
|
|
|
|
## Installing Amsterdam
|
|
|
|
You will need a MySQL database to store Amsterdam data. Create a new empty database, then, from the command line, use the command:
|
|
|
|
> `mysql -u root -p _databasename_ \< setup/mysql-database.sql`
|
|
|
|
(Replace _databasename_ with the name of your database. If you use a user other than `root` for administrative access to your
|
|
MySQL server, use that.)
|
|
|
|
Ensure a user in your database is granted SELECT, INSERT, UPDATE, and DELETE privileges to all tables in your new database.
|
|
This is the user that you will configure Amsterdam to use.
|
|
|
|
The database may be specified to Amsterdam with the following command line options or environment variables:
|
|
|
|
* Host name: Command line options `-t` or `--database-host`, or environment variable `AMSTERDAM_DATABASE_HOST`
|
|
* User name: Command line options `-u` or `--database-user`, or environment variable `AMSTERDAM_DATABASE_USER`
|
|
* Password: Command line options `-p` or `--database-password`, or environment variable `AMSTERDAM_DATABASE_PASSWORD`
|
|
* Database name: Command line options `-d` or `--database-name`, or environment variable `AMSTERDAM_DATABASE_NAME`
|
|
|
|
All these options may also be specified via the configuration file (see below).
|
|
|
|
Amsterdam also requires access to a local SMTP server, as it sends out E-mail messages such as account verification,
|
|
password reminders, subscribed posts, and messages from conference or community hosts. It may be specified to Amsterdam
|
|
with the following command line options or environment variables:
|
|
|
|
* Host name: Command line options `-m` or `--mail-host`, or environment variable `AMSTERDAM_MAIL_HOST`
|
|
* Port number: Command line options `-o` or `--mail-port`, or environment variable `AMSTERDAM_MAIL_PORT`
|
|
* TLS option ("none" or "starttls"): `-S` or `--mail-tls`, or environment variable `AMSTERDAM_MAIL_TLS`
|
|
* Authentication type ("none" or "plain"): `-a` or `--mail-authtype`, or environment variable `AMSTERDAM_MAIL_AUTHTYPE`
|
|
* User name: Command line options `-U` or `--mail-user`, or environment variable `AMSTERDAM_MAIL_USER`
|
|
* Password: Command line options `-W` or `--mail-password`, or environment variable `AMSTERDAM_MAIL_PASSWORD`
|
|
|
|
All these options may also be specified via the configuration file (see below).
|
|
|
|
By default, Amsterdam sends log messages to stdout. You can change the log level for Amsterdam with the `-L` or `--level`
|
|
options on the command line, or the `AMSTERDAM_LOG_LEVEL` environment variable. Valid values are "trace" (most detailed),
|
|
"debug", "info", "warn", "error", "fatal", and "panic" (least detailed).
|
|
|
|
Connect to Amsterdam on port 1323 by default. You can change this with the `-l` or `--listen` options on the
|
|
command line, or with the `AMSTERDAM_LISTEN` environment variable. Listening addresses are specified as "host:port",
|
|
or just ":port" to listen on all interfaces.
|
|
|
|
By default, Amsterdam runs in debug mode. You can put it in "production" mode by using the `-P` or `--production`
|
|
options on the command line, or by setting the `AMSTERDAM_PROD` environment variable.
|
|
|
|
### The Amsterdam Configuration File
|
|
|
|
At startup, Amsterdam looks for the configuration file `amsterdam.yaml` in various directories by host OS:
|
|
|
|
* Unix/Linux: `/usr/local/etc/amsterdam`, `/etc/amsterdam`, `/etc/xdg/amsterdam`
|
|
* macOS: `/usr/local/etc/amsterdam`, `/Library/Application Support/Amsterdam`
|
|
* Windows: `%PROGRAMDATA%\amsterdam`
|
|
|
|
You can also specify Amsterdam's configuration file by using the `-C` or `--config` options on the command line,
|
|
or with the `AMSTERDAM_CONFIG` environment variable.
|
|
|
|
The exact format of the configuration file is shown in the `config/default.yaml` file. When creating an Amsterdam
|
|
configuration file, you do not have to specify options for which you do not with to change the default.
|
|
|
|
## Contributing
|
|
|
|
See the [Contributors' Guide](CONTRIBUTING.md) for details.
|
|
|
|
## License
|
|
|
|
This project is licensed under [the Mozilla Public License, Version 2.0](LICENSE.md). Its predecessor, Venice,
|
|
was licensed under MPL 1.0, so this was a natural choice for the new implementation.
|
|
|