Compare commits
57 Commits
973720b07d
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d09643979 | ||
|
|
39a4726e52 | ||
|
|
7efdbecc1f | ||
|
|
f94d440106 | ||
|
|
522613affb | ||
|
|
081c502c1a | ||
|
|
a11a591da3 | ||
|
|
a336b67af4 | ||
|
|
4521d678cd | ||
|
|
2f08c8b427 | ||
|
|
a2b113a07b | ||
|
|
3964b15314 | ||
|
|
03c87dfc98 | ||
|
|
587b249d2b | ||
|
|
aa41556549 | ||
|
|
5a0ee86044 | ||
|
|
29e222c2b7 | ||
|
|
af99439685 | ||
|
|
224a5542b9 | ||
|
|
da8e025f23 | ||
|
|
fa8c4bc061 | ||
|
|
3c1f0ed4f6 | ||
|
|
f0d11515e8 | ||
|
|
f8e8077425 | ||
|
|
522e1ead8d | ||
|
|
e07b9e3935 | ||
|
|
4a2a71594b | ||
|
|
4144377426 | ||
|
|
cf837bf8ff | ||
|
|
bbbf2cbfa0 | ||
|
|
5408608c81 | ||
|
|
1d416e9940 | ||
|
|
3badfa73be | ||
|
|
449ca7c6ae | ||
|
|
52b3a7c0d7 | ||
|
|
5382f53856 | ||
|
|
8fbe126b5b | ||
|
|
5fdbc0489c | ||
|
|
96c03335c2 | ||
|
|
6004baf166 | ||
|
|
a108d1ad7d | ||
|
|
93e36fba2d | ||
|
|
1042880357 | ||
|
|
693aafc7b7 | ||
|
|
509574a540 | ||
|
|
b1ab24491b | ||
|
|
a7e2b2cf18 | ||
|
|
7e012eb3d1 | ||
|
|
b97a319cc1 | ||
|
|
7b6b816597 | ||
|
|
4649a813db | ||
|
|
8326c412aa | ||
|
|
8bc0ad22c8 | ||
|
|
beccd253bf | ||
|
|
843a8c01b9 | ||
|
|
ef0cce57d0 | ||
|
|
10c7b20a45 |
BIN
assets/images/people/zac.jpg
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
assets/images/server.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
@@ -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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 NASA’s 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 NASA’s 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
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: "Handmade Revolt"
|
||||||
|
layout: "chat"
|
||||||
|
---
|
||||||
4
content/english/invite.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: "Invite a Friend to our Chat!"
|
||||||
|
layout: "invite"
|
||||||
|
---
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
12
content/english/transactional/invite-fail-credentials.md
Normal 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.
|
||||||
10
content/english/transactional/invite-fail-unverified.md
Normal 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)!
|
||||||
13
content/english/transactional/invite-fail.md
Normal 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
|
||||||
14
content/english/transactional/invite-success.md
Normal 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.)
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
26
layouts/_default/chat.html
Normal 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 }}
|
||||||
71
layouts/_default/invite.html
Normal 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 }}
|
||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
After Width: | Height: | Size: 174 KiB |
BIN
static/images/meetups/armistice.webp
Normal file
|
After Width: | Height: | Size: 552 KiB |
BIN
static/images/meetups/denmark.jpg
Normal file
|
After Width: | Height: | Size: 303 KiB |
BIN
static/images/meetups/fancy_coffee.jpg
Normal file
|
After Width: | Height: | Size: 178 KiB |
BIN
static/images/meetups/importc.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
static/images/meetups/montreal.jpg
Normal file
|
After Width: | Height: | Size: 562 KiB |
BIN
static/images/meetups/nyc.jpg
Normal file
|
After Width: | Height: | Size: 207 KiB |
BIN
static/images/meetups/orca.png
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
static/images/meetups/revolt.jpg
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
static/images/meetups/snowed_in.jpg
Normal file
|
After Width: | Height: | Size: 388 KiB |
BIN
static/images/meetups/tokyo.jpg
Normal file
|
After Width: | Height: | Size: 388 KiB |
BIN
static/images/newsletter.png
Normal file
|
After Width: | Height: | Size: 47 KiB |