Compare commits

...

10 Commits

Author SHA1 Message Date
Abner Coimbre
e77d0d940b Move chat guidelines to the top 2026-03-31 12:39:11 -07:00
Abner Coimbre
2645be5e1c Add chat guidelines 2026-03-31 12:37:27 -07:00
Abner Coimbre
979618ee3e Delay 2026 timeline a bit 2026-03-04 10:55:12 -08:00
Abner Coimbre
2bfc633fd4 Update timeline from Jan to Feb 2026-02-16 22:25:20 -08:00
Abner Coimbre
edc16a0474 Add Mariano to Contact page 2026-02-16 22:25:04 -08:00
Abner Coimbre
df98f34dbd chat: Add Reconnecting... section 2026-01-28 12:07:57 -08:00
Abner Coimbre
e9caff1732 Minor tweak to meta description 2026-01-22 13:26:44 -08:00
Abner Coimbre
6d4ee87008 Update meta description 2026-01-22 13:19:13 -08:00
Abner Coimbre
0ccae94c4c Meetup hosts: new section on chat invites 2026-01-14 12:37:41 -08:00
Abner Coimbre
af46d85417 Add README 2026-01-11 17:20:31 -08:00
11 changed files with 140 additions and 13 deletions

20
README.md Normal file
View File

@@ -0,0 +1,20 @@
## 🚀 Getting Started
### ⚙️ Prerequisites
To run the website locally, follow these steps:
- Install [Hugo Extended v0.140+](https://github.com/gohugoio/hugo/releases/tag/v0.140.0) on your $PATH
- Navigate to project root folder
- Run `hugo server`
- Visit `localhost:1313` on your browser
That's it! Any changes you make will be hot reloaded.
## WARNING:
For maximum compatibility we recommend sticking with Hugo `v0.140.0` (**Extended** edition, linked above.) We haven't tested other versions.
## 💻 Automatic Deployment
Anything we `git push` will be published to [guide.handmadecities.com](https://guide.handmadecities.com) automatically. PROCEED WITH CAUTION!

View File

@@ -9,6 +9,16 @@ We've tried many services: we dabbled on IRC, worked [closely](https://archive.i
It is our home from now on. It is our home from now on.
## Chat Guidelines
We're in a high-trust environment where users are known humans, so our guidelines are straightforward:
1. **Baseline decorum.** Engineering requires rigorous criticism, but [there's a line](https://abner.page/post/linus-is-a-father-figure-now/) you can't cross.
2. **Keep off-topic in #off-topic.** Anything unrelated to our industry should be in `#off-topic` for easy muting. Religion or politics are discouraged and moderated (expect bias from leadership.)
3. **AI hype profiteers are banned.** You know *exactly* what we're talking about. Discuss artificial intelligence with sobriety.
## Joining Revolt ## Joining Revolt
Our Revolt [instance](https://revolt.handmadecities.com) requires users to register an account: Our Revolt [instance](https://revolt.handmadecities.com) requires users to register an account:
@@ -23,7 +33,7 @@ In order to receive one, the user [submits an application](https://handmadecitie
The application is submitted to `support@handmadecities.com`. The founder or his volunteer staff typically reviews it within three business days. The application is submitted to `support@handmadecities.com`. The founder or his volunteer staff typically reviews it within three business days.
{{< alert context="primary" text="Meetup hosts also have the ability to send invites. Whoever attends a meetup may request one from the host." />}} {{< alert context="primary" text="Meetup hosts also [have the ability](/docs/meetups/hosts/#chat-invites) to send invites. Whoever attends a meetup may request one from the host." />}}
After approval, users can register with any username. This offers some degree of privacy when interacting with the community at large. After approval, users can register with any username. This offers some degree of privacy when interacting with the community at large.
@@ -38,7 +48,7 @@ One should follow the proper order of operations.
## Going Mobile ## Going Mobile
Revolt's mobile app doesn't support custom domains yet. Instead, we must install our Revolt instance as a Progressive Web App (PWA). Revolt's native app doesn't support custom domains yet. Instead, we should install Revolt as a Progressive Web App (PWA).
Please visit [revolt.handmadecities.com](https://revolt.handmadecities.com) on the phone's native browser (e.g. Safari on iOS), then look for an **Add to Homescreen** option (or similar): Please visit [revolt.handmadecities.com](https://revolt.handmadecities.com) on the phone's native browser (e.g. Safari on iOS), then look for an **Add to Homescreen** option (or similar):
@@ -77,7 +87,7 @@ Alternatively an *existing* Verified Human may vouch for someone they've met in
Revolt is known as Discord Lite because of some missing features. The quirks or limitations are as follows: Revolt is known as Discord Lite because of some missing features. The quirks or limitations are as follows:
1. **Can't point Revolt app to custom domain.** This is discussed under [Going Mobile](/docs/chat/#going-mobile). 1. **Can't point Revolt app to custom domain.** This is discussed under [Going Mobile](/docs/chat/#going-mobile).
2. **Missing bells & whistles**. Theres no message pinning. No threads. Strange restrictions apply with emoji reactions. 2. **Missing bells & whistles**. Can't pin messages. Can't start threads.
3. **Lack of end-to-end encryption.** Discord has this issue too. Handmade Cities policy is to safeguard private DMs and never inspect their contents. 3. **Lack of end-to-end encryption.** Discord has this issue too. Handmade Cities policy is to safeguard private DMs and never inspect their contents.
These are all minor irritations to us, not deal breakers. These are all minor irritations to us, not deal breakers.

View File

@@ -22,6 +22,23 @@ As the host it's your burden to call out uncaring programmers in a civil manner,
Handmade Cities offers free mentoring to all potential hosts. We realize organizing a meetup is a nerve-wracking ordeal and our ultimate goal is getting you comfortable with this. The more social butterflies among us programmers the better! Handmade Cities offers free mentoring to all potential hosts. We realize organizing a meetup is a nerve-wracking ordeal and our ultimate goal is getting you comfortable with this. The more social butterflies among us programmers the better!
## Chat Invites
Meetup hosts have the power to invite community members to our [chat server](/docs/chat). Here are the steps:
1. [Download](https://git.handmadecities.com/meetups/meetupinvite2000/releases) the latest **Meetup Invite 2000** from HMC Gitea
2. Make sure `config.toml` lives next to the binary (if you lost this file [notify us](/docs/support/contact) right away)
3. Run `./meetupinvite2000 chat [email]` where `[email]` is the email address of the community member
You'll then be asked the following question by the command-line tool:
- `"Can you vouch for the human identity of [email]?"`
If you answer no the program stops and exits. Otherwise you'll be asked the final question:
- `"Have you met this person in meatspace?"`
If you answer yes, the invite gets generated and the member is granted a **Verified Human** badge. If you answer no, the invite is generated anyway but this new user does NOT receive the **Verified Human** badge.
[Learn more](/docs/chat/#verified-human-badge) about badges.
## Sponsor-Free Events ## Sponsor-Free Events
We are 100% indie and [very vocal](https://handmadecities.com/about) about having zero sponsors. If we discover your in-person event is financially backed by some entity, **the ban is immediate** and publicly disclosed to the community. We are 100% indie and [very vocal](https://handmadecities.com/about) about having zero sponsors. If we discover your in-person event is financially backed by some entity, **the ban is immediate** and publicly disclosed to the community.

View File

@@ -3,26 +3,44 @@ title: "Contact Us"
weight: 20 weight: 20
--- ---
As we [don't have](/docs/timeline/2026/#mass-delete-social-media) social media, the most efficient way to reach out is by sending an email. As we [don't have](/docs/timeline/2026/#mass-delete-social-media) social media, the most efficient way to reach out is by sending us emails.
## Our Founder ## Founder
Our founder is [Abner Coimbre](https://abner.page) and may be contacted at `abner@handmadecities.com`. Our founder is [Abner Coimbre](https://handmadecities.com/about). As the community organizer he's unfortunately the busiest member (send a reminder after three business days if there's no response.)
Allow up to three business days to receive a response. As community organizer his Inbox is perpetually cluttered: send a reminder after three business days if there's no response. - `abner@handmadecities.com`.
It might take multiple poking attempts to get his attention. ---
## Editor ## Editor
Zac Nowicki is editor and maintainer of Handmade Cities. He's also tech lead for [Kagi Search](https://kagi.com)—opinions here do not represent his employer. Zac Nowicki is editor for Handmade Cities: he reviews and edits all our writing. If we have egregious typos or false statements please reach out to him.
Find him at `zac@handmadecities.com`. Zac is also the tech lead for [Kagi Search](https://kagi.com)—opinions here do not represent his employer.
- `zac@handmadecities.com`
---
## Server Admin
Mariano Uvalle [started contributing](https://handmadecities.com/news/updates-to-our-revolt-instance) improvements to the chat server. He's implementing [Abner's agenda](https://lobste.rs/s/vrczh6/discord_launches_teen_by_default#c_ko6xqn) to fork Revolt and make the experience rival that of Discord. We may empower him with more server access in the future.
Chat-related bugs or feature requests should be sent here.
- `mariano@handmadecities.com`
---
## Support Staff ## Support Staff
In order to ease the burden on Abner you may email support staff at `support@handmadecities.com`. Trusted community members have access to this Inbox and your chances of getting a faster reply goes up. To ease the burden on Abner you might email support staff instead. Trusted community members have access to this Inbox and your chances of getting a faster reply goes up.
- `support@handmadecities.com`
---
## Meetup Hosts ## Meetup Hosts
Meetup hosts have [their own](https://handmadecities.com/meetups) dedicated pages with corresponding email addresses. Note that we don't control office hours, so response times may vary. Meetup hosts have [their own](https://handmadecities.com/meetups) dedicated pages with corresponding email addresses. Note that we don't control office hours so response times may vary.

View File

@@ -7,7 +7,7 @@ Handmade Cities (HMC) calls this year a period of *quiet growth*: making sure of
## Mass-Delete Social Media ## Mass-Delete Social Media
Our founder's [made it clear](https://abner.page/post/exit-the-feed/) competent programmers must leave for-profit social media. In January 2026 the following accounts will be deleted: Our founder's [made it clear](https://abner.page/post/exit-the-feed/) competent programmers must leave for-profit social media. By the Spring of 2026 the following accounts will be deleted:
- Discord Servers ([read more](https://handmadecities.com/news/revolt-against-discord)) - Discord Servers ([read more](https://handmadecities.com/news/revolt-against-discord))
- YouTube Channels - YouTube Channels
- Twitch Channels - Twitch Channels

View File

@@ -0,0 +1,62 @@
<head>
<meta charset="utf-8" />
<title>{{- .Site.Title }}</title>
{{- if not hugo.IsProduction }}
<meta name="robots" content="noindex">
{{- end }}
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Your Quick Guide to the Handmade Cities Community." />
<meta name="keywords" content="Documentation, Hugo, Hugo Theme, Bootstrap" />
<meta name="author" content="Zac Nowicki - Editor" />
<meta name="email" content="zac@handmadecities.com" />
<meta name="website" content="https://guide.handmadecities.com" />
<meta name="Version" content="v0.5.0" />
<!-- favicon -->
{{ block "head/favicon" . }}{{ partialCached "head/favicon.html" . }}{{ end }}
<!-- Google Fonts -->
{{- partial "google-fonts" . }}
<!-- Custom CSS -->
{{- $options := dict "enableSourceMap" true }}
{{- if hugo.IsProduction}}
{{- $options := dict "enableSourceMap" false "outputStyle" "compressed" }}
{{- end }}
{{- $style := resources.Get "/scss/style.scss" }}
{{- $style = $style | resources.ExecuteAsTemplate "/scss/style.scss" . | css.Sass $options }}
{{- if hugo.IsProduction }}
{{- $style = $style | minify | fingerprint "sha384" }}
{{- end -}}
<link rel="stylesheet" href="{{ $style.RelPermalink }}" {{ if hugo.IsProduction }}integrity="{{ $style.Data.Integrity }}"{{ end -}}/>
<!-- Bootstrap JS -->
{{ $js := resources.Get "js/bootstrap.js" }}
{{ $params := dict }}
{{ $sourceMap := cond hugo.IsProduction "" "inline" }}
{{ $opts := dict "sourceMap" $sourceMap "minify" hugo.IsProduction "target" "es2018" "params" $params }}
{{ $js = $js | js.Build $opts }}
{{ if hugo.IsProduction }}
{{ $js = $js | fingerprint "sha384" }}
{{ end }}
<script src="{{ $js.RelPermalink }}" {{ if hugo.IsProduction }}integrity="{{ $js.Data.Integrity }}"{{ end -}} defer></script>
<!-- Image Compare Viewer -->
{{ if ($.Scratch.Get "image_compare_enabled") }}
{{ $imagecompare := resources.Get "js/image-compare-viewer.min.js" }}
{{- if not hugo.IsServer }}
{{- $js := (slice $imagecompare) | resources.Concat "/js/image-compare.js" | minify | fingerprint "sha384" }}
<script type="text/javascript" src="{{ $js.Permalink }}" integrity="{{ $js.Data.Integrity }}"></script>
{{- else }}
{{- $js := (slice $imagecompare) | resources.Concat "/js/image-compare.js" }}
<script type="text/javascript" src="{{ $js.Permalink }}" {{ if hugo.IsProduction }}integrity="{{ $js.Data.Integrity }}"{{ end }}></script>
{{- end }}
{{- end }}
<!-- Plausible Analytics Config -->
{{- if not hugo.IsServer }}
{{ if and (.Site.Params.plausible.scriptURL) (.Site.Params.plausible.dataDomain) -}}
{{- partialCached "head/plausible" . }}
{{- end -}}
{{- end -}}
<!-- Google Analytics v4 Config -->
{{- if not hugo.IsServer }}
{{- if .Site.Config.Services.GoogleAnalytics.ID }}
{{- template "_internal/google_analytics.html" . -}}
{{- end -}}
{{- end -}}
</head>

BIN
themes/.DS_Store vendored

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB