diff --git a/public/wheeljam2021/TwitterCard.png b/public/wheeljam2021/TwitterCard.png
new file mode 100644
index 00000000..49af5533
Binary files /dev/null and b/public/wheeljam2021/TwitterCard.png differ
diff --git a/public/wheeljam2022/TwitterCard.png b/public/wheeljam2022/TwitterCard.png
new file mode 100644
index 00000000..51392abf
Binary files /dev/null and b/public/wheeljam2022/TwitterCard.png differ
diff --git a/src/hmnurl/urls.go b/src/hmnurl/urls.go
index 19c7ad90..f175a7d8 100644
--- a/src/hmnurl/urls.go
+++ b/src/hmnurl/urls.go
@@ -49,6 +49,13 @@ func BuildWhenIsIt() string {
return Url("/whenisit", nil)
}
+var RegexJamsIndex = regexp.MustCompile("^/jams$")
+
+func BuildJamsIndex() string {
+ defer CatchPanic()
+ return Url("/jams", nil)
+}
+
var RegexJamIndex = regexp.MustCompile("^/jam$")
func BuildJamIndex() string {
diff --git a/src/templates/src/fishbowl_index.html b/src/templates/src/fishbowl_index.html
index d083c5cd..707e9ee8 100644
--- a/src/templates/src/fishbowl_index.html
+++ b/src/templates/src/fishbowl_index.html
@@ -4,7 +4,7 @@
Fishbowls
-
Every two months on the Discord, we host a fishbowl: a panel conversation where a select few community members can discuss a topic in detail. Fishbowls give us the opportunity to discuss difficult subjects with more nuance and detail than you can find anywhere else on the Internet. In many ways, they're a distillation of everything the network is about.
+
Every so often on the Discord, we host a fishbowl: a panel conversation where a select few community members can discuss a topic in detail. Fishbowls give us the opportunity to discuss difficult subjects with more nuance and detail than you can find anywhere else on the Internet. In many ways, they're a distillation of everything the network is about.
This is an archive of those conversations. If you would like to catch one live, join the Discord!
diff --git a/src/templates/src/include/header.html b/src/templates/src/include/header.html
index a88bb25c..60f45329 100644
--- a/src/templates/src/include/header.html
+++ b/src/templates/src/include/header.html
@@ -71,13 +71,14 @@
Projects
-
-
diff --git a/src/templates/src/jams_index.html b/src/templates/src/jams_index.html
new file mode 100644
index 00000000..5f7eddc4
--- /dev/null
+++ b/src/templates/src/jams_index.html
@@ -0,0 +1,41 @@
+{{ template "base.html" . }}
+
+{{ define "extrahead" }}
+
+{{ end }}
+
+{{ define "content" }}
+
+
Jams
+
+
Since 2020, we have been running programming jams to encourage community members to explore new ideas and start projects. You can view all the past submissions and results here.
+
+
+
+{{ end }}
diff --git a/src/templates/types.go b/src/templates/types.go
index 1cc6851f..acbf187d 100644
--- a/src/templates/types.go
+++ b/src/templates/types.go
@@ -52,6 +52,7 @@ type Header struct {
FishbowlUrl string
ForumsUrl string
ConferencesUrl string
+ JamsUrl string
EducationUrl string
Project *ProjectHeader
diff --git a/src/website/base_data.go b/src/website/base_data.go
index 01410380..d6a95c65 100644
--- a/src/website/base_data.go
+++ b/src/website/base_data.go
@@ -76,6 +76,7 @@ func getBaseData(c *RequestContext, title string, breadcrumbs []templates.Breadc
FishbowlUrl: hmnurl.BuildFishbowlIndex(),
ForumsUrl: hmnurl.HMNProjectContext.BuildForum(nil, 1),
ConferencesUrl: hmnurl.BuildConferences(),
+ JamsUrl: hmnurl.BuildJamsIndex(),
EducationUrl: hmnurl.BuildEducationIndex(),
},
Footer: templates.Footer{
diff --git a/src/website/jam.go b/src/website/jam.go
index 924ff1f5..c538526a 100644
--- a/src/website/jam.go
+++ b/src/website/jam.go
@@ -12,6 +12,29 @@ import (
"git.handmade.network/hmn/hmn/src/utils"
)
+func JamsIndex(c *RequestContext) ResponseData {
+ var res ResponseData
+
+ type TemplateData struct {
+ templates.BaseData
+
+ LispJamUrl string
+ WRJ2021Url string
+ WRJ2022Url string
+ VJ2023Url string
+ }
+
+ res.MustWriteTemplate("jams_index.html", TemplateData{
+ BaseData: getBaseDataAutocrumb(c, "Jams"),
+
+ LispJamUrl: hmnurl.BuildFishbowl("lisp-jam"),
+ WRJ2021Url: hmnurl.BuildJamIndex2021(),
+ WRJ2022Url: hmnurl.BuildJamIndex2022(),
+ VJ2023Url: hmnurl.BuildJamIndex2023_Visibility(),
+ }, c.Perf)
+ return res
+}
+
func JamIndex2023_Visibility(c *RequestContext) ResponseData {
var res ResponseData
diff --git a/src/website/routes.go b/src/website/routes.go
index d720f986..219da3de 100644
--- a/src/website/routes.go
+++ b/src/website/routes.go
@@ -55,6 +55,8 @@ func NewWebsiteRoutes(conn *pgxpool.Pool) http.Handler {
hmnOnly.GET(hmnurl.RegexProjectSubmissionGuidelines, ProjectSubmissionGuidelines)
hmnOnly.GET(hmnurl.RegexConferences, Conferences)
hmnOnly.GET(hmnurl.RegexWhenIsIt, WhenIsIt)
+
+ hmnOnly.GET(hmnurl.RegexJamsIndex, JamsIndex)
hmnOnly.GET(hmnurl.RegexJamIndex, func(c *RequestContext) ResponseData {
return c.Redirect(hmnurl.BuildJamIndex2023_Visibility(), http.StatusFound)
})