diff --git a/.github/workflows/pelican.yml b/.github/workflows/pelican.yml
new file mode 100644
index 0000000..940e79f
--- /dev/null
+++ b/.github/workflows/pelican.yml
@@ -0,0 +1,14 @@
+name: Deploy to GitHub Pages
+on:
+ push:
+ branches: ["main"]
+ workflow_dispatch:
+jobs:
+ deploy:
+ uses: "getpelican/pelican/.github/workflows/github_pages.yml@b86383fb28a160eeaf3e13cbf99469a0ed4cfcb2"
+ permissions:
+ contents: "read"
+ pages: "write"
+ id-token: "write"
+ with:
+ settings: "publishconf.py"
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2449012
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+_site/
+.sass-cache/
+package-lock.json
+.cache
+node_modules/
+.venv
+__pycache__/
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ec05021
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,73 @@
+PY?=
+PELICAN?=pelican
+PELICANOPTS=
+
+BASEDIR=$(CURDIR)
+INPUTDIR=$(BASEDIR)/src
+OUTPUTDIR=$(BASEDIR)/_site
+CONFFILE=$(BASEDIR)/pelicanconf.py
+PUBLISHCONF=$(BASEDIR)/publishconf.py
+
+
+DEBUG ?= 0
+ifeq ($(DEBUG), 1)
+ PELICANOPTS += -D
+endif
+
+RELATIVE ?= 0
+ifeq ($(RELATIVE), 1)
+ PELICANOPTS += --relative-urls
+endif
+
+SERVER ?= "0.0.0.0"
+
+PORT ?= 0
+ifneq ($(PORT), 0)
+ PELICANOPTS += -p $(PORT)
+endif
+
+
+help:
+ @echo 'Makefile for a pelican Web site '
+ @echo ' '
+ @echo 'Usage: '
+ @echo ' make html (re)generate the web site '
+ @echo ' make clean remove the generated files '
+ @echo ' make regenerate regenerate files upon modification '
+ @echo ' make publish generate using production settings '
+ @echo ' make serve [PORT=8000] serve site at http://localhost:8000'
+ @echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 '
+ @echo ' make devserver [PORT=8000] serve and regenerate together '
+ @echo ' make devserver-global regenerate and serve on 0.0.0.0 '
+ @echo ' make github upload the web site via gh-pages '
+ @echo ' '
+ @echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
+ @echo 'Set the RELATIVE variable to 1 to enable relative urls '
+ @echo ' '
+
+html:
+ "$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
+
+clean:
+ [ ! -d "$(OUTPUTDIR)" ] || rm -rf "$(OUTPUTDIR)"
+
+regenerate:
+ "$(PELICAN)" -r "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
+
+serve:
+ "$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
+
+serve-global:
+ "$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) -b $(SERVER)
+
+devserver:
+ "$(PELICAN)" -lr "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
+
+devserver-global:
+ "$(PELICAN)" -lr "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) -b 0.0.0.0
+
+publish:
+ "$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(PUBLISHCONF)" $(PELICANOPTS)
+
+
+.PHONY: html help clean regenerate serve serve-global devserver devserver-global publish github
diff --git a/index.html b/index.html
deleted file mode 100644
index c9fb73e..0000000
--- a/index.html
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-GenderFree Scottish Country Dancing
-
-
-
-
-
GenderFree Scottish Country Dancing
-
-
-
-
Event Details
-
-Welcome to the first-ever GenderFree Scottish Country Dance!
-
-
-
-This is a chance for people to learn and practice Scottish Country Dancing together using entirely gender-neutral language.
-
-
-We will be dancing on Thursday, October 3rd.
-
-
7:00 - Advanced dance for people who already know SCD
-
7:30 - Lesson and practice for ALL
-
8:00 - Social dance, cued to the floor level
-
9:00ish - We're done! Go home, or maybe we grab snacks somewhere down the road?
-
-
-Cost is pay-what-you-can, $5 - $20 is the recommended donation.
-
-
-This week will be recorded music, but hopefully in the future we will be able to pay live musicians a fair wage to play for us! MCing and teaching will be provided by Kat Dutton!
-
-
-We are dancing in the NESFA clubhouse, located at 504 Medford St., Somerville, MA It's about a third of a mile from the Magoun Sq green line station. There is a parking lot in the back.
-The floor is linoleum, so bring clothing and shoes that you are comfortable dancing in.
-
-
-COVID PROTOCOLS: Because wastewater data is showing levels above 500 copies/mL, we will be MASK REQUIRED for this dance. Please wear a well-fitting high-filtration mask over your nose and mouth.
-
-
-Next dances:
-
-
October 17th
-
November 7th
-
-
-
-
-
FAQ
-
-
What is SCD?
-
SCD (Scottish Country Dancing) is high-energy enthusiastic set dancing done by groups of people. You and a partner repeat different movements to move through a set of people. It's sociable and very fun!
-
-
What do you mean by GenderFree?
-
A GenderFree dance means that there will be no point where your genders are referenced on the dance floor, and there are no requirements that people of certain genders dance in certain spaces or with certain other genders. The specific language used to refer to different roles are the words "Larks" and "Robins".
-
-
Is the space accessible?
-
The venue has one entrance with a ramp. Accessing the bathroom involves going down a few steps or around the outside and in the back door. Scottish dancing is traditionally high-energy but dancers are invited to bring the energy they have to safely have a good time.
-
-
Will this happen regularly? When?
-
The current plan is to dance on odd Thursdays --first, third, and fifth when available. The next dances after this will be October 17th and November 7th (we will not be dancing on Halloween)
-
-
-
-
-
\ No newline at end of file
diff --git a/main.css b/main.css
deleted file mode 100644
index 7c9eb4d..0000000
--- a/main.css
+++ /dev/null
@@ -1,34 +0,0 @@
-body {
- background-color: rgb(218, 248, 197);
-
- font-family: verdana;
-
- margin: 0;
- padding: 0;
-}
-
-h1 {
- max-width: 20em;
- margin: 0 auto;
-
- padding: clamp(0.1em, 0.5vw, 1em);
-
- font-weight: bold;
- font-size: 2.5em;
- text-align: center;
-}
-
-.content {
- max-width: 50em;
- margin: 0.5em auto;
-
- background-color: white;
-
- border: solid;
- border-width: 2px;
- border-color: rgb(181, 126, 220);
-
- padding: 0 2em;
-
- box-sizing: border-box;
-}
\ No newline at end of file
diff --git a/pelicanconf.py b/pelicanconf.py
new file mode 100644
index 0000000..7ae96df
--- /dev/null
+++ b/pelicanconf.py
@@ -0,0 +1,59 @@
+from zoneinfo import ZoneInfo
+from datetime import datetime
+
+
+
+AUTHOR = 'Kyle MacKenzie'
+SITENAME = 'GenderFree SCD'
+SITESUBTITLE = ''
+SITEURL = ""
+
+PATH = "src"
+
+TIMEZONE = 'America/New_York'
+TODAY = datetime.today().astimezone(ZoneInfo(TIMEZONE))
+
+
+DEFAULT_LANG = 'en'
+
+THEME = 'theme'
+STYLESHEET_URL = '/theme/css/main.css'
+
+# Feed generation is usually not desired when developing
+FEED_ALL_ATOM = None
+CATEGORY_FEED_ATOM = None
+TRANSLATION_FEED_ATOM = None
+AUTHOR_FEED_ATOM = None
+AUTHOR_FEED_RSS = None
+
+# Blogroll
+LINKS = (
+# ("Jinja2", "https://palletsprojects.com/p/jinja/"),
+# ("You can modify those links in your config file", "#"),
+)
+
+# Social widget
+SOCIAL = (
+ ("You can add links in your config file", "#"),
+ ("Another social link", "#"),
+)
+
+DIRECT_TEMPLATES = (('index'),)
+
+USE_FOLDER_AS_CATEGORY=True
+
+PAGE_URL = "{slug}"
+PAGE_SAVE_AS = "{slug}/index.html"
+
+CATEGORY_URL = "{slug}"
+CATEGORY_SAVE_AS = "{slug}/index.html"
+
+ARTICLE_URL = 'events/{date:%Y}-{date:%b}-{date:%d}-{slug}/'
+ARTICLE_SAVE_AS = "events/{date:%Y}-{date:%b}-{date:%d}-{slug}/index.html"
+
+DEFAULT_DATE_FORMAT = "%A %m/%-d/%Y"
+
+DEFAULT_PAGINATION = False
+
+# Uncomment following line if you want document-relative URLs when developing
+# RELATIVE_URLS = True
diff --git a/publishconf.py b/publishconf.py
new file mode 100644
index 0000000..e160bce
--- /dev/null
+++ b/publishconf.py
@@ -0,0 +1,22 @@
+# This file is only used if you use `make publish` or
+# explicitly specify it as your config file.
+
+import os
+import sys
+
+sys.path.append(os.curdir)
+from pelicanconf import *
+
+# If your site is available via HTTPS, make sure SITEURL begins with https://
+SITEURL = "https://www.genderfreescd.com"
+RELATIVE_URLS = False
+
+FEED_ALL_ATOM = "feeds/all.atom.xml"
+CATEGORY_FEED_ATOM = "feeds/{slug}.atom.xml"
+
+DELETE_OUTPUT_DIRECTORY = True
+
+# Following items are often useful when publishing
+
+# DISQUS_SITENAME = ""
+# GOOGLE_ANALYTICS = ""
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..241aa88
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,22 @@
+anyio==4.6.2.post1
+blinker==1.8.2
+docutils==0.21.2
+exceptiongroup==1.2.2
+feedgenerator==2.1.0
+idna==3.10
+Jinja2==3.1.4
+Markdown==3.7
+markdown-it-py==3.0.0
+MarkupSafe==3.0.2
+mdurl==0.1.2
+ordered-set==4.1.0
+pelican==4.10.1
+Pygments==2.18.0
+python-dateutil==2.9.0.post0
+pytz==2024.2
+rich==13.9.3
+six==1.16.0
+sniffio==1.3.1
+typing_extensions==4.12.2
+Unidecode==1.3.8
+watchfiles==0.24.0
diff --git a/src/events/class_10-17-2024.md b/src/events/class_10-17-2024.md
new file mode 100644
index 0000000..05057b0
--- /dev/null
+++ b/src/events/class_10-17-2024.md
@@ -0,0 +1,10 @@
+Title: GenderFree SCD
+Date: 2024-10-17 19:00:00
+
+Teaching by Kat Dutton to recorded music
+
+- 7:00 -- 7:30 - Advanced SCD
+- 7:30 -- 8:00 - Dance lesson for all
+- 8:00 -- 9:00 - Social dance for all
+
+**COVID PROTOCOLS**: Because wastewater data is showing levels above 500 copies/mL, we will be *MASK REQUIRED* for this dance. Please wear a well-fitting high-filtration mask over your nose and mouth.
diff --git a/src/events/class_10-3-2024.md b/src/events/class_10-3-2024.md
new file mode 100644
index 0000000..1167bae
--- /dev/null
+++ b/src/events/class_10-3-2024.md
@@ -0,0 +1,25 @@
+Title: GenderFree SCD
+Date: 2024-10-03-19:00:00
+
+This is a chance for people to learn and practice Scottish Country Dancing together using entirely gender-neutral language.
+
+We will be dancing on **Thursday, October 3rd.**
+
+- 7:00 - Advanced dance for people who already know SCD
+- 7:30 - Lesson and practice for ALL
+- 8:00 - Social dance, cued to the floor level
+- 9:00ish - We're done! Go home, or maybe we grab snacks somewhere down the road?
+
+
+Cost is **pay-what-you-can, $5 - $20** is the recommended donation.
+
+This week will be recorded music, but hopefully in the future we will be able to pay live musicians a fair wage to play for us! MCing and teaching will be provided by Kat Dutton!
+
+We are dancing in the **NESFA clubhouse**, located at **504 Medford St., Somerville, MA** It's about a third of a mile from the Magoun Sq green line station. There is a parking lot in the back.
+The floor is linoleum, so bring clothing and shoes that you are comfortable dancing in.
+
+**COVID PROTOCOLS**: Because wastewater data is showing levels above 500 copies/mL, we will be MASK REQUIRED for this dance. Please wear a well-fitting high-filtration mask over your nose and mouth.
+
+Next dances:
+- October 17th
+- November 7th
\ No newline at end of file
diff --git a/src/events/class_11-21-2024.md b/src/events/class_11-21-2024.md
new file mode 100644
index 0000000..ed8b32b
--- /dev/null
+++ b/src/events/class_11-21-2024.md
@@ -0,0 +1,3 @@
+Title: GenderFree SCD
+Date: 2024-11-21 19:00:00
+
diff --git a/src/events/class_11-7-2024.md b/src/events/class_11-7-2024.md
new file mode 100644
index 0000000..0dfb259
--- /dev/null
+++ b/src/events/class_11-7-2024.md
@@ -0,0 +1,10 @@
+Title: GenderFree SCD
+Date: 2024-11-7 19:00:00
+
+Teaching by Kat Dutton to recorded music
+
+- 7:00 -- 7:30 - Advanced SCD
+- 7:30 -- 8:00 - Dance lesson for all
+- 8:00 -- 9:00 - Social dance for all
+
+**COVID PROTOCOLS**: Because wastewater data is showing levels above 500 copies/mL, we will be *MASK REQUIRED* for this dance. Please wear a well-fitting high-filtration mask over your nose and mouth.
diff --git a/src/events/class_12-4-2024.md b/src/events/class_12-4-2024.md
new file mode 100644
index 0000000..47f7e8d
--- /dev/null
+++ b/src/events/class_12-4-2024.md
@@ -0,0 +1,3 @@
+Title: GenderFree SCD
+Date: 2024-12-04 19:00:00
+
diff --git a/src/pages/about.md b/src/pages/about.md
new file mode 100644
index 0000000..925edf2
--- /dev/null
+++ b/src/pages/about.md
@@ -0,0 +1,14 @@
+Title: About
+
+**Scottish Country Dancing (SCD)** is high-energy enthusiastic set dancing done by
+groups of people. Partners repeat different movements to travel through a set of
+people. It’s sociable and fun!
+
+A **GenderFree** dance means that there will be no point where your genders are
+referenced on the dance floor, and there are no requirements that people of
+certain genders dance in certain spaces or with certain other genders. We will use
+the terms “Larks” and “Robins” to refer to specific roles when necessary.
+
+We generally dance on odd Thursdays (1st, 3rd, and 5th) at the [NESFA Clubhouse](https://www.nesfa.org), located at **504 Medford St., Somerville, MA**.
+
+Cost is **pay-what-you-can, $5 - $20** is the recommended donation.
\ No newline at end of file
diff --git a/src/pages/faq.md b/src/pages/faq.md
new file mode 100644
index 0000000..2efae52
--- /dev/null
+++ b/src/pages/faq.md
@@ -0,0 +1,21 @@
+Title: FAQ
+
+### What is SCD?
+SCD (Scottish Country Dancing) is high-energy enthusiastic set dancing done by groups of people.
+You and a partner repeat different movements to move through a set of people.
+It's sociable and very fun!
+
+### What do you mean by GenderFree?
+A GenderFree dance means that there will be no point where your genders are referenced on the dance floor,
+and there are no requirements that people of certain genders dance in certain spaces or with certain other genders.
+The specific language used to refer to different roles are the words "Larks" and "Robins".
+
+### Is the space accessible?
+The venue has one entrance with a ramp.
+Accessing the bathroom involves going down a few steps or around the outside and in the back door.
+Scottish dancing is traditionally high-energy but dancers are invited to bring the energy they have to safely have a good time.
+
+### Will this happen regularly? When?
+The current plan is to dance on odd Thursdays --first, third, and fifth when available.
+The next dances after this will be October 17th and November 7th (we will not be dancing on Halloween)
+
diff --git a/tasks.py b/tasks.py
new file mode 100644
index 0000000..3e8891a
--- /dev/null
+++ b/tasks.py
@@ -0,0 +1,155 @@
+import os
+import shlex
+import shutil
+import sys
+import datetime
+
+from invoke import task
+from invoke.main import program
+from pelican import main as pelican_main
+from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer
+from pelican.settings import DEFAULT_CONFIG, get_settings_from_file
+
+OPEN_BROWSER_ON_SERVE = True
+SETTINGS_FILE_BASE = "pelicanconf.py"
+SETTINGS = {}
+SETTINGS.update(DEFAULT_CONFIG)
+LOCAL_SETTINGS = get_settings_from_file(SETTINGS_FILE_BASE)
+SETTINGS.update(LOCAL_SETTINGS)
+
+CONFIG = {
+ "settings_base": SETTINGS_FILE_BASE,
+ "settings_publish": "publishconf.py",
+ # Output path. Can be absolute or relative to tasks.py. Default: 'output'
+ "deploy_path": SETTINGS["OUTPUT_PATH"],
+ # Host and port for `serve`
+ "host": "localhost",
+ "port": 8000,
+}
+
+
+@task
+def clean(c):
+ """Remove generated files"""
+ if os.path.isdir(CONFIG["deploy_path"]):
+ shutil.rmtree(CONFIG["deploy_path"])
+ os.makedirs(CONFIG["deploy_path"])
+
+
+@task
+def build(c):
+ """Build local version of site"""
+ pelican_run("-s {settings_base}".format(**CONFIG))
+
+
+@task
+def rebuild(c):
+ """`build` with the delete switch"""
+ pelican_run("-d -s {settings_base}".format(**CONFIG))
+
+
+@task
+def regenerate(c):
+ """Automatically regenerate site upon file modification"""
+ pelican_run("-r -s {settings_base}".format(**CONFIG))
+
+
+@task
+def serve(c):
+ """Serve site at http://$HOST:$PORT/ (default is localhost:8000)"""
+
+ class AddressReuseTCPServer(RootedHTTPServer):
+ allow_reuse_address = True
+
+ server = AddressReuseTCPServer(
+ CONFIG["deploy_path"],
+ (CONFIG["host"], CONFIG["port"]),
+ ComplexHTTPRequestHandler,
+ )
+
+ if OPEN_BROWSER_ON_SERVE:
+ # Open site in default browser
+ import webbrowser
+
+ webbrowser.open("http://{host}:{port}".format(**CONFIG))
+
+ sys.stderr.write("Serving at {host}:{port} ...\n".format(**CONFIG))
+ server.serve_forever()
+
+
+@task
+def reserve(c):
+ """`build`, then `serve`"""
+ build(c)
+ serve(c)
+
+
+@task
+def preview(c):
+ """Build production version of site"""
+ pelican_run("-s {settings_publish}".format(**CONFIG))
+
+@task
+def livereload(c):
+ """Automatically reload browser tab upon file modification."""
+ from livereload import Server
+
+ def cached_build():
+ cmd = "-s {settings_base} -e CACHE_CONTENT=true LOAD_CONTENT_CACHE=true"
+ pelican_run(cmd.format(**CONFIG))
+
+ cached_build()
+ server = Server()
+ theme_path = SETTINGS["THEME"]
+ watched_globs = [
+ CONFIG["settings_base"],
+ f"{theme_path}/templates/**/*.html",
+ ]
+
+ content_file_extensions = [".md", ".rst"]
+ for extension in content_file_extensions:
+ content_glob = "{}/**/*{}".format(SETTINGS["PATH"], extension)
+ watched_globs.append(content_glob)
+
+ static_file_extensions = [".css", ".js"]
+ for extension in static_file_extensions:
+ static_file_glob = f"{theme_path}/static/**/*{extension}"
+ watched_globs.append(static_file_glob)
+
+ for glob in watched_globs:
+ server.watch(glob, cached_build)
+
+ if OPEN_BROWSER_ON_SERVE:
+ # Open site in default browser
+ import webbrowser
+
+ webbrowser.open("http://{host}:{port}".format(**CONFIG))
+
+ server.serve(host=CONFIG["host"], port=CONFIG["port"], root=CONFIG["deploy_path"])
+
+
+@task
+def publish(c):
+ """Publish to production via rsync"""
+ pelican_run("-s {settings_publish}".format(**CONFIG))
+ c.run(
+ 'rsync --delete --exclude ".DS_Store" -pthrvz -c '
+ '-e "ssh -p {ssh_port}" '
+ "{} {ssh_user}@{ssh_host}:{ssh_path}".format(
+ CONFIG["deploy_path"].rstrip("/") + "/", **CONFIG
+ )
+ )
+
+@task
+def gh_pages(c):
+ """Publish to GitHub Pages"""
+ preview(c)
+ c.run(
+ "ghp-import -b {github_pages_branch} "
+ "-m {commit_message} "
+ "{deploy_path} -p".format(**CONFIG)
+ )
+
+def pelican_run(cmd):
+ cmd += " " + program.core.remainder # allows to pass-through args to pelican
+ pelican_main(shlex.split(cmd))
diff --git a/theme/static/css/main.css b/theme/static/css/main.css
new file mode 100644
index 0000000..310f1a4
--- /dev/null
+++ b/theme/static/css/main.css
@@ -0,0 +1,158 @@
+:root {
+ --primary: thistle;
+ --primary-light: #e7d7e7;
+ --primary-dark: #363036;
+ --complement: #bfd8bf;
+ --complement-dark: #bfd8bf;
+ --complement-light: #d8dfd8;
+}
+
+/* base */
+html {
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ font-family : verdana ;
+ background-color : var(--complement-light) ;
+ display : flex ;
+ flex-direction: column;
+ margin: 0;
+ padding: 0;
+ min-height: 100vh;
+
+}
+
+a:link { color : var(--primary-dark) ; text-decoration : none ; }
+a:hover { color : var(--primary-dark) ; text-decoration : none ; }
+a:visited { color : var(--primary-dark) ; text-decoration : none ; }
+
+h1 a { color : inherit !important }
+h2 a { color : inherit !important }
+h3 a { color : inherit !important }
+h4 a { color : inherit !important }
+h5 a { color : inherit !important }
+h6 a { color : inherit !important }
+
+pre {
+ margin : 2em 1em 2em 4em ;
+}
+
+#menu li {
+ display : inline ;
+}
+
+#post-list {
+ margin-bottom : 1em ;
+ margin-top : 1em ;
+}
+
+/* body */
+main {
+ max-width: 50em;
+ height: 100%;
+ margin: 0 auto;
+
+ flex: 1;
+
+ padding: 0.2em 2em;
+
+ box-sizing: border-box;
+
+ background: white;
+ color: var(--primary-dark);
+
+ border-radius: 2px;
+
+ min-height:fit-content;
+}
+
+/* navigation */
+
+nav {
+ display: flex;
+ justify-content: center;
+ background-color: var(--primary);
+ font-size: 1.25em;
+}
+
+nav ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+
+nav li {
+ float: left;
+ text-align: center;
+}
+
+nav li a {
+ display: block;
+ color: var(--complement-dark);
+ text-align: center;
+ padding: 16px;
+ text-decoration: none;
+}
+
+nav li:hover {
+ background-color: var(--complement);
+}
+
+nav li:hover a {
+ color: var(--primary-dark);
+}
+
+/* banner */
+hgroup {
+ background-color: var(--primary);
+ background-position: center;
+ font-weight: light;
+}
+
+hgroup h1, hgroup p {
+ font-size: 5lvh;
+ margin: 0 auto;
+
+ padding: clamp(0.1em, 0.5vw, 1em);
+
+ text-align: center;
+
+ backdrop-filter: blur(2px) brightness(50%);
+
+ color: white;
+}
+
+hgroup h1 {
+ font-weight: bold;
+ font-size: 2.5em;
+}
+
+hgroup p {
+ font-weight: light;
+ font-size: 2em;
+}
+
+footer {
+ min-height: 1.5em;
+ background-color: var(--primary);
+}
+
+.event {
+ border-top-left-radius: 10px;
+ background-color: #fafafa;
+
+ border: 1px solid var(--primary);
+
+ padding: 0 0.5em;
+ margin: 0.5em;
+}
+
+.event h3 {
+ margin: 1em;
+}
+
+.event-content {
+ margin: 2em;
+}
\ No newline at end of file
diff --git a/theme/templates/article.html b/theme/templates/article.html
new file mode 100644
index 0000000..91f3d81
--- /dev/null
+++ b/theme/templates/article.html
@@ -0,0 +1,15 @@
+{% extends "base.html" %}
+{% block content %}
+ {% block content_title %}
+ {% if category.name == 'events' %}
+
{{article.locale_date}}
+
{{article.title}}
+ {% else %}
+
{{article.title}}
+ {% endif %}
+ {% endblock %}
+
+ {{article.content}}
+
+
+{% endblock content %}
\ No newline at end of file
diff --git a/theme/templates/base.html b/theme/templates/base.html
new file mode 100644
index 0000000..1f7b730
--- /dev/null
+++ b/theme/templates/base.html
@@ -0,0 +1,68 @@
+
+
+
+ {% block head %}
+ {% block title %}{{ SITENAME|striptags }}{% endblock title %}
+
+
+
+ {% if SITESUBTITLE %}
+
+ {% endif %}
+ {% if STYLESHEET_URL %}
+
+ {% endif %}
+ {% if FEED_ALL_ATOM %}
+
+ {% endif %}
+ {% if FEED_ALL_RSS %}
+
+ {% endif %}
+ {% if FEED_ATOM %}
+
+ {% endif %}
+ {% if FEED_RSS %}
+
+ {% endif %}
+ {% if CATEGORY_FEED_ATOM and category %}
+
+ {% endif %}
+ {% if CATEGORY_FEED_RSS and category %}
+
+ {% endif %}
+ {% if TAG_FEED_ATOM and tag %}
+
+ {% endif %}
+ {% if TAG_FEED_RSS and tag %}
+
+ {% endif %}
+ {% endblock head %}
+
+
+
+
+
{% endif %}
+
+
+
+ {% block content %}
+ {% endblock %}
+
+
+
+
diff --git a/theme/templates/category.html b/theme/templates/category.html
new file mode 100644
index 0000000..c030cc9
--- /dev/null
+++ b/theme/templates/category.html
@@ -0,0 +1,6 @@
+{% extends "base.html" %}
+{% block content %}
+ {% if category.name == 'events' %}
+ {% include "events.html" %}
+ {% endif %}
+{% endblock content %}
\ No newline at end of file
diff --git a/theme/templates/event.html b/theme/templates/event.html
new file mode 100644
index 0000000..55447ad
--- /dev/null
+++ b/theme/templates/event.html
@@ -0,0 +1,6 @@
+
+
{{event.locale_date}}
+
+ {{event.content}}
+
+
\ No newline at end of file
diff --git a/theme/templates/events.html b/theme/templates/events.html
new file mode 100644
index 0000000..db791b5
--- /dev/null
+++ b/theme/templates/events.html
@@ -0,0 +1,6 @@
+{% block content_title %}
+
Upcoming Events
+{% endblock %}
+{% for event in articles | selectattr("date", "gt", TODAY) | reverse %}
+ {% include 'event.html' %}
+{% endfor%}
\ No newline at end of file
diff --git a/theme/templates/index.html b/theme/templates/index.html
new file mode 100644
index 0000000..1e8fff3
--- /dev/null
+++ b/theme/templates/index.html
@@ -0,0 +1,26 @@
+{% extends "base.html" %}
+{% import "map.html" as map%}
+{% block content %}
+
+ Scottish Country Dancing (SCD) is high-energy enthusiastic set dancing done by
+ groups of people. Partners repeat different movements to travel through a set of
+ people. It’s sociable and fun!
+
+
+ A GenderFree dance means that there will be no point where your genders are
+ referenced on the dance floor, and there are no requirements that people of
+ certain genders dance in certain spaces or with certain other genders. We will use
+ the terms “Larks” and “Robins” to refer to specific roles when necessary.
+
+
+ We generally dance on odd Thursdays (1st, 3rd, and 5th) at the NESFA Clubhouse, located at 504 Medford St., Somerville, MA.
+
+
+ Cost is pay-what-you-can, $5 - $20 is the recommended donation.
+
+
Next Dance
+ {% set event = articles | selectattr('category', '==', 'events') | selectattr("date", "gt", TODAY) | reverse | first %}
+ {% include 'event.html' %}
+
+
+{% endblock content %}