Compare commits
10 Commits
f8d40c4e41
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e77d0d940b | ||
|
|
2645be5e1c | ||
|
|
979618ee3e | ||
|
|
2bfc633fd4 | ||
|
|
edc16a0474 | ||
|
|
df98f34dbd | ||
|
|
e9caff1732 | ||
|
|
6d4ee87008 | ||
|
|
0ccae94c4c | ||
|
|
af46d85417 |
20
README.md
Normal file
20
README.md
Normal 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!
|
||||||
@@ -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**. There’s 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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
62
layouts/partials/head.html
Normal file
62
layouts/partials/head.html
Normal 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
BIN
themes/.DS_Store
vendored
Binary file not shown.
BIN
themes/lotusdocs/.DS_Store
vendored
BIN
themes/lotusdocs/.DS_Store
vendored
Binary file not shown.
BIN
themes/lotusdocs/assets/.DS_Store
vendored
BIN
themes/lotusdocs/assets/.DS_Store
vendored
Binary file not shown.
BIN
themes/lotusdocs/assets/images/.DS_Store
vendored
BIN
themes/lotusdocs/assets/images/.DS_Store
vendored
Binary file not shown.
BIN
themes/lotusdocs/assets/images/hmc_docs_revolt_7.png
Normal file
BIN
themes/lotusdocs/assets/images/hmc_docs_revolt_7.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 71 KiB |
Reference in New Issue
Block a user