4.2 KiB
The Amsterdam Web Communities System
Purpose
Amsterdam is a web-based system allowing for the hosting of multiple virtual communities, each with services such as conferencing. Users on an Amsterdam site may be a member of multiple independent communities, all on the same site.
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.
Why now?
Communities like Electric Minds were largely supplanted by the major social media sites, which built huge systems for global interaction at massive scale. They pushed smaller communities out of existence the way Walmart drove smaller shops out of business in cities and towns across America.
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.
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.
- 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.
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 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.
The database URL for this database can be specified on the Amsterdam command line with the -d or --database parameters,
or with the AMSTERDAM_DATABASE_URL environment variable. The URL is specified as mysql:dsn, where "dsn" is the complete
datasource name (user:password@tcp(hostname)/amsterdam?parseTime=true&loc=UTC).