Compare commits

...

60 Commits

Author SHA1 Message Date
Abner Coimbre
1d09643979 Add HMC Memo 006 to list 2026-04-30 16:47:52 -07:00
Abner Coimbre
39a4726e52 April 2026 Memo: HMC Library 2026-04-30 16:45:11 -07:00
Abner Coimbre
7efdbecc1f Walter Bright Cover 2026-04-21 16:43:37 -07:00
Abner Coimbre
f94d440106 meetup registration: s/Discord/Revolt 2026-04-14 15:41:56 -07:00
Abner Coimbre
522613affb Salt Lake City 2026-04-08 16:42:35 -07:00
Abner Coimbre
081c502c1a NYC Cover Image 2026-03-30 20:37:54 -07:00
Abner Coimbre
a11a591da3 About Page: Clarify that we self-host more things 2026-03-30 10:47:29 -07:00
Abner Coimbre
a336b67af4 Polish x2 HMC Memo 005 2026-03-30 10:37:37 -07:00
Abner Coimbre
4521d678cd Polish HMC Memo 005 2026-03-29 14:58:22 -07:00
Abner Coimbre
2f08c8b427 HMC Memo 005: Invite Tree 2026-03-29 11:47:13 -07:00
Abner Coimbre
a2b113a07b Oops, forgot chat.md 2026-03-28 11:58:55 -07:00
Abner Coimbre
3964b15314 Hub for Community Chat 2026-03-28 11:53:31 -07:00
Abner Coimbre
03c87dfc98 Polish x2 Zac's bio 2026-03-27 18:43:22 -07:00
Abner Coimbre
587b249d2b Reorder Chat and Newsletter logos 2026-03-26 22:14:18 -07:00
Abner Coimbre
aa41556549 Handmade Cities are the largest... 2026-03-26 16:11:43 -07:00
Abner Coimbre
5a0ee86044 Polish x3 Mariano's bio 2026-03-26 15:23:07 -07:00
Abner Coimbre
29e222c2b7 Polish x2 Mariano's bio 2026-03-26 15:07:45 -07:00
Abner Coimbre
af99439685 Polish Zac's bio 2026-03-26 15:01:36 -07:00
Abner Coimbre
224a5542b9 Polish Mariano's bio 2026-03-26 14:57:57 -07:00
Abner Coimbre
da8e025f23 Add Zac and Mariano to About page 2026-03-26 14:55:41 -07:00
Abner Coimbre
fa8c4bc061 stay for the friends! 2026-03-26 14:06:21 -07:00
Abner Coimbre
3c1f0ed4f6 Remove 'chat' from Explore 2026-03-26 13:44:26 -07:00
Abner Coimbre
f0d11515e8 Remove HMS / HMB from landing page 2026-03-26 13:05:51 -07:00
Abner Coimbre
f8e8077425 Disable February banner 2026-03-21 10:59:12 -07:00
Abner Coimbre
522e1ead8d Snowed In 2026-03-13 09:04:51 -07:00
Abner Coimbre
e07b9e3935 Bots are prohibited 2026-03-07 10:37:24 -08:00
Abner Coimbre
4a2a71594b Update 'No Alter Egos' again 2026-03-06 23:21:33 -08:00
Abner Coimbre
4144377426 Update 'No Alter Egos' 2026-03-06 23:16:43 -08:00
Abner Coimbre
cf837bf8ff No Alter Egos 2026-03-06 23:01:22 -08:00
Abner Coimbre
bbbf2cbfa0 Make invite failures more granular 2026-03-06 16:29:07 -08:00
Abner Coimbre
5408608c81 Add Revolt cover image to invite system 2026-03-06 15:34:27 -08:00
Abner Coimbre
1d416e9940 Oops, forgot to add base template 2026-03-06 13:35:45 -08:00
Abner Coimbre
3badfa73be Add new invite system 2026-03-06 13:33:55 -08:00
Abner Coimbre
449ca7c6ae Add Denmark cover image 2026-03-06 09:01:14 -08:00
Abner Coimbre
52b3a7c0d7 Add Fancy Coffee cover 2026-02-27 09:59:37 -08:00
Abner Coimbre
5382f53856 Add Armistice cover image 2026-02-26 20:20:54 -08:00
Abner Coimbre
8fbe126b5b Add Orca image 2026-02-25 16:10:13 -08:00
Abner Coimbre
5fdbc0489c Update HMC Memo 004 yet again 2026-02-25 14:40:31 -08:00
Abner Coimbre
96c03335c2 Update HMC Memo 004 again 2026-02-25 14:39:03 -08:00
Abner Coimbre
6004baf166 Update HMC Memo 004 2026-02-25 14:34:39 -08:00
Abner Coimbre
a108d1ad7d Update HMC Memo 003 yet again 2026-02-25 14:28:46 -08:00
Abner Coimbre
93e36fba2d Update HMC Memo 003 again 2026-02-25 14:24:50 -08:00
Abner Coimbre
1042880357 Update HMC Memo 003 2026-02-25 14:19:31 -08:00
Abner Coimbre
693aafc7b7 Enable February Memos 2026-02-25 14:10:23 -08:00
Abner Coimbre
509574a540 Add HMC Memo 004 2026-02-25 14:04:40 -08:00
Abner Coimbre
b1ab24491b Re-add Montreal cover image 2026-02-25 12:11:04 -08:00
Abner Coimbre
a7e2b2cf18 Remove Montreal cover 2026-02-25 12:04:18 -08:00
Abner Coimbre
7e012eb3d1 Add Montreal cover image 2026-02-25 12:00:54 -08:00
Abner Coimbre
b97a319cc1 Add HMC Memo 003 2026-02-25 11:50:49 -08:00
Abner Coimbre
7b6b816597 Memo 001: Update blurb on Zac 2026-02-25 11:50:26 -08:00
Abner Coimbre
4649a813db Update Boston page to mention Margret 2026-02-25 11:50:07 -08:00
jmug
8326c412aa [chore] s/Discord/Revolt/ for meetup pages. 2026-02-23 21:18:27 -08:00
Abner Coimbre
8bc0ad22c8 Add Revolt cover image 2026-02-07 00:01:48 -08:00
Abner Coimbre
beccd253bf Disable 'January Memos' banner 2026-02-02 18:45:24 -08:00
Abner Coimbre
843a8c01b9 Tokyo cover image 2026-01-31 10:30:21 -08:00
Abner Coimbre
ef0cce57d0 Rework footer menu (2026) 2026-01-29 00:03:12 -08:00
Abner Coimbre
10c7b20a45 Rework navigation menu (2026) 2026-01-29 00:01:05 -08:00
Abner Coimbre
973720b07d Dune and Linux Image 2026-01-28 16:06:23 -08:00
Abner Coimbre
0b9db9ded6 Star Wars Zero Company Image 2026-01-28 16:06:15 -08:00
Abner Coimbre
264a79a10d Phyllotaxis Image 2026-01-28 16:06:06 -08:00
60 changed files with 285 additions and 101 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
assets/images/server.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -171,3 +171,9 @@ blockquote p:first-of-type {
.revolt-form button:hover { .revolt-form button:hover {
background: #2980b9; background: #2980b9;
} }
img[src*="zac.jpg"],
img[src*="server.png"] {
max-width: 280px;
border-radius: 12px;
}

View File

@@ -2,19 +2,8 @@
# main menu # main menu
[[main]] [[main]]
name = "Conferences" name = "Meetups"
weight = 1 url = "/meetups"
[[main]]
parent = "Conferences"
name = "Seattle"
url = "/Seattle"
weight = 2
[[main]]
parent = "Conferences"
name = "Boston"
url = "/boston"
weight = 1 weight = 1
[[main]] [[main]]
@@ -23,8 +12,8 @@ url = "/news"
weight = 2 weight = 2
[[main]] [[main]]
name = "Media" name = "Guide"
url = "/media" url = "/guide"
weight = 3 weight = 3
[[main]] [[main]]
@@ -33,43 +22,26 @@ weight = 3
[[main]] [[main]]
parent = "Explore" parent = "Explore"
name = "Chat" name = "Media"
url = "/chat" url = "/media"
weight = 1 weight = 1
[[main]]
parent = "Explore"
name = "Meetups"
url = "/meetups"
weight = 2
[[main]] [[main]]
parent = "Explore" parent = "Explore"
name = "Cowork" name = "Cowork"
url = "/cowork" url = "/cowork"
weight = 3 weight = 2
[[main]] [[main]]
name = "About" name = "About"
weight = 4
[[main]]
parent = "About"
name = "About Us"
url = "/about" url = "/about"
weight = 1 weight = 4
[[main]]
parent = "About"
name = "Quick Guide"
url = "/guide"
weight = 2
# footer menu # footer menu
[[footer]] [[footer]]
name = "Guide" name = "Guide"
url = "/guide" url = "/guide"
weight = 2 weight = 4
[[footer]] [[footer]]
name = "About" name = "About"
@@ -89,4 +61,4 @@ weight = 3
[[footer]] [[footer]]
name = "News" name = "News"
url = "/news" url = "/news"
weight = 4 weight = 2

View File

@@ -38,8 +38,8 @@ preloader = "" # use jpg, png, svg or gif format.
# Navigation button # Navigation button
[navigation_button] [navigation_button]
enable = true enable = true
label = "Meetups" label = "Chat"
link = "meetups" link = "chat"
# search # search
# search module: https://github.com/gethugothemes/hugo-modules/tree/master/search # search module: https://github.com/gethugothemes/hugo-modules/tree/master/search
@@ -57,7 +57,7 @@ show_categories = true
[announcement] [announcement]
enable = true enable = true
expire_days = 7 expire_days = 7
content = "Official January [Memos](/memos)" content = "Seeking [volunteers](/memos/HMC-Memo-006-HMC-Library.pdf) for the HMC library."
# seo meta data for OpenGraph / Twitter Card # seo meta data for OpenGraph / Twitter Card
# seo module: https://github.com/gethugothemes/hugo-modules/tree/master/seo-tools/basic-seo # seo module: https://github.com/gethugothemes/hugo-modules/tree/master/seo-tools/basic-seo

View File

@@ -2,9 +2,9 @@
# Banner # Banner
banner: banner:
title: "<span class='boston-color'>Come</span> for programming,<br> title: "<span class='boston-color'>Come</span> for programming,<br>
<span class='seattle-color'>stay</span> for the friends.<br> <span class='seattle-color'>stay</span> for the friends!<br>
<span class='meetups-color'>Meetups</span> all year round!" <span class='meetups-color'>Meetups</span> all year round."
content: "We are the largest offline events for systems programmers: 100% indie. This is our portal to meet engineers super into game engines, compilers, terminals, kernels and more:" content: "Handmade Cities are the largest offline events for systems programmers: 100% indie. This is our portal to meet engineers super into game engines, compilers, terminals, kernels and more:"
image: "/images/hmc_spread.png" image: "/images/hmc_spread.png"
hide_banner_img: true hide_banner_img: true
live_banner: live_banner:
@@ -40,17 +40,17 @@ banner:
icon: "fa-brands fa-youtube" icon: "fa-brands fa-youtube"
triple_section: triple_section:
enable: true enable: true
img_left: "/images/hmb/boston-light-mode.svg" img_left: "/images/meetups/meetups-light-mode.svg"
img_left_dark: "/images/hmb/boston-dark-mode.svg" img_left_dark: "/images/meetups/meetups-dark-mode.svg"
alt_text_left: "left" alt_text_left: "left"
link_left: "/boston" link_left: "/meetups"
img_center: "/images/hms/seattle-light-mode.svg" img_center: "/images/chat.png"
img_center_dark: "/images/hms/seattle-dark-mode.svg" img_center_dark: "/images/chat.png"
alt_text_center: "center" alt_text_center: "center"
link_center: "/seattle" link_center: "/chat"
img_right: "/images/meetups/meetups-light-mode.svg" img_right: "/images/newsletter.png"
img_right_dark: "/images/meetups/meetups-dark-mode.svg" img_right_dark: "/images/newsletter.png"
link_right: "/meetups" link_right: "/news"
alt_text_right: "right" alt_text_right: "right"
button: button:
enable: true enable: true

View File

@@ -24,11 +24,11 @@ features:
color: "#A456EA" color: "#A456EA"
content_class: "text-white" content_class: "text-white"
- title: "Self-host wherever possible" - title: "Self-host wherever possible"
content: "We operate our own chat server and mailing lists. For purchases, payment processors ping our servers to process orders ourselves." content: "We operate our own chat server, mailing lists, and more. For purchases, payment processors ping our servers to process orders ourselves."
color: "#6B8EE8" color: "#6B8EE8"
content_class: "text-white" content_class: "text-white"
- title: "Direct funding approach" - title: "Direct funding approach"
content: "We grow through obvious means, funded by users purchasing Handmade software. **Zero investors.**" content: "We grow through obvious means, funded by users purchasing our Handmade software. **Zero investors.**"
color: "#60E3C4" color: "#60E3C4"
content_class: "text-white" content_class: "text-white"
button: button:
@@ -55,4 +55,38 @@ features:
content_class: "mt-4" content_class: "mt-4"
content: "[Abner](https://abner.page) is founder of Handmade Cities and full-time [indie dev](https://terminal.click).<br><br>Born and raised in Puerto Rico, he was mentored by Kennedy Space Center on how they make software. After winning NASAs Intern of the Year, Abner penned an essay on their programming philosophy: featured in the [news](https://observer.com/2017/07/a-look-into-nasa-coding-philosophy-kennedy-space-center-programming/). He was subsequently promoted to launch control engineer.<br><br>Abner started the [Handmade Network](https://handmade.network/), an online community learning to make quality software. He went on to work under Jonathan Blow followed by Cyan Worlds to ship the Myst Remake.<br><br>Now in his early thirties, Abner's concern for declining software standards—both ethical and technical—pushed him to become a community organizer." content: "[Abner](https://abner.page) is founder of Handmade Cities and full-time [indie dev](https://terminal.click).<br><br>Born and raised in Puerto Rico, he was mentored by Kennedy Space Center on how they make software. After winning NASAs Intern of the Year, Abner penned an essay on their programming philosophy: featured in the [news](https://observer.com/2017/07/a-look-into-nasa-coding-philosophy-kennedy-space-center-programming/). He was subsequently promoted to launch control engineer.<br><br>Abner started the [Handmade Network](https://handmade.network/), an online community learning to make quality software. He went on to work under Jonathan Blow followed by Cyan Worlds to ship the Myst Remake.<br><br>Now in his early thirties, Abner's concern for declining software standards—both ethical and technical—pushed him to become a community organizer."
- title: "Zac Nowicki"
title_class: "text-white -mt-2"
subtitle: "Editor"
subtitle_class: "!text-[#F7CE3B]"
image: "/images/people/zac.jpg"
section_class: "text-white"
transition:
start: "/images/transition3.svg"
start_class: "-scale-y-100"
start_style: "mask-size: cover;mask-position:center;"
start_color: "black"
start_dark: "/images/transition3.svg"
start_dark_color: "black"
bg_color: "#060610"
content_class: "mt-4"
content: "Zac is our editor who keeps us free of typos and fact-checks our writing. Outside of donating his time here, Zac is tech lead for [Kagi Search](https://kagi.com). Opinions here do not represent his employer."
- title: "Mariano Uvalle"
title_class: "text-white -mt-2"
subtitle: "Server Admin"
subtitle_class: "!text-[#F7CE3B]"
image: "/images/server.png"
section_class: "text-white"
transition:
start: "/images/transition3.svg"
start_class: "-scale-y-100"
start_style: "mask-size: cover;mask-position:center;"
start_color: "black"
start_dark: "/images/transition3.svg"
start_dark_color: "black"
bg_color: "#060610"
content_class: "mt-4"
content: "Mariano Uvalle is [server administrator](/memos/HMC-Memo-003-Server-Admin.pdf) for Handmade Cities. He's a former Microsoft engineer at Azure who stepped down to work for a smaller outfit. Opinions here do not represent employers."
--- ---

4
content/english/chat.md Normal file
View File

@@ -0,0 +1,4 @@
---
title: "Handmade Revolt"
layout: "chat"
---

View File

@@ -0,0 +1,4 @@
---
title: "Invite a Friend to our Chat!"
layout: "invite"
---

View File

@@ -10,6 +10,6 @@ bio="daniel@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="khrob@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="marcel@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -5,11 +5,11 @@ description="Receive Handmade meetup invites from the Hub of the Universe!"
api_endpoint="https://api.handmadecities.com/v1/meetups/boston" api_endpoint="https://api.handmadecities.com/v1/meetups/boston"
[[hosts]] [[hosts]]
name="Caden Parker" name="Margret Riegert"
bio="caden@handmadecities.com" bio="margret@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="josh@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="felix@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="seth@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="sam@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="martin@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="eternalstudent@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="jack@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="dan@handmadecities.com"
image="/images/people/dan_grigsby.webp" image="/images/people/dan_grigsby.webp"
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="mark@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="sid@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -21,6 +21,6 @@ bio="Hosts the Kirkland [coworking](/cowork) sessions"
image="/images/people/robbins.jpg" image="/images/people/robbins.jpg"
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="xander@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="miguel@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="gabriel@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="jstevens@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -10,6 +10,6 @@ bio="patrick@handmadecities.com"
image="" image=""
+++ +++
#### Optional Discord Server #### Optional Revolt Server
The mailing list is how you get official invites, but you may join the Discord for extra updates or to chat with the meetup group. The mailing list is how you get official invites, but you may join Revolt for extra updates or to chat with the meetup group.

View File

@@ -12,8 +12,24 @@ Handmade Cities publishes memoranda written by [our founder](/about), usually ad
Memos are published once a month as PDF documents below. Memos are published once a month as PDF documents below.
**MEMORANDA (JANUARY 2026)** ## MEMORANDA
**January 2026**
- [HMC Memo 001 - Wiki Ownership](/memos/HMC-Memo-001-Wiki-Ownership.pdf) - [HMC Memo 001 - Wiki Ownership](/memos/HMC-Memo-001-Wiki-Ownership.pdf)
- [HMC Memo 002 - UXUI](/memos/HMC-Memo-002-UXUI.pdf) - [HMC Memo 002 - UXUI](/memos/HMC-Memo-002-UXUI.pdf)
**February 2026**
- [HMC Memo 003 - Server Admin](/memos/HMC-Memo-003-Server-Admin.pdf)
- [HMC Memo 004 - Meetup Hosts](/memos/HMC-Memo-004-Meetup-Hosts.pdf)
**March 2026**
- [HMC Memo 005 - Invite Tree](/memos/HMC-Memo-005-Invite-Tree.pdf)
**April 2026**
- [HMC Memo 006 - HMC Library](/memos/HMC-Memo-006-HMC-Library.pdf)
Date of publication varies. Date of publication varies.

View File

@@ -0,0 +1,12 @@
+++
url = "/invite-fail-credentials"
title="Error"
subtitle="Invite Failed"
main_image=""
+++
#### Unknown Credentials
Revolt email or password was not recognized. Please [try again](/invite) or contact our support staff.
⚠️ You need [your own verified account](/chat) before having the power to invite others.

View File

@@ -0,0 +1,10 @@
+++
url = "/invite-fail-unverified"
title="Error"
subtitle="Invite Failed"
main_image=""
+++
#### Unverified User
Only [Verified Humans](https://guide.handmadecities.com/docs/chat/#verified-human-badge) are allowed to send chat invites. Once you're granted the badge you may [try again](/invite)!

View File

@@ -0,0 +1,13 @@
+++
url = "/invite-fail"
title="Error"
subtitle="Invite Failed"
main_image=""
+++
#### UH OH!
It seems we couldn't generate the chat invite. A few reasons why:
- Incorrect [Revolt](https://chat.handmadecities.com) username or password
- You are not a [Verified Human](https://guide.handmadecities.com/docs/chat/#verified-human-badge) yet
- A server error on our part. Contact our support staff immediately

View File

@@ -0,0 +1,14 @@
+++
url = "/invite-success"
title="Complete"
subtitle="Invite Successful"
main_image=""
+++
#### Congrats!
You've invited a fellow human to our Handmade Revolt. If necessary, ask them to check the junk folder and mark us as safe!
Ready to [send another](/invite)?
⚠️ We use an invite tree [inspired](https://lobste.rs/about#invitations) by the Lobsters community: YOU are responsible for the users you invite, plus any users they've invited (and so on.)

View File

@@ -8,7 +8,7 @@ main_image=""
If you were redirected here, you will now receive meetup invites! Note the following: If you were redirected here, you will now receive meetup invites! Note the following:
- Handmade meetups are typically once a month - Handmade meetups are typically once a month
- You may optionally join our [Discord](/discord) server too - You may optionally join our [chat](/chat) server too
#### Staff Disclaimer #### Staff Disclaimer

View File

@@ -0,0 +1,26 @@
{{ define "main" }}
<section class="section">
<div class="container max-w-xl">
<h1 class="mb-4 text-3xl font-bold">{{ .Title }}</h1>
<p class="mb-8">Join our community chat or help it grow by inviting someone you trust.</p>
<div class="space-y-6">
<a href="/revolt/" class="block rounded border border-gray-300 p-6 hover:border-blue-500 hover:shadow-md transition">
<h2 class="text-xl font-semibold text-gray-900">Apply to Join</h2>
<p class="mt-2">
New to the community? Submit an application to join our Revolt chat server.
</p>
</a>
<a href="/invite/" class="block rounded border border-gray-300 p-6 hover:border-blue-500 hover:shadow-md transition">
<h2 class="text-xl font-semibold text-gray-900">Invite Someone</h2>
<p class="mt-2">
Already a member? Vouch for someone you know and send them an invite code.
</p>
</a>
</div>
</div>
</section>
{{ end }}

View File

@@ -0,0 +1,71 @@
{{ define "main" }}
<section class="section">
<div class="container max-w-xl">
<h1 class="mb-8 text-3xl font-bold">{{ .Title }}</h1>
<img src="/images/hmc/revolt-preview.png" style="border-radius: 20px;">
<p><strong>Give them full access to <a href="https://chat.handmadecities.com">chat.handmadecities.com</a></strong></p>
<br>
<form action="https://invite.handmadecities.com" method="POST" class="space-y-6">
<div>
<label for="invite-email" class="mb-2 block font-semibold">Email to Send Invite to<span class="text-red-500">*</span></label>
<input type="email" id="invite-email" name="invite_email" required
class="w-full rounded border border-gray-300 px-4 py-2 text-gray-900 focus:border-blue-500 focus:outline-none" />
</div>
<hr>
<div>
<label for="revolt-email" class="mb-2 block font-semibold">Your Revolt Email <span class="text-red-500">*</span></label>
<input type="email" id="revolt-email" name="revolt_email" required
class="w-full rounded border border-gray-300 px-4 py-2 text-gray-900 focus:border-blue-500 focus:outline-none" />
</div>
<div>
<label for="revolt-password" class="mb-2 block font-semibold">Your Revolt Password <span class="text-red-500">*</span></label>
<input type="password" id="revolt-password" name="revolt_password" required
class="w-full rounded border border-gray-300 px-4 py-2 text-gray-900 focus:border-blue-500 focus:outline-none" />
</div>
<div class="flex items-center gap-2 mt-1">
<input type="checkbox" id="show-password" class="h-4 w-4" />
<label for="show-password">Show password</label>
</div>
<div>
<label for="notes" class="mb-2 block font-semibold">Additional Notes (Optional)</label>
<textarea id="notes" name="notes" rows="4"
placeholder='"I am inviting my college roommate who is interested in Handmade software!"'
class="w-full rounded border border-gray-300 px-4 py-2 text-gray-900 focus:border-blue-500 focus:outline-none"></textarea>
</div>
<div class="flex items-center gap-2">
<input type="checkbox" id="meatspace" name="met_in_meatspace" value="yes"
class="h-4 w-4" />
<label for="meatspace">Have you met this person in meatspace?</label>
</div>
<div id="meatspace-note" style="display: none;">
This person will be granted a <a href="https://guide.handmadecities.com/docs/chat/#verified-human-badge" class="text-blue-600 underline">Verified Human</a> badge.
</div>
<button type="submit"
class="rounded bg-blue-600 px-6 py-3 font-semibold text-white hover:bg-blue-700">
Send Invite Code
</button>
<p class="text-sm text-gray-500">
You're vouching for the human identity of this new user. Bots or alternate personas are <strong>forbidden.</strong>
</p>
</form>
</div>
<script>
document.getElementById("meatspace").addEventListener("change", function() {
document.getElementById("meatspace-note").style.display = this.checked ? "block" : "none";
});
document.getElementById("show-password").addEventListener("change", function() {
document.getElementById("revolt-password").type = this.checked ? "text" : "password";
});
</script>
</section>
{{ end }}

View File

@@ -2,7 +2,7 @@
<section class="revolt-form-section"> <section class="revolt-form-section">
<div class="container"> <div class="container">
<h1>{{ .Title }}</h1> <h1>{{ .Title }}</h1>
<img src="/images/hmc/revolt-promotion.png" style="border-radius: 10px;"> <img src="/images/hmc/revolt-promotion.png" style="border-radius: 20px;">
<p>We now run our server at <strong><a href="https://chat.handmadecities.com">chat.handmadecities.com</a></strong>. Real humans only!</p> <p>We now run our server at <strong><a href="https://chat.handmadecities.com">chat.handmadecities.com</a></strong>. Real humans only!</p>
<form action="https://register.handmadecities.com" method="POST" class="revolt-form"> <form action="https://register.handmadecities.com" method="POST" class="revolt-form">

View File

@@ -64,9 +64,11 @@
<option value="Prague">Prague</option> <option value="Prague">Prague</option>
<option value="Raleigh-Durham">Raleigh-Durham</option> <option value="Raleigh-Durham">Raleigh-Durham</option>
<option value="Rome">Rome</option> <option value="Rome">Rome</option>
<option value="Salt Lake City ">Salt Lake City</option>
<option value="San Antonio">San Antonio</option> <option value="San Antonio">San Antonio</option>
<option value="San Diego">San Diego</option> <option value="San Diego">San Diego</option>
<option value="San Juan">San Juan</option> <option value="San Juan">San Juan</option>
<option value="San Juan">South Carolina</option>
<option value="Toronto">Toronto</option> <option value="Toronto">Toronto</option>
<option value="Valencia">Valencia</option> <option value="Valencia">Valencia</option>
<option value="Vienna">Vienna</option> <option value="Vienna">Vienna</option>

View File

@@ -25,7 +25,7 @@
<div class="flex flex-col gap-5 lg:w-1/3"> <div class="flex flex-col gap-5 lg:w-1/3">
<div class="dark:text-white content-container content"> <div class="dark:text-white content-container content">
{{ .Content }} {{ .Content }}
<a class="btn btn-outline-primary" href="/discord">Discord</a> <a class="btn btn-outline-primary" href="/discord">Revolt</a>
</div> </div>
{{ $hasGoodHost := false }} {{ $hasGoodHost := false }}

BIN
static/images/chat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.