diff --git a/pydis_site/apps/events/README.md b/pydis_site/apps/events/README.md
index f0d205105..c55ba5041 100644
--- a/pydis_site/apps/events/README.md
+++ b/pydis_site/apps/events/README.md
@@ -16,4 +16,6 @@ This app has a relatively minimal structure:
matching Django template.
The actual content lives in the [templates directory two layers
-up](../../templates/events).
+up](../../templates/events). Read the
+[README.md](../../templates/events/README.md) in that directory for more
+details.
diff --git a/pydis_site/settings.py b/pydis_site/settings.py
index f75741531..aeb704d81 100644
--- a/pydis_site/settings.py
+++ b/pydis_site/settings.py
@@ -323,6 +323,7 @@
"primary": "#5365A4", # A darker PyDis blurple
"warning": "#4B4636",
"warning-invert": "#FFFFFF",
+ "warning-light": "#3B3B36",
"primary-dark": "#EFF1FB", # Bulma's primary-light
"primary-light": "#2B3660",
"success-dark": "#EFFAF5", # Bulma's success-light
@@ -347,6 +348,7 @@
"black-ter": "#E6E6E6",
"dark": "$black",
+ "grey": "#AFAFAF",
"grey-darker": "#303032",
"text": "#F4F4F4",
diff --git a/pydis_site/static/css/events/base.css b/pydis_site/static/css/events/base.css
index cd7ab5aed..7982c9dfa 100644
--- a/pydis_site/static/css/events/base.css
+++ b/pydis_site/static/css/events/base.css
@@ -32,3 +32,127 @@ pre {
.box .sponsor {
margin-bottom: 1rem;
}
+
+.event-gallery .date-icon, #main-section .date-icon {
+ margin-left: -.25rem;
+}
+
+.event-gallery .card, .event-gallery .box {
+ border-radius: 6px;
+ margin-bottom: 1.5rem;
+}
+
+/* We are using bulma cards as boxes here to take advantage of the card's
+ * header image component */
+.event-gallery .card img {
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+
+/* Custom component: A colored line at the top of a card that can be styled
+ * with bulma's has-background-* classes.*/
+.card .colored-line {
+ /* A default color as grey */
+ background-color: #C1C1C1;
+ height: .3rem;
+ display: block;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+
+@media (min-width: 700px) {
+ #scheduled-events .media-left {
+ margin-left: 2rem;
+ margin-right: 2rem;
+ }
+
+ #previous-events .media-left {
+ margin-left: 1rem;
+ margin-right: 1rem;
+ }
+}
+
+/* CSS-only Masonry layout:
+ * https://tobiasahlin.com/blog/masonry-with-css/
+ *
+ * Adapted for responsiveness:
+ * - Mobile (<=700px) No columns at all
+ * - Tablets (700~900px) Two columns Masonry
+ * - Desktop+ (>=900px) Three columns Masonry
+ */
+@media (min-width: 700px) {
+ .event-gallery {
+ display: flex;
+ flex-flow: column wrap;
+ align-content: space-between;
+ }
+
+ #other-events-section {
+ height: 63rem;
+ }
+
+ #other-events-section .box {
+ width: calc(50% - 1rem);
+ }
+
+ #other-events-section .box:nth-child(2n+1) { order: 1; }
+ #other-events-section .box:nth-child(2n) { order: 2; }
+
+ #other-events-section::before {
+ content: "";
+ flex-basis: 100%;
+ width: 0;
+ order: 2;
+ }
+
+ @media (min-width: 900px) {
+ /* 3 columns */
+ #main-events-section {
+ /* Required. Must be only slightly taller than the tallest column */
+ height: 68rem;
+ }
+
+ #main-events-section .card {
+ width: calc(33% - 1rem);
+ }
+
+ /* Reorder vertically */
+ #main-events-section .card:nth-child(3n+1) { order: 1; }
+ #main-events-section .card:nth-child(3n+2) { order: 2; }
+ #main-events-section .card:nth-child(3n) { order: 3; }
+
+ /* 2 line breaks to force new columns, for each gap between the three columns. */
+ #main-events-section::before, #main-events-section::after {
+ content: "";
+ flex-basis: 100%;
+ width: 0;
+ order: 2;
+ }
+ }
+
+ @media (max-width: 900px) {
+ /* 2 columns */
+ #main-events-section {
+ height: 96rem;
+ }
+
+ #other-events-section {
+ height: 83rem;
+ }
+
+ #main-events-section .card {
+ width: calc(50% - 1rem);
+ }
+
+ #main-events-section .card:nth-child(2n+1) { order: 1; }
+ #main-events-section .card:nth-child(2n) { order: 2; }
+
+ /* 1 line break to force a new column, for the gap between the two columns. */
+ #main-events-section::before {
+ content: "";
+ flex-basis: 100%;
+ width: 0;
+ order: 1;
+ }
+ }
+}
diff --git a/pydis_site/static/images/events/gallery/adventofcode.png b/pydis_site/static/images/events/gallery/adventofcode.png
new file mode 100644
index 000000000..77b6e0153
Binary files /dev/null and b/pydis_site/static/images/events/gallery/adventofcode.png differ
diff --git a/pydis_site/static/images/events/gallery/pixels.png b/pydis_site/static/images/events/gallery/pixels.png
new file mode 100644
index 000000000..55398a537
Binary files /dev/null and b/pydis_site/static/images/events/gallery/pixels.png differ
diff --git a/pydis_site/static/images/events/gallery/pyweek.png b/pydis_site/static/images/events/gallery/pyweek.png
new file mode 100644
index 000000000..dd40570eb
Binary files /dev/null and b/pydis_site/static/images/events/gallery/pyweek.png differ
diff --git a/pydis_site/static/images/events/gallery/pyweek_dark.png b/pydis_site/static/images/events/gallery/pyweek_dark.png
new file mode 100644
index 000000000..80711f277
Binary files /dev/null and b/pydis_site/static/images/events/gallery/pyweek_dark.png differ
diff --git a/pydis_site/static/images/events/icons/adventofcode.png b/pydis_site/static/images/events/icons/adventofcode.png
new file mode 100644
index 000000000..e9501737f
Binary files /dev/null and b/pydis_site/static/images/events/icons/adventofcode.png differ
diff --git a/pydis_site/static/images/events/icons/codejam.svg b/pydis_site/static/images/events/icons/codejam.svg
new file mode 100644
index 000000000..b6a8a1db0
--- /dev/null
+++ b/pydis_site/static/images/events/icons/codejam.svg
@@ -0,0 +1,264 @@
+
+
+
+
diff --git a/pydis_site/static/images/events/icons/pixels.png b/pydis_site/static/images/events/icons/pixels.png
new file mode 100644
index 000000000..8b5bd841e
Binary files /dev/null and b/pydis_site/static/images/events/icons/pixels.png differ
diff --git a/pydis_site/static/images/events/icons/pyweek.png b/pydis_site/static/images/events/icons/pyweek.png
new file mode 100644
index 000000000..f74bc43be
Binary files /dev/null and b/pydis_site/static/images/events/icons/pyweek.png differ
diff --git a/pydis_site/static/images/events/pixels_logo_transparent.gif b/pydis_site/static/images/events/pixels_logo_transparent.gif
new file mode 100644
index 000000000..3f4107730
Binary files /dev/null and b/pydis_site/static/images/events/pixels_logo_transparent.gif differ
diff --git a/pydis_site/static/images/events/pixels_logo_transparent.png b/pydis_site/static/images/events/pixels_logo_transparent.png
new file mode 100644
index 000000000..5892edccd
Binary files /dev/null and b/pydis_site/static/images/events/pixels_logo_transparent.png differ
diff --git a/pydis_site/static/images/events/cj10_2023_banner2.png b/pydis_site/static/images/events/summer_code_jam_2023/banner2.png
similarity index 100%
rename from pydis_site/static/images/events/cj10_2023_banner2.png
rename to pydis_site/static/images/events/summer_code_jam_2023/banner2.png
diff --git a/pydis_site/static/images/events/cj10_2023_banner3.png b/pydis_site/static/images/events/summer_code_jam_2023/banner3.png
similarity index 100%
rename from pydis_site/static/images/events/cj10_2023_banner3.png
rename to pydis_site/static/images/events/summer_code_jam_2023/banner3.png
diff --git a/pydis_site/static/images/events/summer_code_jam_2023/logo.PNG b/pydis_site/static/images/events/summer_code_jam_2023/logo.PNG
new file mode 100644
index 000000000..10143dedf
Binary files /dev/null and b/pydis_site/static/images/events/summer_code_jam_2023/logo.PNG differ
diff --git a/pydis_site/templates/events/README.md b/pydis_site/templates/events/README.md
new file mode 100644
index 000000000..fad6c8c25
--- /dev/null
+++ b/pydis_site/templates/events/README.md
@@ -0,0 +1,61 @@
+# Events pages
+
+## Homepage (`index.html`)
+
+The main events page showcases current, upcoming and recent events, as well as
+a gallery of the regular events and ad-hoc events we run.
+
+- **Current event** (`current_event.html`)
+
+ This file should be updated when the previous 'current' event has finished
+ and there is an upcoming event to promote. It should include some branding
+ assets either as a banner, icon, or both for this event.
+
+- **Scheduled events** (`scheduled_events.html`)
+
+ A list of events with brief descriptions each paired with an icon that is
+ scheduled to happen strictly after the current date. The list is
+ chronological and the first item can be the same as that of "Current event".
+
+ This file should be updated when a new event is scheduled or the top event
+ from the list has finished.
+
+### Sidebars
+
+- **Previous events** (`sidebar/main_sidebar.html`)
+
+ Concise list of events for returning members to quickly access after events
+ have finished.
+
+ This file should be updated whenever another event has finished.
+
+
+### Main events (`main_events.html`)
+
+A gallery of events we run regularly — most likely at least once a year. The
+descriptions in each card are longer and more detailed.
+
+This file should be updated when we want to reorder the list or add/remove
+regular events.
+
+If the total visual height of the entire gallery is modified, please also
+update the [CSS file](../../static/css/events/base.css) to set the correct new
+height on mobile, tablets, and desktop. This ensures the responsive Masonry
+layout displays correctly.
+
+
+### Other events (`other_events.html`)
+
+A showcase of "ad-hoc" events have we have run in previous years. The list is
+not exhausive and is only meant to be a small exhibit for viewers to get a
+sense of the kind of events to expect outside of the those regular/annual
+events.
+
+This file should be updated when new one-off events that are better deserving
+of having a place in the showcase here have been hosted.
+
+Each item should link to a video/article about the event for viewers to
+re-watch after the event took place.
+
+Like `main_events.html`, the CSS file should also be updated with the height of
+the section changes.
diff --git a/pydis_site/templates/events/current_event.html b/pydis_site/templates/events/current_event.html
new file mode 100644
index 000000000..e099ccb6c
--- /dev/null
+++ b/pydis_site/templates/events/current_event.html
@@ -0,0 +1,25 @@
+{% load static %}
+
+{# Current/next event to promote #}
+
A bi-annual game jam where participants write a game in Python in a week, either individually or as a team. The theme is voted by the competitors prior to the challenge, and the entries are also judged by the competitors after the challenge.
Every year we hold a community-wide Summer Code Jam. For this event, members of our community are assigned to teams to collaborate and create something amazing using a technology we picked for them. One such technology that was picked for the Summer 2021 Code Jam was text user interfaces (TUIs), where teams could pick from a pre-approved list of frameworks.
-
To help fuel the creative process, we provide a specific theme, like Think Inside the Box or Early Internet. At the end of the Code Jam, the projects are judged by Python Discord server staff members and guest judges from the larger Python community. The judges will consider creativity, code quality, teamwork, and adherence to the theme.
-
If you want to read more about Code Jams, visit our Code Jam info page or watch this video showcasing the best projects created during the Winter Code Jam 2020: Ancient Technology:
-
-
-
-
-
PyWeek
-
-
-
- For the past 15 years, PyWeek has been running a bi-annual game jam for the
- Python language. As of 2020, we are excited to say we are officially partnered with PyWeek to co-run these
- events.
-
-
- During each PyWeek event, we open a special discussion channel in which our members can discuss their
- submissions, meet other participants, and talk to PyWeek staff. The PyWeek organizer,
- Daniel Pope (@lordmauve) will be present during the entire event to answer
- questions and post announcements and information in our community.
-
-
- Unlike our other events, the community will select the winner from all the submissions
- during PyWeek. We may release YouTube content showcasing the best submissions after the events are finished.
-
-
-
-
-
+{% block event_base_content %}
+
+
+
At Python Discord, we run a few regular events such as programming contests and workshops, as well as more ad-hoc events such as Python release streams. All members are welcome to participate in the events live, and for most events we release videos on our YouTube channel after the event in case you've missed it.
+ To subscribe to the announcements, head over to the bottom of the #roles channel and get the @Announcements role to receive notifications on the latest updates!
+ {% include "events/current_event.html" %}
+ {% include "events/scheduled_events.html" %}
-
-
-
-
Advent of Code
-
-
-
- Each year, many of our members take part of an online coding competition called
- Advent of Code that takes place in December. Advent of Code is an
- Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved
- in any programming language you like, including Python.
-
-
- During the event, we will open a special discussion channel in which our members can discuss the puzzles
- and compare their solutions. We will also open a private leaderboard and may even reward the best scoring
- members on that board with prizes!
-
-
- However, this event isn't purely competitive. You can also join in just to see how far you'll get, to
- challenge yourself, as a way of learning Python, or just for the fun of it. In 2019, almost 200 members
- signed up for our private leaderboard, but many more took on the challenge without focusing on the
- competitive aspect.
-
-
-
-
-
+
+ {% include "events/sidebar/main_sidebar.html" %}
-
-
Game Jam
-
-
-
- The Game Jam is similar to our Code Jams, but smaller in scope. Instead of having to complete a qualifier
- and being teamed up with random strangers, members of our community can just sign-up individually or pair up
- with whoever they like.
-
-
- The participants will have ten days to create a game using the technology we've selected, and drawing
- inspiration from a provided theme. After the event, a panel of judges will play all the games and select a
- winner. The top 5 will featured in a special video on our YouTube channel.
-
Once a year we host a code jam for members of our server to participate in. The code jam is an event where we place you in a team with 5 other random server members. You then have 11 days to code some sort of application or program in Python. Your program must use the specified technology/framework and incorporate the theme chosen by the server.
For the past 15 years, PyWeek has been running a bi-annual game jam for the Python language. As of 2020, we are excited to say that we are officially partnered with PyWeek to co-run these events.
An advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like, including Python. The puzzles start off easy and gradually get more difficult, all while revealing a fun little story that is appropriate for some seasons more than others. Puzzles are posted every day as they come, and you'll be able to discuss your solutions for each puzzle in dedicated threads.
Revival of Code is a Python Discord hosted event where we release old Advent of Code puzzles from a previous year. Puzzles are for a variety of skill sets and skill levels that can be solved in any programming language you like, including Python. They will be posted every other day, and you'll be able to discuss your solutions in dedicated threads.
+
+
+
+
+
+
😜 April Fools
+
+
+
+ April 1st
+
+
+
Once a year we come up with something different for April Fools.
+
In 2022 for instance, we came up with PEP 9001, "The Final Style Guide for Python", PEP 2241, "Back to the Past", and a revised Zen of Python which you can check out using the &zen command. The &blurpify command is also available after the event for members to experiment with the style guide.
In this workshop we went through the process of building a little hat with LEDs of scrolling text, and talked about other ways you can use Circuit Python to bring Python into the physical world around you.
Pablo Galindo, the 3.11 Python Release Manager and CPython Core Developer, walked through the release process and a number of guests joined to talk about the exciting new features to be found in 3.11. At the end of the release we also hosted a Q&A session.
Python 3.10 was set to be released on 4 October 2021. We hosted a live Python 3.10 Release Stream with Pablo Galindo, CPython Core Developer and Python 3.10 Release Manager, and Leon Sandøy.
Inspired by r/place, the reddit April Fools experiment where users could place pixels on a canvas one-by-one, Pixels was an application that allowed users to collaboratively decorate a canvas pixel-by-pixel. The twist? Interacting with our canvas can only be done via an API.
The first Python Core Developers Q&A! During the Q&A, several core developers answered questions sent in by you, the broader Python community. This Q&A was part of the yearly Python Core Dev Sprint, organized virtually in 2020 on Python Discord.
+{% endblock %}
+
+{% block title %}Advent of Code{% endblock %}
+
+{% block event_content %}
+
+ Each year, many of our members take part of an online coding competition called
+ Advent of Code (AoC) that takes place in December. Advent of Code is an
+ Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved
+ in any programming language you like, including Python.
+
+
+ During the event, we will open a special discussion channel in which our members can discuss the puzzles
+ and compare their solutions. We will also open a private leaderboard and may even reward the best scoring
+ members on that board with prizes!
+
+
+ However, this event isn't purely competitive. You can also join in just to see how far you'll get, to
+ challenge yourself, as a way of learning Python, or just for the fun of it. In 2019, almost 200 members
+ signed up for our private leaderboard, but many more took on the challenge without focusing on the
+ competitive aspect.
+
+ The Game Jam is similar to our Code Jams, but smaller in scope. Instead of having to complete a qualifier
+ and being teamed up with random strangers, members of our community can just sign-up individually or pair up
+ with whoever they like.
+
+
+ The participants will have ten days to create a game using the technology we've selected, and drawing
+ inspiration from a provided theme. After the event, a panel of judges will play all the games and select a
+ winner. The top 5 will be featured in a special video on our YouTube channel.
+
+ For the past 15 years, PyWeek has been running a bi-annual game jam for the
+ Python language. As of 2020, we are excited to say that we are officially partnered with PyWeek to co-run these
+ events.
+
+
+ During each PyWeek event, we open a special discussion channel in which our members can discuss their
+ submissions, meet other participants, and talk to PyWeek staff. The PyWeek organizer,
+ Daniel Pope (@lordmauve) will be present during the entire event to answer
+ questions and post announcements and information in our community.
+
+
+ Unlike our other events, the community will select the winner from all the submissions
+ during PyWeek. We may release YouTube content showcasing the best submissions after the events are finished.
+
+{% endblock %}
+
+{% block title %}Revival of Code{% endblock %}
+
+{% block event_content %}
+
+ Each year, many of our members take part of an online coding competition called
+ Advent of Code (AoC) that takes place in December. Advent of Code is an
+ Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved
+ in any programming language you like, including Python.
+
+
+ Revival of Code is a Python Discord hosted event where we release old Advent of Code puzzles from a previous year. The puzzles start off easy and gradually get more difficult, all while revealing a fun little story that is appropriate for some seasons more than others. Questions will be posted every other day, and you'll be able to discuss your solutions in dedicated threads.
+
+
+
Keeping up with the puzzles
+
+ To be notified when new problems are posted you can subscribe to the @Revival of Code role in #roles.
+
+
+
+ If you have any questions or want to discuss the event in general, come talk about it in#Revival of Code Discussion.
+
Revisit past years' Advent of Code problems! Puzzles are relased every other day and there will be dedicated solution threads for you to discuss with other participants.
Our annual code-jam where we place you in a team of five and you have 11 days to code some sort of application or program in Python based on a selected technology or framework.
Daily programming puzzles with increasing difficulties where each puzzle has a little story and you can discuss solutions with other participants. You are allowed to use any programming language you like.